diff --git a/.gitignore b/.gitignore
index 0142b230e3..f8c8f762db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,12 +11,14 @@
**/*.pem
**/*dont_commit_me*
web/packages/agenta-api-client/dist/
+web/tsconfig.tsbuildinfo
__pycache__/
**/__pycache__/
**/error-*.log
**/*.logs
+**/*.log
/.nox/
/docs/_build/
diff --git a/AGENTS.md b/AGENTS.md
index 2201a3091c..60f5b19ff8 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -176,6 +176,26 @@ Concrete examples:
- Legacy app storage marker (`WORKFLOW_MARKER_KEY`): `api/oss/src/core/applications/service.py`
- Legacy dedup key normalization (`__dedup_id__` <-> `testcase_dedup_id`): `api/oss/src/apis/fastapi/testsets/router.py`
+### Alembic migration chains (OSS + EE)
+
+Migrations live in two separate, parallel chains that must each resolve to a
+single head:
+- OSS: `api/oss/databases/postgres/migrations/core/versions/`
+- EE: `api/ee/databases/postgres/migrations/core/versions/`
+
+Rules:
+- After adding/editing/renaming any migration, verify each chain has exactly ONE
+ head with the bundled tool: from each `.../migrations/` directory run
+ `python3 find_head.py core` and confirm the `Heads:` list has a single entry.
+ Run it for BOTH OSS and EE.
+- New migrations chain linearly after the existing head — never fork off an older
+ node (a fork produces two heads; alembic then can't resolve a linear upgrade).
+- Revision ids must be globally unique within a chain. A duplicate id makes
+ alembic silently skip one file (the migration never runs).
+- The EE chain and the OSS chain are parallel, so an OSS migration chains after
+ the OSS head while its EE counterpart chains after the EE head — same revision id,
+ possibly different `down_revision`.
+
### Router and function style conventions
Router style:
diff --git a/api/ee/databases/postgres/migrations/core/data_migrations/applications_workflow.py b/api/ee/databases/postgres/migrations/core/data_migrations/applications_workflow.py
index 0c078ec15c..2f8216603f 100644
--- a/api/ee/databases/postgres/migrations/core/data_migrations/applications_workflow.py
+++ b/api/ee/databases/postgres/migrations/core/data_migrations/applications_workflow.py
@@ -254,9 +254,11 @@ def check_url_safety(cls, v: Any) -> Any: # noqa: N805
return v
from oss.src.dbs.postgres.git.mappings import map_dto_to_dbe
- from oss.src.dbs.postgres.shared.engine import engine as db_engine
+ from oss.src.dbs.postgres.shared.engine import get_transactions_engine
from datetime import datetime, timezone
+ db_engine = get_transactions_engine()
+
workflow_create = WorkflowCreate(
**application_create.model_dump(mode="json"),
)
@@ -267,7 +269,7 @@ def check_url_safety(cls, v: Any) -> Any: # noqa: N805
# Avoid slug collision with existing workflow artifacts (e.g. evaluators)
artifact_slug = git_artifact_create.slug
- async with db_engine.core_session() as session:
+ async with db_engine.session() as session:
existing = (
await session.execute(
select(WorkflowArtifactDBE).filter(
@@ -298,7 +300,7 @@ def check_url_safety(cls, v: Any) -> Any: # noqa: N805
dto=artifact_dto,
)
- async with db_engine.core_session() as session:
+ async with db_engine.session() as session:
session.add(artifact_dbe)
await session.commit()
@@ -364,7 +366,7 @@ def check_url_safety(cls, v: Any) -> Any: # noqa: N805
dto=variant_dto,
)
- async with db_engine.core_session() as session:
+ async with db_engine.session() as session:
session.add(variant_dbe)
await session.commit()
@@ -415,7 +417,7 @@ def check_url_safety(cls, v: Any) -> Any: # noqa: N805
dto=revision_dto,
)
- async with db_engine.core_session() as session:
+ async with db_engine.session() as session:
session.add(revision_dbe)
await session.commit()
diff --git a/api/ee/databases/postgres/migrations/core/env.py b/api/ee/databases/postgres/migrations/core/env.py
index 492b4f9a69..1faed28fe5 100644
--- a/api/ee/databases/postgres/migrations/core/env.py
+++ b/api/ee/databases/postgres/migrations/core/env.py
@@ -6,7 +6,7 @@
from alembic import context
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.utils.env import env
from oss.src.dbs.postgres.shared.base import Base
# Side-effect imports: register SQLAlchemy models with Base.metadata
@@ -29,7 +29,7 @@
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config
-config.set_main_option("sqlalchemy.url", engine.postgres_uri_core) # type: ignore
+config.set_main_option("sqlalchemy.url", env.postgres.uri_core)
# Interpret the config file for Python logging.
diff --git a/api/ee/databases/postgres/migrations/core/versions/a1d2e3f4a5b6_add_default_evaluation_queues.py b/api/ee/databases/postgres/migrations/core/versions/a1d2e3f4a5b6_add_default_evaluation_queues.py
new file mode 100644
index 0000000000..ca5c922224
--- /dev/null
+++ b/api/ee/databases/postgres/migrations/core/versions/a1d2e3f4a5b6_add_default_evaluation_queues.py
@@ -0,0 +1,41 @@
+"""add default evaluation queues
+
+Revision ID: a1d2e3f4a5b6
+Revises: e6f7a8b9c0d2
+Create Date: 2026-05-15 00:00:00
+
+Previously shared revision id `a1b2c3d4e5f6` with
+`drop_corrupted_metrics_for_some_runs`, so alembic skipped it and the index
+below never ran. Renamed to `a1d2e3f4a5b6`. The EE chain extends past the shared
+OSS head `e6f7a8b9c0d1` with EE-only migrations
+(`9d3e8f0a1b2c -> a1b2c3d4e5f7 -> b2c3d4e5f7a8`), so this EE copy chains after
+`b2c3d4e5f7a8` while the OSS copy chains after `e6f7a8b9c0d1`.
+
+The partial unique index covers ALL default queues (active or archived), so
+there is at most ONE default queue row per (project_id, run_id) for the lifetime
+of the run. Archiving a default does NOT free the slot — the single row is
+archived/unarchived in place by reconcile, and user-facing archive of a default
+is forbidden in the service layer.
+"""
+
+from typing import Sequence, Union
+
+from alembic import op
+
+revision: str = "a1d2e3f4a5b6"
+down_revision: Union[str, None] = "e6f7a8b9c0d2"
+branch_labels: Union[str, Sequence[str], None] = None
+depends_on: Union[str, Sequence[str], None] = None
+
+
+def upgrade() -> None:
+ op.execute("DROP INDEX IF EXISTS ux_evaluation_queues_default_per_run")
+ op.execute("""
+ CREATE UNIQUE INDEX ux_evaluation_queues_default_per_run
+ ON evaluation_queues (project_id, run_id)
+ WHERE (flags ->> 'is_default')::boolean = true
+ """)
+
+
+def downgrade() -> None:
+ op.execute("DROP INDEX IF EXISTS ux_evaluation_queues_default_per_run")
diff --git a/api/ee/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py b/api/ee/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py
new file mode 100644
index 0000000000..30da5d2a86
--- /dev/null
+++ b/api/ee/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py
@@ -0,0 +1,294 @@
+"""backfill default evaluation queues
+
+Revision ID: a2b3c4d5e6f8
+Revises: a1d2e3f4a5b6
+Create Date: 2026-05-15 00:10:00
+
+Backfills source-family flags (`has_traces` / `has_testcases` / `has_queries` /
+`has_testsets`) to match the runtime derivation rule, then mass-creates default
+queues per the runtime policy and recomputes `is_queue`. The query/testset
+recompute keys on exact reference-key presence, not a substring match.
+
+Performance shape: runs are processed in keyset-paginated chunks (by
+`evaluation_runs.id`). For each chunk a single COMPUTE select does the heavy
+`jsonb_array_elements` step scan and the per-run default-queue existence check
+ONCE (no correlated `EXISTS`/`JOIN` re-evaluated per written row). Python then
+decides per run what to do, and the writes are cheap set-based `unnest` updates
+keyed by id — no subqueries in the mutation path. Every step is idempotent (the
+flag rebuild is deterministic; runs that already have a default queue are not
+re-created), so a re-run is safe.
+"""
+
+import json
+from typing import List, Sequence, Union
+
+import click
+import sqlalchemy as sa
+from alembic import op
+from sqlalchemy.engine import Connection
+
+revision: str = "a2b3c4d5e6f8"
+down_revision: Union[str, None] = "a1d2e3f4a5b6"
+branch_labels: Union[str, Sequence[str], None] = None
+depends_on: Union[str, Sequence[str], None] = None
+
+BATCH_SIZE = 100
+
+
+# Keyset pagination over run ids. id > cursor with ORDER BY id is index-friendly
+# (id is part of the PK) and stable; LIMIT bounds each chunk. Compared as text so
+# the cursor is a plain string seeded as "" below every UUID.
+_NEXT_RUN_IDS = sa.text("""
+ SELECT id::text
+ FROM evaluation_runs
+ WHERE id::text > :cursor
+ ORDER BY id::text
+ LIMIT :batch
+""")
+
+# One heavy pass per chunk. Derives the source-family flags from the run's steps
+# (the `jsonb_array_elements` scan that mirrors dbs/postgres/evaluations/utils.py)
+# and, via a single LEFT JOIN over the chunk's runs, reports whether each run
+# already has a default queue (any state) and an ACTIVE default queue. Direct
+# sources (`has_traces`/`has_testcases`) come from the exact step key on a
+# reference-less input; reference-backed sources (`has_queries`/`has_testsets`)
+# from exact-key presence (JSONB `?`), not a substring match that would misfire
+# on `query_anchor` / `testset_metadata`.
+_COMPUTE_CHUNK = sa.text("""
+ SELECT
+ r.id::text AS run_id,
+ r.project_id::text AS project_id,
+ r.created_by_id::text AS created_by_id,
+ COALESCE(r.status, 'running') AS status,
+ COALESCE((r.flags ->> 'has_human')::boolean, false) AS has_human,
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(COALESCE(r.data::jsonb -> 'steps', '[]'::jsonb)) AS step
+ WHERE step ->> 'type' = 'input'
+ AND COALESCE(step -> 'references', '{}'::jsonb) = '{}'::jsonb
+ AND lower(COALESCE(step ->> 'key', '')) IN ('traces', 'query-direct')
+ ) AS has_traces,
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(COALESCE(r.data::jsonb -> 'steps', '[]'::jsonb)) AS step
+ WHERE step ->> 'type' = 'input'
+ AND COALESCE(step -> 'references', '{}'::jsonb) = '{}'::jsonb
+ AND lower(COALESCE(step ->> 'key', '')) IN ('testcases', 'testset-direct')
+ ) AS has_testcases,
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(COALESCE(r.data::jsonb -> 'steps', '[]'::jsonb)) AS step
+ WHERE step ->> 'type' = 'input'
+ AND COALESCE(step -> 'references', '{}'::jsonb) ? 'query_revision'
+ ) AS has_queries,
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(COALESCE(r.data::jsonb -> 'steps', '[]'::jsonb)) AS step
+ WHERE step ->> 'type' = 'input'
+ AND COALESCE(step -> 'references', '{}'::jsonb) ? 'testset_revision'
+ ) AS has_testsets,
+ bool_or((q.flags ->> 'is_default')::boolean) AS has_any_default,
+ bool_or(
+ (q.flags ->> 'is_default')::boolean AND q.deleted_at IS NULL
+ ) AS has_active_default
+ FROM evaluation_runs r
+ LEFT JOIN evaluation_queues q
+ ON q.project_id = r.project_id
+ AND q.run_id = r.id
+ WHERE r.id = ANY(CAST(:ids AS uuid[]))
+ GROUP BY r.id, r.project_id, r.created_by_id, r.status, r.flags
+""")
+
+# Cheap set-based flag write: merge the precomputed flag object onto each run by
+# id. No subqueries; `unnest` pairs each id with its jsonb patch.
+_APPLY_FLAGS = sa.text("""
+ UPDATE evaluation_runs r
+ SET flags = COALESCE(r.flags, '{}'::jsonb) || patch.flags::jsonb
+ FROM unnest(
+ CAST(:ids AS uuid[]),
+ CAST(:flags AS jsonb[])
+ ) AS patch(id, flags)
+ WHERE r.id = patch.id
+""")
+
+# Cheap create: one row per run id that needs a default queue (computed in
+# Python — has_human and no existing default). No NOT EXISTS in the write path.
+_CREATE_DEFAULT_QUEUES = sa.text("""
+ INSERT INTO evaluation_queues (
+ project_id,
+ id,
+ created_at,
+ created_by_id,
+ flags,
+ data,
+ status,
+ run_id
+ )
+ SELECT
+ CAST(src.project_id AS uuid),
+ gen_random_uuid(),
+ CURRENT_TIMESTAMP,
+ CAST(src.created_by_id AS uuid),
+ jsonb_build_object('is_default', true, 'is_sequential', false),
+ '{}'::json,
+ src.status,
+ CAST(src.run_id AS uuid)
+ FROM unnest(
+ CAST(:project_ids AS text[]),
+ CAST(:run_ids AS text[]),
+ CAST(:created_by_ids AS text[]),
+ CAST(:statuses AS text[])
+ ) AS src(project_id, run_id, created_by_id, status)
+""")
+
+# Cheap archive: flip deleted_at on the active default queue of each run id that
+# should no longer have one (computed in Python). Keyed by (project_id, run_id).
+_ARCHIVE_STALE_DEFAULT_QUEUES = sa.text("""
+ UPDATE evaluation_queues q
+ SET deleted_at = CURRENT_TIMESTAMP,
+ deleted_by_id = CAST(src.created_by_id AS uuid)
+ FROM unnest(
+ CAST(:project_ids AS text[]),
+ CAST(:run_ids AS text[]),
+ CAST(:created_by_ids AS text[])
+ ) AS src(project_id, run_id, created_by_id)
+ WHERE q.project_id = CAST(src.project_id AS uuid)
+ AND q.run_id = CAST(src.run_id AS uuid)
+ AND (q.flags ->> 'is_default')::boolean = true
+ AND q.deleted_at IS NULL
+""")
+
+
+def _next_run_ids(connection: Connection, *, cursor: str) -> List[str]:
+ result = connection.execute(
+ _NEXT_RUN_IDS,
+ {"cursor": cursor, "batch": BATCH_SIZE},
+ )
+ return [row[0] for row in result.fetchall()]
+
+
+def _flags_patch(row) -> str:
+ # Build the jsonb patch for a run: the four source-family flags plus the
+ # recomputed is_queue, matching the queue state this chunk produces.
+ #
+ # is_queue is true iff the run has a human step AND ends this chunk with an
+ # ACTIVE default queue. Mirroring _reconcile_default_queue and the create
+ # guard below:
+ # - human + already-active default -> active (is_queue=True)
+ # - human + no default at all -> created (is_queue=True)
+ # - human + only an ARCHIVED default -> not unarchived here -> False
+ # (same as the prior migration)
+ # - non-human + active default -> archived (is_queue=False)
+ # - non-human -> no active default (False)
+ if row.has_human:
+ ends_with_active_default = row.has_active_default or not row.has_any_default
+ else:
+ ends_with_active_default = False
+
+ return json.dumps(
+ {
+ "has_traces": bool(row.has_traces),
+ "has_testcases": bool(row.has_testcases),
+ "has_queries": bool(row.has_queries),
+ "has_testsets": bool(row.has_testsets),
+ "is_queue": bool(ends_with_active_default),
+ }
+ )
+
+
+def upgrade() -> None:
+ connection = op.get_bind()
+
+ cursor = ""
+ processed = 0
+ created = 0
+ archived = 0
+
+ while True:
+ ids = _next_run_ids(connection, cursor=cursor)
+ if not ids:
+ break
+
+ rows = connection.execute(_COMPUTE_CHUNK, {"ids": ids}).fetchall()
+
+ flag_ids: List[str] = []
+ flag_patches: List[str] = []
+
+ create_projects: List[str] = []
+ create_runs: List[str] = []
+ create_creators: List[str] = []
+ create_statuses: List[str] = []
+
+ archive_projects: List[str] = []
+ archive_runs: List[str] = []
+ archive_creators: List[str] = []
+
+ for row in rows:
+ flag_ids.append(row.run_id)
+ flag_patches.append(_flags_patch(row))
+
+ # Mirror _reconcile_default_queue: has_human runs should have a
+ # default; create one only when none exists yet.
+ if row.has_human and not row.has_any_default:
+ create_projects.append(row.project_id)
+ create_runs.append(row.run_id)
+ create_creators.append(row.created_by_id)
+ create_statuses.append(row.status)
+
+ # Non-human runs with a stale active default get it archived.
+ if not row.has_human and row.has_active_default:
+ archive_projects.append(row.project_id)
+ archive_runs.append(row.run_id)
+ archive_creators.append(row.created_by_id)
+
+ # Create/archive first so the flag write's is_queue (computed in Python
+ # from the same decisions) matches the resulting queue state.
+ if create_runs:
+ connection.execute(
+ _CREATE_DEFAULT_QUEUES,
+ {
+ "project_ids": create_projects,
+ "run_ids": create_runs,
+ "created_by_ids": create_creators,
+ "statuses": create_statuses,
+ },
+ )
+ created += len(create_runs)
+
+ if archive_runs:
+ connection.execute(
+ _ARCHIVE_STALE_DEFAULT_QUEUES,
+ {
+ "project_ids": archive_projects,
+ "run_ids": archive_runs,
+ "created_by_ids": archive_creators,
+ },
+ )
+ archived += len(archive_runs)
+
+ connection.execute(
+ _APPLY_FLAGS,
+ {"ids": flag_ids, "flags": flag_patches},
+ )
+
+ processed += len(ids)
+ cursor = ids[-1]
+
+ click.echo(
+ f"[default-queue backfill] processed_runs={processed} "
+ f"batch={len(ids)} created={created} archived={archived}"
+ )
+
+ click.echo(
+ f"[default-queue backfill] done processed_runs={processed} "
+ f"created={created} archived={archived}"
+ )
+
+
+def downgrade() -> None:
+ # Keep generated queues/results intact on downgrade. Remove only the newly
+ # inferred flags; old is_queue semantics cannot be reconstructed safely.
+ op.execute("""
+ UPDATE evaluation_runs
+ SET flags = COALESCE(flags, '{}'::jsonb) - 'has_traces' - 'has_testcases'
+ """)
diff --git a/api/ee/databases/postgres/migrations/tracing/env.py b/api/ee/databases/postgres/migrations/tracing/env.py
index 2dadd6892e..83ae21ab6b 100644
--- a/api/ee/databases/postgres/migrations/tracing/env.py
+++ b/api/ee/databases/postgres/migrations/tracing/env.py
@@ -7,7 +7,7 @@
from alembic import context
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.utils.env import env
from oss.src.dbs.postgres.shared.base import Base
# Side-effect import: register SQLAlchemy model with Base.metadata
@@ -19,7 +19,7 @@
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config
-config.set_main_option("sqlalchemy.url", engine.postgres_uri_tracing) # type: ignore
+config.set_main_option("sqlalchemy.url", env.postgres.uri_tracing)
# Interpret the config file for Python logging.
diff --git a/api/ee/src/apis/fastapi/access/router.py b/api/ee/src/apis/fastapi/access/router.py
index 0eefe50d8a..1ce73e467f 100644
--- a/api/ee/src/apis/fastapi/access/router.py
+++ b/api/ee/src/apis/fastapi/access/router.py
@@ -4,8 +4,8 @@
from oss.src.utils.exceptions import intercept_exceptions
-from ee.src.core.entitlements.types import SCOPES, Tracker
-from ee.src.core.entitlements.controls import (
+from ee.src.core.access.entitlements.types import SCOPES, Tracker
+from ee.src.core.access.controls import (
get_plans,
get_plan_description,
get_roles,
@@ -70,6 +70,6 @@ async def fetch_roles(self) -> Dict[str, List[Dict[str, Any]]]:
verbatim from access-controls, including the `"*"` wildcard for
`owner` — callers that need to render the full permission list
should expand the wildcard themselves (see
- `ee.src.services.converters._expand_permissions`).
+ `ee.src.services.db_manager_ee._expand_permissions`).
"""
return {scope: list(get_roles(scope)) for scope in SCOPES}
diff --git a/api/ee/src/apis/fastapi/billing/router.py b/api/ee/src/apis/fastapi/billing/router.py
index ee6380f0ff..e19dfcd1a8 100644
--- a/api/ee/src/apis/fastapi/billing/router.py
+++ b/api/ee/src/apis/fastapi/billing/router.py
@@ -6,15 +6,14 @@
from fastapi import APIRouter, Request, status, HTTPException, Query
from fastapi.responses import JSONResponse
-import stripe
-
from oss.src.utils.common import is_ee
from oss.src.utils.logging import get_module_logger
from oss.src.utils.exceptions import intercept_exceptions
-from oss.src.utils.caching import acquire_lock, release_lock, renew_lock
+from oss.src.utils.locking import acquire_lock, release_lock, renew_lock
from oss.src.utils.env import env
+from oss.src.utils.lazy import _load_stripe
-from ee.src.utils.entitlements import period_from, scope_from
+from ee.src.core.access.entitlements.service import period_from, scope_from
from ee.src.core.meters.types import Meters, MeterPeriod
from oss.src.utils.context import get_auth_scope
@@ -24,10 +23,10 @@
)
from ee.src.services import db_manager_ee
-from ee.src.utils.permissions import check_action_access
-from ee.src.models.shared_models import Permission
-from ee.src.core.entitlements.types import Tracker, Quota, Period, Scope
-from ee.src.core.entitlements.controls import get_plan_entitlements, get_plans
+from ee.src.core.access.permissions.service import check_action_access
+from ee.src.core.access.permissions.types import Permission
+from ee.src.core.access.entitlements.types import Tracker, Quota, Period, Scope
+from ee.src.core.access.controls import get_plan_entitlements, get_plans
from ee.src.core.subscriptions.settings import (
get_catalog,
get_pricing_plan,
@@ -47,12 +46,6 @@
log = get_module_logger(__name__)
-# Initialize Stripe only if enabled
-if env.stripe.enabled:
- stripe.api_key = env.stripe.api_key
- log.info("✓ Stripe enabled:", target=env.stripe.webhook_target)
-else:
- log.info("✗ Stripe disabled")
FORBIDDEN_RESPONSE = JSONResponse(
status_code=403,
@@ -249,8 +242,9 @@ async def handle_events(
self,
request: Request,
):
- # No-op if Stripe is disabled
- if not env.stripe.enabled:
+ # No-op if Stripe is unavailable (disabled or failed to load)
+ stripe = _load_stripe()
+ if stripe is None:
return JSONResponse(
status_code=status.HTTP_200_OK,
content={"status": "ok", "message": "Stripe not configured"},
@@ -476,8 +470,9 @@ async def create_portal(
self,
organization_id: str,
):
- # No-op if Stripe is disabled
- if not env.stripe.enabled:
+ # No-op if Stripe is unavailable (disabled or failed to load)
+ stripe = _load_stripe()
+ if stripe is None:
return JSONResponse(
status_code=status.HTTP_200_OK,
content={"status": "ok", "message": "Stripe not configured"},
@@ -514,8 +509,9 @@ async def create_checkout(
plan: str,
success_url: str,
):
- # No-op if Stripe is disabled
- if not env.stripe.enabled:
+ # No-op if Stripe is unavailable (disabled or failed to load)
+ stripe = _load_stripe()
+ if stripe is None:
return JSONResponse(
status_code=status.HTTP_200_OK,
content={"status": "ok", "message": "Stripe not configured"},
@@ -727,7 +723,9 @@ async def fetch_subscription(
_subscription = None
- if env.stripe.enabled:
+ stripe = _load_stripe()
+
+ if stripe is not None:
if not subscription.subscription_id:
return JSONResponse(
status_code=status.HTTP_404_NOT_FOUND,
@@ -887,6 +885,13 @@ async def cancel_subscription(
detail="Subscription (Stripe) not found",
)
+ stripe = _load_stripe()
+ if stripe is None:
+ raise HTTPException(
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
+ detail="Could not load Stripe. Please try again or contact support.",
+ )
+
try:
stripe_subscription = stripe.Subscription.retrieve(
subscription.subscription_id
diff --git a/api/ee/src/apis/fastapi/events/router.py b/api/ee/src/apis/fastapi/events/router.py
index 3a8e2b9c98..b14d6848b7 100644
--- a/api/ee/src/apis/fastapi/events/router.py
+++ b/api/ee/src/apis/fastapi/events/router.py
@@ -13,14 +13,17 @@
from oss.src.utils.logging import get_module_logger
from oss.src.utils.exceptions import intercept_exceptions
-from oss.src.utils.caching import acquire_lock, release_lock
+from oss.src.utils.locking import acquire_lock, release_lock
from oss.src.core.events.service import EventsService
from ee.src.apis.fastapi.events.models import EventQueryRequest, EventsQueryResponse
from ee.src.core.events.service import EventsRetentionService
-from ee.src.models.shared_models import Permission
-from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
-from ee.src.utils.entitlements import (
+from ee.src.core.access.permissions.types import Permission
+from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+)
+from ee.src.core.access.entitlements.service import (
check_entitlements,
NOT_ENTITLED_RESPONSE,
Flag,
diff --git a/api/ee/src/apis/fastapi/organizations/router.py b/api/ee/src/apis/fastapi/organizations/router.py
index 0315f83cf0..773a99d989 100644
--- a/api/ee/src/apis/fastapi/organizations/router.py
+++ b/api/ee/src/apis/fastapi/organizations/router.py
@@ -4,8 +4,8 @@
from fastapi import APIRouter, Request, HTTPException
from fastapi.responses import JSONResponse, Response
-from ee.src.utils.permissions import check_user_org_access
-from ee.src.utils.entitlements import (
+from ee.src.core.access.permissions.service import check_user_org_access
+from ee.src.core.access.entitlements.service import (
check_entitlements,
NOT_ENTITLED_RESPONSE,
Tracker,
@@ -13,7 +13,7 @@
)
from ee.src.services import db_manager_ee
-from ee.src.services.selectors import get_user_org_and_workspace_id
+from ee.src.services.db_manager_ee import get_user_org_and_workspace_id
from ee.src.services.organization_service import (
OrganizationDomainsService,
OrganizationProvidersService,
diff --git a/api/ee/src/apis/fastapi/spans/router.py b/api/ee/src/apis/fastapi/spans/router.py
index db443c600b..ecc361395c 100644
--- a/api/ee/src/apis/fastapi/spans/router.py
+++ b/api/ee/src/apis/fastapi/spans/router.py
@@ -10,7 +10,7 @@
from oss.src.utils.logging import get_module_logger
from oss.src.utils.exceptions import intercept_exceptions
-from oss.src.utils.caching import acquire_lock, release_lock
+from oss.src.utils.locking import acquire_lock, release_lock
from ee.src.core.tracing.service import TracingRetentionService
@@ -23,7 +23,7 @@ def __init__(
self,
tracing_retention_service: TracingRetentionService,
):
- self.tracing_retention_service = tracing_retention_service
+ self.tracing_service = tracing_retention_service
self.admin_router = APIRouter()
@@ -60,7 +60,7 @@ async def flush(self):
try:
log.info("[flush-spans] [endpoint] Retention started")
- await self.tracing_retention_service.flush_spans()
+ await self.tracing_service.flush_spans()
log.info("[flush-spans] [endpoint] Retention completed")
return JSONResponse(
diff --git a/api/ee/src/core/entitlements/__init__.py b/api/ee/src/core/access/__init__.py
similarity index 100%
rename from api/ee/src/core/entitlements/__init__.py
rename to api/ee/src/core/access/__init__.py
diff --git a/api/ee/src/core/access/controls.py b/api/ee/src/core/access/controls.py
new file mode 100644
index 0000000000..00ca0e41e4
--- /dev/null
+++ b/api/ee/src/core/access/controls.py
@@ -0,0 +1,144 @@
+"""Access controls: the combined effective plan + role surface.
+
+This is the single runtime source of truth and the composition root for access
+controls. It builds — once, at import time — the effective state from the two
+domain builders:
+
+- plans/entitlements: `ee.src.core.access.entitlements.controls.build_plan_controls`
+- roles/permissions: `ee.src.core.access.permissions.controls.build_role_controls`
+
+and exposes the public `get_plan*` / `get_role*` accessors plus a stable
+`controls_hash`. The domain `controls.py` modules are pure builders/parsers with
+no module-level state; this module owns the singleton.
+
+Code defaults live in the domain `types.py` modules; env overrides come from
+`AGENTA_ACCESS_PLANS`, `AGENTA_ACCESS_ROLES`, `AGENTA_ACCESS_ROLES_OVERLAY`, and
+`AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY` (raw JSON exposed via `env.agenta.access`).
+"""
+
+import hashlib
+from json import dumps
+from typing import Any, Dict, List, Optional
+
+from oss.src.utils.logging import get_module_logger
+
+from ee.src.core.access.entitlements.types import SCOPES, Tracker
+from ee.src.core.access.entitlements.controls import build_plan_controls
+from ee.src.core.access.permissions.controls import build_role_controls
+
+
+log = get_module_logger(__name__)
+
+
+# ---------------------------------------------------------------------------
+# Effective controls (built once at import time)
+# ---------------------------------------------------------------------------
+
+
+def _build_controls() -> tuple[
+ Dict[str, Dict[Tracker, Any]],
+ Dict[str, str],
+ Dict[str, List[Dict[str, Any]]],
+ str,
+]:
+ plans, descriptions, plan_source = build_plan_controls()
+ roles, role_source = build_role_controls()
+
+ payload = dumps(
+ {
+ "plans": sorted(plans.keys()),
+ "descriptions": descriptions,
+ "roles": {scope: [r["role"] for r in roles[scope]] for scope in SCOPES},
+ },
+ sort_keys=True,
+ default=str,
+ )
+ controls_hash = hashlib.sha256(payload.encode()).hexdigest()[:12]
+
+ log.info(
+ "[access-controls] %s %s hash=%s",
+ plan_source,
+ role_source,
+ controls_hash,
+ )
+
+ return plans, descriptions, roles, controls_hash
+
+
+_PLANS, _PLAN_DESCRIPTIONS, _ROLES, _CONTROLS_HASH = _build_controls()
+
+
+# ---------------------------------------------------------------------------
+# Public accessors — plans
+# ---------------------------------------------------------------------------
+
+
+def get_plans() -> Dict[str, Dict[Tracker, Any]]:
+ """Return the effective plan map (slug -> entitlement controls)."""
+ return _PLANS
+
+
+def get_plan(slug: Optional[str]) -> Optional[Dict[Tracker, Any]]:
+ """Return the entitlement controls for a plan slug, or None if missing."""
+ if not slug:
+ return None
+ return _PLANS.get(slug)
+
+
+def get_plan_entitlements(slug: Optional[str]) -> Optional[Dict[Tracker, Any]]:
+ """Alias for `get_plan`. Kept distinct for readability at call sites."""
+ if not slug:
+ return None
+ return _PLANS.get(slug)
+
+
+def get_plan_description(slug: Optional[str]) -> Optional[str]:
+ """Return the operator-facing description for a plan, if any."""
+ if not slug:
+ return None
+ return _PLAN_DESCRIPTIONS.get(slug)
+
+
+# ---------------------------------------------------------------------------
+# Public accessors — roles
+# ---------------------------------------------------------------------------
+
+
+def get_roles(scope: str) -> List[Dict[str, Any]]:
+ """Return the effective role catalog for a scope."""
+ if scope not in SCOPES:
+ return []
+ return _ROLES[scope]
+
+
+def get_role(scope: str, slug: str) -> Optional[Dict[str, Any]]:
+ """Return a single role entry within a scope."""
+ for entry in get_roles(scope):
+ if entry["role"] == slug:
+ return entry
+ return None
+
+
+def get_role_permissions(scope: str, slug: str) -> List[str]:
+ """Return the permission slugs for a role within a scope."""
+ role = get_role(scope, slug)
+ if not role:
+ return []
+ return list(role["permissions"])
+
+
+def get_role_description(scope: str, slug: str) -> Optional[str]:
+ role = get_role(scope, slug)
+ if not role:
+ return None
+ return role.get("description")
+
+
+# ---------------------------------------------------------------------------
+# Utility
+# ---------------------------------------------------------------------------
+
+
+def get_controls_hash() -> str:
+ """Stable short hash of the effective controls; useful in logs."""
+ return _CONTROLS_HASH
diff --git a/api/oss/tests/pytest/acceptance/events/__init__.py b/api/ee/src/core/access/entitlements/__init__.py
similarity index 100%
rename from api/oss/tests/pytest/acceptance/events/__init__.py
rename to api/ee/src/core/access/entitlements/__init__.py
diff --git a/api/ee/src/core/access/entitlements/controls.py b/api/ee/src/core/access/entitlements/controls.py
new file mode 100644
index 0000000000..e315660f49
--- /dev/null
+++ b/api/ee/src/core/access/entitlements/controls.py
@@ -0,0 +1,355 @@
+"""Plan/entitlement controls: pure builders + parsers (no singleton).
+
+Builds the effective plan map (slug -> entitlement controls: flags, counters,
+gauges, throttles) and plan descriptions from code defaults or env overrides
+(`AGENTA_ACCESS_PLANS`, `AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY`).
+
+This module holds no module-level state and no public accessors. The shared
+singleton + `get_plan*` accessors live in `ee.src.core.access.controls`, which
+calls `build_plan_controls()` once at import time.
+"""
+
+from typing import Any, Dict, List, Optional
+
+from pydantic import BaseModel, ConfigDict, ValidationError
+
+from oss.src.utils.env import env
+
+from ee.src.core.access.entitlements.types import (
+ Category,
+ Counter,
+ DEFAULT_ENTITLEMENTS,
+ DefaultPlan,
+ Flag,
+ Gauge,
+ Quota,
+ Throttle,
+ Tracker,
+)
+
+
+# ---------------------------------------------------------------------------
+# Override schemas
+# ---------------------------------------------------------------------------
+
+
+class _PlanOverride(BaseModel):
+ description: Optional[str] = None
+ flags: Optional[Dict[str, bool]] = None
+ counters: Optional[Dict[str, Quota]] = None
+ gauges: Optional[Dict[str, Quota]] = None
+ throttles: Optional[List[Throttle]] = None
+
+ model_config = ConfigDict(extra="forbid")
+
+
+# ---------------------------------------------------------------------------
+# Plan entitlements + descriptions
+# ---------------------------------------------------------------------------
+
+# Effective state is a dict[plan_slug, plan_entry] where plan_entry has the same
+# shape as DEFAULT_ENTITLEMENTS values (Tracker -> mapping) plus an optional
+# "description" key in the top-level plan entry's own description map.
+
+_DEFAULT_PLAN_DESCRIPTIONS: Dict[str, str] = {}
+
+
+def _default_plans() -> Dict[str, Dict[Tracker, Any]]:
+ # Keys in DEFAULT_ENTITLEMENTS are `DefaultPlan` (str, Enum) members.
+ # Coerce to plain strings so the runtime plan map is uniformly keyed by slug.
+ return {str(plan.value): entry for plan, entry in DEFAULT_ENTITLEMENTS.items()}
+
+
+def _validate_flag_key(key: str) -> Flag:
+ try:
+ return Flag(key)
+ except ValueError as e:
+ raise ValueError(f"Unknown flag '{key}'") from e
+
+
+def _validate_counter_key(key: str) -> Counter:
+ try:
+ return Counter(key)
+ except ValueError as e:
+ raise ValueError(f"Unknown counter '{key}'") from e
+
+
+def _validate_gauge_key(key: str) -> Gauge:
+ try:
+ return Gauge(key)
+ except ValueError as e:
+ raise ValueError(f"Unknown gauge '{key}'") from e
+
+
+def _parse_plans_override(
+ decoded: Any,
+) -> tuple[Dict[str, Dict[Tracker, Any]], Dict[str, str]]:
+ if not isinstance(decoded, dict) or not decoded:
+ raise ValueError("AGENTA_ACCESS_PLANS must be a non-empty JSON object")
+
+ plans: Dict[str, Dict[Tracker, Any]] = {}
+ descriptions: Dict[str, str] = {}
+
+ for slug, payload in decoded.items():
+ if not slug or not isinstance(slug, str):
+ raise ValueError(f"Invalid plan slug '{slug}' in AGENTA_ACCESS_PLANS")
+
+ try:
+ override = _PlanOverride.model_validate(payload)
+ except ValidationError as e:
+ raise ValueError(
+ f"Invalid plan override for '{slug}' in AGENTA_ACCESS_PLANS: {e}"
+ ) from e
+
+ plan_entry: Dict[Tracker, Any] = {}
+
+ if override.flags is not None:
+ plan_entry[Tracker.FLAGS] = {
+ _validate_flag_key(k): bool(v) for k, v in override.flags.items()
+ }
+
+ if override.counters is not None:
+ plan_entry[Tracker.COUNTERS] = {
+ _validate_counter_key(k): v for k, v in override.counters.items()
+ }
+
+ if override.gauges is not None:
+ plan_entry[Tracker.GAUGES] = {
+ _validate_gauge_key(k): v for k, v in override.gauges.items()
+ }
+
+ if override.throttles is not None:
+ plan_entry[Tracker.THROTTLES] = list(override.throttles)
+
+ # Plans with only a description are allowed — they represent custom /
+ # display-only plans (e.g. self-hosted Enterprise) that don't enforce
+ # quotas server-side. Downstream consumers must handle the empty
+ # entitlement map gracefully (e.g. `fetch_usage` returns no rows).
+ plans[slug] = plan_entry
+
+ if override.description:
+ descriptions[slug] = override.description
+
+ return plans, descriptions
+
+
+# ---------------------------------------------------------------------------
+# Default-plan overlay
+# ---------------------------------------------------------------------------
+#
+# `AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY` lets self-hosted operators tweak individual
+# entitlement values on the default plan without restating the entire plan in
+# `AGENTA_ACCESS_PLANS`. Common cases: bumping trace retention, raising the
+# standard-throttle rate, flipping a flag.
+#
+# Shape mirrors a plan entry (same keys, same units) with one divergence:
+# `throttles` is a map keyed by category slug instead of a list, so per-
+# category patches don't require restating the whole list. Throttles that
+# combine multiple categories or use `endpoints` cannot be addressed via the
+# overlay — operators who need that should use `AGENTA_ACCESS_PLANS`.
+
+
+class _ThrottleOverlay(BaseModel):
+ """Partial throttle update keyed by a single category.
+
+ Every field is optional; only fields explicitly set on the overlay
+ replace the matching field on the existing throttle entry.
+ """
+
+ bucket: Optional[Dict[str, Any]] = None
+ mode: Optional[str] = None
+
+ model_config = ConfigDict(extra="forbid")
+
+
+class _DefaultPlanOverlay(BaseModel):
+ """Partial overlay for the default plan. Same shape as `_PlanOverride`
+ except `throttles` is a map keyed by category slug."""
+
+ description: Optional[str] = None
+ flags: Optional[Dict[str, bool]] = None
+ counters: Optional[Dict[str, Dict[str, Any]]] = None
+ gauges: Optional[Dict[str, Dict[str, Any]]] = None
+ throttles: Optional[Dict[str, _ThrottleOverlay]] = None
+
+ model_config = ConfigDict(extra="forbid")
+
+
+def _merge_quota(existing: Optional[Quota], patch: Dict[str, Any]) -> Quota:
+ """Patch a Quota field-by-field, preserving fields the overlay didn't set."""
+ if existing is None:
+ # Patching an entitlement key that isn't defined on the base plan:
+ # treat the overlay as the full definition.
+ return Quota.model_validate(patch)
+ merged = existing.model_dump()
+ merged.update(patch)
+ return Quota.model_validate(merged)
+
+
+def _merge_throttle(existing: Throttle, patch: _ThrottleOverlay) -> Throttle:
+ """Patch one throttle entry. `bucket` is field-merged; `mode` replaces."""
+ base = existing.model_dump()
+ if patch.bucket is not None:
+ bucket = dict(base.get("bucket") or {})
+ bucket.update(patch.bucket)
+ base["bucket"] = bucket
+ if patch.mode is not None:
+ base["mode"] = patch.mode
+ return Throttle.model_validate(base)
+
+
+def _parse_default_plan_overlay(decoded: Any) -> _DefaultPlanOverlay:
+ if not isinstance(decoded, dict) or not decoded:
+ raise ValueError(
+ "AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY must be a non-empty JSON object"
+ )
+ try:
+ overlay = _DefaultPlanOverlay.model_validate(decoded)
+ except ValidationError as e:
+ raise ValueError(f"Invalid AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY: {e}") from e
+
+ # Validate slugs upfront so the error message points at the bad key
+ # rather than failing inside the merge.
+ if overlay.flags is not None:
+ for key in overlay.flags:
+ _validate_flag_key(key)
+ if overlay.counters is not None:
+ for key in overlay.counters:
+ _validate_counter_key(key)
+ if overlay.gauges is not None:
+ for key in overlay.gauges:
+ _validate_gauge_key(key)
+ if overlay.throttles is not None:
+ valid_categories = {c.value for c in Category}
+ for key in overlay.throttles:
+ if key not in valid_categories:
+ raise ValueError(
+ f"AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY.throttles['{key}'] is not a "
+ f"valid throttle category. Allowed: {sorted(valid_categories)}."
+ )
+ return overlay
+
+
+def _apply_default_plan_overlay(
+ plans: Dict[str, Dict[Tracker, Any]],
+ descriptions: Dict[str, str],
+ overlay: _DefaultPlanOverlay,
+ default_plan_slug: str,
+) -> tuple[Dict[str, Dict[Tracker, Any]], Dict[str, str]]:
+ """Apply the overlay to the resolved default plan in-place (returning new dicts)."""
+ if default_plan_slug not in plans:
+ raise ValueError(
+ f"AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY targets the default plan "
+ f"'{default_plan_slug}', which is not in the effective plan set "
+ f"({sorted(plans.keys())}). Add the slug to AGENTA_ACCESS_PLANS or "
+ "unset AGENTA_DEFAULT_PLAN."
+ )
+
+ plans = {slug: dict(entry) for slug, entry in plans.items()}
+ descriptions = dict(descriptions)
+ entry = plans[default_plan_slug]
+
+ if overlay.description is not None:
+ descriptions[default_plan_slug] = overlay.description
+
+ if overlay.flags is not None:
+ flags = dict(entry.get(Tracker.FLAGS) or {})
+ for key, value in overlay.flags.items():
+ flags[Flag(key)] = bool(value)
+ entry[Tracker.FLAGS] = flags
+
+ if overlay.counters is not None:
+ counters = dict(entry.get(Tracker.COUNTERS) or {})
+ for key, patch in overlay.counters.items():
+ counter = Counter(key)
+ counters[counter] = _merge_quota(counters.get(counter), patch)
+ entry[Tracker.COUNTERS] = counters
+
+ if overlay.gauges is not None:
+ gauges = dict(entry.get(Tracker.GAUGES) or {})
+ for key, patch in overlay.gauges.items():
+ gauge = Gauge(key)
+ gauges[gauge] = _merge_quota(gauges.get(gauge), patch)
+ entry[Tracker.GAUGES] = gauges
+
+ if overlay.throttles is not None:
+ existing_throttles = list(entry.get(Tracker.THROTTLES) or [])
+
+ for category_key, patch in overlay.throttles.items():
+ category = Category(category_key)
+ # Find the single-category throttle entry that matches.
+ target_idx = next(
+ (
+ idx
+ for idx, t in enumerate(existing_throttles)
+ if t.categories
+ and len(t.categories) == 1
+ and t.categories[0] == category
+ ),
+ None,
+ )
+ if target_idx is None:
+ raise ValueError(
+ f"AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY.throttles['{category_key}']: "
+ f"the default plan '{default_plan_slug}' has no single-"
+ f"category throttle entry for '{category_key}'. Use "
+ "AGENTA_ACCESS_PLANS to define multi-category or endpoint-"
+ "keyed throttles."
+ )
+ existing_throttles[target_idx] = _merge_throttle(
+ existing_throttles[target_idx], patch
+ )
+ entry[Tracker.THROTTLES] = existing_throttles
+
+ plans[default_plan_slug] = entry
+ return plans, descriptions
+
+
+def _resolve_default_plan_slug(plans: Dict[str, Dict[Tracker, Any]]) -> str:
+ """Resolve the default plan slug for overlay targeting.
+
+ Mirrors `subscriptions.types.get_default_plan()` without importing it (to
+ avoid pulling subscription/Stripe code into the access-controls layer).
+ """
+ raw = env.agenta.access.default_plan
+ if raw:
+ return raw
+ if env.stripe.enabled:
+ return DefaultPlan.CLOUD_V0_HOBBY.value
+ return DefaultPlan.SELF_HOSTED_ENTERPRISE.value
+
+
+# ---------------------------------------------------------------------------
+# Build (called once by ee.src.core.access.controls)
+# ---------------------------------------------------------------------------
+
+
+def build_plan_controls() -> tuple[Dict[str, Dict[Tracker, Any]], Dict[str, str], str]:
+ """Build the effective plan map + descriptions from defaults or env overrides.
+
+ Returns ``(plans, descriptions, source_label)`` where ``source_label`` is a
+ short string for startup logging (e.g. ``"defaults"`` or
+ ``"env plan_overlay=env→"``).
+ """
+ plans_payload = env.agenta.access.plans
+ plan_overlay_payload = env.agenta.access.default_plan_overlay
+
+ if plans_payload is not None:
+ plans, descriptions = _parse_plans_override(plans_payload)
+ plans_source = "env"
+ else:
+ plans = _default_plans()
+ descriptions = dict(_DEFAULT_PLAN_DESCRIPTIONS)
+ plans_source = "defaults"
+
+ plan_overlay_source = "none"
+ if plan_overlay_payload is not None:
+ plan_overlay = _parse_default_plan_overlay(plan_overlay_payload)
+ default_plan_slug = _resolve_default_plan_slug(plans)
+ plans, descriptions = _apply_default_plan_overlay(
+ plans, descriptions, plan_overlay, default_plan_slug
+ )
+ plan_overlay_source = f"env→{default_plan_slug}"
+
+ source = f"plans={plans_source} plan_overlay={plan_overlay_source}"
+ return plans, descriptions, source
diff --git a/api/ee/src/utils/entitlements.py b/api/ee/src/core/access/entitlements/service.py
similarity index 95%
rename from api/ee/src/utils/entitlements.py
rename to api/ee/src/core/access/entitlements/service.py
index 9b290e4ac6..202f098c6e 100644
--- a/api/ee/src/utils/entitlements.py
+++ b/api/ee/src/core/access/entitlements/service.py
@@ -8,7 +8,7 @@
from fastapi.responses import JSONResponse
from ee.src.core.subscriptions.service import SubscriptionsService
-from ee.src.core.entitlements.types import (
+from ee.src.core.access.entitlements.types import (
Tracker,
Flag,
Counter,
@@ -16,7 +16,7 @@
Period,
Scope,
)
-from ee.src.core.entitlements.controls import get_plan_entitlements
+from ee.src.core.access.controls import get_plan_entitlements
from ee.src.core.meters.service import MetersService
from ee.src.core.meters.types import MeterDTO, MeterScope, MeterPeriod, Meters
@@ -86,7 +86,6 @@ def bootstrap_entitlements_services(
if subscriptions_service is None:
subscriptions_service = SubscriptionsService(
subscriptions_dao=SubscriptionsDAO(),
- meters_service=meters_service,
)
register_entitlements_services(
@@ -408,12 +407,6 @@ async def _check_entitlements(
check = flags[flag]
- if flag.name != "RBAC":
- # TODO: remove this line
- log.info(
- f"[METERS] adjusting: {organization_id} | | {'allow' if check else 'deny '} | {flag.name}"
- )
-
return check is True, None, None
# -------------------------------------------------------------- #
@@ -562,17 +555,4 @@ async def _check_entitlements(
key=cache_key,
)
- # TODO: remove this line
- log.info(
- f"[METERS] adjusting: {_scope.organization_id} | "
- f"{_scope.workspace_id} | "
- f"{_scope.project_id} | "
- f"{_scope.user_id} | "
- f"{(meter.year if meter.year else ' ')}-"
- f"{(meter.month if meter.month else ' ')}-"
- f"{(meter.day if meter.day else ' ')} | "
- f"{'allow' if check else 'deny '} | "
- f"{meter.key}: {(meter.value or 0) - (meter.synced or 0)} [{meter.value}]"
- )
-
return check is True, meter, _
diff --git a/api/ee/src/core/entitlements/types.py b/api/ee/src/core/access/entitlements/types.py
similarity index 95%
rename from api/ee/src/core/entitlements/types.py
rename to api/ee/src/core/access/entitlements/types.py
index 39c1eb644b..4547ef40c8 100644
--- a/api/ee/src/core/entitlements/types.py
+++ b/api/ee/src/core/access/entitlements/types.py
@@ -6,7 +6,7 @@
class DefaultPlan(str, Enum):
"""Code-default plan slugs.
- Runtime plan slugs come from `ee.src.core.entitlements.controls.get_plans()`
+ Runtime plan slugs come from `ee.src.core.access.controls.get_plans()`
(env-overridable). This enum is only the default-fallback identifier set,
used as keys for `DEFAULT_ENTITLEMENTS` / `DEFAULT_CATALOG` and as fallback
in `get_default_plan()` / `get_free_plan()` / `get_trial_plan()`.
@@ -21,24 +21,9 @@ class DefaultPlan(str, Enum):
SELF_HOSTED_ENTERPRISE = "self_hosted_enterprise"
-class DefaultRole(str, Enum):
- """Required role slugs per scope.
-
- `owner` and `viewer` must exist in every scope (organization, workspace,
- project) — they are merged in by the access-controls builder regardless of
- `AGENTA_ACCESS_ROLES` content, so application code can depend on these
- two slugs being valid in any scope.
-
- Env overrides may customize the permissions of these roles or add
- additional roles, but cannot remove them.
- """
-
- OWNER = "owner"
- VIEWER = "viewer"
-
-
# Permission slugs that the OWNER role always implies. `"*"` is the wildcard
-# permission recognized by `permissions.py`.
+# permission recognized by `permissions.py`. The `RequiredRole` enum itself now
+# lives in `ee.src.core.access.permissions.types`.
OWNER_PERMISSIONS: list[str] = ["*"]
@@ -186,7 +171,7 @@ class Throttle(BaseModel):
(Method.POST, "/tracing/spans/analytics"), # LEGACY
],
Category.SERVICES_FAST: [
- (Method.ANY, "/permissions/verify"),
+ (Method.ANY, "/access/permissions/check"),
],
Category.SERVICES_SLOW: [
# None defined yet
@@ -685,12 +670,11 @@ class Throttle(BaseModel):
}
-REPORTS = [
- Counter.TRACES_INGESTED.value,
- Gauge.USERS.value,
-]
-
-STRIPE_METER_NAMES: dict[str, str] = {
+# Internal Counter/Gauge slug -> Stripe-side meter slot name. Membership in
+# this map doubles as the "reportable to Stripe" set: a meter is reported iff
+# its key is present here (`key in REPORTS`), and the value is the Stripe-side
+# name to report under (`REPORTS[key]`).
+REPORTS: dict[str, str] = {
Counter.TRACES_INGESTED.value: "traces",
Gauge.USERS.value: "users",
}
diff --git a/sdks/python/oss/tests/pytest/integration/.gitkeep b/api/ee/src/core/access/permissions/__init__.py
similarity index 100%
rename from sdks/python/oss/tests/pytest/integration/.gitkeep
rename to api/ee/src/core/access/permissions/__init__.py
diff --git a/api/ee/src/core/access/permissions/controls.py b/api/ee/src/core/access/permissions/controls.py
new file mode 100644
index 0000000000..054fc65402
--- /dev/null
+++ b/api/ee/src/core/access/permissions/controls.py
@@ -0,0 +1,438 @@
+"""Role/permission controls: pure builders + parsers (no singleton).
+
+Builds the per-scope role catalogs (organization, workspace, project) and their
+role->permission mappings from code defaults or env overrides
+(`AGENTA_ACCESS_ROLES`, `AGENTA_ACCESS_ROLES_OVERLAY`).
+
+This module holds no module-level state and no public accessors. The shared
+singleton + `get_role*` accessors live in `ee.src.core.access.controls`, which
+calls `build_role_controls()` once at import time.
+
+Minima contract: every scope MUST expose `owner`, `admin`, and `viewer` with
+code-defined permissions. Env overrides may add roles or customize permissions
+of non-minima roles, but the minima are always present and their slugs cannot be
+re-bound to a different permission set.
+"""
+
+from typing import Any, Dict, List, Optional
+
+from pydantic import BaseModel, ConfigDict, ValidationError
+
+from oss.src.utils.env import env
+
+from ee.src.core.access.entitlements.types import OWNER_PERMISSIONS, SCOPES
+from ee.src.core.access.permissions.types import (
+ Permission,
+ DefaultRole,
+ RequiredRole,
+)
+
+
+# ---------------------------------------------------------------------------
+# Override schemas
+# ---------------------------------------------------------------------------
+
+
+class _RoleOverride(BaseModel):
+ role: str
+ description: Optional[str] = None
+ permissions: List[str]
+
+ model_config = ConfigDict(extra="forbid")
+
+
+class _RoleOverlayEntry(BaseModel):
+ """Partial role update. ``permissions`` and ``description`` are both
+ optional; whatever is set replaces the matching field on the existing
+ role entry. To add a new role both fields must be supplied — that
+ constraint is enforced in :func:`_apply_roles_overlay`.
+ """
+
+ description: Optional[str] = None
+ permissions: Optional[List[str]] = None
+
+ model_config = ConfigDict(extra="forbid")
+
+
+# ---------------------------------------------------------------------------
+# Role catalogs (scoped)
+# ---------------------------------------------------------------------------
+
+
+def _read_only_permissions() -> List[str]:
+ """Read-only permission set sourced from the code-default `DefaultRole.VIEWER`.
+
+ Used as the `viewer` minima permissions for the `workspace` and `project`
+ scopes where permissions are actually enforced. Organization-scope `viewer`
+ has no permissions (it's just a membership marker today).
+ """
+ return [p.value for p in Permission.default_permissions(DefaultRole.VIEWER)]
+
+
+def _viewer_permissions_for_scope(scope: str) -> List[str]:
+ """Per-scope code-default permissions for the `viewer` minima role.
+
+ - `organization`: empty — orgs have no permission concept today.
+ - `workspace` and `project`: the code-default `DefaultRole.VIEWER` read-only set.
+ """
+ if scope == "organization":
+ return []
+ return _read_only_permissions()
+
+
+def _admin_permissions_for_scope(scope: str) -> List[str]:
+ """Per-scope code-default permissions for the `admin` minima role.
+
+ - `organization`: empty — orgs have no permission concept today.
+ - `workspace` and `project`: the code-default `DefaultRole.ADMIN` set.
+ """
+ if scope == "organization":
+ return []
+ return [p.value for p in Permission.default_permissions(DefaultRole.ADMIN)]
+
+
+def _minima_for(scope: str) -> List[Dict[str, Any]]:
+ """Return the required role entries for a scope (owner + admin + viewer).
+
+ Application code relies on these slugs being present in every scope; the
+ builder synthesizes them up front and re-applies them after any env
+ overrides so they can never be dropped or relabeled.
+
+ `owner` is always wildcard. The permission sets for `admin` and `viewer`
+ vary per scope (see `_admin_permissions_for_scope` /
+ `_viewer_permissions_for_scope`): both are empty at organization scope
+ (orgs have no permission concept today) and code-default elsewhere.
+ """
+ return [
+ {
+ "role": RequiredRole.OWNER.value,
+ "description": "Full access (wildcard permissions).",
+ "permissions": list(OWNER_PERMISSIONS),
+ },
+ {
+ "role": RequiredRole.ADMIN.value,
+ "description": (
+ "Membership marker (no permissions)."
+ if scope == "organization"
+ else DefaultRole.get_description(DefaultRole.ADMIN)
+ ),
+ "permissions": _admin_permissions_for_scope(scope),
+ },
+ {
+ "role": RequiredRole.VIEWER.value,
+ "description": (
+ "Membership marker (no permissions)."
+ if scope == "organization"
+ else DefaultRole.get_description(DefaultRole.VIEWER)
+ ),
+ "permissions": _viewer_permissions_for_scope(scope),
+ },
+ ]
+
+
+def _default_roles() -> Dict[str, List[Dict[str, Any]]]:
+ """Return the code-default role catalog for each scope.
+
+ Workspace and project scopes expose the code-default `DefaultRole`
+ entries on top of the minima — project membership stores the same role
+ slugs (`admin`/`developer`/`editor`/`annotator`), and the runtime
+ permission check resolves them through this map. Organization scope
+ only gets the minima today; new roles can be added per-scope via
+ `AGENTA_ACCESS_ROLES`.
+ """
+ default_extras: List[Dict[str, Any]] = []
+ minima_slugs = {
+ RequiredRole.OWNER.value,
+ RequiredRole.ADMIN.value,
+ RequiredRole.VIEWER.value,
+ }
+ for role in DefaultRole:
+ if role.value in minima_slugs:
+ continue
+ default_extras.append(
+ {
+ "role": role.value,
+ "description": DefaultRole.get_description(role),
+ "permissions": [p.value for p in Permission.default_permissions(role)],
+ }
+ )
+
+ return {
+ "organization": _minima_for("organization"),
+ "workspace": _minima_for("workspace") + default_extras,
+ "project": _minima_for("project") + default_extras,
+ }
+
+
+def _validate_permission(slug: str) -> str:
+ if slug == "*":
+ return slug
+ try:
+ Permission(slug)
+ except ValueError as e:
+ raise ValueError(f"Unknown permission '{slug}'") from e
+ return slug
+
+
+def _parse_roles_override(decoded: Any) -> Dict[str, List[Dict[str, Any]]]:
+ """Parse `AGENTA_ACCESS_ROLES` and merge with scope minima.
+
+ Schema is `{scope: [role, ...]}` where scope is one of `organization`,
+ `workspace`, `project`. Missing scopes fall back to the code-default
+ minima for that scope. Within an overridden scope:
+
+ - `owner`, `admin`, `viewer` are reserved slugs; if present, they're
+ rejected with a clear error so application invariants stay intact. The
+ minima for that scope are re-applied after parsing.
+ - Other roles are validated (known permissions, no duplicates) and
+ appended to the minima list.
+
+ Empty `{}` or an empty per-scope list is rejected.
+ """
+ if not isinstance(decoded, dict) or not decoded:
+ raise ValueError("AGENTA_ACCESS_ROLES must be a non-empty JSON object")
+
+ # Start with code-default catalogs for every scope. Overrides only mutate
+ # the scopes they specify; non-overridden scopes keep their full code
+ # defaults (e.g. workspace's admin/developer/editor/annotator stay even
+ # when only `project` is overridden).
+ result: Dict[str, List[Dict[str, Any]]] = _default_roles()
+
+ reserved = {
+ RequiredRole.OWNER.value,
+ RequiredRole.ADMIN.value,
+ RequiredRole.VIEWER.value,
+ }
+
+ for scope, roles in decoded.items():
+ if scope not in SCOPES:
+ raise ValueError(
+ f"Unknown role scope '{scope}' in AGENTA_ACCESS_ROLES "
+ f"(allowed: {list(SCOPES)})"
+ )
+
+ if not isinstance(roles, list) or not roles:
+ raise ValueError(
+ f"AGENTA_ACCESS_ROLES['{scope}'] must be a non-empty list of roles"
+ )
+
+ extras: List[Dict[str, Any]] = []
+ seen: set[str] = set()
+ for entry in roles:
+ try:
+ role = _RoleOverride.model_validate(entry)
+ except ValidationError as e:
+ raise ValueError(
+ f"Invalid role override under scope '{scope}': {e}"
+ ) from e
+
+ slug = role.role
+ if not slug:
+ raise ValueError(f"Empty role slug under scope '{scope}'")
+ if slug in reserved:
+ raise ValueError(
+ f"AGENTA_ACCESS_ROLES['{scope}'] cannot redefine reserved "
+ f"role '{slug}'; minima are always synthesized by the platform"
+ )
+ if slug in seen:
+ raise ValueError(f"Duplicate role slug '{slug}' under scope '{scope}'")
+ seen.add(slug)
+
+ permissions = [_validate_permission(p) for p in role.permissions]
+
+ extras.append(
+ {
+ "role": slug,
+ "description": role.description,
+ "permissions": permissions,
+ }
+ )
+
+ # Minima first, then validated extras.
+ result[scope] = _minima_for(scope) + extras
+
+ # TEMP: workspace and project use the same role set at runtime (the only
+ # caller of `workspace`-scope roles today is the Invite Members modal,
+ # which is really inviting to the underlying project). Operators almost
+ # always override only `project` via AGENTA_ACCESS_ROLES; without this
+ # mirror, custom roles silently disappear from the workspace catalog.
+ # Remove once the workspace/project scope split is reconciled.
+ if "project" in decoded and "workspace" not in decoded:
+ project_extras = [
+ entry
+ for entry in result["project"]
+ if entry["role"]
+ not in {
+ RequiredRole.OWNER.value,
+ RequiredRole.ADMIN.value,
+ RequiredRole.VIEWER.value,
+ }
+ ]
+ result["workspace"] = _minima_for("workspace") + project_extras
+
+ return result
+
+
+# ---------------------------------------------------------------------------
+# Roles overlay
+# ---------------------------------------------------------------------------
+#
+# `AGENTA_ACCESS_ROLES_OVERLAY` lets operators tweak individual fields on
+# existing default roles (`admin`, `developer`, `editor`, `annotator`) — or
+# add new roles — without restating the whole scope catalog the way
+# `AGENTA_ACCESS_ROLES` requires. See the parser docstring for the two accepted
+# payload shapes.
+
+
+def _parse_roles_overlay(decoded: Any) -> Dict[str, _RoleOverlayEntry]:
+ """Parse `AGENTA_ACCESS_ROLES_OVERLAY` and return per-slug entries.
+
+ Two accepted payload shapes:
+
+ 1. Project-focused shortcut — ``{: }``. Used when none
+ of the scope keys (``organization``, ``workspace``, ``project``) appear
+ at the root; the payload is interpreted as project-level role patches.
+ The scope names are therefore reserved and cannot be used as role slugs.
+
+ 2. Full (scoped) form — ``{"project": {: }}``. Triggered
+ when any of ``organization``, ``workspace``, ``project`` appears at the
+ root. Only ``project`` is supported today; ``organization`` and
+ ``workspace`` are rejected.
+
+ The result is the inner ``{: }`` dict; the caller decides
+ which scopes the patch applies to.
+ """
+ if not isinstance(decoded, dict) or not decoded:
+ raise ValueError("AGENTA_ACCESS_ROLES_OVERLAY must be a non-empty JSON object")
+
+ scope_keys = {"organization", "workspace", "project"}
+
+ if scope_keys & set(decoded.keys()):
+ # Full parse: at least one scope key at root.
+ unsupported = (set(decoded.keys()) & scope_keys) - {"project"}
+ if unsupported:
+ raise ValueError(
+ f"AGENTA_ACCESS_ROLES_OVERLAY only supports the 'project' scope "
+ f"today (got: {sorted(unsupported)}). The patch is applied to "
+ "both workspace and project."
+ )
+ unknown = set(decoded.keys()) - scope_keys
+ if unknown:
+ raise ValueError(
+ f"AGENTA_ACCESS_ROLES_OVERLAY mixes scope keys with non-scope "
+ f"keys at the root ({sorted(unknown)}). Either use the "
+ "project-focused shortcut (no scope keys, role slugs at the "
+ "root) or the full form ({'project': {...}})."
+ )
+ project_payload = decoded.get("project")
+ if not isinstance(project_payload, dict) or not project_payload:
+ raise ValueError(
+ "AGENTA_ACCESS_ROLES_OVERLAY['project'] must be a non-empty "
+ "JSON object keyed by role slug"
+ )
+ else:
+ # Project-focused shortcut: top-level dict is keyed by role slug.
+ project_payload = decoded
+
+ reserved = {
+ RequiredRole.OWNER.value,
+ RequiredRole.ADMIN.value,
+ RequiredRole.VIEWER.value,
+ }
+ entries: Dict[str, _RoleOverlayEntry] = {}
+ for slug, patch in project_payload.items():
+ if not slug or not isinstance(slug, str):
+ raise ValueError(
+ f"Invalid role slug '{slug}' in AGENTA_ACCESS_ROLES_OVERLAY"
+ )
+ if slug in reserved:
+ raise ValueError(
+ f"AGENTA_ACCESS_ROLES_OVERLAY cannot patch reserved role "
+ f"'{slug}'; minima are platform-managed"
+ )
+ try:
+ entry = _RoleOverlayEntry.model_validate(patch)
+ except ValidationError as e:
+ raise ValueError(
+ f"Invalid AGENTA_ACCESS_ROLES_OVERLAY['project']['{slug}']: {e}"
+ ) from e
+ if entry.permissions is not None:
+ for perm in entry.permissions:
+ _validate_permission(perm)
+ entries[slug] = entry
+
+ return entries
+
+
+def _apply_roles_overlay(
+ roles: Dict[str, List[Dict[str, Any]]],
+ overlay: Dict[str, _RoleOverlayEntry],
+) -> Dict[str, List[Dict[str, Any]]]:
+ """Apply the parsed overlay to the workspace and project scopes.
+
+ Returns a new dict; the input is not mutated. New roles (where the
+ slug doesn't already exist on the scope) require both ``description``
+ and ``permissions``.
+ """
+ result = {scope: [dict(entry) for entry in roles[scope]] for scope in roles}
+
+ for scope_name in ("workspace", "project"):
+ scope_entries = result[scope_name]
+ by_slug = {entry["role"]: idx for idx, entry in enumerate(scope_entries)}
+
+ for slug, patch in overlay.items():
+ if slug in by_slug:
+ # Patch existing role: per-field replace.
+ idx = by_slug[slug]
+ if patch.description is not None:
+ scope_entries[idx]["description"] = patch.description
+ if patch.permissions is not None:
+ scope_entries[idx]["permissions"] = list(patch.permissions)
+ else:
+ # New role: both fields must be present.
+ if patch.permissions is None:
+ raise ValueError(
+ f"AGENTA_ACCESS_ROLES_OVERLAY['project']['{slug}']: "
+ f"new role requires 'permissions' (scope '{scope_name}' "
+ "has no existing role with this slug to patch)"
+ )
+ scope_entries.append(
+ {
+ "role": slug,
+ "description": patch.description,
+ "permissions": list(patch.permissions),
+ }
+ )
+
+ return result
+
+
+# ---------------------------------------------------------------------------
+# Build (called once by ee.src.core.access.controls)
+# ---------------------------------------------------------------------------
+
+
+def build_role_controls() -> tuple[Dict[str, List[Dict[str, Any]]], str]:
+ """Build the per-scope role catalogs from defaults or env overrides.
+
+ Returns ``(roles, source_label)`` where ``source_label`` is a short string
+ for startup logging (e.g. ``"roles=defaults roles_overlay=none"``).
+ """
+ roles_payload = env.agenta.access.roles
+ roles_overlay_payload = env.agenta.access.roles_overlay
+
+ if roles_payload is not None:
+ roles = _parse_roles_override(roles_payload)
+ roles_source = "env"
+ else:
+ roles = _default_roles()
+ roles_source = "defaults"
+
+ roles_overlay_source = "none"
+ if roles_overlay_payload is not None:
+ roles_overlay = _parse_roles_overlay(roles_overlay_payload)
+ roles = _apply_roles_overlay(roles, roles_overlay)
+ roles_overlay_source = "env"
+
+ source = f"roles={roles_source} roles_overlay={roles_overlay_source}"
+ return roles, source
diff --git a/api/ee/src/utils/permissions.py b/api/ee/src/core/access/permissions/service.py
similarity index 97%
rename from api/ee/src/utils/permissions.py
rename to api/ee/src/core/access/permissions/service.py
index b18181fbf5..38dcffdebf 100644
--- a/api/ee/src/utils/permissions.py
+++ b/api/ee/src/core/access/permissions/service.py
@@ -10,16 +10,17 @@
WorkspaceDB,
ProjectDB,
)
-from ee.src.models.shared_models import (
- Permission,
- WorkspaceRole,
-)
-from ee.src.core.entitlements.controls import get_role, get_role_permissions
+from ee.src.core.access.permissions.types import Permission, RequiredRole
+from ee.src.core.access.controls import get_role, get_role_permissions
from oss.src.services import db_manager
from ee.src.services import db_manager_ee
-from ee.src.utils.entitlements import check_entitlements, scope_from, Flag
-from ee.src.services.selectors import get_user_org_and_workspace_id
+from ee.src.core.access.entitlements.service import (
+ check_entitlements,
+ scope_from,
+ Flag,
+)
+from ee.src.services.db_manager_ee import get_user_org_and_workspace_id
log = get_module_logger(__name__)
@@ -65,12 +66,12 @@ def _project_is_owner(
) -> bool:
"""True if the user is OWNER in the project."""
role = _get_project_member_role(user_id, members)
- return role == WorkspaceRole.OWNER
+ return role == RequiredRole.OWNER
def _project_has_role(
user_id: str,
- role_to_check: WorkspaceRole,
+ role_to_check: RequiredRole,
members: Sequence[Any],
) -> bool:
"""True if the user's role exactly matches role_to_check."""
diff --git a/api/ee/src/models/shared_models.py b/api/ee/src/core/access/permissions/types.py
similarity index 81%
rename from api/ee/src/models/shared_models.py
rename to api/ee/src/core/access/permissions/types.py
index fccba1affd..c3ab36b719 100644
--- a/api/ee/src/models/shared_models.py
+++ b/api/ee/src/core/access/permissions/types.py
@@ -1,10 +1,16 @@
from enum import Enum
-from typing import List
-from pydantic import BaseModel, Field
+class DefaultRole(str, Enum):
+ """Code-default role catalog (the roles Agenta ships with).
+
+ Used at all three scopes (organization / workspace / project) to seed the
+ default role catalog and their permission mappings. Env overrides
+ (`AGENTA_ACCESS_ROLES`) may add or customize roles on top of these.
+
+ The minimal subset that must always exist in every scope is `RequiredRole`.
+ """
-class WorkspaceRole(str, Enum):
OWNER = "owner"
ADMIN = "admin"
DEVELOPER = "developer"
@@ -14,7 +20,7 @@ class WorkspaceRole(str, Enum):
@classmethod
def is_valid_role(cls, role: str) -> bool:
- return role.upper() in list(WorkspaceRole.__members__.keys())
+ return role.upper() in list(DefaultRole.__members__.keys())
@classmethod
def get_description(cls, role):
@@ -29,6 +35,29 @@ def get_description(cls, role):
return descriptions.get(role, "Description not available, Role not found")
+class RequiredRole(str, Enum):
+ """Required role slugs per scope (the minimal guaranteed subset).
+
+ `owner`, `admin`, and `viewer` must exist in every scope (organization,
+ workspace, project) — they are merged in by the access-controls builder
+ regardless of `AGENTA_ACCESS_ROLES` content, so application code can depend
+ on these three slugs being valid in any scope.
+
+ The rationale for the minimal set: `owner` is the single full-access owner,
+ `admin` is full access that can be granted to many people, and `viewer` is
+ minimal (read-only) access for many people. Without `admin` in the minimal
+ set, an env override could leave a scope with only owner + viewer — where no
+ non-owner can actually do anything.
+
+ Env overrides may customize the permissions of these roles or add
+ additional roles, but cannot remove them.
+ """
+
+ OWNER = "owner"
+ ADMIN = "admin"
+ VIEWER = "viewer"
+
+
class Permission(str, Enum):
# general
READ_SYSTEM = "read_system"
@@ -242,17 +271,12 @@ def default_permissions(cls, role):
cls.VIEW_WORKSPACE,
]
defaults = {
- WorkspaceRole.OWNER: [p for p in cls],
- WorkspaceRole.ADMIN: ADMIN_PERMISSIONS,
- WorkspaceRole.DEVELOPER: DEVELOPER_PERMISSIONS,
- WorkspaceRole.EDITOR: EDITOR_PERMISSIONS,
- WorkspaceRole.ANNOTATOR: ANNOTATOR_PERMISSIONS,
- WorkspaceRole.VIEWER: VIEWER_PERMISSIONS,
+ DefaultRole.OWNER: [p for p in cls],
+ DefaultRole.ADMIN: ADMIN_PERMISSIONS,
+ DefaultRole.DEVELOPER: DEVELOPER_PERMISSIONS,
+ DefaultRole.EDITOR: EDITOR_PERMISSIONS,
+ DefaultRole.ANNOTATOR: ANNOTATOR_PERMISSIONS,
+ DefaultRole.VIEWER: VIEWER_PERMISSIONS,
}
return defaults.get(role, [])
-
-
-class WorkspaceMember(BaseModel):
- role_name: WorkspaceRole
- permissions: List[Permission] = Field(default_factory=list)
diff --git a/api/ee/src/core/entitlements/controls.py b/api/ee/src/core/entitlements/controls.py
deleted file mode 100644
index edd4ec42ef..0000000000
--- a/api/ee/src/core/entitlements/controls.py
+++ /dev/null
@@ -1,832 +0,0 @@
-"""Access controls: effective plan/role accessors built from code defaults or env overrides.
-
-This module is the single runtime source of truth for:
-
-- the effective plan slug set;
-- per-plan entitlement controls (flags, counters, gauges, throttles);
-- per-scope role catalogs (organization, workspace, project).
-
-Code defaults live in `types.py` and `ee.src.models.shared_models`. Environment
-overrides come from `AGENTA_ACCESS_PLANS` and `AGENTA_ACCESS_ROLES` (raw JSON
-strings exposed via `env.agenta.access`). Parsing happens once at import time.
-"""
-
-import hashlib
-from json import dumps
-from typing import Any, Dict, List, Optional
-
-from pydantic import BaseModel, ConfigDict, ValidationError
-
-from oss.src.utils.env import env
-from oss.src.utils.logging import get_module_logger
-
-from ee.src.core.entitlements.types import (
- Category,
- Counter,
- DEFAULT_ENTITLEMENTS,
- DefaultPlan,
- DefaultRole,
- Flag,
- Gauge,
- OWNER_PERMISSIONS,
- Quota,
- SCOPES,
- Throttle,
- Tracker,
-)
-from ee.src.models.shared_models import Permission, WorkspaceRole
-
-
-log = get_module_logger(__name__)
-
-
-# ---------------------------------------------------------------------------
-# Override schemas
-# ---------------------------------------------------------------------------
-
-
-class _PlanOverride(BaseModel):
- description: Optional[str] = None
- flags: Optional[Dict[str, bool]] = None
- counters: Optional[Dict[str, Quota]] = None
- gauges: Optional[Dict[str, Quota]] = None
- throttles: Optional[List[Throttle]] = None
-
- model_config = ConfigDict(extra="forbid")
-
-
-class _RoleOverride(BaseModel):
- role: str
- description: Optional[str] = None
- permissions: List[str]
-
- model_config = ConfigDict(extra="forbid")
-
-
-# ---------------------------------------------------------------------------
-# Plan entitlements + descriptions
-# ---------------------------------------------------------------------------
-
-# Effective state is a dict[plan_slug, plan_entry] where plan_entry has the same
-# shape as DEFAULT_ENTITLEMENTS values (Tracker -> mapping) plus an optional
-# "description" key in the top-level plan entry's own description map.
-
-_DEFAULT_PLAN_DESCRIPTIONS: Dict[str, str] = {}
-
-
-def _default_plans() -> Dict[str, Dict[Tracker, Any]]:
- # Keys in DEFAULT_ENTITLEMENTS are `DefaultPlan` (str, Enum) members.
- # Coerce to plain strings so the runtime plan map is uniformly keyed by slug.
- return {str(plan.value): entry for plan, entry in DEFAULT_ENTITLEMENTS.items()}
-
-
-def _validate_flag_key(key: str) -> Flag:
- try:
- return Flag(key)
- except ValueError as e:
- raise ValueError(f"Unknown flag '{key}'") from e
-
-
-def _validate_counter_key(key: str) -> Counter:
- try:
- return Counter(key)
- except ValueError as e:
- raise ValueError(f"Unknown counter '{key}'") from e
-
-
-def _validate_gauge_key(key: str) -> Gauge:
- try:
- return Gauge(key)
- except ValueError as e:
- raise ValueError(f"Unknown gauge '{key}'") from e
-
-
-def _parse_plans_override(
- decoded: Any,
-) -> tuple[Dict[str, Dict[Tracker, Any]], Dict[str, str]]:
- if not isinstance(decoded, dict) or not decoded:
- raise ValueError("AGENTA_ACCESS_PLANS must be a non-empty JSON object")
-
- plans: Dict[str, Dict[Tracker, Any]] = {}
- descriptions: Dict[str, str] = {}
-
- for slug, payload in decoded.items():
- if not slug or not isinstance(slug, str):
- raise ValueError(f"Invalid plan slug '{slug}' in AGENTA_ACCESS_PLANS")
-
- try:
- override = _PlanOverride.model_validate(payload)
- except ValidationError as e:
- raise ValueError(
- f"Invalid plan override for '{slug}' in AGENTA_ACCESS_PLANS: {e}"
- ) from e
-
- plan_entry: Dict[Tracker, Any] = {}
-
- if override.flags is not None:
- plan_entry[Tracker.FLAGS] = {
- _validate_flag_key(k): bool(v) for k, v in override.flags.items()
- }
-
- if override.counters is not None:
- plan_entry[Tracker.COUNTERS] = {
- _validate_counter_key(k): v for k, v in override.counters.items()
- }
-
- if override.gauges is not None:
- plan_entry[Tracker.GAUGES] = {
- _validate_gauge_key(k): v for k, v in override.gauges.items()
- }
-
- if override.throttles is not None:
- plan_entry[Tracker.THROTTLES] = list(override.throttles)
-
- # Plans with only a description are allowed — they represent custom /
- # display-only plans (e.g. self-hosted Enterprise) that don't enforce
- # quotas server-side. Downstream consumers must handle the empty
- # entitlement map gracefully (e.g. `fetch_usage` returns no rows).
- plans[slug] = plan_entry
-
- if override.description:
- descriptions[slug] = override.description
-
- return plans, descriptions
-
-
-# ---------------------------------------------------------------------------
-# Role catalogs (scoped)
-# ---------------------------------------------------------------------------
-#
-# Minima contract: every scope MUST expose `owner` and `viewer` with code-
-# defined permissions. Env overrides may add roles or customize permissions
-# of non-minima roles, but the minima are always present and their slugs
-# cannot be re-bound to a different permission set.
-
-
-def _read_only_permissions() -> List[str]:
- """Read-only permission set sourced from the code-default `WorkspaceRole.VIEWER`.
-
- Used as the `viewer` minima permissions for the `workspace` and `project`
- scopes where permissions are actually enforced. Organization-scope `viewer`
- has no permissions (it's just a membership marker today).
- """
- return [p.value for p in Permission.default_permissions(WorkspaceRole.VIEWER)]
-
-
-def _viewer_permissions_for_scope(scope: str) -> List[str]:
- """Per-scope code-default permissions for the `viewer` minima role.
-
- - `organization`: empty — orgs have no permission concept today.
- - `workspace` and `project`: the code-default `WorkspaceRole.VIEWER` read-only set.
- """
- if scope == "organization":
- return []
- return _read_only_permissions()
-
-
-def _minima_for(scope: str) -> List[Dict[str, Any]]:
- """Return the required role entries for a scope (owner + viewer).
-
- Application code relies on these slugs being present in every scope; the
- builder synthesizes them up front and re-applies them after any env
- overrides so they can never be dropped or relabeled.
-
- The permission set for `viewer` varies per scope (see
- `_viewer_permissions_for_scope`); `owner` is always wildcard.
- """
- return [
- {
- "role": DefaultRole.OWNER.value,
- "description": "Full access (wildcard permissions).",
- "permissions": list(OWNER_PERMISSIONS),
- },
- {
- "role": DefaultRole.VIEWER.value,
- "description": (
- "Membership marker (no permissions)."
- if scope == "organization"
- else "Read-only access."
- ),
- "permissions": _viewer_permissions_for_scope(scope),
- },
- ]
-
-
-def _default_roles() -> Dict[str, List[Dict[str, Any]]]:
- """Return the code-default role catalog for each scope.
-
- Workspace and project scopes expose the code-default `WorkspaceRole`
- entries on top of the minima — project membership stores the same role
- slugs (`admin`/`developer`/`editor`/`annotator`), and the runtime
- permission check resolves them through this map. Organization scope
- only gets the minima today; new roles can be added per-scope via
- `AGENTA_ACCESS_ROLES`.
- """
- default_extras: List[Dict[str, Any]] = []
- minima_slugs = {DefaultRole.OWNER.value, DefaultRole.VIEWER.value}
- for role in WorkspaceRole:
- if role.value in minima_slugs:
- continue
- default_extras.append(
- {
- "role": role.value,
- "description": WorkspaceRole.get_description(role),
- "permissions": [p.value for p in Permission.default_permissions(role)],
- }
- )
-
- return {
- "organization": _minima_for("organization"),
- "workspace": _minima_for("workspace") + default_extras,
- "project": _minima_for("project") + default_extras,
- }
-
-
-def _validate_permission(slug: str) -> str:
- if slug == "*":
- return slug
- try:
- Permission(slug)
- except ValueError as e:
- raise ValueError(f"Unknown permission '{slug}'") from e
- return slug
-
-
-def _parse_roles_override(decoded: Any) -> Dict[str, List[Dict[str, Any]]]:
- """Parse `AGENTA_ACCESS_ROLES` and merge with scope minima.
-
- Schema is `{scope: [role, ...]}` where scope is one of `organization`,
- `workspace`, `project`. Missing scopes fall back to the code-default
- minima for that scope. Within an overridden scope:
-
- - `owner` and `viewer` are reserved slugs; if present, they're rejected
- with a clear error so application invariants stay intact. The minima
- for that scope are re-applied after parsing.
- - Other roles are validated (known permissions, no duplicates) and
- appended to the minima list.
-
- Empty `{}` or an empty per-scope list is rejected.
- """
- if not isinstance(decoded, dict) or not decoded:
- raise ValueError("AGENTA_ACCESS_ROLES must be a non-empty JSON object")
-
- # Start with code-default catalogs for every scope. Overrides only mutate
- # the scopes they specify; non-overridden scopes keep their full code
- # defaults (e.g. workspace's admin/developer/editor/annotator stay even
- # when only `project` is overridden).
- result: Dict[str, List[Dict[str, Any]]] = _default_roles()
-
- reserved = {DefaultRole.OWNER.value, DefaultRole.VIEWER.value}
-
- for scope, roles in decoded.items():
- if scope not in SCOPES:
- raise ValueError(
- f"Unknown role scope '{scope}' in AGENTA_ACCESS_ROLES "
- f"(allowed: {list(SCOPES)})"
- )
-
- if not isinstance(roles, list) or not roles:
- raise ValueError(
- f"AGENTA_ACCESS_ROLES['{scope}'] must be a non-empty list of roles"
- )
-
- extras: List[Dict[str, Any]] = []
- seen: set[str] = set()
- for entry in roles:
- try:
- role = _RoleOverride.model_validate(entry)
- except ValidationError as e:
- raise ValueError(
- f"Invalid role override under scope '{scope}': {e}"
- ) from e
-
- slug = role.role
- if not slug:
- raise ValueError(f"Empty role slug under scope '{scope}'")
- if slug in reserved:
- raise ValueError(
- f"AGENTA_ACCESS_ROLES['{scope}'] cannot redefine reserved "
- f"role '{slug}'; minima are always synthesized by the platform"
- )
- if slug in seen:
- raise ValueError(f"Duplicate role slug '{slug}' under scope '{scope}'")
- seen.add(slug)
-
- permissions = [_validate_permission(p) for p in role.permissions]
-
- extras.append(
- {
- "role": slug,
- "description": role.description,
- "permissions": permissions,
- }
- )
-
- # Minima first, then validated extras.
- result[scope] = _minima_for(scope) + extras
-
- # TEMP: workspace and project use the same role set at runtime (the only
- # caller of `workspace`-scope roles today is the Invite Members modal,
- # which is really inviting to the underlying project). Operators almost
- # always override only `project` via AGENTA_ACCESS_ROLES; without this
- # mirror, custom roles silently disappear from the workspace catalog.
- # Remove once the workspace/project scope split is reconciled.
- if "project" in decoded and "workspace" not in decoded:
- project_extras = [
- entry
- for entry in result["project"]
- if entry["role"] not in {DefaultRole.OWNER.value, DefaultRole.VIEWER.value}
- ]
- result["workspace"] = _minima_for("workspace") + project_extras
-
- return result
-
-
-# ---------------------------------------------------------------------------
-# Roles overlay
-# ---------------------------------------------------------------------------
-#
-# `AGENTA_ACCESS_ROLES_OVERLAY` lets operators tweak individual fields on
-# existing default roles (`admin`, `developer`, `editor`, `annotator`) — or
-# add new roles — without restating the whole scope catalog the way
-# `AGENTA_ACCESS_ROLES` requires.
-#
-# The overlay accepts two shapes:
-#
-# - Project-focused shortcut (preferred for the common case):
-# {: , ...}
-# The whole dict is interpreted as project-level role patches. The scope
-# names (`organization`, `workspace`, `project`) are reserved and cannot
-# be used as role slugs in this form.
-#
-# - Full form, scoped:
-# {"project": {: , ...}}
-# Triggered when any of `organization`/`workspace`/`project` appears at
-# the root. Today only `project` is supported; `organization` and
-# `workspace` are rejected — silent ignore would mislead operators.
-#
-# In both shapes the patch is applied to both the `workspace` and `project`
-# scopes because the two scopes share the same role set in the code defaults.
-#
-# Merge semantics per role slug:
-# - role exists in the scope: per-field replace (`permissions` and/or
-# `description`).
-# - role does not exist: append as a new role (must include both
-# `description` and `permissions`).
-# - `owner` and `viewer` minima cannot be patched (platform-managed).
-
-
-class _RoleOverlayEntry(BaseModel):
- """Partial role update. ``permissions`` and ``description`` are both
- optional; whatever is set replaces the matching field on the existing
- role entry. To add a new role both fields must be supplied — that
- constraint is enforced in :func:`_apply_roles_overlay`.
- """
-
- description: Optional[str] = None
- permissions: Optional[List[str]] = None
-
- model_config = ConfigDict(extra="forbid")
-
-
-def _parse_roles_overlay(decoded: Any) -> Dict[str, _RoleOverlayEntry]:
- """Parse `AGENTA_ACCESS_ROLES_OVERLAY` and return per-slug entries.
-
- Two accepted payload shapes:
-
- 1. Project-focused shortcut — ``{: }``. Used when none
- of the scope keys (``organization``, ``workspace``, ``project``) appear
- at the root; the payload is interpreted as project-level role patches.
- The scope names are therefore reserved and cannot be used as role slugs.
-
- 2. Full (scoped) form — ``{"project": {: }}``. Triggered
- when any of ``organization``, ``workspace``, ``project`` appears at the
- root. Only ``project`` is supported today; ``organization`` and
- ``workspace`` are rejected.
-
- The result is the inner ``{: }`` dict; the caller decides
- which scopes the patch applies to.
- """
- if not isinstance(decoded, dict) or not decoded:
- raise ValueError("AGENTA_ACCESS_ROLES_OVERLAY must be a non-empty JSON object")
-
- scope_keys = {"organization", "workspace", "project"}
-
- if scope_keys & set(decoded.keys()):
- # Full parse: at least one scope key at root.
- unsupported = (set(decoded.keys()) & scope_keys) - {"project"}
- if unsupported:
- raise ValueError(
- f"AGENTA_ACCESS_ROLES_OVERLAY only supports the 'project' scope "
- f"today (got: {sorted(unsupported)}). The patch is applied to "
- "both workspace and project."
- )
- unknown = set(decoded.keys()) - scope_keys
- if unknown:
- raise ValueError(
- f"AGENTA_ACCESS_ROLES_OVERLAY mixes scope keys with non-scope "
- f"keys at the root ({sorted(unknown)}). Either use the "
- "project-focused shortcut (no scope keys, role slugs at the "
- "root) or the full form ({'project': {...}})."
- )
- project_payload = decoded.get("project")
- if not isinstance(project_payload, dict) or not project_payload:
- raise ValueError(
- "AGENTA_ACCESS_ROLES_OVERLAY['project'] must be a non-empty "
- "JSON object keyed by role slug"
- )
- else:
- # Project-focused shortcut: top-level dict is keyed by role slug.
- project_payload = decoded
-
- reserved = {DefaultRole.OWNER.value, DefaultRole.VIEWER.value}
- entries: Dict[str, _RoleOverlayEntry] = {}
- for slug, patch in project_payload.items():
- if not slug or not isinstance(slug, str):
- raise ValueError(
- f"Invalid role slug '{slug}' in AGENTA_ACCESS_ROLES_OVERLAY"
- )
- if slug in reserved:
- raise ValueError(
- f"AGENTA_ACCESS_ROLES_OVERLAY cannot patch reserved role "
- f"'{slug}'; minima are platform-managed"
- )
- try:
- entry = _RoleOverlayEntry.model_validate(patch)
- except ValidationError as e:
- raise ValueError(
- f"Invalid AGENTA_ACCESS_ROLES_OVERLAY['project']['{slug}']: {e}"
- ) from e
- if entry.permissions is not None:
- for perm in entry.permissions:
- _validate_permission(perm)
- entries[slug] = entry
-
- return entries
-
-
-def _apply_roles_overlay(
- roles: Dict[str, List[Dict[str, Any]]],
- overlay: Dict[str, _RoleOverlayEntry],
-) -> Dict[str, List[Dict[str, Any]]]:
- """Apply the parsed overlay to the workspace and project scopes.
-
- Returns a new dict; the input is not mutated. New roles (where the
- slug doesn't already exist on the scope) require both ``description``
- and ``permissions``.
- """
- result = {scope: [dict(entry) for entry in roles[scope]] for scope in roles}
-
- for scope_name in ("workspace", "project"):
- scope_entries = result[scope_name]
- by_slug = {entry["role"]: idx for idx, entry in enumerate(scope_entries)}
-
- for slug, patch in overlay.items():
- if slug in by_slug:
- # Patch existing role: per-field replace.
- idx = by_slug[slug]
- if patch.description is not None:
- scope_entries[idx]["description"] = patch.description
- if patch.permissions is not None:
- scope_entries[idx]["permissions"] = list(patch.permissions)
- else:
- # New role: both fields must be present.
- if patch.permissions is None:
- raise ValueError(
- f"AGENTA_ACCESS_ROLES_OVERLAY['project']['{slug}']: "
- f"new role requires 'permissions' (scope '{scope_name}' "
- "has no existing role with this slug to patch)"
- )
- scope_entries.append(
- {
- "role": slug,
- "description": patch.description,
- "permissions": list(patch.permissions),
- }
- )
-
- return result
-
-
-# ---------------------------------------------------------------------------
-# Default-plan overlay
-# ---------------------------------------------------------------------------
-#
-# `AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY` lets self-hosted operators tweak individual
-# entitlement values on the default plan without restating the entire plan in
-# `AGENTA_ACCESS_PLANS`. Common cases: bumping trace retention, raising the
-# standard-throttle rate, flipping a flag.
-#
-# Shape mirrors a plan entry (same keys, same units) with one divergence:
-# `throttles` is a map keyed by category slug instead of a list, so per-
-# category patches don't require restating the whole list. Throttles that
-# combine multiple categories or use `endpoints` cannot be addressed via the
-# overlay — operators who need that should use `AGENTA_ACCESS_PLANS`.
-
-
-class _ThrottleOverlay(BaseModel):
- """Partial throttle update keyed by a single category.
-
- Every field is optional; only fields explicitly set on the overlay
- replace the matching field on the existing throttle entry.
- """
-
- bucket: Optional[Dict[str, Any]] = None
- mode: Optional[str] = None
-
- model_config = ConfigDict(extra="forbid")
-
-
-class _DefaultPlanOverlay(BaseModel):
- """Partial overlay for the default plan. Same shape as `_PlanOverride`
- except `throttles` is a map keyed by category slug."""
-
- description: Optional[str] = None
- flags: Optional[Dict[str, bool]] = None
- counters: Optional[Dict[str, Dict[str, Any]]] = None
- gauges: Optional[Dict[str, Dict[str, Any]]] = None
- throttles: Optional[Dict[str, _ThrottleOverlay]] = None
-
- model_config = ConfigDict(extra="forbid")
-
-
-def _merge_quota(existing: Optional[Quota], patch: Dict[str, Any]) -> Quota:
- """Patch a Quota field-by-field, preserving fields the overlay didn't set."""
- if existing is None:
- # Patching an entitlement key that isn't defined on the base plan:
- # treat the overlay as the full definition.
- return Quota.model_validate(patch)
- merged = existing.model_dump()
- merged.update(patch)
- return Quota.model_validate(merged)
-
-
-def _merge_throttle(existing: Throttle, patch: _ThrottleOverlay) -> Throttle:
- """Patch one throttle entry. `bucket` is field-merged; `mode` replaces."""
- base = existing.model_dump()
- if patch.bucket is not None:
- bucket = dict(base.get("bucket") or {})
- bucket.update(patch.bucket)
- base["bucket"] = bucket
- if patch.mode is not None:
- base["mode"] = patch.mode
- return Throttle.model_validate(base)
-
-
-def _parse_default_plan_overlay(decoded: Any) -> _DefaultPlanOverlay:
- if not isinstance(decoded, dict) or not decoded:
- raise ValueError(
- "AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY must be a non-empty JSON object"
- )
- try:
- overlay = _DefaultPlanOverlay.model_validate(decoded)
- except ValidationError as e:
- raise ValueError(f"Invalid AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY: {e}") from e
-
- # Validate slugs upfront so the error message points at the bad key
- # rather than failing inside the merge.
- if overlay.flags is not None:
- for key in overlay.flags:
- _validate_flag_key(key)
- if overlay.counters is not None:
- for key in overlay.counters:
- _validate_counter_key(key)
- if overlay.gauges is not None:
- for key in overlay.gauges:
- _validate_gauge_key(key)
- if overlay.throttles is not None:
- valid_categories = {c.value for c in Category}
- for key in overlay.throttles:
- if key not in valid_categories:
- raise ValueError(
- f"AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY.throttles['{key}'] is not a "
- f"valid throttle category. Allowed: {sorted(valid_categories)}."
- )
- return overlay
-
-
-def _apply_default_plan_overlay(
- plans: Dict[str, Dict[Tracker, Any]],
- descriptions: Dict[str, str],
- overlay: _DefaultPlanOverlay,
- default_plan_slug: str,
-) -> tuple[Dict[str, Dict[Tracker, Any]], Dict[str, str]]:
- """Apply the overlay to the resolved default plan in-place (returning new dicts)."""
- if default_plan_slug not in plans:
- raise ValueError(
- f"AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY targets the default plan "
- f"'{default_plan_slug}', which is not in the effective plan set "
- f"({sorted(plans.keys())}). Add the slug to AGENTA_ACCESS_PLANS or "
- "unset AGENTA_DEFAULT_PLAN."
- )
-
- plans = {slug: dict(entry) for slug, entry in plans.items()}
- descriptions = dict(descriptions)
- entry = plans[default_plan_slug]
-
- if overlay.description is not None:
- descriptions[default_plan_slug] = overlay.description
-
- if overlay.flags is not None:
- flags = dict(entry.get(Tracker.FLAGS) or {})
- for key, value in overlay.flags.items():
- flags[Flag(key)] = bool(value)
- entry[Tracker.FLAGS] = flags
-
- if overlay.counters is not None:
- counters = dict(entry.get(Tracker.COUNTERS) or {})
- for key, patch in overlay.counters.items():
- counter = Counter(key)
- counters[counter] = _merge_quota(counters.get(counter), patch)
- entry[Tracker.COUNTERS] = counters
-
- if overlay.gauges is not None:
- gauges = dict(entry.get(Tracker.GAUGES) or {})
- for key, patch in overlay.gauges.items():
- gauge = Gauge(key)
- gauges[gauge] = _merge_quota(gauges.get(gauge), patch)
- entry[Tracker.GAUGES] = gauges
-
- if overlay.throttles is not None:
- existing_throttles = list(entry.get(Tracker.THROTTLES) or [])
-
- for category_key, patch in overlay.throttles.items():
- category = Category(category_key)
- # Find the single-category throttle entry that matches.
- target_idx = next(
- (
- idx
- for idx, t in enumerate(existing_throttles)
- if t.categories
- and len(t.categories) == 1
- and t.categories[0] == category
- ),
- None,
- )
- if target_idx is None:
- raise ValueError(
- f"AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY.throttles['{category_key}']: "
- f"the default plan '{default_plan_slug}' has no single-"
- f"category throttle entry for '{category_key}'. Use "
- "AGENTA_ACCESS_PLANS to define multi-category or endpoint-"
- "keyed throttles."
- )
- existing_throttles[target_idx] = _merge_throttle(
- existing_throttles[target_idx], patch
- )
- entry[Tracker.THROTTLES] = existing_throttles
-
- plans[default_plan_slug] = entry
- return plans, descriptions
-
-
-def _resolve_default_plan_slug(plans: Dict[str, Dict[Tracker, Any]]) -> str:
- """Resolve the default plan slug for overlay targeting.
-
- Mirrors `subscriptions.types.get_default_plan()` without importing it (to
- avoid pulling subscription/Stripe code into the access-controls layer).
- """
- raw = env.agenta.access.default_plan
- if raw:
- return raw
- if env.stripe.enabled:
- return DefaultPlan.CLOUD_V0_HOBBY.value
- return DefaultPlan.SELF_HOSTED_ENTERPRISE.value
-
-
-# ---------------------------------------------------------------------------
-# Effective controls (built once at import time)
-# ---------------------------------------------------------------------------
-
-
-def _build_controls() -> tuple[
- Dict[str, Dict[Tracker, Any]],
- Dict[str, str],
- Dict[str, List[Dict[str, Any]]],
- str,
-]:
- plans_payload = env.agenta.access.plans
- roles_payload = env.agenta.access.roles
- roles_overlay_payload = env.agenta.access.roles_overlay
- plan_overlay_payload = env.agenta.access.default_plan_overlay
-
- if plans_payload is not None:
- plans, descriptions = _parse_plans_override(plans_payload)
- plans_source = "env"
- else:
- plans = _default_plans()
- descriptions = dict(_DEFAULT_PLAN_DESCRIPTIONS)
- plans_source = "defaults"
-
- plan_overlay_source = "none"
- if plan_overlay_payload is not None:
- plan_overlay = _parse_default_plan_overlay(plan_overlay_payload)
- default_plan_slug = _resolve_default_plan_slug(plans)
- plans, descriptions = _apply_default_plan_overlay(
- plans, descriptions, plan_overlay, default_plan_slug
- )
- plan_overlay_source = f"env→{default_plan_slug}"
-
- if roles_payload is not None:
- roles = _parse_roles_override(roles_payload)
- roles_source = "env"
- else:
- roles = _default_roles()
- roles_source = "defaults"
-
- roles_overlay_source = "none"
- if roles_overlay_payload is not None:
- roles_overlay = _parse_roles_overlay(roles_overlay_payload)
- roles = _apply_roles_overlay(roles, roles_overlay)
- roles_overlay_source = "env"
-
- payload = dumps(
- {
- "plans": sorted(plans.keys()),
- "descriptions": descriptions,
- "roles": {scope: [r["role"] for r in roles[scope]] for scope in SCOPES},
- },
- sort_keys=True,
- default=str,
- )
- controls_hash = hashlib.sha256(payload.encode()).hexdigest()[:12]
-
- log.info(
- "[access-controls] plans=%s roles=%s plan_overlay=%s roles_overlay=%s hash=%s",
- plans_source,
- roles_source,
- plan_overlay_source,
- roles_overlay_source,
- controls_hash,
- )
-
- return plans, descriptions, roles, controls_hash
-
-
-_PLANS, _PLAN_DESCRIPTIONS, _ROLES, _CONTROLS_HASH = _build_controls()
-
-
-# ---------------------------------------------------------------------------
-# Public accessors
-# ---------------------------------------------------------------------------
-
-
-def get_plans() -> Dict[str, Dict[Tracker, Any]]:
- """Return the effective plan map (slug -> entitlement controls)."""
- return _PLANS
-
-
-def get_plan(slug: Optional[str]) -> Optional[Dict[Tracker, Any]]:
- """Return the entitlement controls for a plan slug, or None if missing."""
- if not slug:
- return None
- return _PLANS.get(slug)
-
-
-def get_plan_entitlements(slug: Optional[str]) -> Optional[Dict[Tracker, Any]]:
- """Alias for `get_plan`. Kept distinct for readability at call sites."""
- if not slug:
- return None
- return _PLANS.get(slug)
-
-
-def get_plan_description(slug: Optional[str]) -> Optional[str]:
- """Return the operator-facing description for a plan, if any."""
- if not slug:
- return None
- return _PLAN_DESCRIPTIONS.get(slug)
-
-
-def get_roles(scope: str) -> List[Dict[str, Any]]:
- """Return the effective role catalog for a scope."""
- if scope not in SCOPES:
- return []
- return _ROLES[scope]
-
-
-def get_role(scope: str, slug: str) -> Optional[Dict[str, Any]]:
- """Return a single role entry within a scope."""
- for entry in get_roles(scope):
- if entry["role"] == slug:
- return entry
- return None
-
-
-def get_role_permissions(scope: str, slug: str) -> List[str]:
- """Return the permission slugs for a role within a scope."""
- role = get_role(scope, slug)
- if not role:
- return []
- return list(role["permissions"])
-
-
-def get_role_description(scope: str, slug: str) -> Optional[str]:
- role = get_role(scope, slug)
- if not role:
- return None
- return role.get("description")
-
-
-def get_controls_hash() -> str:
- """Stable short hash of the effective controls; useful in logs."""
- return _CONTROLS_HASH
diff --git a/api/ee/src/core/entitlements/service.py b/api/ee/src/core/entitlements/service.py
deleted file mode 100644
index 5cff086467..0000000000
--- a/api/ee/src/core/entitlements/service.py
+++ /dev/null
@@ -1,98 +0,0 @@
-from typing import Optional, Dict, List
-
-from ee.src.core.entitlements.types import (
- Tracker,
- Constraint,
- CONSTRAINTS,
-)
-from ee.src.core.entitlements.types import Quota, Gauge
-from ee.src.core.entitlements.controls import get_plan_entitlements
-from ee.src.core.meters.service import MetersService
-from ee.src.core.meters.types import MeterDTO
-
-
-class ConstaintsException(Exception):
- issues: Dict[Gauge, int] = {}
-
-
-class EntitlementsService:
- def __init__(
- self,
- meters_service: MetersService,
- ):
- self.meters_service = meters_service
-
- async def enforce(
- self,
- *,
- organization_id: str,
- plan: str,
- force: Optional[bool] = False,
- ) -> None:
- issues = await self.check(
- organization_id=organization_id,
- plan=plan,
- )
-
- if issues:
- if not force:
- raise ConstaintsException(
- issues=issues,
- )
-
- await self.fix(
- organization_id=organization_id,
- issues=issues,
- )
-
- async def check(
- self,
- *,
- organization_id: str,
- plan: str,
- ) -> Dict[Gauge, int]:
- issues = {}
-
- entitlements = get_plan_entitlements(plan) or {}
-
- for key in CONSTRAINTS[Constraint.BLOCKED][Tracker.GAUGES]:
- quotas: List[Quota] = entitlements.get(Tracker.GAUGES) or {}
-
- if key in quotas:
- meter = MeterDTO(
- organization_id=organization_id,
- key=key,
- )
- quota: Quota = quotas[key]
-
- check, meter = await self.meters_service.check(
- meter=meter,
- quota=quota,
- )
-
- if not check:
- issues[key] = quota.limit
-
- return issues
-
- async def fix(
- self,
- *,
- organization_id: str,
- issues: Dict[Gauge, int],
- ) -> None:
- # TODO: Implement fix
- pass
-
-
-# TODO:
-# -- P0 / MUST
-# - Add active : Optional[bool] = None to all scopes and users
-# -- P1 / SHOULD
-# - Add parent scopes to all child scope
-# - Add parent scopes membership on child scope membership creation
-# - Remove children scopes membership on parent scope membership removal
-# -- P2 / COULD
-# - Add created_at / updated_at to all scopes
-# - Set updated_at on all updates + on creation
-# - Move organization roles to memberships
diff --git a/api/ee/src/core/events/service.py b/api/ee/src/core/events/service.py
index eef6d17e47..b52b292c20 100644
--- a/api/ee/src/core/events/service.py
+++ b/api/ee/src/core/events/service.py
@@ -13,8 +13,8 @@
from oss.src.utils.logging import get_module_logger
-from ee.src.core.entitlements.types import Tracker, Counter
-from ee.src.core.entitlements.controls import get_plans
+from ee.src.core.access.entitlements.types import Tracker, Counter
+from ee.src.core.access.controls import get_plans
from ee.src.dbs.postgres.events.dao import EventsRetentionDAO
diff --git a/api/ee/src/core/meters/interfaces.py b/api/ee/src/core/meters/interfaces.py
index 924aafff92..52a46de4b4 100644
--- a/api/ee/src/core/meters/interfaces.py
+++ b/api/ee/src/core/meters/interfaces.py
@@ -1,6 +1,6 @@
from typing import Tuple, Callable, Optional
-from ee.src.core.entitlements.types import Quota
+from ee.src.core.access.entitlements.types import Quota
from ee.src.core.meters.types import MeterDTO, MeterScope, MeterPeriod, Meters
diff --git a/api/ee/src/core/meters/service.py b/api/ee/src/core/meters/service.py
index 8d6d9588d5..9a76add021 100644
--- a/api/ee/src/core/meters/service.py
+++ b/api/ee/src/core/meters/service.py
@@ -1,13 +1,11 @@
from typing import Awaitable, Tuple, Callable, List, Optional
from uuid import uuid4
-import stripe
-
from oss.src.utils.logging import get_module_logger
-from oss.src.utils.env import env
+from oss.src.utils.lazy import _load_stripe
-from ee.src.core.entitlements.types import Quota
-from ee.src.core.entitlements.types import Counter, Gauge, REPORTS, STRIPE_METER_NAMES
+from ee.src.core.access.entitlements.types import Quota
+from ee.src.core.access.entitlements.types import Counter, Gauge, REPORTS
from ee.src.core.subscriptions.settings import get_stripe_meter_price
from ee.src.core.meters.types import MeterDTO, MeterScope, MeterPeriod, Meters
from ee.src.core.meters.interfaces import MetersDAOInterface
@@ -22,13 +20,6 @@
_GAUGE_SLUGS: frozenset[str] = frozenset(g.value for g in Gauge)
_COUNTER_SLUGS: frozenset[str] = frozenset(c.value for c in Counter)
-# Initialize Stripe only if enabled
-if env.stripe.enabled:
- stripe.api_key = env.stripe.api_key
- log.info("✓ Stripe enabled:", target=env.stripe.webhook_target)
-else:
- log.info("✗ Stripe disabled")
-
class MetersService:
def __init__(
@@ -85,8 +76,9 @@ async def report(
self,
renew: Optional[Callable[[], Awaitable[bool]]] = None,
):
- if not env.stripe.enabled:
- log.warn("✗ Stripe disabled")
+ stripe = _load_stripe()
+ if stripe is None:
+ log.warn("✗ Stripe unavailable")
return
log.info("[report] ============================================")
@@ -177,8 +169,8 @@ async def report(
if meter.key.value in _GAUGE_SLUGS:
try:
- stripe_meter_name = STRIPE_METER_NAMES.get(meter.key.value)
- if not stripe_meter_name:
+ meter_name = REPORTS.get(meter.key.value)
+ if not meter_name:
log.warn(
f"[report] Skipping meter {meter.organization_id}/{meter.key} - no Stripe meter mapping"
)
@@ -188,7 +180,7 @@ async def report(
price_id = get_stripe_meter_price(
meter.subscription.plan,
- stripe_meter_name,
+ meter_name,
)
if not price_id:
@@ -256,7 +248,7 @@ async def report(
if meter.key.value in _COUNTER_SLUGS:
try:
- event_name = STRIPE_METER_NAMES.get(meter.key.value)
+ event_name = REPORTS.get(meter.key.value)
if not event_name:
log.warn(
f"[report] Skipping meter {meter.organization_id}/{meter.key} - no Stripe meter mapping"
diff --git a/api/ee/src/core/meters/types.py b/api/ee/src/core/meters/types.py
index 3b9cbc8f04..aa228d54c1 100644
--- a/api/ee/src/core/meters/types.py
+++ b/api/ee/src/core/meters/types.py
@@ -8,7 +8,7 @@
from oss.src.utils.logging import get_module_logger
-from ee.src.core.entitlements.types import Counter, Gauge
+from ee.src.core.access.entitlements.types import Counter, Gauge
from ee.src.core.subscriptions.types import SubscriptionDTO
diff --git a/api/ee/src/core/subscriptions/service.py b/api/ee/src/core/subscriptions/service.py
index 75edaf313f..bd240397ca 100644
--- a/api/ee/src/core/subscriptions/service.py
+++ b/api/ee/src/core/subscriptions/service.py
@@ -2,12 +2,10 @@
from uuid import getnode
from datetime import datetime, timezone, timedelta
-
-import stripe
-
from oss.src.utils.logging import get_module_logger
from oss.src.utils.env import env
from oss.src.utils.caching import invalidate_cache
+from oss.src.utils.lazy import _load_stripe
from ee.src.core.subscriptions.types import (
SubscriptionDTO,
@@ -23,18 +21,9 @@
trial_enabled,
)
from ee.src.core.subscriptions.interfaces import SubscriptionsDAOInterface
-from ee.src.core.entitlements.service import EntitlementsService
-from ee.src.core.meters.service import MetersService
log = get_module_logger(__name__)
-# Initialize Stripe only if enabled
-if env.stripe.enabled:
- stripe.api_key = env.stripe.api_key
- log.info("✓ Stripe enabled:", target=env.stripe.webhook_target)
-else:
- log.info("✗ Stripe disabled")
-
MAC_ADDRESS = ":".join(f"{(getnode() >> ele) & 0xFF:02x}" for ele in range(40, -1, -8))
@@ -50,11 +39,8 @@ class SubscriptionsService:
def __init__(
self,
subscriptions_dao: SubscriptionsDAOInterface,
- meters_service: MetersService,
):
self.subscriptions_dao = subscriptions_dao
- self.meters_service = meters_service
- self.entitlements_service = EntitlementsService(meters_service=meters_service)
async def create(
self,
@@ -84,8 +70,9 @@ async def start_reverse_trial(
organization_name: str,
organization_email: str,
) -> Optional[SubscriptionDTO]:
- if not env.stripe.enabled:
- raise EventException("Reverse trial requires Stripe to be enabled")
+ stripe = _load_stripe()
+ if stripe is None:
+ raise EventException("Reverse trial requires Stripe to be available")
if not trial_enabled():
raise EventException(
@@ -299,9 +286,10 @@ async def process_event(
subscription = await self.update(subscription=subscription)
elif subscription.plan != free_plan and event == Event.SUBSCRIPTION_SWITCHED:
- if not env.stripe.enabled:
- log.warn("✗ Stripe disabled")
- return None
+ stripe = _load_stripe()
+ if stripe is None:
+ log.warn("✗ Stripe unavailable")
+ raise EventException("Stripe is not available for plan switching")
if subscription.plan == plan:
log.warn("Subscription already on the plan: %s", plan)
@@ -331,12 +319,6 @@ async def process_event(
subscription.active = True
subscription.plan = plan
- # await self.entitlements_service.enforce(
- # organization_id=organization_id,
- # plan=plan,
- # force=force,
- # )
-
stripe.Subscription.modify(
subscription.subscription_id,
items=[
@@ -356,12 +338,6 @@ async def process_event(
subscription.subscription_id = None
subscription.anchor = anchor
- # await self.entitlements_service.enforce(
- # organization_id=organization_id,
- # plan=free_plan,
- # force=True,
- # )
-
subscription = await self.update(subscription=subscription)
elif subscription.plan == free_plan and event == Event.SUBSCRIPTION_CANCELLED:
diff --git a/api/ee/src/core/subscriptions/settings.py b/api/ee/src/core/subscriptions/settings.py
index 8eec37e230..8c101977ec 100644
--- a/api/ee/src/core/subscriptions/settings.py
+++ b/api/ee/src/core/subscriptions/settings.py
@@ -17,8 +17,8 @@
from oss.src.utils.env import env
from oss.src.utils.logging import get_module_logger
-from ee.src.core.entitlements.controls import get_plans
-from ee.src.core.entitlements.types import (
+from ee.src.core.access.controls import get_plans
+from ee.src.core.access.entitlements.types import (
DEFAULT_CATALOG,
DefaultPlan,
)
@@ -124,7 +124,7 @@ def _normalize_pricing_entry(slug: str, entry: Any) -> Dict[str, Any]:
plus an optional `"quantity"` (default `1` when omitted).
The internal `Counter` / `Gauge` slug → Stripe-side slot name map lives
- in `ee.src.core.entitlements.types.STRIPE_METER_NAMES`. The runtime in
+ in `ee.src.core.access.entitlements.types.REPORTS`. The runtime in
`ee.src.core.meters.service` resolves the internal slug through that
map before looking up the price ID here; that is why the operator's
pricing JSON uses Stripe-side names (matching their Stripe dashboard)
@@ -459,7 +459,7 @@ def get_stripe_meter_price(
`meter` is a **Stripe-side meter slot name** (e.g. `"users"`,
`"traces"`) — the operator-configured identifier on the Stripe dashboard,
not the internal `Counter` / `Gauge` slug. Callers in `meters/service.py`
- resolve the internal slug through `STRIPE_METER_NAMES` before calling
+ resolve the internal slug through `REPORTS` before calling
this. Returns `None` when the plan has no pricing, the meter slot is
absent, or the slot carries no `"price"`.
"""
diff --git a/api/ee/src/core/subscriptions/types.py b/api/ee/src/core/subscriptions/types.py
index 46e330c42a..5033b8e536 100644
--- a/api/ee/src/core/subscriptions/types.py
+++ b/api/ee/src/core/subscriptions/types.py
@@ -7,7 +7,7 @@
from oss.src.utils.env import env
from pydantic import BaseModel
-from ee.src.core.entitlements.types import DefaultPlan
+from ee.src.core.access.entitlements.types import DefaultPlan
class Event(str, Enum):
diff --git a/api/ee/src/core/tracing/service.py b/api/ee/src/core/tracing/service.py
index 3be3aede78..e4ff413a4b 100644
--- a/api/ee/src/core/tracing/service.py
+++ b/api/ee/src/core/tracing/service.py
@@ -2,8 +2,8 @@
from oss.src.utils.logging import get_module_logger
-from ee.src.core.entitlements.types import Tracker, Counter
-from ee.src.core.entitlements.controls import get_plans
+from ee.src.core.access.entitlements.types import Tracker, Counter
+from ee.src.core.access.controls import get_plans
from ee.src.dbs.postgres.tracing.dao import TracingRetentionDAO
diff --git a/api/ee/src/core/workspaces/types.py b/api/ee/src/core/workspaces/types.py
index 4016a564df..3dfa04f9cc 100644
--- a/api/ee/src/core/workspaces/types.py
+++ b/api/ee/src/core/workspaces/types.py
@@ -3,13 +3,13 @@
from pydantic import BaseModel
-from ee.src.models.shared_models import Permission
+from ee.src.core.access.permissions.types import Permission
class WorkspacePermission(BaseModel):
# Role slugs are dynamic (env-overridable via AGENTA_ACCESS_ROLES);
# validation against the effective scope catalog happens at the API
- # boundary via `ee.src.core.entitlements.controls.get_role`.
+ # boundary via `ee.src.core.access.controls.get_role`.
role_name: str
role_description: Optional[str] = None
permissions: Optional[List[Permission]] = None
diff --git a/api/ee/src/dbs/postgres/events/dao.py b/api/ee/src/dbs/postgres/events/dao.py
index b64a8fb486..53d500fa3a 100644
--- a/api/ee/src/dbs/postgres/events/dao.py
+++ b/api/ee/src/dbs/postgres/events/dao.py
@@ -11,7 +11,7 @@
"""
from datetime import datetime
-from typing import List
+from typing import List, Optional
from uuid import UUID
from sqlalchemy import bindparam, delete, func, literal, select, tuple_
@@ -22,7 +22,12 @@
from oss.src.models.db_models import ProjectDB
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ AnalyticsEngine,
+ get_transactions_engine,
+ get_analytics_engine,
+)
from oss.src.dbs.postgres.events.dbes import EventDBE
from ee.src.dbs.postgres.subscriptions.dbes import SubscriptionDBE
@@ -38,6 +43,18 @@ class EventsRetentionDAO:
owns retention only.
"""
+ def __init__(
+ self,
+ transactions_engine: Optional[TransactionsEngine] = None,
+ analytics_engine: Optional[AnalyticsEngine] = None,
+ ):
+ if transactions_engine is None:
+ transactions_engine = get_transactions_engine()
+ if analytics_engine is None:
+ analytics_engine = get_analytics_engine()
+ self.transactions_engine = transactions_engine
+ self.analytics_engine = analytics_engine
+
async def fetch_projects_with_plan(
self,
*,
@@ -46,7 +63,7 @@ async def fetch_projects_with_plan(
max_projects: int,
) -> List[UUID]:
"""Page through projects whose org subscribes to the given plan."""
- async with engine.core_session() as session:
+ async with self.transactions_engine.session() as session:
stmt = (
select(ProjectDB.id)
.select_from(
@@ -87,7 +104,7 @@ async def delete_events_before_cutoff(
if not project_ids:
return 0
- async with engine.tracing_session() as session:
+ async with self.analytics_engine.session() as session:
project_ids_param = bindparam(
"project_ids",
value=project_ids,
diff --git a/api/ee/src/dbs/postgres/meters/dao.py b/api/ee/src/dbs/postgres/meters/dao.py
index 100e8f0f16..26eb462577 100644
--- a/api/ee/src/dbs/postgres/meters/dao.py
+++ b/api/ee/src/dbs/postgres/meters/dao.py
@@ -8,14 +8,17 @@
from oss.src.utils.logging import get_module_logger
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
-from ee.src.core.entitlements.types import Quota
+from ee.src.core.access.entitlements.types import Quota
from ee.src.core.meters.types import MeterDTO, MeterScope, MeterPeriod, Meters
from ee.src.core.subscriptions.types import SubscriptionDTO
from ee.src.core.meters.interfaces import MetersDAOInterface
from ee.src.dbs.postgres.meters.dbes import MeterDBE
-from ee.src.utils.entitlements import period_from
+from ee.src.core.access.entitlements.service import period_from
log = get_module_logger(__name__)
@@ -90,8 +93,10 @@ def _format_meter_for_log(meter: MeterDTO) -> str:
class MetersDAO(MetersDAOInterface):
- def __init__(self):
- pass
+ def __init__(self, engine: TransactionsEngine = None):
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
async def dump(
self,
@@ -99,7 +104,7 @@ async def dump(
) -> list[MeterDTO]:
log.info(f"[report] [dump] Starting (limit={limit or 'none'})")
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
try:
stmt = (
select(MeterDBE)
@@ -252,7 +257,7 @@ async def _bump_commit_chunk(
missing_count = 0
missing_samples: list[str] = []
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
for meter in meters:
stmt = (
update(MeterDBE)
@@ -300,7 +305,7 @@ async def fetch(
pins lifetime/gauge-sentinel rows (`year/month/day IS NULL`). Any
other `MeterPeriod` binds every period dim uniformly.
"""
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(MeterDBE).options(
joinedload(MeterDBE.subscription)
) # NO RISK OF DEADLOCK
@@ -341,7 +346,7 @@ async def check(
) -> Tuple[bool, MeterDTO]:
meter = _normalize_period_on_meter(meter, quota, anchor)
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(MeterDBE).filter_by(
meter_id=meter.meter_id,
) # NO RISK OF DEADLOCK
@@ -458,7 +463,7 @@ async def adjust(
where = where | where_clause
# 4. Build SQL statement (atomic upsert with RETURNING)
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
insert(MeterDBE)
.values(
diff --git a/api/ee/src/dbs/postgres/organizations/dao.py b/api/ee/src/dbs/postgres/organizations/dao.py
index 00658837db..ead881360c 100644
--- a/api/ee/src/dbs/postgres/organizations/dao.py
+++ b/api/ee/src/dbs/postgres/organizations/dao.py
@@ -1,9 +1,13 @@
from typing import Optional, List
+from datetime import datetime, timezone
from sqlalchemy import select, and_
from sqlalchemy.ext.asyncio import AsyncSession
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
from ee.src.dbs.postgres.organizations.dbes import (
OrganizationDomainDBE,
OrganizationProviderDBE,
@@ -18,8 +22,15 @@ class OrganizationDomainsDAO:
2. Without a session (creates own sessions): OrganizationDomainsDAO()
"""
- def __init__(self, session: Optional[AsyncSession] = None):
+ def __init__(
+ self,
+ session: Optional[AsyncSession] = None,
+ engine: Optional[TransactionsEngine] = None,
+ ):
self.session = session
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
async def create(
self,
@@ -54,7 +65,7 @@ async def create(
return domain
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
domain = OrganizationDomainDBE(
organization_id=organization_id,
slug=slug,
@@ -92,7 +103,7 @@ async def get_by_id(
return result.scalars().first()
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
result = await session.execute(
select(OrganizationDomainDBE).where(
and_(
@@ -125,7 +136,7 @@ async def get_by_slug(
return result.scalars().first()
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
result = await session.execute(
select(OrganizationDomainDBE).where(
and_(
@@ -158,7 +169,7 @@ async def get_verified_by_slug(
return result.scalars().first()
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
result = await session.execute(
select(OrganizationDomainDBE).where(
and_(
@@ -186,7 +197,7 @@ async def list_by_organization(
return list(result.scalars().all())
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
result = await session.execute(
select(OrganizationDomainDBE).where(
OrganizationDomainDBE.organization_id == organization_id
@@ -207,9 +218,12 @@ async def update_flags(
"""Update domain flags (e.g., mark as verified)."""
domain = await self.get_by_id(domain_id=domain_id, organization_id="")
+ now = datetime.now(timezone.utc)
+
if self.session:
if domain:
domain.flags = flags
+ domain.updated_at = now
domain.updated_by_id = updated_by_id
await self.session.flush()
@@ -218,13 +232,14 @@ async def update_flags(
return domain
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
if domain:
# Re-attach to new session
domain = await session.get(OrganizationDomainDBE, domain_id)
if domain:
domain.flags = flags
+ domain.updated_at = now
domain.updated_by_id = updated_by_id
await session.commit()
@@ -252,7 +267,7 @@ async def delete(
return False
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
domain = await session.get(OrganizationDomainDBE, domain_id)
if domain:
@@ -272,8 +287,15 @@ class OrganizationProvidersDAO:
2. Without a session (creates own sessions): OrganizationProvidersDAO()
"""
- def __init__(self, session: Optional[AsyncSession] = None):
+ def __init__(
+ self,
+ session: Optional[AsyncSession] = None,
+ engine: Optional[TransactionsEngine] = None,
+ ):
self.session = session
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
async def create(
self,
@@ -311,7 +333,7 @@ async def create(
return provider
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
provider = OrganizationProviderDBE(
organization_id=organization_id,
slug=slug,
@@ -350,7 +372,7 @@ async def get_by_id(
return result.scalars().first()
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
result = await session.execute(
select(OrganizationProviderDBE).where(
and_(
@@ -378,7 +400,7 @@ async def get_by_id_any(
return result.scalars().first()
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
result = await session.execute(
select(OrganizationProviderDBE).where(
OrganizationProviderDBE.id == provider_id
@@ -408,7 +430,7 @@ async def get_by_slug(
return result.scalars().first()
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
result = await session.execute(
select(OrganizationProviderDBE).where(
and_(
@@ -436,7 +458,7 @@ async def list_by_organization(
return list(result.scalars().all())
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
result = await session.execute(
select(OrganizationProviderDBE).where(
OrganizationProviderDBE.organization_id == organization_id
@@ -458,6 +480,8 @@ async def update(
#
) -> Optional[OrganizationProviderDBE]:
"""Update a provider's secret reference or flags."""
+ now = datetime.now(timezone.utc)
+
if self.session:
provider = await self.session.get(OrganizationProviderDBE, provider_id)
@@ -466,6 +490,7 @@ async def update(
provider.secret_id = secret_id
if flags is not None:
provider.flags = flags
+ provider.updated_at = now
if updated_by_id:
provider.updated_by_id = updated_by_id
@@ -475,7 +500,7 @@ async def update(
return provider
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
provider = await session.get(OrganizationProviderDBE, provider_id)
if provider:
@@ -483,6 +508,7 @@ async def update(
provider.secret_id = secret_id
if flags is not None:
provider.flags = flags
+ provider.updated_at = now
if updated_by_id:
provider.updated_by_id = updated_by_id
@@ -511,7 +537,7 @@ async def delete(
return False
else:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
provider = await session.get(OrganizationProviderDBE, provider_id)
if provider:
diff --git a/api/ee/src/dbs/postgres/subscriptions/dao.py b/api/ee/src/dbs/postgres/subscriptions/dao.py
index 93d67dcac4..58f7f26f03 100644
--- a/api/ee/src/dbs/postgres/subscriptions/dao.py
+++ b/api/ee/src/dbs/postgres/subscriptions/dao.py
@@ -5,7 +5,10 @@
from ee.src.core.subscriptions.types import SubscriptionDTO
from ee.src.core.subscriptions.interfaces import SubscriptionsDAOInterface
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
from ee.src.dbs.postgres.subscriptions.dbes import SubscriptionDBE
from ee.src.dbs.postgres.subscriptions.mappings import (
map_dbe_to_dto,
@@ -14,15 +17,17 @@
class SubscriptionsDAO(SubscriptionsDAOInterface):
- def __init__(self):
- pass
+ def __init__(self, engine: TransactionsEngine = None):
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
async def create(
self,
*,
subscription: SubscriptionDTO,
) -> SubscriptionDTO:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
subscription_dbe = map_dto_to_dbe(subscription)
session.add(subscription_dbe)
@@ -38,7 +43,7 @@ async def read(
*,
organization_id: str,
) -> Optional[SubscriptionDTO]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
result = await session.execute(
select(SubscriptionDBE).where(
SubscriptionDBE.organization_id == organization_id,
@@ -59,7 +64,7 @@ async def update(
*,
subscription: SubscriptionDTO,
) -> Optional[SubscriptionDTO]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
result = await session.execute(
select(SubscriptionDBE).where(
SubscriptionDBE.organization_id == subscription.organization_id,
diff --git a/api/ee/src/dbs/postgres/tracing/dao.py b/api/ee/src/dbs/postgres/tracing/dao.py
index 34143a24a1..5f6911912e 100644
--- a/api/ee/src/dbs/postgres/tracing/dao.py
+++ b/api/ee/src/dbs/postgres/tracing/dao.py
@@ -10,7 +10,12 @@
from oss.src.models.db_models import ProjectDB
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ AnalyticsEngine,
+ get_transactions_engine,
+ get_analytics_engine,
+)
from oss.src.dbs.postgres.tracing.dbes import SpanDBE
from ee.src.dbs.postgres.subscriptions.dbes import SubscriptionDBE
@@ -70,6 +75,18 @@
class TracingRetentionDAO:
+ def __init__(
+ self,
+ transactions_engine: TransactionsEngine = None,
+ analytics_engine: AnalyticsEngine = None,
+ ):
+ if transactions_engine is None:
+ transactions_engine = get_transactions_engine()
+ if analytics_engine is None:
+ analytics_engine = get_analytics_engine()
+ self.transactions_engine = transactions_engine
+ self.analytics_engine = analytics_engine
+
# ---------------- #
# Raw-SQL versions
# ---------------- #
@@ -81,7 +98,7 @@ async def _fetch_projects_with_plan(
project_id: Optional[UUID],
max_projects: int,
) -> List[UUID]:
- async with engine.core_session() as session:
+ async with self.transactions_engine.session() as session:
result = await session.execute(
CORE_PROJECTS_PAGE_SQL,
{
@@ -105,7 +122,7 @@ async def _delete_traces_before_cutoff(
if not project_ids:
return (0, 0)
- async with engine.tracing_session() as session:
+ async with self.analytics_engine.session() as session:
result = await session.execute(
TRACING_DELETE_SQL,
{
@@ -135,7 +152,7 @@ async def fetch_projects_with_plan(
project_id: Optional[UUID],
max_projects: int,
) -> List[UUID]:
- async with engine.core_session() as session:
+ async with self.transactions_engine.session() as session:
stmt = (
select(ProjectDB.id)
.select_from(
@@ -167,7 +184,7 @@ async def delete_traces_before_cutoff(
if not project_ids:
return (0, 0)
- async with engine.tracing_session() as session:
+ async with self.analytics_engine.session() as session:
project_ids_param = bindparam(
"project_ids",
value=project_ids,
diff --git a/api/ee/src/main.py b/api/ee/src/main.py
index c1f583f7e6..b5b13e094e 100644
--- a/api/ee/src/main.py
+++ b/api/ee/src/main.py
@@ -3,6 +3,11 @@
from oss.src.utils.env import env
from oss.src.utils.logging import get_module_logger
+
+from oss.src.dbs.postgres.shared.engine import (
+ get_transactions_engine,
+ get_analytics_engine,
+)
from oss.src.dbs.postgres.events.dao import EventsDAO
from oss.src.core.events.service import EventsService
@@ -14,6 +19,7 @@
from ee.src.dbs.postgres.meters.dao import MetersDAO
from ee.src.dbs.postgres.tracing.dao import TracingRetentionDAO
from ee.src.dbs.postgres.subscriptions.dao import SubscriptionsDAO
+from ee.src.dbs.postgres.organizations.dao import OrganizationDomainsDAO
from ee.src.dbs.postgres.events.dao import EventsRetentionDAO
from ee.src.core.meters.service import MetersService
@@ -28,18 +34,30 @@
from ee.src.apis.fastapi.organizations.router import (
router as organization_router,
)
-from ee.src.utils.entitlements import bootstrap_entitlements_services
+from ee.src.core.access.entitlements.service import bootstrap_entitlements_services
# DBS --------------------------------------------------------------------------
-meters_dao = MetersDAO()
+# Get engines from shared initialization (instantiated in routers.py)
+_transactions_engine = get_transactions_engine()
+_analytics_engine = get_analytics_engine()
+
+meters_dao = MetersDAO(engine=_transactions_engine)
+
+tracing_retention_dao = TracingRetentionDAO(
+ transactions_engine=_transactions_engine,
+ analytics_engine=_analytics_engine,
+)
-tracing_retention_dao = TracingRetentionDAO()
+subscriptions_dao = SubscriptionsDAO(engine=_transactions_engine)
-subscriptions_dao = SubscriptionsDAO()
+organization_domains_dao = OrganizationDomainsDAO(engine=_transactions_engine)
-events_retention_dao = EventsRetentionDAO()
-query_events_dao = EventsDAO()
+events_dao = EventsDAO(engine=_analytics_engine)
+events_retention_dao = EventsRetentionDAO(
+ transactions_engine=_transactions_engine,
+ analytics_engine=_analytics_engine,
+)
# CORE -------------------------------------------------------------------------
@@ -51,16 +69,16 @@
tracing_retention_dao=tracing_retention_dao,
)
+events_service = EventsService(
+ events_dao=events_dao,
+)
+
events_retention_service = EventsRetentionService(
events_retention_dao=events_retention_dao,
)
-query_events_service = EventsService(
- events_dao=query_events_dao,
-)
subscription_service = SubscriptionsService(
subscriptions_dao=subscriptions_dao,
- meters_service=meters_service,
)
# Wire entitlements module against the freshly-built services so the
@@ -84,7 +102,7 @@
)
events_router = EventsRouter(
- events_service=query_events_service,
+ events_service=events_service,
)
events_retention_router = EventsRetentionRouter(
diff --git a/api/ee/src/services/throttling_service.py b/api/ee/src/middlewares/throttling.py
similarity index 96%
rename from api/ee/src/services/throttling_service.py
rename to api/ee/src/middlewares/throttling.py
index ed6ceffcb3..d8acc6afe2 100644
--- a/api/ee/src/services/throttling_service.py
+++ b/api/ee/src/middlewares/throttling.py
@@ -8,7 +8,7 @@
from oss.src.utils.logging import get_module_logger
from oss.src.utils.throttling import Algorithm, check_throttles
-from ee.src.core.entitlements.types import (
+from ee.src.core.access.entitlements.types import (
ENDPOINTS,
Category,
Method,
@@ -16,11 +16,9 @@
Throttle,
Tracker,
)
-from ee.src.core.entitlements.controls import get_plan_entitlements, get_plans
+from ee.src.core.access.controls import get_plan_entitlements, get_plans
from ee.src.core.subscriptions.settings import get_free_plan
-from ee.src.core.meters.service import MetersService
from ee.src.core.subscriptions.service import SubscriptionsService
-from ee.src.dbs.postgres.meters.dao import MetersDAO
from ee.src.dbs.postgres.subscriptions.dao import SubscriptionsDAO
log = get_module_logger(__name__)
@@ -29,13 +27,8 @@
_warned_no_throttles = False
_warned_fallback_pairs: set[tuple[str | None, str | None]] = set()
-meters_service = MetersService(
- meters_dao=MetersDAO(),
-)
-
subscriptions_service = SubscriptionsService(
subscriptions_dao=SubscriptionsDAO(),
- meters_service=meters_service,
)
diff --git a/api/ee/src/models/api/workspace_models.py b/api/ee/src/models/api/workspace_models.py
index f8f9ebacde..9dfe03c00f 100644
--- a/api/ee/src/models/api/workspace_models.py
+++ b/api/ee/src/models/api/workspace_models.py
@@ -4,13 +4,13 @@
from pydantic import BaseModel
from ee.src.models.api.api_models import TimestampModel
-from ee.src.models.shared_models import Permission
+from ee.src.core.access.permissions.types import Permission
class WorkspacePermission(BaseModel):
# Role slugs are dynamic (env-overridable via AGENTA_ACCESS_ROLES);
# validation against the effective scope catalog happens at the API
- # boundary via `ee.src.core.entitlements.controls.get_role`.
+ # boundary via `ee.src.core.access.controls.get_role`.
role_name: str
role_description: Optional[str] = None
permissions: Optional[List[Permission]] = None
diff --git a/api/ee/src/routers/organization_router.py b/api/ee/src/routers/organization_router.py
index 717163639a..488e9aeb4c 100644
--- a/api/ee/src/routers/organization_router.py
+++ b/api/ee/src/routers/organization_router.py
@@ -8,11 +8,11 @@
from oss.src.services import db_manager
-from ee.src.utils.permissions import (
+from ee.src.core.access.permissions.service import (
check_user_org_access,
check_rbac_permission,
)
-from ee.src.utils.entitlements import (
+from ee.src.core.access.entitlements.service import (
check_entitlements,
scope_from,
Tracker,
@@ -24,8 +24,8 @@
db_manager_ee,
workspace_manager,
)
-from ee.src.services.selectors import get_user_org_and_workspace_id
-from ee.src.models.shared_models import Permission
+from ee.src.services.db_manager_ee import get_user_org_and_workspace_id
+from ee.src.core.access.permissions.types import Permission
from ee.src.models.api.workspace_models import (
CreateWorkspace,
diff --git a/api/ee/src/routers/workspace_router.py b/api/ee/src/routers/workspace_router.py
index 5ed85d6cf7..e46578b58a 100644
--- a/api/ee/src/routers/workspace_router.py
+++ b/api/ee/src/routers/workspace_router.py
@@ -5,14 +5,14 @@
from oss.src.utils.logging import get_module_logger
from oss.src.utils.common import APIRouter
-from ee.src.utils.permissions import check_action_access
+from ee.src.core.access.permissions.service import check_action_access
from ee.src.services import workspace_manager, db_manager_ee
from ee.src.models.api.workspace_models import (
UserRole,
)
-from ee.src.models.shared_models import Permission
-from ee.src.core.entitlements.controls import get_role
+from ee.src.core.access.permissions.types import Permission
+from ee.src.core.access.controls import get_role
router = APIRouter()
diff --git a/api/ee/src/services/admin_manager.py b/api/ee/src/services/admin_manager.py
index 2aa827c03e..4c8fee002f 100644
--- a/api/ee/src/services/admin_manager.py
+++ b/api/ee/src/services/admin_manager.py
@@ -7,7 +7,7 @@
from oss.src.utils.logging import get_module_logger
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import get_transactions_engine
from oss.src.models.db_models import UserDB
from oss.src.services.api_key_service import create_api_key
@@ -88,7 +88,7 @@ class ProjectRequest(BaseModel):
# Role slugs are dynamic at runtime (env-overridable via AGENTA_ACCESS_ROLES);
# validation against the effective per-scope catalog happens at the handler
-# boundary via `ee.src.core.entitlements.controls.get_role`.
+# boundary via `ee.src.core.access.controls.get_role`.
class OrganizationMembershipRequest(BaseModel):
role: str
is_demo: bool
@@ -119,7 +119,9 @@ class ProjectMembershipRequest(BaseModel):
async def check_user(
request: UserRequest,
) -> Optional[UserRequest]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(UserDB).filter_by(
email=request.email,
@@ -136,7 +138,9 @@ async def check_user(
async def create_user(
request: UserRequest,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
user_db = UserDB(
# id=uuid7() # use default
#
@@ -162,7 +166,9 @@ async def create_user(
async def create_organization(
request: OrganizationRequest,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
organization_db = OrganizationDB(
name=request.name,
description=request.description,
@@ -190,7 +196,9 @@ async def create_organization(
async def create_workspace(
request: WorkspaceRequest,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
workspace_db = WorkspaceDB(
# id=uuid7() # use default
#
@@ -219,7 +227,9 @@ async def create_workspace(
async def create_project(
request: ProjectRequest,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
project_db = ProjectDB(
# id=uuid7() # use default
#
@@ -250,7 +260,9 @@ async def create_project(
async def create_organization_membership(
request: OrganizationMembershipRequest,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
membership_db = OrganizationMembershipDB(
# id=uuid7() # use default
#
@@ -293,7 +305,9 @@ async def create_organization_membership(
async def create_workspace_membership(
request: WorkspaceMembershipRequest,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
workspace = await session.execute(
select(WorkspaceDB).filter_by(
id=request.workspace_ref.id,
@@ -334,7 +348,9 @@ async def create_workspace_membership(
async def create_project_membership(
request: ProjectMembershipRequest,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
project = await session.execute(
select(ProjectDB).filter_by(
id=request.project_ref.id,
diff --git a/api/ee/src/services/commoners.py b/api/ee/src/services/commoners.py
index 1c2d2c66bf..5a5920aa87 100644
--- a/api/ee/src/services/commoners.py
+++ b/api/ee/src/services/commoners.py
@@ -7,7 +7,7 @@
from pydantic import BaseModel
from oss.src.utils.logging import get_module_logger
-from oss.src.utils.caching import acquire_lock, release_lock
+from oss.src.utils.locking import acquire_lock, release_lock
from oss.src.utils.common import env
from oss.src.services import db_manager
@@ -24,26 +24,23 @@
delete_user,
)
from oss.src.models.db_models import OrganizationDB
-from ee.src.services.email_helper import (
- add_contact_to_loops,
-)
+from oss.src.utils import emailing
from oss.src.core.auth.service import AuthService
from ee.src.dbs.postgres.subscriptions.dao import SubscriptionsDAO
from ee.src.core.subscriptions.service import SubscriptionsService
from ee.src.core.subscriptions.types import get_default_plan
-from ee.src.dbs.postgres.meters.dao import MetersDAO
-from ee.src.core.meters.service import MetersService
-from ee.src.utils.entitlements import check_entitlements, scope_from, Gauge
+from ee.src.core.access.entitlements.service import (
+ check_entitlements,
+ scope_from,
+ Gauge,
+)
from ee.src.core.organizations.exceptions import OrganizationCreationNotAllowedError
log = get_module_logger(__name__)
subscription_service = SubscriptionsService(
subscriptions_dao=SubscriptionsDAO(),
- meters_service=MetersService(
- meters_dao=MetersDAO(),
- ),
)
DEMOS = "AGENTA_DEMOS"
@@ -247,7 +244,7 @@ async def create_accounts(
if is_ee():
try:
# Adds contact to loops for marketing emails. TODO: Add opt-in checkbox to supertokens
- add_contact_to_loops(user_dict["email"]) # type: ignore
+ emailing.add_contact(user_dict["email"]) # type: ignore
except ConnectionError as ex:
log.warn("error adding contact to loops %s", ex)
diff --git a/api/ee/src/services/converters.py b/api/ee/src/services/converters.py
deleted file mode 100644
index e0520b68e5..0000000000
--- a/api/ee/src/services/converters.py
+++ /dev/null
@@ -1,158 +0,0 @@
-from typing import List, Any
-from datetime import datetime, timezone
-
-from oss.src.services import db_manager
-from ee.src.services import db_manager_ee
-from ee.src.core.workspaces.types import WorkspaceResponse
-from ee.src.core.entitlements.controls import (
- get_role_description,
- get_role_permissions,
-)
-from ee.src.models.shared_models import Permission
-from oss.src.models.db_models import WorkspaceDB
-
-
-def _role_slug(role: Any) -> str:
- """Normalize an enum or string role to its slug form."""
- return role.value if hasattr(role, "value") else str(role)
-
-
-def _expand_permissions(slugs: List[str]) -> List[str]:
- """Expand the `"*"` wildcard to the full list of Permission enum values.
-
- Why: `WorkspacePermission.permissions` is typed as `List[Permission]` and
- the owner role stores `["*"]` as a wildcard. Pydantic rejects `"*"` since
- it's not an enum member, so we materialize it at the API boundary.
- """
- if "*" not in slugs:
- return slugs
- return [p.value for p in Permission]
-
-
-async def get_workspace_in_format(
- workspace: WorkspaceDB,
- include_members: bool = True,
-) -> WorkspaceResponse:
- """Converts the workspace object to the WorkspaceResponse model.
-
- Arguments:
- workspace (WorkspaceDB): The workspace object
- include_members (bool): Whether to include workspace members. Defaults to True.
-
- Returns:
- WorkspaceResponse: The workspace object in the WorkspaceResponse model
- """
-
- members = []
-
- if include_members:
- project = await db_manager_ee.get_project_by_workspace(
- workspace_id=str(workspace.id)
- )
- project_members = await db_manager_ee.get_project_members(
- project_id=str(project.id)
- )
- invitations = await db_manager_ee.get_project_invitations(
- project_id=str(project.id), invitation_used=False
- )
-
- if len(invitations) > 0:
- for invitation in invitations:
- if not invitation.used and str(invitation.project_id) == str(
- project.id
- ):
- user = await db_manager.get_user_with_email(invitation.email)
- member_dict = {
- "user": {
- "id": str(user.id) if user else invitation.email,
- "email": user.email if user else invitation.email,
- "username": (
- user.username
- if user
- else invitation.email.split("@")[0]
- ),
- "status": (
- "pending"
- if invitation.expiration_date
- > datetime.now(timezone.utc)
- else "expired"
- ),
- "created_at": (
- str(user.created_at)
- if user
- else (
- str(invitation.created_at)
- if str(invitation.created_at)
- else None
- )
- ),
- },
- "roles": [
- {
- "role_name": invitation.role,
- "role_description": get_role_description(
- "workspace", _role_slug(invitation.role)
- ),
- }
- ],
- }
- members.append(member_dict)
-
- for project_member in project_members:
- member_role = project_member.role
- member_dict = {
- "user": {
- "id": str(project_member.user.id),
- "email": project_member.user.email,
- "username": project_member.user.username,
- "status": "member",
- "created_at": str(project_member.user.created_at),
- },
- "roles": (
- [
- {
- "role_name": member_role,
- "role_description": get_role_description(
- "project", _role_slug(member_role)
- ),
- "permissions": _expand_permissions(
- get_role_permissions("project", _role_slug(member_role))
- ),
- }
- ]
- if member_role
- else []
- ),
- }
- members.append(member_dict)
-
- workspace_response = WorkspaceResponse(
- id=str(workspace.id),
- name=workspace.name,
- description=workspace.description,
- type=workspace.type,
- members=members,
- organization=str(workspace.organization_id),
- created_at=str(workspace.created_at),
- updated_at=str(workspace.updated_at),
- )
- return workspace_response
-
-
-async def get_all_workspace_permissions() -> List[Permission]:
- """
- Retrieve all workspace permissions.
-
- Returns:
- List[Permission]: A list of all workspace permissions in the DB.
- """
- workspace_permissions = list(Permission)
- return workspace_permissions
-
-
-def get_all_workspace_permissions_by_role(role_name: str) -> List[str]:
- """Retrieve all permissions assigned to a workspace role.
-
- Resolved via access-controls (env-overridable via AGENTA_ACCESS_ROLES).
- """
- return _expand_permissions(get_role_permissions("workspace", role_name))
diff --git a/api/ee/src/services/db_manager.py b/api/ee/src/services/db_manager.py
deleted file mode 100644
index a97b52af6d..0000000000
--- a/api/ee/src/services/db_manager.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import uuid
-
-from oss.src.dbs.postgres.shared.engine import engine
-from oss.src.models.db_models import DeploymentDB
-
-
-async def create_deployment(
- app_id: str,
- project_id: str,
- uri: str,
-) -> DeploymentDB:
- """Create a new deployment.
- Args:
- app_id (str): The app variant to create the deployment for.
- project_id (str): The project variant to create the deployment for.
- uri (str): The URI of the service.
- Returns:
- DeploymentDB: The created deployment.
- """
-
- async with engine.core_session() as session:
- try:
- deployment = DeploymentDB(
- app_id=uuid.UUID(app_id),
- project_id=uuid.UUID(project_id),
- uri=uri,
- )
-
- session.add(deployment)
- await session.commit()
- await session.refresh(deployment)
-
- return deployment
- except Exception as e:
- raise Exception(f"Error while creating deployment: {e}")
diff --git a/api/ee/src/services/db_manager_ee.py b/api/ee/src/services/db_manager_ee.py
index 9b57ebf3c8..405e65e2a6 100644
--- a/api/ee/src/services/db_manager_ee.py
+++ b/api/ee/src/services/db_manager_ee.py
@@ -1,8 +1,7 @@
-from typing import List, Set, Union, NoReturn, Optional, Tuple
+from typing import Any, Dict, List, Set, Union, NoReturn, Optional, Tuple
import uuid
from datetime import datetime, timezone
-import sendgrid
from fastapi import HTTPException
from sqlalchemy import delete, func, update
@@ -14,7 +13,9 @@
from oss.src.utils.logging import get_module_logger
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ get_transactions_engine,
+)
from oss.src.services import db_manager
from ee.src.core.workspaces.types import (
UserRole,
@@ -27,8 +28,12 @@
CreateOrganization,
OrganizationUpdate,
)
-from ee.src.models.shared_models import WorkspaceRole
-from ee.src.core.entitlements.controls import get_roles
+from ee.src.core.access.permissions.types import Permission, RequiredRole
+from ee.src.core.access.controls import (
+ get_roles,
+ get_role_description,
+ get_role_permissions,
+)
from oss.src.models.db_models import (
OrganizationDB,
@@ -44,6 +49,7 @@
from oss.src.models.db_models import (
UserDB,
InvitationDB,
+ DeploymentDB,
)
from ee.src.core.organizations.exceptions import (
@@ -54,15 +60,10 @@
OrganizationProvidersDAO,
OrganizationDomainsDAO,
)
-from ee.src.services.converters import get_workspace_in_format
-from ee.src.services.selectors import get_org_default_workspace
from oss.src.utils.env import env
-# Initialize sendgrid api client
-sg = sendgrid.SendGridAPIClient(api_key=env.sendgrid.api_key)
-
log = get_module_logger(__name__)
@@ -77,7 +78,9 @@ async def get_organization(organization_id: str) -> OrganizationDB:
OrganizationDB: The fetched organization.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(OrganizationDB).filter_by(id=uuid.UUID(organization_id))
)
@@ -96,7 +99,9 @@ async def get_organizations_by_list_ids(organization_ids: List) -> List[Organiza
List: A list of dictionaries representing the retrieved organizations.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
organization_uuids = [
uuid.UUID(organization_id) for organization_id in organization_ids
]
@@ -116,7 +121,9 @@ async def count_organizations_by_owner(owner_id: str) -> int:
Returns:
int: The count of organizations owned by the user.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(func.count(OrganizationDB.id)).where(
OrganizationDB.owner_id == uuid.UUID(owner_id)
@@ -136,7 +143,9 @@ async def get_default_workspace_id(user_id: str) -> str:
str: The default workspace ID.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(WorkspaceMemberDB)
.filter_by(user_id=uuid.UUID(user_id))
@@ -157,7 +166,7 @@ async def get_default_workspace_id(user_id: str) -> str:
(
membership
for membership in memberships
- if membership.role == WorkspaceRole.OWNER
+ if membership.role == RequiredRole.OWNER
),
None,
)
@@ -181,7 +190,9 @@ async def get_organization_workspaces(organization_id: str):
organization_id (str): The ID of the organization
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(WorkspaceDB)
.filter_by(organization_id=uuid.UUID(organization_id))
@@ -199,7 +210,9 @@ async def get_workspace_members(workspace_id: str) -> List[WorkspaceMemberDB]:
Used by RBAC / admin helpers to derive roles and permissions.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(WorkspaceMemberDB).where(
WorkspaceMemberDB.workspace_id == workspace_id
@@ -221,7 +234,7 @@ async def get_workspace_administrators(workspace: WorkspaceDB) -> List[UserDB]:
admin_user_ids = [
str(member.user_id)
for member in members
- if member.role in (WorkspaceRole.ADMIN, WorkspaceRole.OWNER)
+ if member.role in (RequiredRole.ADMIN, RequiredRole.OWNER)
]
administrators: List[UserDB] = []
@@ -385,7 +398,8 @@ async def _sync(db_session: AsyncSession) -> None:
await _sync(session)
return
- async with engine.core_session() as new_session:
+ engine = get_transactions_engine()
+ async with engine.session() as new_session:
await _sync(new_session)
@@ -402,7 +416,9 @@ async def get_default_workspace_id_from_organization(
str: The default (first) workspace ID.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
workspace_query = await session.execute(
select(WorkspaceDB)
.where(
@@ -433,7 +449,9 @@ async def get_project_by_workspace(
"""
assert workspace_id is not None, "Workspace ID is required to retrieve project"
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
stmt = select(ProjectDB).where(
ProjectDB.workspace_id == uuid.UUID(workspace_id),
)
@@ -494,7 +512,9 @@ async def create_project_member(
async def fetch_project_memberships_by_user_id(
user_id: str,
) -> List[ProjectMemberDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(ProjectMemberDB)
.filter_by(user_id=uuid.UUID(user_id))
@@ -622,7 +642,9 @@ async def create_workspace(
user = await db_manager.get_user(user_uid)
organization = await get_organization(organization_id)
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
user_result = await session.execute(select(UserDB).filter_by(uid=user_uid))
user = user_result.scalars().first()
@@ -652,7 +674,9 @@ async def update_workspace(
payload (UpdateWorkspace): The data to update the workspace with.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(WorkspaceDB).filter_by(id=workspace.id))
workspace = result.scalars().first()
@@ -681,7 +705,9 @@ async def check_user_in_workspace_with_email(email: str, workspace_id: str) -> b
Exception: If there is an error checking if the user belongs to the workspace.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(WorkspaceMemberDB)
.join(UserDB, UserDB.id == WorkspaceMemberDB.user_id)
@@ -721,7 +747,9 @@ async def update_user_roles(
f"No projects found for the provided workspace_id {workspace_id}"
)
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
workspace_member_result = await session.execute(
select(WorkspaceMemberDB).filter_by(
workspace_id=uuid.UUID(workspace_id), user_id=user.id
@@ -804,7 +832,9 @@ async def add_user_to_workspace_and_org(
if project and str(project.workspace_id) != str(workspace.id):
raise ValueError("Project does not belong to the provided workspace")
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
# create joined organization for user
user_organization = OrganizationMemberDB(
user_id=user.id, organization_id=organization.id
@@ -910,7 +940,9 @@ async def remove_user_from_workspace(
)
project_ids = [project.id for project in projects]
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
if not user: # User is an invited user who has not yet created an account and therefore does not have a user object
pass
else:
@@ -1048,7 +1080,9 @@ async def create_organization(
Exception: If there is an error creating the organization.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
create_org_data = payload.model_dump(exclude_unset=True)
is_demo = create_org_data.pop("is_demo", False)
@@ -1137,7 +1171,9 @@ async def update_organization(
Exception: If there is an error updating the organization.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(OrganizationDB).filter_by(id=uuid.UUID(organization_id))
)
@@ -1299,7 +1335,9 @@ async def delete_organization(organization_id: str) -> bool:
Raises:
NoResultFound: If organization not found.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(OrganizationDB).filter_by(id=uuid.UUID(organization_id))
)
@@ -1324,7 +1362,9 @@ async def delete_invitation(invitation_id: str) -> bool:
bool: True if the invitation was successfully deleted, False otherwise.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB).filter_by(id=uuid.UUID(invitation_id))
)
@@ -1386,7 +1426,9 @@ async def mark_invitation_as_used(
HTTPException: If there is an error marking the invitation as used.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB).filter_by(
project_id=uuid.UUID(project_id), token=invitation.token
@@ -1477,7 +1519,9 @@ async def get_project_invitations(project_id: str, **kwargs):
project_id (str): The ID of the project
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
stmt = select(InvitationDB).filter(
InvitationDB.project_id == uuid.UUID(project_id)
)
@@ -1497,7 +1541,9 @@ async def get_all_pending_invitations(email: str):
email (str): The email address of the user.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB).filter(
InvitationDB.email == email,
@@ -1522,7 +1568,9 @@ async def get_project_invitation(
InvitationDB: invitation object
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB).filter_by(
project_id=uuid.UUID(project_id), token=token, email=email
@@ -1539,7 +1587,9 @@ async def get_project_members(project_id: str):
project_id (str): The ID of the project
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
members_query = await session.execute(
select(ProjectMemberDB)
.filter(ProjectMemberDB.project_id == uuid.UUID(project_id))
@@ -1567,7 +1617,9 @@ async def project_member_exists(
True if the user belongs to the project, False otherwise.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
stmt = select(
select(ProjectMemberDB.id)
.filter(
@@ -1598,7 +1650,9 @@ async def workspace_member_exists(
True if the user belongs to the workspace, False otherwise.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
stmt = select(
select(WorkspaceMemberDB.id)
.filter(
@@ -1645,7 +1699,9 @@ async def create_org_workspace_invitation(
if not project:
raise Exception(f"No project found with ID {project_id}")
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
invitation = InvitationDB(
token=token,
email=email,
@@ -1686,7 +1742,9 @@ async def add_user_to_organization(
role: str = "viewer",
# is_demo: bool = False,
) -> None:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
organization_member = OrganizationMemberDB(
user_id=user_id,
organization_id=organization_id,
@@ -1712,7 +1770,9 @@ async def add_user_to_workspace(
role: str,
# is_demo: bool = False,
) -> None:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
# fetch workspace by workspace_id (SQL)
stmt = select(WorkspaceDB).filter_by(id=workspace_id)
workspace = await session.execute(stmt)
@@ -1753,7 +1813,9 @@ async def add_user_to_project(
if not project:
raise Exception(f"No project found with ID {project_id}")
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
project_member = ProjectMemberDB(
user_id=user_id,
project_id=project_id,
@@ -1793,7 +1855,9 @@ async def transfer_organization_ownership(
Raises:
ValueError: If new owner is not a member of the organization
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
# Verify organization exists
org_result = await session.execute(
select(OrganizationDB).filter_by(id=uuid.UUID(organization_id))
@@ -1925,7 +1989,9 @@ async def transfer_organization_ownership(
async def admin_delete_org_membership(membership_id: uuid.UUID) -> bool:
"""Delete an org membership by ID. Returns False if not found."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(OrganizationMemberDB).filter_by(id=membership_id)
)
@@ -1939,7 +2005,9 @@ async def admin_delete_org_membership(membership_id: uuid.UUID) -> bool:
async def admin_delete_workspace_membership(membership_id: uuid.UUID) -> bool:
"""Delete a workspace membership by ID. Returns False if not found."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(WorkspaceMemberDB).filter_by(id=membership_id)
)
@@ -1953,7 +2021,9 @@ async def admin_delete_workspace_membership(membership_id: uuid.UUID) -> bool:
async def admin_delete_project_membership(membership_id: uuid.UUID) -> bool:
"""Delete a project membership by ID. Returns False if not found."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(ProjectMemberDB).filter_by(id=membership_id)
)
@@ -1970,7 +2040,9 @@ async def admin_get_member_org_ids(
org_ids: List[uuid.UUID],
) -> Set[uuid.UUID]:
"""Return the subset of org_ids where the user has a membership row."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
rows = (
(
await session.execute(
@@ -1997,7 +2069,9 @@ async def admin_swap_org_memberships(
a membership row. For each qualifying org, target gets source's role and
source gets target's prior role.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
source_rows = (
(
await session.execute(
@@ -2059,7 +2133,9 @@ async def admin_swap_workspace_memberships(
have a membership row. For each qualifying workspace, target gets source's
role and source gets target's prior role.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
source_rows = (
(
await session.execute(
@@ -2121,7 +2197,9 @@ async def admin_swap_project_memberships(
have a membership row. For each qualifying project, target gets source's
role and source gets target's prior role.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
source_rows = (
(
await session.execute(
@@ -2177,7 +2255,9 @@ async def admin_delete_user_memberships(user_id: uuid.UUID) -> None:
Called before hard-deleting a user so FK constraints are not violated.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
await session.execute(
delete(OrganizationMemberDB).where(OrganizationMemberDB.user_id == user_id)
)
@@ -2188,3 +2268,258 @@ async def admin_delete_user_memberships(user_id: uuid.UUID) -> None:
delete(ProjectMemberDB).where(ProjectMemberDB.user_id == user_id)
)
await session.commit()
+
+
+# Merged from ee/src/services/selectors.py
+async def get_user_org_and_workspace_id(user_uid) -> Dict[str, Union[str, List[str]]]:
+ """
+ Retrieves the user ID and organization IDs associated with a given user UID.
+
+ Args:
+ user_uid (str): The UID of the user.
+
+ Returns:
+ dict: A dictionary containing the user UID, ID, list of workspace IDS and list of organization IDS associated with a user.
+ If the user is not found, returns None
+
+ Example Usage:
+ result = await get_user_org_and_workspace_id("user123")
+
+ Output:
+ { "id": "123", "uid": "user123", "organization_ids": [], "workspace_ids": []}
+ """
+
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
+ user = await db_manager.get_user_with_id(user_id=user_uid)
+ if not user:
+ raise NoResultFound(f"User with uid {user_uid} not found")
+
+ user_org_result = await session.execute(
+ select(OrganizationMemberDB)
+ .filter_by(user_id=user.id)
+ .options(load_only(OrganizationMemberDB.organization_id)) # type: ignore
+ )
+ orgs = user_org_result.scalars().all()
+ organization_ids = [str(user_org.organization_id) for user_org in orgs]
+
+ member_in_workspaces_result = await session.execute(
+ select(WorkspaceMemberDB)
+ .filter_by(user_id=user.id)
+ .options(load_only(WorkspaceMemberDB.workspace_id)) # type: ignore
+ )
+ workspaces_ids = [
+ str(user_workspace.workspace_id)
+ for user_workspace in member_in_workspaces_result.scalars().all()
+ ]
+
+ return {
+ "id": str(user.id),
+ "uid": str(user.uid),
+ "workspace_ids": workspaces_ids,
+ "organization_ids": organization_ids,
+ }
+
+
+async def user_exists(user_email: str) -> bool:
+ """Check if user exists in the database.
+
+ Arguments:
+ user_email (str): The email address of the logged-in user
+
+ Returns:
+ bool: confirming if the user exists or not.
+ """
+
+ user = await db_manager.get_user_with_email(email=user_email)
+ return False if not user else True
+
+
+async def get_org_default_workspace(organization: Organization) -> WorkspaceDB:
+ """Get's the default workspace for an organization from the database.
+
+ Arguments:
+ organization (Organization): The organization
+
+ Returns:
+ WorkspaceDB: Instance of WorkspaceDB
+ """
+
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
+ result = await session.execute(
+ select(WorkspaceDB).filter_by(
+ organization_id=organization.id,
+ type="default",
+ )
+ )
+ workspace = result.scalars().first()
+ if workspace is not None:
+ return workspace
+
+ result = await session.execute(
+ select(WorkspaceDB).filter_by(
+ organization_id=organization.id,
+ )
+ )
+ return result.scalars().first()
+
+
+# Merged from ee/src/services/db_manager.py
+async def create_deployment(
+ app_id: str,
+ project_id: str,
+ uri: str,
+) -> DeploymentDB:
+ """Create a new deployment.
+ Args:
+ app_id (str): The app variant to create the deployment for.
+ project_id (str): The project variant to create the deployment for.
+ uri (str): The URI of the service.
+ Returns:
+ DeploymentDB: The created deployment.
+ """
+
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
+ try:
+ deployment = DeploymentDB(
+ app_id=uuid.UUID(app_id),
+ project_id=uuid.UUID(project_id),
+ uri=uri,
+ )
+
+ session.add(deployment)
+ await session.commit()
+ await session.refresh(deployment)
+
+ return deployment
+ except Exception as e:
+ raise Exception(f"Error while creating deployment: {e}")
+
+
+# Merged from ee/src/services/converters.py
+def _role_slug(role: Any) -> str:
+ """Normalize an enum or string role to its slug form."""
+ return role.value if hasattr(role, "value") else str(role)
+
+
+def _expand_permissions(slugs: List[str]) -> List[str]:
+ """Expand the `"*"` wildcard to the full list of Permission enum values.
+
+ Why: `WorkspacePermission.permissions` is typed as `List[Permission]` and
+ the owner role stores `["*"]` as a wildcard. Pydantic rejects `"*"` since
+ it's not an enum member, so we materialize it at the API boundary.
+ """
+ if "*" not in slugs:
+ return slugs
+ return [p.value for p in Permission]
+
+
+async def get_workspace_in_format(
+ workspace: WorkspaceDB,
+ include_members: bool = True,
+) -> WorkspaceResponse:
+ """Converts the workspace object to the WorkspaceResponse model.
+
+ Arguments:
+ workspace (WorkspaceDB): The workspace object
+ include_members (bool): Whether to include workspace members. Defaults to True.
+
+ Returns:
+ WorkspaceResponse: The workspace object in the WorkspaceResponse model
+ """
+
+ members = []
+
+ if include_members:
+ project = await get_project_by_workspace(workspace_id=str(workspace.id))
+ project_members = await get_project_members(project_id=str(project.id))
+ invitations = await get_project_invitations(
+ project_id=str(project.id), invitation_used=False
+ )
+
+ if len(invitations) > 0:
+ for invitation in invitations:
+ if not invitation.used and str(invitation.project_id) == str(
+ project.id
+ ):
+ user = await db_manager.get_user_with_email(invitation.email)
+ member_dict = {
+ "user": {
+ "id": str(user.id) if user else invitation.email,
+ "email": user.email if user else invitation.email,
+ "username": (
+ user.username
+ if user
+ else invitation.email.split("@")[0]
+ ),
+ "status": (
+ "pending"
+ if invitation.expiration_date
+ > datetime.now(timezone.utc)
+ else "expired"
+ ),
+ "created_at": (
+ str(user.created_at)
+ if user
+ else (
+ str(invitation.created_at)
+ if str(invitation.created_at)
+ else None
+ )
+ ),
+ },
+ "roles": [
+ {
+ "role_name": invitation.role,
+ "role_description": get_role_description(
+ "workspace", _role_slug(invitation.role)
+ ),
+ }
+ ],
+ }
+ members.append(member_dict)
+
+ for project_member in project_members:
+ member_role = project_member.role
+ member_dict = {
+ "user": {
+ "id": str(project_member.user.id),
+ "email": project_member.user.email,
+ "username": project_member.user.username,
+ "status": "member",
+ "created_at": str(project_member.user.created_at),
+ },
+ "roles": (
+ [
+ {
+ "role_name": member_role,
+ "role_description": get_role_description(
+ "project", _role_slug(member_role)
+ ),
+ "permissions": _expand_permissions(
+ get_role_permissions("project", _role_slug(member_role))
+ ),
+ }
+ ]
+ if member_role
+ else []
+ ),
+ }
+ members.append(member_dict)
+
+ workspace_response = WorkspaceResponse(
+ id=str(workspace.id),
+ name=workspace.name,
+ description=workspace.description,
+ type=workspace.type,
+ members=members,
+ organization=str(workspace.organization_id),
+ created_at=str(workspace.created_at),
+ updated_at=str(workspace.updated_at),
+ )
+ return workspace_response
diff --git a/api/ee/src/services/email_helper.py b/api/ee/src/services/email_helper.py
deleted file mode 100644
index 0c91e666cd..0000000000
--- a/api/ee/src/services/email_helper.py
+++ /dev/null
@@ -1,54 +0,0 @@
-import time
-
-import httpx
-
-from oss.src.utils.env import env
-from oss.src.utils.logging import get_module_logger
-
-log = get_module_logger(__name__)
-
-
-def add_contact_to_loops(email, max_retries=5, initial_delay=1):
- """
- Add a contact to Loops audience with retry and exponential backoff.
-
- Args:
- email (str): Email address of the contact to be added.
- max_retries (int): Maximum number of retries in case of rate limiting.
- initial_delay (int): Initial delay in seconds before retrying.
-
- Raises:
- ConnectionError: If max retries reached and unable to connect to Loops API.
-
- Returns:
- httpx.Response: Response object from the Loops API.
- """
-
- # Endpoint URL
- url = "https://app.loops.so/api/v1/contacts/create"
-
- # Request headers
- headers = {"Authorization": f"Bearer {env.loops.api_key}"}
-
- # Request payload/body
- data = {"email": email}
-
- retries = 0
- delay = initial_delay
-
- while retries < max_retries:
- # Making the POST request
- response = httpx.post(url, json=data, headers=headers, timeout=20)
-
- # If response code is 429, it indicates rate limiting
- if response.status_code == 429:
- log.warning(f"[LOOPS] Rate limit hit. Retrying in {delay} seconds...")
- time.sleep(delay)
- retries += 1
- delay *= 2 # Double the delay for exponential backoff
- else:
- # If response is not 429, return it
- return response
-
- # If max retries reached, raise an exception or handle as needed
- raise ConnectionError("Max retries reached. Unable to connect to Loops API.")
diff --git a/api/ee/src/services/organization_service.py b/api/ee/src/services/organization_service.py
index 5378008ae3..4f05f1bee0 100644
--- a/api/ee/src/services/organization_service.py
+++ b/api/ee/src/services/organization_service.py
@@ -12,7 +12,7 @@
from oss.src.utils.env import env
from oss.src.utils.logging import get_module_logger
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import get_transactions_engine
from oss.src.core.secrets.dtos import (
CreateSecretDTO,
UpdateSecretDTO,
@@ -38,7 +38,7 @@
)
from ee.src.services import db_manager_ee
-from oss.src.services import email_service
+from oss.src.utils import emailing
from oss.src.models.db_models import UserDB
from oss.src.models.db_models import (
WorkspaceDB,
@@ -87,8 +87,6 @@ async def send_invitation_email(
bool: True if the email was sent successfully, False otherwise.
"""
- html_template = email_service.read_email_template("./templates/send_email.html")
-
token_param = quote(token, safe="")
email_param = quote(email, safe="")
org_param = quote(str(organization.id), safe="")
@@ -108,22 +106,18 @@ async def send_invitation_email(
if not env.sendgrid.enabled:
return invite_link
- html_content = html_template.format(
- username_placeholder=user.username,
- action_placeholder="invited you to join",
- workspace_placeholder=organization.name,
+ await emailing.send_email(
+ from_email="account@hello.agenta.ai",
+ to_email=email,
+ subject=f"{user.username} invited you to join {organization.name}",
+ username=user.username,
+ action="invited you to join",
+ workspace=organization.name,
call_to_action=(
"Click the link below to accept the invitation:
"
f'Accept Invitation '
),
)
-
- await email_service.send_email(
- from_email="account@hello.agenta.ai",
- to_email=email,
- subject=f"{user.username} invited you to join {organization.name}",
- html_content=html_content,
- )
return True
@@ -141,24 +135,21 @@ async def notify_org_admin_invitation(workspace: WorkspaceDB, user: UserDB) -> b
organization = await db_manager_ee.get_organization(str(workspace.organization_id))
project = await db_manager_ee.get_project_by_workspace(str(workspace.id))
- html_template = email_service.read_email_template("./templates/send_email.html")
- html_content = html_template.format(
- username_placeholder=user.username,
- action_placeholder="joined your Workspace",
- workspace_placeholder=f'"{organization.name}"',
- call_to_action=(
- "Click the link below to view your Organization: "
- f'View Organization '
- ),
- )
workspace_admins = await db_manager_ee.get_workspace_administrators(workspace)
+
for workspace_admin in workspace_admins:
- await email_service.send_email(
+ await emailing.send_email(
from_email="account@hello.agenta.ai",
to_email=workspace_admin.email,
subject=f"New Member Joined {organization.name}",
- html_content=html_content,
+ username=user.username,
+ action="joined your Workspace",
+ workspace=f'"{organization.name}"',
+ call_to_action=(
+ "Click the link below to view your Organization: "
+ f'View Organization '
+ ),
)
return True
@@ -280,7 +271,9 @@ async def create_domain(
Token expires after 48 hours and can be refreshed.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationDomainsDAO(session)
# Block if a verified domain already exists anywhere
@@ -337,7 +330,9 @@ async def verify_domain(
self, organization_id: str, domain_id: str, user_id: str
) -> OrganizationDomain:
"""Verify a domain via DNS check."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationDomainsDAO(session)
domain = await dao.get_by_id(
@@ -403,7 +398,9 @@ async def list_domains(self, organization_id: str) -> List[OrganizationDomain]:
Tokens are returned for unverified domains (within expiry period).
Verified domains have token=None (cleared after verification).
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationDomainsDAO(session)
domains = await dao.list_by_organization(organization_id=organization_id)
@@ -430,7 +427,9 @@ async def refresh_token(
Generates a new token and resets the 48-hour expiry window.
For verified domains, this marks them as unverified for re-verification.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationDomainsDAO(session)
domain = await dao.get_by_id(
@@ -470,7 +469,9 @@ async def reset_domain(
Generates a new token and marks the domain as unverified.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationDomainsDAO(session)
domain = await dao.get_by_id(
@@ -506,7 +507,9 @@ async def delete_domain(
self, organization_id: str, domain_id: str, user_id: str
) -> bool:
"""Delete a domain."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationDomainsDAO(session)
domain = await dao.get_by_id(
@@ -573,7 +576,9 @@ async def create_provider(
user_id: str,
) -> OrganizationProvider:
"""Create a new SSO provider."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationProvidersDAO(session)
# Use the slug from payload (already validated to be lowercase letters and hyphens)
@@ -648,7 +653,9 @@ async def update_provider(
user_id: str,
) -> OrganizationProvider:
"""Update an SSO provider."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationProvidersDAO(session)
provider = await dao.get_by_id(
@@ -735,7 +742,9 @@ async def update_provider(
async def list_providers(self, organization_id: str) -> List[OrganizationProvider]:
"""List all SSO providers for an organization."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationProvidersDAO(session)
providers = await dao.list_by_organization(organization_id=organization_id)
@@ -748,7 +757,9 @@ async def get_provider(
self, organization_id: str, provider_id: str
) -> OrganizationProvider:
"""Get a single SSO provider by ID."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationProvidersDAO(session)
provider = await dao.get_by_id(
provider_id=provider_id, organization_id=organization_id
@@ -761,7 +772,9 @@ async def test_provider(
self, organization_id: str, provider_id: str, user_id: str
) -> OrganizationProvider:
"""Test SSO provider connection and mark as valid if successful."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationProvidersDAO(session)
provider = await dao.get_by_id(
@@ -806,7 +819,9 @@ async def delete_provider(
self, organization_id: str, provider_id: str, user_id: str
) -> bool:
"""Delete an SSO provider."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
dao = OrganizationProvidersDAO(session)
provider = await dao.get_by_id(
diff --git a/api/ee/src/services/selectors.py b/api/ee/src/services/selectors.py
deleted file mode 100644
index 017229d7bb..0000000000
--- a/api/ee/src/services/selectors.py
+++ /dev/null
@@ -1,113 +0,0 @@
-from typing import Dict, List, Union
-
-from sqlalchemy.future import select
-from sqlalchemy.exc import NoResultFound
-from sqlalchemy.orm import load_only
-
-from oss.src.services import db_manager
-from oss.src.utils.logging import get_module_logger
-
-from oss.src.dbs.postgres.shared.engine import engine
-from ee.src.core.organizations.types import Organization
-
-from oss.src.models.db_models import (
- WorkspaceDB,
-)
-from ee.src.models.db_models import (
- OrganizationMemberDB,
- WorkspaceMemberDB,
-)
-
-log = get_module_logger(__name__)
-
-
-async def get_user_org_and_workspace_id(user_uid) -> Dict[str, Union[str, List[str]]]:
- """
- Retrieves the user ID and organization IDs associated with a given user UID.
-
- Args:
- user_uid (str): The UID of the user.
-
- Returns:
- dict: A dictionary containing the user UID, ID, list of workspace IDS and list of organization IDS associated with a user.
- If the user is not found, returns None
-
- Example Usage:
- result = await get_user_org_and_workspace_id("user123")
-
- Output:
- { "id": "123", "uid": "user123", "organization_ids": [], "workspace_ids": []}
- """
-
- async with engine.core_session() as session:
- user = await db_manager.get_user_with_id(user_id=user_uid)
- if not user:
- raise NoResultFound(f"User with uid {user_uid} not found")
-
- user_org_result = await session.execute(
- select(OrganizationMemberDB)
- .filter_by(user_id=user.id)
- .options(load_only(OrganizationMemberDB.organization_id)) # type: ignore
- )
- orgs = user_org_result.scalars().all()
- organization_ids = [str(user_org.organization_id) for user_org in orgs]
-
- member_in_workspaces_result = await session.execute(
- select(WorkspaceMemberDB)
- .filter_by(user_id=user.id)
- .options(load_only(WorkspaceMemberDB.workspace_id)) # type: ignore
- )
- workspaces_ids = [
- str(user_workspace.workspace_id)
- for user_workspace in member_in_workspaces_result.scalars().all()
- ]
-
- return {
- "id": str(user.id),
- "uid": str(user.uid),
- "workspace_ids": workspaces_ids,
- "organization_ids": organization_ids,
- }
-
-
-async def user_exists(user_email: str) -> bool:
- """Check if user exists in the database.
-
- Arguments:
- user_email (str): The email address of the logged-in user
-
- Returns:
- bool: confirming if the user exists or not.
- """
-
- user = await db_manager.get_user_with_email(email=user_email)
- return False if not user else True
-
-
-async def get_org_default_workspace(organization: Organization) -> WorkspaceDB:
- """Get's the default workspace for an organization from the database.
-
- Arguments:
- organization (Organization): The organization
-
- Returns:
- WorkspaceDB: Instance of WorkspaceDB
- """
-
- async with engine.core_session() as session:
- result = await session.execute(
- select(WorkspaceDB).filter_by(
- organization_id=organization.id,
- type="default",
- )
- )
- workspace = result.scalars().first()
- if workspace is not None:
- return workspace
-
- result = await session.execute(
- select(WorkspaceDB).filter_by(
- organization_id=organization.id,
- )
- )
- return result.scalars().first()
diff --git a/api/ee/src/services/templates/send_email.html b/api/ee/src/services/templates/send_email.html
deleted file mode 100644
index 7d124ffd8a..0000000000
--- a/api/ee/src/services/templates/send_email.html
+++ /dev/null
@@ -1,7 +0,0 @@
-Hello,
-
- {username_placeholder} has {action_placeholder} {workspace_placeholder} on
- Agenta.
-
-{call_to_action}
-Thank you for using Agenta!
diff --git a/api/ee/src/services/workspace_manager.py b/api/ee/src/services/workspace_manager.py
index c3b9c11896..6e50ff2351 100644
--- a/api/ee/src/services/workspace_manager.py
+++ b/api/ee/src/services/workspace_manager.py
@@ -5,7 +5,7 @@
from oss.src.utils.logging import get_module_logger
from oss.src.utils.caching import invalidate_cache
from oss.src.services import db_manager
-from ee.src.services import db_manager_ee, converters
+from ee.src.services import db_manager_ee
from oss.src.models.db_models import (
OrganizationDB,
WorkspaceDB,
@@ -20,8 +20,8 @@
CreateWorkspace,
UpdateWorkspace,
)
-from ee.src.core.entitlements.controls import get_role
-from ee.src.models.shared_models import Permission, WorkspaceRole
+from ee.src.core.access.controls import get_role
+from ee.src.core.access.permissions.types import Permission, RequiredRole
from oss.src.services.organization_service import (
create_invitation,
check_existing_invitation,
@@ -111,11 +111,10 @@ async def get_all_workspace_permissions() -> List[Permission]:
Retrieve all workspace permissions.
Returns:
- List[Permission]: A list of all workspace permissions in the DB.
+ List[Permission]: A list of all workspace permissions.
"""
- workspace_permissions_from_db = await converters.get_all_workspace_permissions()
- return workspace_permissions_from_db
+ return list(Permission)
async def invite_user_to_workspace(
@@ -214,7 +213,7 @@ async def invite_user_to_workspace(
else (
str(payload_invite.roles[0])
if payload_invite.roles
- else WorkspaceRole.VIEWER.value
+ else RequiredRole.VIEWER.value
)
)
# Validate against the effective workspace catalog
diff --git a/api/ee/tests/manual/evaluations/sdk/test_sdk_evaluation.py b/api/ee/tests/manual/evaluations/sdk/test_loop.py
similarity index 100%
rename from api/ee/tests/manual/evaluations/sdk/test_sdk_evaluation.py
rename to api/ee/tests/manual/evaluations/sdk/test_loop.py
diff --git a/api/ee/tests/manual/test_billing_period.py b/api/ee/tests/manual/test_billing_period.py
index c4a66b4b22..1242c4e491 100644
--- a/api/ee/tests/manual/test_billing_period.py
+++ b/api/ee/tests/manual/test_billing_period.py
@@ -11,7 +11,7 @@
import pytest
from datetime import datetime, timezone
-from ee.src.utils.entitlements import monthly_period_from
+from ee.src.core.access.entitlements.service import monthly_period_from
# ---- Helpers ----
diff --git a/api/ee/tests/pytest/unit/services/test_db_manager_ee.py b/api/ee/tests/pytest/unit/services/test_db_manager_ee.py
index 89bbea5e31..48f64261a5 100644
--- a/api/ee/tests/pytest/unit/services/test_db_manager_ee.py
+++ b/api/ee/tests/pytest/unit/services/test_db_manager_ee.py
@@ -5,7 +5,7 @@
import pytest
from sqlalchemy.exc import NoResultFound
-from ee.src.models.shared_models import WorkspaceRole
+from ee.src.core.access.permissions.types import DefaultRole
from ee.src.services import db_manager_ee
@@ -45,10 +45,14 @@ async def __aexit__(self, exc_type, exc, tb):
def _patch_core_session(monkeypatch, memberships):
+ # db_manager_ee calls get_transactions_engine() — patch where it's called
+ mock_engine = type(
+ "MockEngine", (), {"session": lambda self: _SessionContext(memberships)}
+ )()
monkeypatch.setattr(
- db_manager_ee.engine,
- "core_session",
- lambda: _SessionContext(memberships),
+ db_manager_ee,
+ "get_transactions_engine",
+ lambda: mock_engine,
)
@@ -89,12 +93,12 @@ async def test_get_default_workspace_id_prefers_owner_membership(monkeypatch):
[
SimpleNamespace(
workspace_id=editor_workspace_id,
- role=WorkspaceRole.EDITOR,
+ role=DefaultRole.EDITOR,
created_at=datetime(2026, 4, 9, tzinfo=timezone.utc),
),
SimpleNamespace(
workspace_id=owner_workspace_id,
- role=WorkspaceRole.OWNER,
+ role=DefaultRole.OWNER,
created_at=datetime(2026, 4, 10, tzinfo=timezone.utc),
),
],
@@ -115,12 +119,12 @@ async def test_get_default_workspace_id_falls_back_to_oldest_membership(monkeypa
[
SimpleNamespace(
workspace_id=newer_workspace_id,
- role=WorkspaceRole.EDITOR,
+ role=DefaultRole.EDITOR,
created_at=datetime(2026, 4, 10, tzinfo=timezone.utc),
),
SimpleNamespace(
workspace_id=oldest_workspace_id,
- role=WorkspaceRole.VIEWER,
+ role=DefaultRole.VIEWER,
created_at=datetime(2026, 4, 9, tzinfo=timezone.utc),
),
],
@@ -180,10 +184,15 @@ async def fail_if_nested_invitation_delete_is_used(invitation_id):
"delete_invitation",
fail_if_nested_invitation_delete_is_used,
)
+ mock_engine = type(
+ "MockEngine",
+ (),
+ {"session": lambda self: _PendingInviteSessionContext(session)},
+ )()
monkeypatch.setattr(
- db_manager_ee.engine,
- "core_session",
- lambda: _PendingInviteSessionContext(session),
+ db_manager_ee,
+ "get_transactions_engine",
+ lambda: mock_engine,
)
result = await db_manager_ee.remove_user_from_workspace(
diff --git a/api/ee/tests/pytest/unit/test_access_controls.py b/api/ee/tests/pytest/unit/test_access_controls.py
index bef7461366..7a66835c74 100644
--- a/api/ee/tests/pytest/unit/test_access_controls.py
+++ b/api/ee/tests/pytest/unit/test_access_controls.py
@@ -1,5 +1,5 @@
"""Unit tests for the access-controls parsers in
-``ee.src.core.entitlements.controls``.
+``ee.src.core.access.controls``.
These exercise the pure parser functions (`_parse_plans_override`,
`_parse_roles_override`) so we don't have to manipulate process env vars at
@@ -11,9 +11,11 @@
import pytest
-from ee.src.core.entitlements import controls
-from ee.src.core.entitlements.types import DefaultPlan, DefaultRole, Tracker
-from ee.src.models.shared_models import Permission, WorkspaceRole
+from ee.src.core.access import controls
+from ee.src.core.access.entitlements import controls as entitlement_controls
+from ee.src.core.access.permissions import controls as permission_controls
+from ee.src.core.access.entitlements.types import DefaultPlan, Tracker
+from ee.src.core.access.permissions.types import Permission, DefaultRole, RequiredRole
# ---------------------------------------------------------------------------
@@ -36,26 +38,28 @@ def test_get_plan_entitlements_returns_none_for_empty_slug(self):
def test_get_roles_returns_workspace_role_set(self):
ws = controls.get_roles("workspace")
slugs = {r["role"] for r in ws}
- # Workspace exposes the code-default WorkspaceRole enum set on top of the
+ # Workspace exposes the code-default DefaultRole enum set on top of the
# owner/viewer minima.
- assert slugs == {r.value for r in WorkspaceRole}
+ assert slugs == {r.value for r in DefaultRole}
def test_get_roles_returns_empty_for_unknown_scope(self):
assert controls.get_roles("garbage") == []
def test_minima_present_in_every_scope(self):
- # Every scope must always expose `owner` and `viewer`.
+ # Every scope must always expose `owner`, `admin`, and `viewer`.
for scope in ("organization", "workspace", "project"):
slugs = {r["role"] for r in controls.get_roles(scope)}
- assert DefaultRole.OWNER.value in slugs
- assert DefaultRole.VIEWER.value in slugs
+ assert RequiredRole.OWNER.value in slugs
+ assert RequiredRole.ADMIN.value in slugs
+ assert RequiredRole.VIEWER.value in slugs
def test_organization_defaults_to_minima_only(self):
# Organization scope has no permission concept today; it stays at the
- # minima while workspace and project expose the code-default WorkspaceRole set.
+ # minima while workspace and project expose the code-default DefaultRole set.
assert {r["role"] for r in controls.get_roles("organization")} == {
- DefaultRole.OWNER.value,
- DefaultRole.VIEWER.value,
+ RequiredRole.OWNER.value,
+ RequiredRole.ADMIN.value,
+ RequiredRole.VIEWER.value,
}
def test_project_default_mirrors_workspace_role_set(self):
@@ -63,7 +67,7 @@ def test_project_default_mirrors_workspace_role_set(self):
# (admin/developer/editor/annotator), so the project scope must
# surface the same permission map for non-overridden deployments.
assert {r["role"] for r in controls.get_roles("project")} == {
- r.value for r in WorkspaceRole
+ r.value for r in DefaultRole
}
def test_owner_role_is_wildcard(self):
@@ -73,7 +77,7 @@ def test_owner_role_is_wildcard(self):
def test_viewer_in_workspace_and_project_is_read_only(self):
# Viewer permissions in workspace/project come from the code-default
- # `WorkspaceRole.VIEWER` set — every entry is a real Permission.
+ # `DefaultRole.VIEWER` set — every entry is a real Permission.
valid = {p.value for p in Permission}
for scope in ("workspace", "project"):
perms = controls.get_role_permissions(scope, "viewer")
@@ -99,7 +103,7 @@ def test_controls_hash_is_stable(self):
class TestParsePlansOverride:
def test_minimal_valid_override_with_flags(self):
- plans, descriptions = controls._parse_plans_override(
+ plans, descriptions = entitlement_controls._parse_plans_override(
{
"plan_a": {
"description": "Test plan",
@@ -117,7 +121,7 @@ def test_minimal_valid_override_with_flags(self):
assert descriptions["plan_a"] == "Test plan"
def test_counters_and_gauges_validated(self):
- plans, _ = controls._parse_plans_override(
+ plans, _ = entitlement_controls._parse_plans_override(
{
"p": {
"counters": {
@@ -132,21 +136,21 @@ def test_counters_and_gauges_validated(self):
def test_empty_dict_rejected(self):
with pytest.raises(ValueError, match="non-empty"):
- controls._parse_plans_override({})
+ entitlement_controls._parse_plans_override({})
def test_non_dict_rejected(self):
with pytest.raises(ValueError, match="non-empty JSON object"):
- controls._parse_plans_override([])
+ entitlement_controls._parse_plans_override([])
def test_plan_with_no_entitlements_allowed(self):
# Display-only plans (e.g. custom/self-hosted) may carry no
# entitlement trackers. The runtime returns an empty entitlement
# map for those plans rather than treating them as unknown.
- plans, _ = controls._parse_plans_override({"empty_plan": {}})
+ plans, _ = entitlement_controls._parse_plans_override({"empty_plan": {}})
assert plans == {"empty_plan": {}}
def test_plan_with_only_description_allowed(self):
- plans, descriptions = controls._parse_plans_override(
+ plans, descriptions = entitlement_controls._parse_plans_override(
{"p": {"description": "display only"}}
)
assert plans == {"p": {}}
@@ -154,19 +158,25 @@ def test_plan_with_only_description_allowed(self):
def test_unknown_flag_key_rejected(self):
with pytest.raises(ValueError, match="Unknown flag"):
- controls._parse_plans_override({"p": {"flags": {"bogus": True}}})
+ entitlement_controls._parse_plans_override(
+ {"p": {"flags": {"bogus": True}}}
+ )
def test_unknown_counter_key_rejected(self):
with pytest.raises(ValueError, match="Unknown counter"):
- controls._parse_plans_override({"p": {"counters": {"bogus": {"limit": 1}}}})
+ entitlement_controls._parse_plans_override(
+ {"p": {"counters": {"bogus": {"limit": 1}}}}
+ )
def test_unknown_gauge_key_rejected(self):
with pytest.raises(ValueError, match="Unknown gauge"):
- controls._parse_plans_override({"p": {"gauges": {"bogus": {"limit": 1}}}})
+ entitlement_controls._parse_plans_override(
+ {"p": {"gauges": {"bogus": {"limit": 1}}}}
+ )
def test_extra_field_in_plan_rejected(self):
with pytest.raises(ValueError, match="Invalid plan override"):
- controls._parse_plans_override({"p": {"surprise": "yes"}})
+ entitlement_controls._parse_plans_override({"p": {"surprise": "yes"}})
# ---------------------------------------------------------------------------
@@ -189,47 +199,49 @@ def test_project_override_is_mirrored_to_workspace_today(self):
# workspace role catalog is used by the Invite Members flow for project
# membership. A project-only override therefore intentionally replaces
# workspace extras too, instead of leaving workspace defaults intact.
- result = controls._parse_roles_override(
+ result = permission_controls._parse_roles_override(
{"project": [_custom_role("reviewer", ["read_system"])]}
)
- proj_slugs = [r["role"] for r in result["project"]]
- ws_slugs = [r["role"] for r in result["workspace"]]
+ prj_sclugs = [r["role"] for r in result["project"]]
+ wrk_sclugs = [r["role"] for r in result["workspace"]]
org_slugs = [r["role"] for r in result["organization"]]
# Project: minima + override (env overrides REPLACE default extras in
# the overridden scope).
- assert proj_slugs == ["owner", "viewer", "reviewer"]
- assert ws_slugs == ["owner", "viewer", "reviewer"]
+ assert prj_sclugs == ["owner", "admin", "viewer", "reviewer"]
+ assert wrk_sclugs == ["owner", "admin", "viewer", "reviewer"]
# Organization: untouched (minima-only by default).
- assert org_slugs == ["owner", "viewer"]
+ assert org_slugs == ["owner", "admin", "viewer"]
def test_empty_dict_rejected(self):
with pytest.raises(ValueError, match="non-empty"):
- controls._parse_roles_override({})
+ permission_controls._parse_roles_override({})
def test_unknown_scope_rejected(self):
with pytest.raises(ValueError, match="Unknown role scope"):
- controls._parse_roles_override(
+ permission_controls._parse_roles_override(
{"galaxy": [_custom_role("ranger", ["read_system"])]}
)
def test_empty_scope_list_rejected(self):
with pytest.raises(ValueError, match="non-empty list of roles"):
- controls._parse_roles_override({"project": []})
+ permission_controls._parse_roles_override({"project": []})
def test_owner_reserved_cannot_be_redefined(self):
with pytest.raises(ValueError, match="cannot redefine reserved role 'owner'"):
- controls._parse_roles_override({"project": [_custom_role("owner", ["*"])]})
+ permission_controls._parse_roles_override(
+ {"project": [_custom_role("owner", ["*"])]}
+ )
def test_viewer_reserved_cannot_be_redefined(self):
with pytest.raises(ValueError, match="cannot redefine reserved role 'viewer'"):
- controls._parse_roles_override(
+ permission_controls._parse_roles_override(
{"project": [_custom_role("viewer", ["read_system"])]}
)
def test_duplicate_custom_role_slug_rejected(self):
with pytest.raises(ValueError, match="Duplicate role slug"):
- controls._parse_roles_override(
+ permission_controls._parse_roles_override(
{
"project": [
_custom_role("reviewer", ["read_system"]),
@@ -240,19 +252,19 @@ def test_duplicate_custom_role_slug_rejected(self):
def test_empty_role_slug_rejected(self):
with pytest.raises(ValueError, match="Empty role slug|Invalid role override"):
- controls._parse_roles_override(
+ permission_controls._parse_roles_override(
{"project": [{"role": "", "permissions": []}]}
)
def test_unknown_permission_rejected(self):
with pytest.raises(ValueError, match="Unknown permission"):
- controls._parse_roles_override(
+ permission_controls._parse_roles_override(
{"project": [_custom_role("custom", ["totally_made_up_perm"])]}
)
def test_known_permission_accepted(self):
valid_perm = next(iter(Permission)).value
- result = controls._parse_roles_override(
+ result = permission_controls._parse_roles_override(
{"project": [_custom_role("custom", [valid_perm])]}
)
# Last entry is the custom role; first two are the minima.
@@ -260,13 +272,12 @@ def test_known_permission_accepted(self):
assert result["project"][-1]["permissions"] == [valid_perm]
def test_minima_always_present_after_override(self):
- result = controls._parse_roles_override(
+ result = permission_controls._parse_roles_override(
{"organization": [_custom_role("auditor", ["read_system"])]}
)
slugs = [r["role"] for r in result["organization"]]
- # Minima are always re-applied at the front of each scope.
- assert slugs[0] == "owner"
- assert slugs[1] == "viewer"
+ # Minima are always re-applied at the front of each scope, in order.
+ assert slugs[:3] == ["owner", "admin", "viewer"]
assert "auditor" in slugs
@@ -275,7 +286,7 @@ def test_minima_always_present_after_override(self):
# ---------------------------------------------------------------------------
-from ee.src.core.entitlements.types import ( # noqa: E402
+from ee.src.core.access.entitlements.types import ( # noqa: E402
Category,
Counter,
Flag,
@@ -290,23 +301,25 @@ def test_minima_always_present_after_override(self):
class TestDefaultPlanOverlayParse:
def test_empty_payload_rejected(self):
with pytest.raises(ValueError, match="non-empty"):
- controls._parse_default_plan_overlay({})
+ entitlement_controls._parse_default_plan_overlay({})
def test_non_dict_rejected(self):
with pytest.raises(ValueError, match="non-empty JSON object"):
- controls._parse_default_plan_overlay([])
+ entitlement_controls._parse_default_plan_overlay([])
def test_unknown_flag_rejected(self):
with pytest.raises(ValueError, match="Unknown flag"):
- controls._parse_default_plan_overlay({"flags": {"bogus": True}})
+ entitlement_controls._parse_default_plan_overlay({"flags": {"bogus": True}})
def test_unknown_counter_rejected(self):
with pytest.raises(ValueError, match="Unknown counter"):
- controls._parse_default_plan_overlay({"counters": {"bogus": {"limit": 1}}})
+ entitlement_controls._parse_default_plan_overlay(
+ {"counters": {"bogus": {"limit": 1}}}
+ )
def test_unknown_throttle_category_rejected(self):
with pytest.raises(ValueError, match="not a valid throttle category"):
- controls._parse_default_plan_overlay(
+ entitlement_controls._parse_default_plan_overlay(
{"throttles": {"galaxy": {"bucket": {"rate": 1}}}}
)
@@ -314,7 +327,7 @@ def test_extra_field_rejected(self):
with pytest.raises(
ValueError, match="Invalid AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY"
):
- controls._parse_default_plan_overlay({"surprise": "x"})
+ entitlement_controls._parse_default_plan_overlay({"surprise": "x"})
class TestDefaultPlanOverlayApply:
@@ -344,10 +357,10 @@ def _base_plan(self) -> dict:
def test_quota_field_merge_preserves_other_fields(self):
plans = {"the_plan": self._base_plan()}
descriptions: dict = {}
- overlay = controls._parse_default_plan_overlay(
+ overlay = entitlement_controls._parse_default_plan_overlay(
{"counters": {"traces_ingested": {"retention": 525600}}}
)
- plans, _ = controls._apply_default_plan_overlay(
+ plans, _ = entitlement_controls._apply_default_plan_overlay(
plans, descriptions, overlay, "the_plan"
)
traces: Quota = plans["the_plan"][Tracker.COUNTERS][Counter.TRACES_INGESTED]
@@ -358,10 +371,12 @@ def test_quota_field_merge_preserves_other_fields(self):
def test_throttle_category_patch_preserves_other_throttles(self):
plans = {"the_plan": self._base_plan()}
- overlay = controls._parse_default_plan_overlay(
+ overlay = entitlement_controls._parse_default_plan_overlay(
{"throttles": {"standard": {"bucket": {"rate": 7200}}}}
)
- plans, _ = controls._apply_default_plan_overlay(plans, {}, overlay, "the_plan")
+ plans, _ = entitlement_controls._apply_default_plan_overlay(
+ plans, {}, overlay, "the_plan"
+ )
throttles = plans["the_plan"][Tracker.THROTTLES]
# Standard throttle: rate patched, capacity preserved.
standard = next(t for t in throttles if t.categories == [Category.STANDARD])
@@ -373,26 +388,32 @@ def test_throttle_category_patch_preserves_other_throttles(self):
def test_overlay_targeting_unknown_plan_fails(self):
plans = {"the_plan": self._base_plan()}
- overlay = controls._parse_default_plan_overlay({"flags": {"access": True}})
+ overlay = entitlement_controls._parse_default_plan_overlay(
+ {"flags": {"access": True}}
+ )
with pytest.raises(ValueError, match="not in the effective plan set"):
- controls._apply_default_plan_overlay(plans, {}, overlay, "ghost_plan")
+ entitlement_controls._apply_default_plan_overlay(
+ plans, {}, overlay, "ghost_plan"
+ )
def test_overlay_targeting_throttle_with_no_match_fails(self):
plans = {"the_plan": self._base_plan()}
- overlay = controls._parse_default_plan_overlay(
+ overlay = entitlement_controls._parse_default_plan_overlay(
{"throttles": {"ai_services": {"bucket": {"rate": 99}}}}
)
with pytest.raises(
ValueError, match="no single-category throttle entry for 'ai_services'"
):
- controls._apply_default_plan_overlay(plans, {}, overlay, "the_plan")
+ entitlement_controls._apply_default_plan_overlay(
+ plans, {}, overlay, "the_plan"
+ )
def test_description_replaces(self):
plans = {"the_plan": self._base_plan()}
- overlay = controls._parse_default_plan_overlay(
+ overlay = entitlement_controls._parse_default_plan_overlay(
{"description": "Self-hosted override"}
)
- _, descriptions = controls._apply_default_plan_overlay(
+ _, descriptions = entitlement_controls._apply_default_plan_overlay(
plans, {}, overlay, "the_plan"
)
assert descriptions["the_plan"] == "Self-hosted override"
@@ -401,8 +422,12 @@ def test_flag_patch_only_overwrites_named_keys(self):
base = self._base_plan()
base[Tracker.FLAGS] = {Flag.ACCESS: False, Flag.RBAC: True}
plans = {"the_plan": base}
- overlay = controls._parse_default_plan_overlay({"flags": {"access": True}})
- plans, _ = controls._apply_default_plan_overlay(plans, {}, overlay, "the_plan")
+ overlay = entitlement_controls._parse_default_plan_overlay(
+ {"flags": {"access": True}}
+ )
+ plans, _ = entitlement_controls._apply_default_plan_overlay(
+ plans, {}, overlay, "the_plan"
+ )
flags = plans["the_plan"][Tracker.FLAGS]
assert flags[Flag.ACCESS] is True
assert flags[Flag.RBAC] is True # untouched
@@ -416,21 +441,21 @@ def test_flag_patch_only_overwrites_named_keys(self):
class TestRolesOverlayParse:
def test_empty_payload_rejected(self):
with pytest.raises(ValueError, match="non-empty"):
- controls._parse_roles_overlay({})
+ permission_controls._parse_roles_overlay({})
def test_non_dict_rejected(self):
with pytest.raises(ValueError, match="non-empty JSON object"):
- controls._parse_roles_overlay([])
+ permission_controls._parse_roles_overlay([])
def test_non_project_scope_rejected(self):
with pytest.raises(ValueError, match="only supports the 'project' scope"):
- controls._parse_roles_overlay(
+ permission_controls._parse_roles_overlay(
{"workspace": {"editor": {"permissions": ["read_system"]}}}
)
def test_multiple_scopes_rejected_lists_offenders(self):
with pytest.raises(ValueError, match="organization"):
- controls._parse_roles_overlay(
+ permission_controls._parse_roles_overlay(
{
"project": {"editor": {"permissions": ["read_system"]}},
"organization": {"foo": {"permissions": []}},
@@ -439,33 +464,35 @@ def test_multiple_scopes_rejected_lists_offenders(self):
def test_empty_project_block_rejected(self):
with pytest.raises(ValueError, match="must be a non-empty"):
- controls._parse_roles_overlay({"project": {}})
+ permission_controls._parse_roles_overlay({"project": {}})
def test_reserved_role_patch_rejected(self):
with pytest.raises(ValueError, match="cannot patch reserved role 'owner'"):
- controls._parse_roles_overlay(
+ permission_controls._parse_roles_overlay(
{"project": {"owner": {"permissions": ["read_system"]}}}
)
def test_reserved_viewer_patch_rejected(self):
with pytest.raises(ValueError, match="cannot patch reserved role 'viewer'"):
- controls._parse_roles_overlay(
+ permission_controls._parse_roles_overlay(
{"project": {"viewer": {"permissions": ["read_system"]}}}
)
def test_unknown_permission_rejected(self):
with pytest.raises(ValueError, match="Unknown permission"):
- controls._parse_roles_overlay(
+ permission_controls._parse_roles_overlay(
{"project": {"editor": {"permissions": ["bogus_perm"]}}}
)
def test_extra_field_rejected(self):
with pytest.raises(ValueError, match="Invalid AGENTA_ACCESS_ROLES_OVERLAY"):
- controls._parse_roles_overlay({"project": {"editor": {"surprise": "yes"}}})
+ permission_controls._parse_roles_overlay(
+ {"project": {"editor": {"surprise": "yes"}}}
+ )
def test_project_focused_shortcut_accepted(self):
# Top-level keys are role slugs (no scope wrapper).
- overlay = controls._parse_roles_overlay(
+ overlay = permission_controls._parse_roles_overlay(
{"editor": {"permissions": ["read_system"]}}
)
assert set(overlay.keys()) == {"editor"}
@@ -473,23 +500,25 @@ def test_project_focused_shortcut_accepted(self):
def test_project_focused_shortcut_rejects_reserved_role(self):
with pytest.raises(ValueError, match="cannot patch reserved role 'owner'"):
- controls._parse_roles_overlay({"owner": {"permissions": ["read_system"]}})
+ permission_controls._parse_roles_overlay(
+ {"owner": {"permissions": ["read_system"]}}
+ )
def test_full_form_with_organization_scope_rejected(self):
with pytest.raises(ValueError, match="only supports the 'project' scope"):
- controls._parse_roles_overlay(
+ permission_controls._parse_roles_overlay(
{"organization": {"editor": {"permissions": ["read_system"]}}}
)
def test_full_form_with_workspace_scope_rejected(self):
with pytest.raises(ValueError, match="only supports the 'project' scope"):
- controls._parse_roles_overlay(
+ permission_controls._parse_roles_overlay(
{"workspace": {"editor": {"permissions": ["read_system"]}}}
)
def test_mixing_scope_and_role_keys_rejected(self):
with pytest.raises(ValueError, match="mixes scope keys with non-scope"):
- controls._parse_roles_overlay(
+ permission_controls._parse_roles_overlay(
{
"project": {"editor": {"permissions": ["read_system"]}},
"auditor": {"permissions": ["read_system"]},
@@ -501,14 +530,14 @@ class TestRolesOverlayApply:
def _base_roles(self) -> dict:
# Mirror the code-default catalog (minima + default extras for
# workspace and project; minima only for organization).
- return controls._default_roles()
+ return permission_controls._default_roles()
def test_patch_existing_role_replaces_permissions_in_both_scopes(self):
roles = self._base_roles()
- overlay = controls._parse_roles_overlay(
+ overlay = permission_controls._parse_roles_overlay(
{"project": {"editor": {"permissions": ["read_system"]}}}
)
- result = controls._apply_roles_overlay(roles, overlay)
+ result = permission_controls._apply_roles_overlay(roles, overlay)
for scope in ("workspace", "project"):
editor = next(r for r in result[scope] if r["role"] == "editor")
@@ -519,10 +548,10 @@ def test_patch_existing_role_preserves_description_when_not_set(self):
original_description = next(
r for r in roles["project"] if r["role"] == "editor"
)["description"]
- overlay = controls._parse_roles_overlay(
+ overlay = permission_controls._parse_roles_overlay(
{"project": {"editor": {"permissions": ["read_system"]}}}
)
- result = controls._apply_roles_overlay(roles, overlay)
+ result = permission_controls._apply_roles_overlay(roles, overlay)
for scope in ("workspace", "project"):
editor = next(r for r in result[scope] if r["role"] == "editor")
@@ -533,10 +562,10 @@ def test_patch_existing_role_preserves_permissions_when_not_set(self):
original_perms = list(
next(r for r in roles["project"] if r["role"] == "editor")["permissions"]
)
- overlay = controls._parse_roles_overlay(
+ overlay = permission_controls._parse_roles_overlay(
{"project": {"editor": {"description": "Custom description"}}}
)
- result = controls._apply_roles_overlay(roles, overlay)
+ result = permission_controls._apply_roles_overlay(roles, overlay)
for scope in ("workspace", "project"):
editor = next(r for r in result[scope] if r["role"] == "editor")
@@ -545,7 +574,7 @@ def test_patch_existing_role_preserves_permissions_when_not_set(self):
def test_new_role_added_to_both_scopes(self):
roles = self._base_roles()
- overlay = controls._parse_roles_overlay(
+ overlay = permission_controls._parse_roles_overlay(
{
"project": {
"auditor": {
@@ -555,7 +584,7 @@ def test_new_role_added_to_both_scopes(self):
}
}
)
- result = controls._apply_roles_overlay(roles, overlay)
+ result = permission_controls._apply_roles_overlay(roles, overlay)
for scope in ("workspace", "project"):
slugs = [r["role"] for r in result[scope]]
@@ -563,16 +592,16 @@ def test_new_role_added_to_both_scopes(self):
def test_new_role_without_permissions_rejected(self):
roles = self._base_roles()
- overlay = controls._parse_roles_overlay(
+ overlay = permission_controls._parse_roles_overlay(
{"project": {"auditor": {"description": "Only description"}}}
)
with pytest.raises(ValueError, match="new role requires 'permissions'"):
- controls._apply_roles_overlay(roles, overlay)
+ permission_controls._apply_roles_overlay(roles, overlay)
def test_organization_scope_untouched(self):
roles = self._base_roles()
original_org_slugs = [r["role"] for r in roles["organization"]]
- overlay = controls._parse_roles_overlay(
+ overlay = permission_controls._parse_roles_overlay(
{
"project": {
"auditor": {
@@ -582,6 +611,6 @@ def test_organization_scope_untouched(self):
}
}
)
- result = controls._apply_roles_overlay(roles, overlay)
+ result = permission_controls._apply_roles_overlay(roles, overlay)
assert [r["role"] for r in result["organization"]] == original_org_slugs
diff --git a/api/ee/tests/pytest/unit/test_billing_router.py b/api/ee/tests/pytest/unit/test_billing_router.py
index f0b8b9b372..2e4b5c8d09 100644
--- a/api/ee/tests/pytest/unit/test_billing_router.py
+++ b/api/ee/tests/pytest/unit/test_billing_router.py
@@ -6,7 +6,7 @@
from ee.src.apis.fastapi.billing import router as billing_router_module
from ee.src.apis.fastapi.billing.router import BillingRouter
-from ee.src.core.entitlements.types import DefaultPlan
+from ee.src.core.access.entitlements.types import DefaultPlan
from ee.src.core.subscriptions.types import Event
@@ -28,18 +28,22 @@ async def test_fetch_subscription_reads_periods_from_stripe_objects(monkeypatch)
monkeypatch.setattr(billing_router_module.env.stripe, "api_key", "sk_test_123")
monkeypatch.setattr(
- billing_router_module.stripe.Subscription,
- "retrieve",
- lambda id: SimpleNamespace(
- items=SimpleNamespace(
- data=[
- SimpleNamespace(
- current_period_start=1710000000,
- current_period_end=1712592000,
- )
- ]
+ billing_router_module,
+ "_load_stripe",
+ lambda: SimpleNamespace(
+ Subscription=SimpleNamespace(
+ retrieve=lambda id: SimpleNamespace(
+ items=SimpleNamespace(
+ data=[
+ SimpleNamespace(
+ current_period_start=1710000000,
+ current_period_end=1712592000,
+ )
+ ]
+ ),
+ status="trialing",
+ ),
),
- status="trialing",
),
)
@@ -81,20 +85,25 @@ async def test_handle_events_reads_subscription_created_metadata_from_stripe_obj
monkeypatch.setattr(billing_router_module.env.stripe, "api_key", "sk_test_123")
monkeypatch.setattr(billing_router_module.env.stripe, "webhook_secret", None)
monkeypatch.setattr(
- billing_router_module.stripe.Event,
- "construct_from",
- lambda payload, api_key: SimpleNamespace(
- type="customer.subscription.created",
- data=SimpleNamespace(
- object=SimpleNamespace(
- id="sub_123",
- billing_cycle_anchor=1710000000,
- metadata=SimpleNamespace(
- target=billing_router_module.env.stripe.webhook_target,
- organization_id="org_123",
- plan=DefaultPlan.CLOUD_V0_PRO.value,
+ billing_router_module,
+ "_load_stripe",
+ lambda: SimpleNamespace(
+ api_key="sk_test_123",
+ Event=SimpleNamespace(
+ construct_from=lambda payload, api_key: SimpleNamespace(
+ type="customer.subscription.created",
+ data=SimpleNamespace(
+ object=SimpleNamespace(
+ id="sub_123",
+ billing_cycle_anchor=1710000000,
+ metadata=SimpleNamespace(
+ target=billing_router_module.env.stripe.webhook_target,
+ organization_id="org_123",
+ plan=DefaultPlan.CLOUD_V0_PRO.value,
+ ),
+ )
),
- )
+ ),
),
),
)
@@ -126,19 +135,24 @@ async def test_handle_events_reads_invoice_metadata_from_stripe_objects(monkeypa
monkeypatch.setattr(billing_router_module.env.stripe, "api_key", "sk_test_123")
monkeypatch.setattr(billing_router_module.env.stripe, "webhook_secret", None)
monkeypatch.setattr(
- billing_router_module.stripe.Event,
- "construct_from",
- lambda payload, api_key: SimpleNamespace(
- type="invoice.payment_succeeded",
- data=SimpleNamespace(
- object=SimpleNamespace(
- subscription_details=SimpleNamespace(
- metadata=SimpleNamespace(
- target=billing_router_module.env.stripe.webhook_target,
- organization_id="org_456",
+ billing_router_module,
+ "_load_stripe",
+ lambda: SimpleNamespace(
+ api_key="sk_test_123",
+ Event=SimpleNamespace(
+ construct_from=lambda payload, api_key: SimpleNamespace(
+ type="invoice.payment_succeeded",
+ data=SimpleNamespace(
+ object=SimpleNamespace(
+ subscription_details=SimpleNamespace(
+ metadata=SimpleNamespace(
+ target=billing_router_module.env.stripe.webhook_target,
+ organization_id="org_456",
+ )
+ )
)
- )
- )
+ ),
+ ),
),
),
)
@@ -175,8 +189,13 @@ async def test_cancel_subscription_updates_local_state_after_stripe_cancel(monke
retrieve = Mock(return_value=SimpleNamespace(status="active"))
cancel = Mock()
- monkeypatch.setattr(billing_router_module.stripe.Subscription, "retrieve", retrieve)
- monkeypatch.setattr(billing_router_module.stripe.Subscription, "cancel", cancel)
+ monkeypatch.setattr(
+ billing_router_module,
+ "_load_stripe",
+ lambda: SimpleNamespace(
+ Subscription=SimpleNamespace(retrieve=retrieve, cancel=cancel),
+ ),
+ )
response = await router.cancel_subscription(organization_id="org_123")
@@ -233,8 +252,13 @@ async def test_cancel_subscription_reconciles_when_stripe_is_already_canceled(
retrieve = Mock(return_value=SimpleNamespace(status="canceled"))
cancel = Mock()
- monkeypatch.setattr(billing_router_module.stripe.Subscription, "retrieve", retrieve)
- monkeypatch.setattr(billing_router_module.stripe.Subscription, "cancel", cancel)
+ monkeypatch.setattr(
+ billing_router_module,
+ "_load_stripe",
+ lambda: SimpleNamespace(
+ Subscription=SimpleNamespace(retrieve=retrieve, cancel=cancel),
+ ),
+ )
response = await router.cancel_subscription(organization_id="org_123")
diff --git a/api/ee/tests/pytest/unit/test_billing_settings.py b/api/ee/tests/pytest/unit/test_billing_settings.py
index 3a5076aa1a..384c7ffdc6 100644
--- a/api/ee/tests/pytest/unit/test_billing_settings.py
+++ b/api/ee/tests/pytest/unit/test_billing_settings.py
@@ -9,7 +9,7 @@
import pytest
from ee.src.core.subscriptions import settings
-from ee.src.core.entitlements.types import DefaultPlan
+from ee.src.core.access.entitlements.types import DefaultPlan
# ---------------------------------------------------------------------------
diff --git a/api/ee/tests/pytest/unit/test_compute_meter_id.py b/api/ee/tests/pytest/unit/test_compute_meter_id.py
index 6075d8f7ba..c0b1db1c44 100644
--- a/api/ee/tests/pytest/unit/test_compute_meter_id.py
+++ b/api/ee/tests/pytest/unit/test_compute_meter_id.py
@@ -8,9 +8,10 @@
rows that the database cannot detect.
These tests pin format invariants (determinism, equivalence, distinctness)
-plus the namespace derivation. Any change that alters the canonical form will
-surface as a failure in the distinctness/equivalence tests or a re-keying of
-the namespace test.
+plus the namespace derivation. The absolute output values are NOT pinned —
+they depend on `AGENTA_UUID_NAMESPACE` which is environment-derived. Any
+change that alters the canonical form will surface as a failure in the
+distinctness/equivalence tests or a re-keying of the namespace test.
"""
import uuid
@@ -23,8 +24,7 @@
MeterPeriod,
compute_meter_id,
)
-from ee.src.core.entitlements.types import Counter
-
+from ee.src.core.access.entitlements.types import Counter
# Fixed UUIDs used across the table — keep them stable.
ORG = uuid.UUID("a1111111-1111-1111-1111-111111111111")
@@ -34,13 +34,12 @@
# ---------------------------------------------------------------------------
-# Namespace UUID — derived from uuid5(NAMESPACE_DNS, "agenta").
+# Namespace UUID — derived from the fixed project namespace root.
# ---------------------------------------------------------------------------
-def test_namespace_uuid_is_derived_from_uuid_namespace():
- """The meters namespace must be a stable derivative of the project-wide
- agenta namespace UUID. Changing either side forces a full re-backfill."""
+def test_namespace_uuid_is_derived_from_fixed_root_namespace():
+ """The meters namespace must remain a stable derivative of the fixed root."""
expected = uuid.uuid5(uuid.uuid5(uuid.NAMESPACE_DNS, "agenta"), "meters")
assert AGENTA_METERS_NAMESPACE_UUID == expected
diff --git a/api/ee/tests/pytest/unit/test_controls_env_override.py b/api/ee/tests/pytest/unit/test_controls_env_override.py
index 67cf6a4556..04bb36c37d 100644
--- a/api/ee/tests/pytest/unit/test_controls_env_override.py
+++ b/api/ee/tests/pytest/unit/test_controls_env_override.py
@@ -56,12 +56,12 @@ def test_no_env_uses_defaults(self):
# Plans count should equal DefaultPlan enum size; catalog count
# should match (one entry per plan in DEFAULT_CATALOG plus the
# Enterprise contact-sales tier which has no `plan` field).
- from ee.src.core.entitlements.types import DEFAULT_CATALOG, DefaultPlan
+ from ee.src.core.access.entitlements.types import DEFAULT_CATALOG, DefaultPlan
expected_plans = len(list(DefaultPlan))
expected_catalog = len(DEFAULT_CATALOG)
out = _ok(
- "from ee.src.core.entitlements.controls import get_plans; "
+ "from ee.src.core.access.controls import get_plans; "
"from ee.src.core.subscriptions.settings import get_catalog; "
"print(len(get_plans())); print(len(get_catalog()))"
)
@@ -155,7 +155,7 @@ class TestPlansOverride:
def test_consistent_override_works_end_to_end(self):
out = _ok(
- "from ee.src.core.entitlements.controls import get_plans, get_plan_description; "
+ "from ee.src.core.access.controls import get_plans, get_plan_description; "
"from ee.src.core.subscriptions.settings import get_catalog, get_free_plan; "
"print(','.join(sorted(get_plans()))); "
"print(get_plan_description('only_plan')); "
@@ -171,21 +171,21 @@ def test_consistent_override_works_end_to_end(self):
def test_invalid_json_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_plans",
+ "from ee.src.core.access.controls import get_plans",
{"AGENTA_ACCESS_PLANS": "{not json"},
"AGENTA_ACCESS_PLANS is not valid JSON",
)
def test_wrong_top_level_type_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_plans",
+ "from ee.src.core.access.controls import get_plans",
{"AGENTA_ACCESS_PLANS": "[1,2,3]"},
"must be a JSON object",
)
def test_empty_object_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_plans",
+ "from ee.src.core.access.controls import get_plans",
{"AGENTA_ACCESS_PLANS": "{}"},
"non-empty",
)
@@ -194,7 +194,7 @@ def test_plan_with_only_description_allowed(self):
# Display-only plans (no enforced trackers) are accepted. They show
# up in the effective plan map with an empty entitlements dict.
out = _ok(
- "from ee.src.core.entitlements.controls import get_plans, get_plan_entitlements; "
+ "from ee.src.core.access.controls import get_plans, get_plan_entitlements; "
"print(sorted(get_plans())); print(get_plan_entitlements('x'))",
env_extra={"AGENTA_ACCESS_PLANS": '{"x":{"description":"y"}}'},
)
@@ -517,7 +517,7 @@ class TestRolesOverride:
def test_custom_role_with_known_permission_appended_to_minima(self):
out = _ok(
- "from ee.src.core.entitlements.controls import get_roles, get_role_permissions; "
+ "from ee.src.core.access.controls import get_roles, get_role_permissions; "
"print(','.join(r['role'] for r in get_roles('project'))); "
"print(','.join(get_role_permissions('project','reviewer')))",
env_extra={
@@ -528,7 +528,7 @@ def test_custom_role_with_known_permission_appended_to_minima(self):
)
lines = out.splitlines()
# owner + viewer minima first, custom role last.
- assert lines[0] == "owner,viewer,reviewer"
+ assert lines[0] == "owner,admin,viewer,reviewer"
assert lines[1] == "read_system"
def test_project_override_is_mirrored_to_workspace_today(self):
@@ -537,7 +537,7 @@ def test_project_override_is_mirrored_to_workspace_today(self):
# membership. A project-only override therefore intentionally replaces
# workspace extras too, instead of leaving workspace defaults intact.
out = _ok(
- "from ee.src.core.entitlements.controls import get_roles; "
+ "from ee.src.core.access.controls import get_roles; "
"print(','.join(r['role'] for r in get_roles('workspace')))",
env_extra={
"AGENTA_ACCESS_ROLES": json.dumps(
@@ -545,11 +545,11 @@ def test_project_override_is_mirrored_to_workspace_today(self):
)
},
)
- assert out.strip() == "owner,viewer,reviewer"
+ assert out.strip() == "owner,admin,viewer,reviewer"
def test_unknown_permission_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{
"AGENTA_ACCESS_ROLES": json.dumps(
{"project": [{"role": "x", "permissions": ["bogus_perm_id"]}]}
@@ -560,7 +560,7 @@ def test_unknown_permission_fails_startup(self):
def test_redefining_owner_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{
"AGENTA_ACCESS_ROLES": json.dumps(
{"project": [{"role": "owner", "permissions": ["*"]}]}
@@ -571,7 +571,7 @@ def test_redefining_owner_fails_startup(self):
def test_redefining_viewer_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{
"AGENTA_ACCESS_ROLES": json.dumps(
{"project": [{"role": "viewer", "permissions": ["read_system"]}]}
@@ -582,7 +582,7 @@ def test_redefining_viewer_fails_startup(self):
def test_duplicate_custom_role_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{
"AGENTA_ACCESS_ROLES": json.dumps(
{
@@ -598,14 +598,14 @@ def test_duplicate_custom_role_fails_startup(self):
def test_empty_roles_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{"AGENTA_ACCESS_ROLES": "{}"},
"non-empty",
)
def test_empty_scope_list_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{"AGENTA_ACCESS_ROLES": json.dumps({"project": []})},
"non-empty list of roles",
)
@@ -649,8 +649,8 @@ def test_overlay_patches_traces_retention(self):
# Retention enum values, so we use one of those rather than an
# arbitrary minute count.
out = _ok(
- "from ee.src.core.entitlements.controls import get_plan_entitlements; "
- "from ee.src.core.entitlements.types import Tracker, Counter; "
+ "from ee.src.core.access.controls import get_plan_entitlements; "
+ "from ee.src.core.access.entitlements.types import Tracker, Counter; "
"ent = get_plan_entitlements('cloud_v0_hobby'); "
"print(ent[Tracker.COUNTERS][Counter.TRACES_INGESTED].retention.value)",
env_extra={
@@ -667,8 +667,8 @@ def test_overlay_preserves_other_quota_fields(self):
# retention=Retention.MONTHLY. Overlay sets only retention → free
# and period stay.
out = _ok(
- "from ee.src.core.entitlements.controls import get_plan_entitlements; "
- "from ee.src.core.entitlements.types import Tracker, Counter; "
+ "from ee.src.core.access.controls import get_plan_entitlements; "
+ "from ee.src.core.access.entitlements.types import Tracker, Counter; "
"q = get_plan_entitlements('cloud_v0_hobby')"
"[Tracker.COUNTERS][Counter.TRACES_INGESTED]; "
"print(q.retention.value, q.free, q.period.value)",
@@ -683,8 +683,8 @@ def test_overlay_preserves_other_quota_fields(self):
def test_overlay_patches_throttle_rate_only(self):
out = _ok(
- "from ee.src.core.entitlements.controls import get_plan_entitlements; "
- "from ee.src.core.entitlements.types import Tracker, Category; "
+ "from ee.src.core.access.controls import get_plan_entitlements; "
+ "from ee.src.core.access.entitlements.types import Tracker, Category; "
"ent = get_plan_entitlements('cloud_v0_hobby'); "
"t = next(t for t in ent[Tracker.THROTTLES] "
" if t.categories == [Category.STANDARD]); "
@@ -701,7 +701,7 @@ def test_overlay_patches_throttle_rate_only(self):
def test_overlay_invalid_field_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_plans",
+ "from ee.src.core.access.controls import get_plans",
{
"AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY": json.dumps(
{"flags": {"bogus_flag": True}}
@@ -712,7 +712,7 @@ def test_overlay_invalid_field_fails_startup(self):
def test_overlay_targeting_unknown_plan_fails(self):
_fails(
- "from ee.src.core.entitlements.controls import get_plans",
+ "from ee.src.core.access.controls import get_plans",
{
"AGENTA_ACCESS_DEFAULT_PLAN": "ghost_plan",
"AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY": json.dumps(
@@ -724,7 +724,7 @@ def test_overlay_targeting_unknown_plan_fails(self):
def test_overlay_empty_object_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_plans",
+ "from ee.src.core.access.controls import get_plans",
{"AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY": "{}"},
"non-empty",
)
@@ -794,7 +794,7 @@ class TestRolesOverlay:
def test_overlay_patches_editor_permissions_in_both_scopes(self):
out = _ok(
- "from ee.src.core.entitlements.controls import get_role_permissions; "
+ "from ee.src.core.access.controls import get_role_permissions; "
"print(get_role_permissions('workspace', 'editor')); "
"print(get_role_permissions('project', 'editor'))",
env_extra={
@@ -809,7 +809,7 @@ def test_overlay_patches_editor_permissions_in_both_scopes(self):
def test_overlay_adds_new_role_to_both_scopes(self):
out = _ok(
- "from ee.src.core.entitlements.controls import get_roles; "
+ "from ee.src.core.access.controls import get_roles; "
"print('auditor' in [r['role'] for r in get_roles('workspace')]); "
"print('auditor' in [r['role'] for r in get_roles('project')])",
env_extra={
@@ -831,7 +831,7 @@ def test_overlay_organization_scope_untouched(self):
# Organization scope only has the minima (owner + viewer) by default.
# The overlay must not change that — it targets workspace + project.
out = _ok(
- "from ee.src.core.entitlements.controls import get_roles; "
+ "from ee.src.core.access.controls import get_roles; "
"print(','.join(r['role'] for r in get_roles('organization')))",
env_extra={
"AGENTA_ACCESS_ROLES_OVERLAY": json.dumps(
@@ -846,11 +846,11 @@ def test_overlay_organization_scope_untouched(self):
)
},
)
- assert out.strip() == "owner,viewer"
+ assert out.strip() == "owner,admin,viewer"
def test_overlay_non_project_scope_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{
"AGENTA_ACCESS_ROLES_OVERLAY": json.dumps(
{"workspace": {"editor": {"permissions": ["read_system"]}}}
@@ -861,7 +861,7 @@ def test_overlay_non_project_scope_fails_startup(self):
def test_overlay_reserved_role_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{
"AGENTA_ACCESS_ROLES_OVERLAY": json.dumps(
{"project": {"owner": {"permissions": ["*"]}}}
@@ -872,7 +872,7 @@ def test_overlay_reserved_role_fails_startup(self):
def test_overlay_unknown_permission_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{
"AGENTA_ACCESS_ROLES_OVERLAY": json.dumps(
{"project": {"editor": {"permissions": ["bogus_perm"]}}}
@@ -883,14 +883,14 @@ def test_overlay_unknown_permission_fails_startup(self):
def test_overlay_empty_object_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{"AGENTA_ACCESS_ROLES_OVERLAY": "{}"},
"non-empty",
)
def test_overlay_new_role_without_permissions_fails_startup(self):
_fails(
- "from ee.src.core.entitlements.controls import get_roles",
+ "from ee.src.core.access.controls import get_roles",
{
"AGENTA_ACCESS_ROLES_OVERLAY": json.dumps(
{"project": {"auditor": {"description": "x"}}}
diff --git a/api/ee/tests/pytest/unit/test_events_retention.py b/api/ee/tests/pytest/unit/test_events_retention.py
index a3a794ff74..10b7fd4d12 100644
--- a/api/ee/tests/pytest/unit/test_events_retention.py
+++ b/api/ee/tests/pytest/unit/test_events_retention.py
@@ -13,7 +13,7 @@
import pytest
-from ee.src.core.entitlements.types import (
+from ee.src.core.access.entitlements.types import (
Counter,
Period,
Quota,
diff --git a/api/ee/tests/pytest/unit/test_meters_dao_fetch.py b/api/ee/tests/pytest/unit/test_meters_dao_fetch.py
index 676f1d4c90..ecdeba0982 100644
--- a/api/ee/tests/pytest/unit/test_meters_dao_fetch.py
+++ b/api/ee/tests/pytest/unit/test_meters_dao_fetch.py
@@ -68,14 +68,16 @@ async def __aexit__(self, exc_type, exc, tb):
return False
-def _patch_session(monkeypatch, session: _Session):
- from ee.src.dbs.postgres.meters import dao as dao_module
+class _Engine:
+ def __init__(self, session: _Session):
+ self._session = session
- monkeypatch.setattr(
- dao_module.engine,
- "core_session",
- lambda: _SessionContext(session),
- )
+ def session(self):
+ return _SessionContext(self._session)
+
+
+def _dao_with_session(session: _Session) -> MetersDAO:
+ return MetersDAO(engine=_Engine(session))
def _where_sql(stmt) -> str:
@@ -103,12 +105,11 @@ def _where_sql(stmt) -> str:
class TestFetchScopeFilters:
@pytest.mark.asyncio
- async def test_org_only_scope_binds_finer_dims_to_is_null(self, monkeypatch):
+ async def test_org_only_scope_binds_finer_dims_to_is_null(self):
"""`MeterScope(organization_id=X)` → finer dims IS NULL."""
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(scope=MeterScope(organization_id=ORG))
assert len(session.executed_statements) == 1
@@ -118,12 +119,11 @@ async def test_org_only_scope_binds_finer_dims_to_is_null(self, monkeypatch):
assert "user_id is null" in sql
@pytest.mark.asyncio
- async def test_workspace_scope_binds_below_to_is_null(self, monkeypatch):
+ async def test_workspace_scope_binds_below_to_is_null(self):
"""workspace-scoped read should not match project/user rows."""
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(
scope=MeterScope(organization_id=ORG, workspace_id=WRK),
)
@@ -134,12 +134,11 @@ async def test_workspace_scope_binds_below_to_is_null(self, monkeypatch):
assert "user_id is null" in sql
@pytest.mark.asyncio
- async def test_user_scope_binds_every_dim(self, monkeypatch):
+ async def test_user_scope_binds_every_dim(self):
"""fully-bound user scope → all four dims bound to concrete values."""
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(
scope=MeterScope(
organization_id=ORG,
@@ -155,12 +154,11 @@ async def test_user_scope_binds_every_dim(self, monkeypatch):
assert "is null" not in sql
@pytest.mark.asyncio
- async def test_scope_none_applies_no_filter(self, monkeypatch):
+ async def test_scope_none_applies_no_filter(self):
"""`scope=None` escape hatch — no scope filter at all."""
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(scope=None)
sql = _where_sql(session.executed_statements[0]).lower()
@@ -170,12 +168,11 @@ async def test_scope_none_applies_no_filter(self, monkeypatch):
assert "user_id" not in sql
@pytest.mark.asyncio
- async def test_empty_scope_is_equivalent_to_scope_none(self, monkeypatch):
+ async def test_empty_scope_is_equivalent_to_scope_none(self):
"""`MeterScope()` (all dims unset) is treated as the same admin escape as `scope=None`."""
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(scope=MeterScope())
sql = _where_sql(session.executed_statements[0]).lower()
@@ -187,12 +184,11 @@ async def test_empty_scope_is_equivalent_to_scope_none(self, monkeypatch):
class TestFetchPeriodFilters:
@pytest.mark.asyncio
- async def test_monthly_period_binds_day_to_is_null(self, monkeypatch):
+ async def test_monthly_period_binds_day_to_is_null(self):
"""MONTHLY read (year, month, day=None) must not match DAILY rows."""
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(period=MeterPeriod(year=2026, month=5))
sql = _where_sql(session.executed_statements[0]).lower()
@@ -201,12 +197,11 @@ async def test_monthly_period_binds_day_to_is_null(self, monkeypatch):
assert "day is null" in sql
@pytest.mark.asyncio
- async def test_daily_period_binds_every_dim(self, monkeypatch):
+ async def test_daily_period_binds_every_dim(self):
"""DAILY read binds year+month+day to concrete values."""
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(period=MeterPeriod(year=2026, month=5, day=19))
sql = _where_sql(session.executed_statements[0]).lower()
@@ -217,12 +212,11 @@ async def test_daily_period_binds_every_dim(self, monkeypatch):
assert "day is null" not in sql
@pytest.mark.asyncio
- async def test_empty_period_binds_all_to_is_null(self, monkeypatch):
+ async def test_empty_period_binds_all_to_is_null(self):
"""`MeterPeriod()` (no period) → all three IS NULL — pins lifetime rows."""
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(period=MeterPeriod())
sql = _where_sql(session.executed_statements[0]).lower()
@@ -231,12 +225,11 @@ async def test_empty_period_binds_all_to_is_null(self, monkeypatch):
assert "day is null" in sql
@pytest.mark.asyncio
- async def test_period_none_applies_no_filter(self, monkeypatch):
+ async def test_period_none_applies_no_filter(self):
"""`period=None` escape hatch — no period filter at all."""
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(period=None)
sql = _where_sql(session.executed_statements[0]).lower()
@@ -247,22 +240,20 @@ async def test_period_none_applies_no_filter(self, monkeypatch):
class TestFetchKeyFilter:
@pytest.mark.asyncio
- async def test_key_bound(self, monkeypatch):
+ async def test_key_bound(self):
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(key=Meters.TRACES_RETRIEVED)
sql = _where_sql(session.executed_statements[0]).lower()
assert "key" in sql
@pytest.mark.asyncio
- async def test_key_none_applies_no_filter(self, monkeypatch):
+ async def test_key_none_applies_no_filter(self):
session = _Session()
- _patch_session(monkeypatch, session)
- dao = MetersDAO()
+ dao = _dao_with_session(session)
await dao.fetch(key=None)
sql = _where_sql(session.executed_statements[0]).lower()
diff --git a/api/ee/tests/pytest/unit/test_meters_dao_strict_soft.py b/api/ee/tests/pytest/unit/test_meters_dao_strict_soft.py
index 318e9a9321..91fb80afe6 100644
--- a/api/ee/tests/pytest/unit/test_meters_dao_strict_soft.py
+++ b/api/ee/tests/pytest/unit/test_meters_dao_strict_soft.py
@@ -26,7 +26,7 @@
import pytest
-from ee.src.core.entitlements.types import Quota
+from ee.src.core.access.entitlements.types import Quota
from ee.src.core.meters.types import MeterDTO, Meters
from ee.src.dbs.postgres.meters.dao import MetersDAO
@@ -104,14 +104,16 @@ async def __aexit__(self, exc_type, exc, tb):
return False
-def _patch_session(monkeypatch, session: _Session):
- from ee.src.dbs.postgres.meters import dao as dao_module
+class _MockEngine:
+ def __init__(self, session: _Session):
+ self._session = session
- monkeypatch.setattr(
- dao_module.engine,
- "core_session",
- lambda: _SessionContext(session),
- )
+ def session(self):
+ return _SessionContext(self._session)
+
+
+def _mock_engine(session: _Session) -> _MockEngine:
+ return _MockEngine(session)
# ---------------------------------------------------------------------------
@@ -121,12 +123,10 @@ def _patch_session(monkeypatch, session: _Session):
class TestCheck:
@pytest.mark.asyncio
- async def test_below_limit_with_delta_allows(self, monkeypatch):
+ async def test_below_limit_with_delta_allows(self):
"""current=5, delta=3, limit=10 → 8 <= 10 → allowed."""
session = _Session(scalar=SimpleNamespace(value=5, synced=0))
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, dto = await dao.check(
meter=_meter(delta=3),
quota=Quota(limit=10),
@@ -136,12 +136,10 @@ async def test_below_limit_with_delta_allows(self, monkeypatch):
assert dto.value == 5 # returned current value
@pytest.mark.asyncio
- async def test_at_limit_with_zero_delta_allows(self, monkeypatch):
+ async def test_at_limit_with_zero_delta_allows(self):
"""current=10, delta=0, limit=10 → 10 <= 10 → allowed (boundary)."""
session = _Session(scalar=SimpleNamespace(value=10, synced=0))
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _ = await dao.check(
meter=_meter(delta=0),
quota=Quota(limit=10),
@@ -150,12 +148,10 @@ async def test_at_limit_with_zero_delta_allows(self, monkeypatch):
assert allowed is True
@pytest.mark.asyncio
- async def test_would_exceed_limit_blocks(self, monkeypatch):
+ async def test_would_exceed_limit_blocks(self):
"""current=10, delta=2, limit=10 → 12 > 10 → blocked."""
session = _Session(scalar=SimpleNamespace(value=10, synced=0))
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _ = await dao.check(
meter=_meter(delta=2),
quota=Quota(limit=10),
@@ -164,12 +160,10 @@ async def test_would_exceed_limit_blocks(self, monkeypatch):
assert allowed is False
@pytest.mark.asyncio
- async def test_negative_delta_clamps_at_zero(self, monkeypatch):
+ async def test_negative_delta_clamps_at_zero(self):
"""current=3, delta=-10, limit=10 → max(-7, 0)=0 <= 10 → allowed."""
session = _Session(scalar=SimpleNamespace(value=3, synced=0))
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _ = await dao.check(
meter=_meter(delta=-10),
quota=Quota(limit=10),
@@ -178,12 +172,10 @@ async def test_negative_delta_clamps_at_zero(self, monkeypatch):
assert allowed is True
@pytest.mark.asyncio
- async def test_no_existing_row_treats_current_as_zero(self, monkeypatch):
+ async def test_no_existing_row_treats_current_as_zero(self):
"""No row in DB, delta=5, limit=10 → 0+5=5 <= 10 → allowed."""
session = _Session(scalar=None)
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, dto = await dao.check(
meter=_meter(delta=5),
quota=Quota(limit=10),
@@ -194,12 +186,10 @@ async def test_no_existing_row_treats_current_as_zero(self, monkeypatch):
assert dto.synced == 0
@pytest.mark.asyncio
- async def test_no_limit_always_allows(self, monkeypatch):
+ async def test_no_limit_always_allows(self):
"""limit=None → unconditional pass even at huge values."""
session = _Session(scalar=SimpleNamespace(value=10_000_000, synced=0))
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _ = await dao.check(
meter=_meter(delta=1_000_000),
quota=Quota(limit=None),
@@ -234,12 +224,10 @@ def _extract_where_sql(statement) -> str:
class TestAdjustStrictVsSoft:
@pytest.mark.asyncio
- async def test_strict_emits_value_plus_delta_predicate(self, monkeypatch):
+ async def test_strict_emits_value_plus_delta_predicate(self):
"""Strict mode must gate on `value + delta <= limit`."""
session = _Session(row=(7,)) # post-update value
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
await dao.adjust(
meter=_meter(delta=2),
quota=Quota(limit=10, strict=True),
@@ -255,7 +243,7 @@ async def test_strict_emits_value_plus_delta_predicate(self, monkeypatch):
@pytest.mark.asyncio
async def test_nonstrict_emits_value_strictly_less_than_limit_predicate(
- self, monkeypatch
+ self,
):
"""Non-strict mode gates the SQL predicate on `value < limit`.
@@ -266,9 +254,7 @@ async def test_nonstrict_emits_value_strictly_less_than_limit_predicate(
already at-or-over limit.
"""
session = _Session(row=(7,))
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
await dao.adjust(
meter=_meter(delta=2),
quota=Quota(limit=10, strict=False),
@@ -301,15 +287,13 @@ async def test_nonstrict_emits_value_strictly_less_than_limit_predicate(
# ---------------------------------------------------------------------
@pytest.mark.asyncio
- async def test_huge_delta_denied_in_strict(self, monkeypatch):
+ async def test_huge_delta_denied_in_strict(self):
"""0 + 12 with limit=10 → predictable self-overshoot → deny.
Python-side fast-path; no DB call should land.
"""
session = _Session(row=None)
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _, _ = await dao.adjust(
meter=_meter(delta=12),
quota=Quota(limit=10, strict=True),
@@ -321,15 +305,13 @@ async def test_huge_delta_denied_in_strict(self, monkeypatch):
)
@pytest.mark.asyncio
- async def test_huge_delta_denied_in_nonstrict(self, monkeypatch):
+ async def test_huge_delta_denied_in_nonstrict(self):
"""0 + 12 with limit=10 → predictable self-overshoot → deny.
Non-strict shares the same `delta <= limit` rule as strict.
"""
session = _Session(row=None)
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _, _ = await dao.adjust(
meter=_meter(delta=12),
quota=Quota(limit=10, strict=False),
@@ -339,13 +321,11 @@ async def test_huge_delta_denied_in_nonstrict(self, monkeypatch):
assert session.executed_statements == []
@pytest.mark.asyncio
- async def test_at_limit_denied_in_strict(self, monkeypatch):
+ async def test_at_limit_denied_in_strict(self):
"""10 + 2 with limit=10 → strict SQL predicate filters the row
out (greatest(10+2, 0) > 10) → RETURNING empty → deny."""
session = _Session(row=None)
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _, _ = await dao.adjust(
meter=_meter(delta=2),
quota=Quota(limit=10, strict=True),
@@ -357,13 +337,11 @@ async def test_at_limit_denied_in_strict(self, monkeypatch):
assert len(session.executed_statements) == 1
@pytest.mark.asyncio
- async def test_at_limit_denied_in_nonstrict(self, monkeypatch):
+ async def test_at_limit_denied_in_nonstrict(self):
"""10 + 2 with limit=10 → non-strict SQL predicate `value < 10`
rejects current=10 → RETURNING empty → deny."""
session = _Session(row=None)
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _, _ = await dao.adjust(
meter=_meter(delta=2),
quota=Quota(limit=10, strict=False),
@@ -373,13 +351,11 @@ async def test_at_limit_denied_in_nonstrict(self, monkeypatch):
assert len(session.executed_statements) == 1
@pytest.mark.asyncio
- async def test_one_over_denied_in_strict(self, monkeypatch):
+ async def test_one_over_denied_in_strict(self):
"""9 + 2 with limit=10 → strict SQL predicate `greatest(9+2, 0) > 10`
rejects → deny."""
session = _Session(row=None)
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _, _ = await dao.adjust(
meter=_meter(delta=2),
quota=Quota(limit=10, strict=True),
@@ -388,7 +364,7 @@ async def test_one_over_denied_in_strict(self, monkeypatch):
assert allowed is False
@pytest.mark.asyncio
- async def test_one_over_allowed_in_nonstrict(self, monkeypatch):
+ async def test_one_over_allowed_in_nonstrict(self):
"""9 + 2 with limit=10 → non-strict SQL predicate `9 < 10` → allow.
This is the cross-the-line-once case: the request itself crosses
@@ -396,9 +372,7 @@ async def test_one_over_allowed_in_nonstrict(self, monkeypatch):
request would then be denied by the same predicate.
"""
session = _Session(row=(11,)) # post-update value
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _, _ = await dao.adjust(
meter=_meter(delta=2),
quota=Quota(limit=10, strict=False),
@@ -407,13 +381,11 @@ async def test_one_over_allowed_in_nonstrict(self, monkeypatch):
assert allowed is True
@pytest.mark.asyncio
- async def test_fills_exactly_allowed_in_both_modes(self, monkeypatch):
+ async def test_fills_exactly_allowed_in_both_modes(self):
"""8 + 2 with limit=10 → equal to limit → allowed in both modes."""
for strict in (True, False):
session = _Session(row=(10,))
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _, _ = await dao.adjust(
meter=_meter(delta=2),
quota=Quota(limit=10, strict=strict),
@@ -421,16 +393,14 @@ async def test_fills_exactly_allowed_in_both_modes(self, monkeypatch):
assert allowed is True, f"strict={strict}: 8+2 should allow"
@pytest.mark.asyncio
- async def test_strict_blocks_when_proposed_value_exceeds_limit(self, monkeypatch):
+ async def test_strict_blocks_when_proposed_value_exceeds_limit(self):
"""`adjust` early-returns False when caller-set value > limit.
This is the absolute-value pre-check at the top of `adjust` (delta-mode
callers hit the SQL predicate instead).
"""
session = _Session(row=None)
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, _, _ = await dao.adjust(
meter=_meter(value=20), # explicit value, no delta
quota=Quota(limit=10, strict=True),
@@ -441,13 +411,11 @@ async def test_strict_blocks_when_proposed_value_exceeds_limit(self, monkeypatch
assert session.executed_statements == []
@pytest.mark.asyncio
- async def test_returns_false_when_predicate_blocks(self, monkeypatch):
+ async def test_returns_false_when_predicate_blocks(self):
"""When the WHERE clause filters the row out, RETURNING is empty →
upsert "succeeded" with zero rows → DAO returns allowed=False."""
session = _Session(row=None) # RETURNING produced nothing
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, dto, _ = await dao.adjust(
meter=_meter(delta=5),
quota=Quota(limit=10, strict=True),
@@ -459,13 +427,11 @@ async def test_returns_false_when_predicate_blocks(self, monkeypatch):
assert dto.value == 5
@pytest.mark.asyncio
- async def test_returns_true_when_returning_row_present(self, monkeypatch):
+ async def test_returns_true_when_returning_row_present(self):
"""RETURNING produced a row → upsert succeeded → allowed=True with
the post-update value coming from RETURNING."""
session = _Session(row=(7,))
- _patch_session(monkeypatch, session)
-
- dao = MetersDAO()
+ dao = MetersDAO(engine=_mock_engine(session))
allowed, dto, _ = await dao.adjust(
meter=_meter(delta=2),
quota=Quota(limit=10, strict=True),
diff --git a/api/ee/tests/pytest/unit/test_meters_types.py b/api/ee/tests/pytest/unit/test_meters_types.py
index ec2ef97c94..c78988055c 100644
--- a/api/ee/tests/pytest/unit/test_meters_types.py
+++ b/api/ee/tests/pytest/unit/test_meters_types.py
@@ -1,4 +1,4 @@
-from ee.src.core.entitlements.types import Counter, Gauge
+from ee.src.core.access.entitlements.types import Counter, Gauge
from ee.src.core.meters.types import Meters
diff --git a/api/ee/tests/pytest/unit/test_period_from.py b/api/ee/tests/pytest/unit/test_period_from.py
index e8f762a6dc..8c74aee4de 100644
--- a/api/ee/tests/pytest/unit/test_period_from.py
+++ b/api/ee/tests/pytest/unit/test_period_from.py
@@ -18,9 +18,9 @@
import pytest
-from ee.src.core.entitlements.types import Period
+from ee.src.core.access.entitlements.types import Period
from ee.src.core.meters.types import MeterPeriod
-from ee.src.utils.entitlements import period_from
+from ee.src.core.access.entitlements.service import period_from
# ---------------------------------------------------------------------------
@@ -47,7 +47,7 @@ def test_period_yearly_sets_only_year():
"""YEARLY buckets the meter by year. Month/day must stay None so
every row in the same year shares a `meter_id`."""
fake_now = datetime(2026, 5, 18, 12, 0, 0, tzinfo=timezone.utc)
- with patch("ee.src.utils.entitlements.datetime") as mock_dt:
+ with patch("ee.src.core.access.entitlements.service.datetime") as mock_dt:
mock_dt.now.return_value = fake_now
mock_dt.side_effect = lambda *a, **kw: datetime(*a, **kw)
p = period_from(period=Period.YEARLY)
@@ -65,7 +65,7 @@ def test_period_yearly_sets_only_year():
def test_period_monthly_sets_year_and_month_without_anchor():
"""MONTHLY without an anchor returns the calendar (year, month)."""
fake_now = datetime(2026, 5, 18, 12, 0, 0, tzinfo=timezone.utc)
- with patch("ee.src.utils.entitlements.datetime") as mock_dt:
+ with patch("ee.src.core.access.entitlements.service.datetime") as mock_dt:
mock_dt.now.return_value = fake_now
mock_dt.side_effect = lambda *a, **kw: datetime(*a, **kw)
p = period_from(period=Period.MONTHLY)
@@ -78,7 +78,7 @@ def test_period_monthly_advances_when_day_meets_anchor():
"""MONTHLY with `anchor=N` and `now.day >= N` rolls into next month
— Stripe-style anchor semantics. Day=18, anchor=15 advances to June."""
fake_now = datetime(2026, 5, 18, 12, 0, 0, tzinfo=timezone.utc)
- with patch("ee.src.utils.entitlements.datetime") as mock_dt:
+ with patch("ee.src.core.access.entitlements.service.datetime") as mock_dt:
mock_dt.now.return_value = fake_now
mock_dt.side_effect = lambda *a, **kw: datetime(*a, **kw)
p = period_from(period=Period.MONTHLY, anchor=15)
@@ -90,7 +90,7 @@ def test_period_monthly_advances_when_day_meets_anchor():
def test_period_monthly_stays_when_day_before_anchor():
"""MONTHLY with `now.day < anchor` stays in the current period."""
fake_now = datetime(2026, 5, 10, 12, 0, 0, tzinfo=timezone.utc)
- with patch("ee.src.utils.entitlements.datetime") as mock_dt:
+ with patch("ee.src.core.access.entitlements.service.datetime") as mock_dt:
mock_dt.now.return_value = fake_now
mock_dt.side_effect = lambda *a, **kw: datetime(*a, **kw)
p = period_from(period=Period.MONTHLY, anchor=15)
@@ -102,7 +102,7 @@ def test_period_monthly_stays_when_day_before_anchor():
def test_period_monthly_year_rollover_with_anchor():
"""Dec 20 + anchor=15 → next period is (2027, 1)."""
fake_now = datetime(2026, 12, 20, 12, 0, 0, tzinfo=timezone.utc)
- with patch("ee.src.utils.entitlements.datetime") as mock_dt:
+ with patch("ee.src.core.access.entitlements.service.datetime") as mock_dt:
mock_dt.now.return_value = fake_now
mock_dt.side_effect = lambda *a, **kw: datetime(*a, **kw)
p = period_from(period=Period.MONTHLY, anchor=15)
@@ -118,7 +118,7 @@ def test_period_monthly_year_rollover_with_anchor():
def test_period_daily_sets_full_calendar_date():
"""DAILY buckets the meter by full calendar day."""
fake_now = datetime(2026, 5, 18, 12, 0, 0, tzinfo=timezone.utc)
- with patch("ee.src.utils.entitlements.datetime") as mock_dt:
+ with patch("ee.src.core.access.entitlements.service.datetime") as mock_dt:
mock_dt.now.return_value = fake_now
mock_dt.side_effect = lambda *a, **kw: datetime(*a, **kw)
p = period_from(period=Period.DAILY)
@@ -130,7 +130,7 @@ def test_period_daily_ignores_anchor():
"""DAILY is calendar-day-aligned; anchor only applies to MONTHLY.
Same input with and without an anchor must produce the same bucket."""
fake_now = datetime(2026, 5, 18, 12, 0, 0, tzinfo=timezone.utc)
- with patch("ee.src.utils.entitlements.datetime") as mock_dt:
+ with patch("ee.src.core.access.entitlements.service.datetime") as mock_dt:
mock_dt.now.return_value = fake_now
mock_dt.side_effect = lambda *a, **kw: datetime(*a, **kw)
p_without = period_from(period=Period.DAILY)
diff --git a/api/ee/tests/pytest/unit/test_scope_from.py b/api/ee/tests/pytest/unit/test_scope_from.py
index 7b15bf21e9..934cbb238d 100644
--- a/api/ee/tests/pytest/unit/test_scope_from.py
+++ b/api/ee/tests/pytest/unit/test_scope_from.py
@@ -23,9 +23,9 @@
import pytest
-from ee.src.core.entitlements.types import Scope
+from ee.src.core.access.entitlements.types import Scope
from ee.src.core.meters.types import MeterScope
-from ee.src.utils.entitlements import scope_from
+from ee.src.core.access.entitlements.service import scope_from
from oss.src.utils.context import (
AuthScope,
AuthContext,
diff --git a/api/ee/tests/requirements.txt b/api/ee/tests/requirements.txt
deleted file mode 100644
index 510e3b3b6f..0000000000
--- a/api/ee/tests/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
--r ../../oss/tests/requirements.txt
\ No newline at end of file
diff --git a/api/entrypoints/routers.py b/api/entrypoints/routers.py
index d02d91f11e..f60566b1fe 100644
--- a/api/entrypoints/routers.py
+++ b/api/entrypoints/routers.py
@@ -1,5 +1,7 @@
from contextlib import asynccontextmanager
+import time
+import agenta as ag
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.gzip import GZipMiddleware
@@ -13,6 +15,16 @@
from oss.src.utils.logging import get_module_logger
from oss.src.utils.helpers import warn_deprecated_env_vars, validate_required_env_vars
+# Engines
+from oss.src.dbs.postgres.shared.engine import (
+ get_transactions_engine,
+ get_analytics_engine,
+)
+from oss.src.dbs.redis.shared.engine import (
+ get_cache_engine,
+ get_streams_engine,
+)
+
from oss.databases.postgres.migrations.core.utils import (
check_for_new_migrations as check_for_new_core_migrations,
)
@@ -20,8 +32,8 @@
check_for_new_migrations as check_for_new_tracing_migrations,
)
-from oss.src.services.auth_service import authentication_middleware
-from oss.src.services.analytics_service import analytics_middleware
+from oss.src.middlewares.auth import auth_middleware
+from oss.src.middlewares.analytics import analytics_middleware
from oss.src.core.auth.supertokens.config import init_supertokens
@@ -132,34 +144,48 @@
from oss.src.routers import (
user_profile,
- health_router,
- permissions_router,
projects_router,
api_key_router,
organization_router,
workspace_router,
)
+from oss.src.apis.fastapi.access.router import AccessRouter
from oss.src.utils.env import env
from entrypoints.worker_evaluations import evaluations_worker
-import oss.src.core.evaluations.tasks.live # noqa: F401
-import oss.src.core.evaluations.tasks.legacy # noqa: F401
-import oss.src.core.evaluations.tasks.batch # noqa: F401
+import oss.src.core.evaluations.tasks.run # noqa: F401
+import oss.src.core.evaluations.tasks.processor # noqa: F401
-import agenta as ag
+print("[STARTUP] About to import agenta SDK")
+_t_ag_import = time.perf_counter()
+# ag already imported at top
+print(f"[STARTUP] agenta SDK imported (+{time.perf_counter() - _t_ag_import:.3f}s)")
+
+_startup_t0 = time.perf_counter()
+print("[STARTUP] imports completed, beginning initialization")
+print("[STARTUP] ag.init() starting")
+_t_ag_init = time.perf_counter()
ag.init(
api_url=env.agenta.api_url,
)
+print(f"[STARTUP] ag.init() completed (+{time.perf_counter() - _t_ag_init:.3f}s)")
ee = None
+_t_before_ee = time.perf_counter()
if is_ee():
+ print("[STARTUP] EE module import starting (Stripe init happens here)")
import ee.src.main as ee # type: ignore
+ _ee_elapsed = time.perf_counter() - _t_before_ee
+ print(f"[STARTUP] EE module import completed (+{_ee_elapsed:.3f}s)")
+
log = get_module_logger(__name__)
init_supertokens()
+_st_elapsed = time.perf_counter() - _startup_t0
+print(f"[STARTUP] init_supertokens completed (+{_st_elapsed:.3f}s)")
@asynccontextmanager
@@ -183,6 +209,10 @@ async def lifespan(*args, **kwargs):
for adapter in _composio_adapters.values():
await adapter.close()
+ await _transactions_engine.close()
+ await _analytics_engine.close()
+ await _streams_engine.close()
+
_OPENAPI_TAGS = [
{
@@ -326,11 +356,11 @@ async def lifespan(*args, **kwargs):
app.add_middleware(SupportHeadersMiddleware)
if is_ee():
- from ee.src.services.throttling_service import throttling_middleware
+ from ee.src.middlewares.throttling import throttling_middleware
app.middleware("http")(throttling_middleware)
-app.middleware("http")(authentication_middleware)
+app.middleware("http")(auth_middleware)
app.middleware("http")(analytics_middleware)
app.add_middleware(GZipMiddleware, minimum_size=1000, compresslevel=5)
@@ -358,47 +388,65 @@ async def lifespan(*args, **kwargs):
# DAOS -------------------------------------------------------------------------
-secrets_dao = SecretsDAO()
-webhooks_dao = WebhooksDAO()
+_t_daos = time.perf_counter()
+print("[STARTUP] DAO initialization starting")
+
+# Instantiate engines at startup (lazy — they don't connect until first use)
+_transactions_engine = get_transactions_engine()
+_analytics_engine = get_analytics_engine()
+_streams_engine = get_streams_engine()
+_cache_engine = get_cache_engine()
-tracing_dao = TracingDAO()
-events_dao = EventsDAO()
+secrets_dao = SecretsDAO(engine=_transactions_engine)
+webhooks_dao = WebhooksDAO(engine=_transactions_engine)
+
+tracing_dao = TracingDAO(engine=_analytics_engine)
+events_dao = EventsDAO(engine=_analytics_engine)
testcases_dao = BlobsDAO(
+ engine=_transactions_engine,
BlobDBE=TestcaseBlobDBE,
)
testsets_dao = GitDAO(
+ engine=_transactions_engine,
ArtifactDBE=TestsetArtifactDBE,
VariantDBE=TestsetVariantDBE,
RevisionDBE=TestsetRevisionDBE,
)
queries_dao = GitDAO(
+ engine=_transactions_engine,
ArtifactDBE=QueryArtifactDBE,
VariantDBE=QueryVariantDBE,
RevisionDBE=QueryRevisionDBE,
)
workflows_dao = GitDAO(
+ engine=_transactions_engine,
ArtifactDBE=WorkflowArtifactDBE,
VariantDBE=WorkflowVariantDBE,
RevisionDBE=WorkflowRevisionDBE,
)
environments_dao = GitDAO(
+ engine=_transactions_engine,
ArtifactDBE=EnvironmentArtifactDBE,
VariantDBE=EnvironmentVariantDBE,
RevisionDBE=EnvironmentRevisionDBE,
)
-evaluations_dao = EvaluationsDAO()
-folders_dao = FoldersDAO()
+evaluations_dao = EvaluationsDAO(engine=_transactions_engine)
+folders_dao = FoldersDAO(engine=_transactions_engine)
-tools_dao = ToolsDAO()
+tools_dao = ToolsDAO(engine=_transactions_engine)
# SERVICES ---------------------------------------------------------------------
+_t_daos_done = time.perf_counter() - _t_daos
+print(f"[STARTUP] DAO initialization completed (+{_t_daos_done:.3f}s)")
+_t_services = time.perf_counter()
+
vault_service = VaultService(
secrets_dao=secrets_dao,
)
@@ -504,6 +552,11 @@ async def lifespan(*args, **kwargs):
testsets_service=testsets_service,
evaluators_service=evaluators_service,
evaluations_worker=evaluations_worker,
+ # Sub-services the tensor slice processor needs; passing them lets the
+ # service build its own TensorSliceOperations (probe/populate/process).
+ testcases_service=testcases_service,
+ workflows_service=workflows_service,
+ applications_service=applications_service,
)
simple_evaluations_service = SimpleEvaluationsService(
@@ -540,6 +593,10 @@ async def lifespan(*args, **kwargs):
adapter_registry=tools_adapter_registry,
)
+_t_services_done = time.perf_counter() - _t_services
+print(f"[STARTUP] Service initialization completed (+{_t_services_done:.3f}s)")
+_t_routers = time.perf_counter()
+
# ROUTERS ----------------------------------------------------------------------
secrets = VaultRouter(
@@ -688,6 +745,8 @@ async def lifespan(*args, **kwargs):
# MOUNTING ROUTERS TO APP ROUTES -----------------------------------------------
+_t_mount_routers = time.perf_counter()
+
app.include_router(
router=secrets.router,
tags=["Secrets"],
@@ -1067,15 +1126,16 @@ async def lifespan(*args, **kwargs):
tags=["Admin"],
)
-app.include_router(
- health_router.router,
- prefix="/health",
- tags=["Status"],
-)
+@app.get("/health", operation_id="health_check", tags=["Status"])
+async def health_check():
+ return {"status": "ok"}
+
+
+access_router = AccessRouter()
app.include_router(
- permissions_router.router,
- prefix="/permissions",
+ access_router.router,
+ prefix="/access",
tags=["Access"],
)
@@ -1109,5 +1169,14 @@ async def lifespan(*args, **kwargs):
)
# ------------------------------------------------------------------------------
+_t_routers_done = time.perf_counter() - _t_routers
+print(f"[STARTUP] Router initialization completed (+{_t_routers_done:.3f}s)")
+
+_t_mount_routers_done = time.perf_counter() - _t_mount_routers
+print(f"[STARTUP] Router mounting completed (+{_t_mount_routers_done:.3f}s)")
+
if ee and is_ee():
app = ee.extend_app_schema(app)
+
+_total_startup = time.perf_counter() - _startup_t0
+print(f"[STARTUP] module initialization completed in {_total_startup:.3f}s")
diff --git a/api/entrypoints/worker_evaluations.py b/api/entrypoints/worker_evaluations.py
index 8624da4a62..99d0b8ea14 100644
--- a/api/entrypoints/worker_evaluations.py
+++ b/api/entrypoints/worker_evaluations.py
@@ -15,7 +15,7 @@
# Guard EE imports — see worker_tracing.py for the rationale.
if is_ee():
- from ee.src.utils.entitlements import bootstrap_entitlements_services
+ from ee.src.core.access.entitlements.service import bootstrap_entitlements_services
from oss.src.core.evaluations.runtime.locks import run_worker_heartbeat
diff --git a/api/entrypoints/worker_events.py b/api/entrypoints/worker_events.py
index 76966657e9..ac65d3246b 100644
--- a/api/entrypoints/worker_events.py
+++ b/api/entrypoints/worker_events.py
@@ -19,7 +19,7 @@
# Guard EE imports — see worker_tracing.py for the rationale.
if is_ee():
- from ee.src.utils.entitlements import bootstrap_entitlements_services
+ from ee.src.core.access.entitlements.service import bootstrap_entitlements_services
log = get_module_logger(__name__)
diff --git a/api/entrypoints/worker_tracing.py b/api/entrypoints/worker_tracing.py
index e87f532bd9..c4c2ef936f 100644
--- a/api/entrypoints/worker_tracing.py
+++ b/api/entrypoints/worker_tracing.py
@@ -44,7 +44,7 @@
# the `ee.*` package to be importable. The matching `is_ee()` branch in
# `main_async` calls `bootstrap_entitlements_services()`.
if is_ee():
- from ee.src.utils.entitlements import bootstrap_entitlements_services
+ from ee.src.core.access.entitlements.service import bootstrap_entitlements_services
log = get_module_logger(__name__)
diff --git a/api/entrypoints/worker_webhooks.py b/api/entrypoints/worker_webhooks.py
index 33a56d98ba..0419429db4 100644
--- a/api/entrypoints/worker_webhooks.py
+++ b/api/entrypoints/worker_webhooks.py
@@ -14,7 +14,7 @@
# Guard EE imports — see worker_tracing.py for the rationale.
if is_ee():
- from ee.src.utils.entitlements import bootstrap_entitlements_services
+ from ee.src.core.access.entitlements.service import bootstrap_entitlements_services
import agenta as ag
diff --git a/api/oss/databases/postgres/migrations/core/versions/a1d2e3f4a5b6_add_default_evaluation_queues.py b/api/oss/databases/postgres/migrations/core/versions/a1d2e3f4a5b6_add_default_evaluation_queues.py
new file mode 100644
index 0000000000..6256e9b898
--- /dev/null
+++ b/api/oss/databases/postgres/migrations/core/versions/a1d2e3f4a5b6_add_default_evaluation_queues.py
@@ -0,0 +1,39 @@
+"""add default evaluation queues
+
+Revision ID: a1d2e3f4a5b6
+Revises: f7a8b9c0d1e2
+Create Date: 2026-05-15 00:00:00
+
+Previously shared revision id `a1b2c3d4e5f6` with
+`drop_corrupted_metrics_for_some_runs`, so alembic skipped it and the index
+below never ran. Renamed to `a1d2e3f4a5b6` and chained after main's head
+`e6f7a8b9c0d1` to keep the branch a single linear chain.
+
+The partial unique index covers ALL default queues (active or archived), so
+there is at most ONE default queue row per (project_id, run_id) for the lifetime
+of the run. Archiving a default does NOT free the slot — the single row is
+archived/unarchived in place by reconcile, and user-facing archive of a default
+is forbidden in the service layer.
+"""
+
+from typing import Sequence, Union
+
+from alembic import op
+
+revision: str = "a1d2e3f4a5b6"
+down_revision: Union[str, None] = "f7a8b9c0d1e2"
+branch_labels: Union[str, Sequence[str], None] = None
+depends_on: Union[str, Sequence[str], None] = None
+
+
+def upgrade() -> None:
+ op.execute("DROP INDEX IF EXISTS ux_evaluation_queues_default_per_run")
+ op.execute("""
+ CREATE UNIQUE INDEX ux_evaluation_queues_default_per_run
+ ON evaluation_queues (project_id, run_id)
+ WHERE (flags ->> 'is_default')::boolean = true
+ """)
+
+
+def downgrade() -> None:
+ op.execute("DROP INDEX IF EXISTS ux_evaluation_queues_default_per_run")
diff --git a/api/oss/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py b/api/oss/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py
new file mode 100644
index 0000000000..30da5d2a86
--- /dev/null
+++ b/api/oss/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py
@@ -0,0 +1,294 @@
+"""backfill default evaluation queues
+
+Revision ID: a2b3c4d5e6f8
+Revises: a1d2e3f4a5b6
+Create Date: 2026-05-15 00:10:00
+
+Backfills source-family flags (`has_traces` / `has_testcases` / `has_queries` /
+`has_testsets`) to match the runtime derivation rule, then mass-creates default
+queues per the runtime policy and recomputes `is_queue`. The query/testset
+recompute keys on exact reference-key presence, not a substring match.
+
+Performance shape: runs are processed in keyset-paginated chunks (by
+`evaluation_runs.id`). For each chunk a single COMPUTE select does the heavy
+`jsonb_array_elements` step scan and the per-run default-queue existence check
+ONCE (no correlated `EXISTS`/`JOIN` re-evaluated per written row). Python then
+decides per run what to do, and the writes are cheap set-based `unnest` updates
+keyed by id — no subqueries in the mutation path. Every step is idempotent (the
+flag rebuild is deterministic; runs that already have a default queue are not
+re-created), so a re-run is safe.
+"""
+
+import json
+from typing import List, Sequence, Union
+
+import click
+import sqlalchemy as sa
+from alembic import op
+from sqlalchemy.engine import Connection
+
+revision: str = "a2b3c4d5e6f8"
+down_revision: Union[str, None] = "a1d2e3f4a5b6"
+branch_labels: Union[str, Sequence[str], None] = None
+depends_on: Union[str, Sequence[str], None] = None
+
+BATCH_SIZE = 100
+
+
+# Keyset pagination over run ids. id > cursor with ORDER BY id is index-friendly
+# (id is part of the PK) and stable; LIMIT bounds each chunk. Compared as text so
+# the cursor is a plain string seeded as "" below every UUID.
+_NEXT_RUN_IDS = sa.text("""
+ SELECT id::text
+ FROM evaluation_runs
+ WHERE id::text > :cursor
+ ORDER BY id::text
+ LIMIT :batch
+""")
+
+# One heavy pass per chunk. Derives the source-family flags from the run's steps
+# (the `jsonb_array_elements` scan that mirrors dbs/postgres/evaluations/utils.py)
+# and, via a single LEFT JOIN over the chunk's runs, reports whether each run
+# already has a default queue (any state) and an ACTIVE default queue. Direct
+# sources (`has_traces`/`has_testcases`) come from the exact step key on a
+# reference-less input; reference-backed sources (`has_queries`/`has_testsets`)
+# from exact-key presence (JSONB `?`), not a substring match that would misfire
+# on `query_anchor` / `testset_metadata`.
+_COMPUTE_CHUNK = sa.text("""
+ SELECT
+ r.id::text AS run_id,
+ r.project_id::text AS project_id,
+ r.created_by_id::text AS created_by_id,
+ COALESCE(r.status, 'running') AS status,
+ COALESCE((r.flags ->> 'has_human')::boolean, false) AS has_human,
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(COALESCE(r.data::jsonb -> 'steps', '[]'::jsonb)) AS step
+ WHERE step ->> 'type' = 'input'
+ AND COALESCE(step -> 'references', '{}'::jsonb) = '{}'::jsonb
+ AND lower(COALESCE(step ->> 'key', '')) IN ('traces', 'query-direct')
+ ) AS has_traces,
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(COALESCE(r.data::jsonb -> 'steps', '[]'::jsonb)) AS step
+ WHERE step ->> 'type' = 'input'
+ AND COALESCE(step -> 'references', '{}'::jsonb) = '{}'::jsonb
+ AND lower(COALESCE(step ->> 'key', '')) IN ('testcases', 'testset-direct')
+ ) AS has_testcases,
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(COALESCE(r.data::jsonb -> 'steps', '[]'::jsonb)) AS step
+ WHERE step ->> 'type' = 'input'
+ AND COALESCE(step -> 'references', '{}'::jsonb) ? 'query_revision'
+ ) AS has_queries,
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(COALESCE(r.data::jsonb -> 'steps', '[]'::jsonb)) AS step
+ WHERE step ->> 'type' = 'input'
+ AND COALESCE(step -> 'references', '{}'::jsonb) ? 'testset_revision'
+ ) AS has_testsets,
+ bool_or((q.flags ->> 'is_default')::boolean) AS has_any_default,
+ bool_or(
+ (q.flags ->> 'is_default')::boolean AND q.deleted_at IS NULL
+ ) AS has_active_default
+ FROM evaluation_runs r
+ LEFT JOIN evaluation_queues q
+ ON q.project_id = r.project_id
+ AND q.run_id = r.id
+ WHERE r.id = ANY(CAST(:ids AS uuid[]))
+ GROUP BY r.id, r.project_id, r.created_by_id, r.status, r.flags
+""")
+
+# Cheap set-based flag write: merge the precomputed flag object onto each run by
+# id. No subqueries; `unnest` pairs each id with its jsonb patch.
+_APPLY_FLAGS = sa.text("""
+ UPDATE evaluation_runs r
+ SET flags = COALESCE(r.flags, '{}'::jsonb) || patch.flags::jsonb
+ FROM unnest(
+ CAST(:ids AS uuid[]),
+ CAST(:flags AS jsonb[])
+ ) AS patch(id, flags)
+ WHERE r.id = patch.id
+""")
+
+# Cheap create: one row per run id that needs a default queue (computed in
+# Python — has_human and no existing default). No NOT EXISTS in the write path.
+_CREATE_DEFAULT_QUEUES = sa.text("""
+ INSERT INTO evaluation_queues (
+ project_id,
+ id,
+ created_at,
+ created_by_id,
+ flags,
+ data,
+ status,
+ run_id
+ )
+ SELECT
+ CAST(src.project_id AS uuid),
+ gen_random_uuid(),
+ CURRENT_TIMESTAMP,
+ CAST(src.created_by_id AS uuid),
+ jsonb_build_object('is_default', true, 'is_sequential', false),
+ '{}'::json,
+ src.status,
+ CAST(src.run_id AS uuid)
+ FROM unnest(
+ CAST(:project_ids AS text[]),
+ CAST(:run_ids AS text[]),
+ CAST(:created_by_ids AS text[]),
+ CAST(:statuses AS text[])
+ ) AS src(project_id, run_id, created_by_id, status)
+""")
+
+# Cheap archive: flip deleted_at on the active default queue of each run id that
+# should no longer have one (computed in Python). Keyed by (project_id, run_id).
+_ARCHIVE_STALE_DEFAULT_QUEUES = sa.text("""
+ UPDATE evaluation_queues q
+ SET deleted_at = CURRENT_TIMESTAMP,
+ deleted_by_id = CAST(src.created_by_id AS uuid)
+ FROM unnest(
+ CAST(:project_ids AS text[]),
+ CAST(:run_ids AS text[]),
+ CAST(:created_by_ids AS text[])
+ ) AS src(project_id, run_id, created_by_id)
+ WHERE q.project_id = CAST(src.project_id AS uuid)
+ AND q.run_id = CAST(src.run_id AS uuid)
+ AND (q.flags ->> 'is_default')::boolean = true
+ AND q.deleted_at IS NULL
+""")
+
+
+def _next_run_ids(connection: Connection, *, cursor: str) -> List[str]:
+ result = connection.execute(
+ _NEXT_RUN_IDS,
+ {"cursor": cursor, "batch": BATCH_SIZE},
+ )
+ return [row[0] for row in result.fetchall()]
+
+
+def _flags_patch(row) -> str:
+ # Build the jsonb patch for a run: the four source-family flags plus the
+ # recomputed is_queue, matching the queue state this chunk produces.
+ #
+ # is_queue is true iff the run has a human step AND ends this chunk with an
+ # ACTIVE default queue. Mirroring _reconcile_default_queue and the create
+ # guard below:
+ # - human + already-active default -> active (is_queue=True)
+ # - human + no default at all -> created (is_queue=True)
+ # - human + only an ARCHIVED default -> not unarchived here -> False
+ # (same as the prior migration)
+ # - non-human + active default -> archived (is_queue=False)
+ # - non-human -> no active default (False)
+ if row.has_human:
+ ends_with_active_default = row.has_active_default or not row.has_any_default
+ else:
+ ends_with_active_default = False
+
+ return json.dumps(
+ {
+ "has_traces": bool(row.has_traces),
+ "has_testcases": bool(row.has_testcases),
+ "has_queries": bool(row.has_queries),
+ "has_testsets": bool(row.has_testsets),
+ "is_queue": bool(ends_with_active_default),
+ }
+ )
+
+
+def upgrade() -> None:
+ connection = op.get_bind()
+
+ cursor = ""
+ processed = 0
+ created = 0
+ archived = 0
+
+ while True:
+ ids = _next_run_ids(connection, cursor=cursor)
+ if not ids:
+ break
+
+ rows = connection.execute(_COMPUTE_CHUNK, {"ids": ids}).fetchall()
+
+ flag_ids: List[str] = []
+ flag_patches: List[str] = []
+
+ create_projects: List[str] = []
+ create_runs: List[str] = []
+ create_creators: List[str] = []
+ create_statuses: List[str] = []
+
+ archive_projects: List[str] = []
+ archive_runs: List[str] = []
+ archive_creators: List[str] = []
+
+ for row in rows:
+ flag_ids.append(row.run_id)
+ flag_patches.append(_flags_patch(row))
+
+ # Mirror _reconcile_default_queue: has_human runs should have a
+ # default; create one only when none exists yet.
+ if row.has_human and not row.has_any_default:
+ create_projects.append(row.project_id)
+ create_runs.append(row.run_id)
+ create_creators.append(row.created_by_id)
+ create_statuses.append(row.status)
+
+ # Non-human runs with a stale active default get it archived.
+ if not row.has_human and row.has_active_default:
+ archive_projects.append(row.project_id)
+ archive_runs.append(row.run_id)
+ archive_creators.append(row.created_by_id)
+
+ # Create/archive first so the flag write's is_queue (computed in Python
+ # from the same decisions) matches the resulting queue state.
+ if create_runs:
+ connection.execute(
+ _CREATE_DEFAULT_QUEUES,
+ {
+ "project_ids": create_projects,
+ "run_ids": create_runs,
+ "created_by_ids": create_creators,
+ "statuses": create_statuses,
+ },
+ )
+ created += len(create_runs)
+
+ if archive_runs:
+ connection.execute(
+ _ARCHIVE_STALE_DEFAULT_QUEUES,
+ {
+ "project_ids": archive_projects,
+ "run_ids": archive_runs,
+ "created_by_ids": archive_creators,
+ },
+ )
+ archived += len(archive_runs)
+
+ connection.execute(
+ _APPLY_FLAGS,
+ {"ids": flag_ids, "flags": flag_patches},
+ )
+
+ processed += len(ids)
+ cursor = ids[-1]
+
+ click.echo(
+ f"[default-queue backfill] processed_runs={processed} "
+ f"batch={len(ids)} created={created} archived={archived}"
+ )
+
+ click.echo(
+ f"[default-queue backfill] done processed_runs={processed} "
+ f"created={created} archived={archived}"
+ )
+
+
+def downgrade() -> None:
+ # Keep generated queues/results intact on downgrade. Remove only the newly
+ # inferred flags; old is_queue semantics cannot be reconstructed safely.
+ op.execute("""
+ UPDATE evaluation_runs
+ SET flags = COALESCE(flags, '{}'::jsonb) - 'has_traces' - 'has_testcases'
+ """)
diff --git a/api/oss/src/apis/fastapi/access/__init__.py b/api/oss/src/apis/fastapi/access/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/api/oss/src/apis/fastapi/access/router.py b/api/oss/src/apis/fastapi/access/router.py
new file mode 100644
index 0000000000..a383aef158
--- /dev/null
+++ b/api/oss/src/apis/fastapi/access/router.py
@@ -0,0 +1,234 @@
+from typing import Optional, Union
+from uuid import UUID
+
+from fastapi import APIRouter, Query, HTTPException
+from fastapi.responses import JSONResponse
+
+from oss.src.utils.logging import get_module_logger
+from oss.src.utils.caching import get_cache, set_cache
+from oss.src.utils.context import get_auth_context, get_auth_scope
+from oss.src.utils.common import is_ee, is_oss
+
+if is_ee():
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import check_action_access
+ from ee.src.core.access.entitlements.service import check_entitlements, Counter
+
+
+log = get_module_logger(__name__)
+
+
+class Allow(JSONResponse):
+ def __init__(
+ self,
+ credentials: Optional[str] = None,
+ ) -> None:
+ super().__init__(
+ status_code=200,
+ content={
+ "effect": "allow",
+ "credentials": credentials,
+ },
+ )
+
+
+class Deny(HTTPException):
+ def __init__(self) -> None:
+ super().__init__(
+ status_code=403,
+ detail="Forbidden",
+ )
+
+
+async def _check_scope_access(
+ scope_type: Optional[str] = None,
+ scope_id: Optional[UUID] = None,
+) -> bool:
+ auth_scope = get_auth_scope()
+
+ allow_scope = False
+
+ if scope_type == "project":
+ allow_scope = str(auth_scope.project_id) == str(scope_id)
+ elif scope_type == "workspace":
+ allow_scope = str(auth_scope.workspace_id) == str(scope_id)
+ elif not scope_type and not scope_id:
+ allow_scope = True
+
+ return allow_scope
+
+
+async def _check_resource_access(
+ resource_type: Optional[str] = None,
+) -> Union[bool, int]:
+ allow_resource = False
+
+ if resource_type == "service":
+ allow_resource = True
+
+ if resource_type == "local_secrets":
+ check, meter, _ = await check_entitlements( # type: ignore
+ key=Counter.CREDITS_CONSUMED, # type: ignore
+ delta=1,
+ )
+
+ if not check:
+ return False
+
+ if not meter or not meter.value:
+ return False
+
+ return meter.value
+
+ return allow_resource
+
+
+class AccessRouter:
+ def __init__(self) -> None:
+ self.router = APIRouter()
+
+ self.router.add_api_route(
+ "/permissions/check",
+ self.check_permissions,
+ methods=["GET"],
+ operation_id="check_permissions",
+ )
+
+ async def check_permissions(
+ self,
+ action: Optional[str] = Query(None),
+ scope_type: Optional[str] = Query(None),
+ scope_id: Optional[UUID] = Query(None),
+ resource_type: Optional[str] = Query(None),
+ resource_id: Optional[UUID] = Query(None),
+ ):
+ ctx = get_auth_context()
+ project_id = str(ctx.scope.project_id)
+ user_id = str(ctx.scope.user_id)
+ credentials_header = ctx.credentials.header()[1]
+
+ cache_key = {
+ "action": action,
+ "scope_type": scope_type,
+ "scope_id": scope_id,
+ "resource_type": resource_type,
+ "resource_id": resource_id,
+ }
+
+ try:
+ if is_oss():
+ return Allow(credentials_header)
+
+ if not action or not resource_type:
+ log.warn("Missing required parameters: action, resource_type")
+ raise Deny()
+
+ allow = await get_cache(
+ project_id=project_id,
+ user_id=user_id,
+ namespace="check_permissions",
+ key=cache_key,
+ )
+
+ if allow == "allow":
+ return Allow(credentials_header)
+ if allow == "deny":
+ log.warn("Permission denied")
+ raise Deny()
+
+ # CHECK PERMISSION 1/3: SCOPE
+ allow_scope = await _check_scope_access(
+ scope_type=scope_type,
+ scope_id=scope_id,
+ )
+
+ if not allow_scope:
+ log.warn("Scope access denied")
+ await set_cache(
+ project_id=project_id,
+ user_id=user_id,
+ namespace="check_permissions",
+ key=cache_key,
+ value="deny",
+ )
+ raise Deny()
+
+ # CHECK PERMISSION 2/3: ACTION
+ allow_action = await check_action_access(
+ project_id=project_id,
+ user_uid=user_id,
+ permission=Permission(action),
+ )
+
+ if not allow_action:
+ log.warn("Action access denied")
+ await set_cache(
+ project_id=project_id,
+ user_id=user_id,
+ namespace="check_permissions",
+ key=cache_key,
+ value="deny",
+ )
+ raise Deny()
+
+ # CHECK PERMISSION 3/3: RESOURCE
+ allow_resource = await _check_resource_access(
+ resource_type=resource_type,
+ )
+
+ if isinstance(allow_resource, bool):
+ if allow_resource is False:
+ log.warn("Resource access denied")
+ await set_cache(
+ project_id=project_id,
+ user_id=user_id,
+ namespace="check_permissions",
+ key=cache_key,
+ value="deny",
+ )
+ raise Deny()
+
+ if allow_resource is True:
+ await set_cache(
+ project_id=project_id,
+ user_id=user_id,
+ namespace="check_permissions",
+ key=cache_key,
+ value="allow",
+ )
+ return Allow(credentials_header)
+
+ elif isinstance(allow_resource, int):
+ if allow_resource <= 0:
+ log.warn("Resource access denied")
+ await set_cache(
+ project_id=project_id,
+ user_id=user_id,
+ namespace="check_permissions",
+ key=cache_key,
+ value="deny",
+ )
+ raise Deny()
+ else:
+ return Allow(credentials_header)
+
+ log.warn("Resource access denied")
+ await set_cache(
+ project_id=project_id,
+ user_id=user_id,
+ namespace="check_permissions",
+ key=cache_key,
+ value="deny",
+ )
+ raise Deny()
+
+ except Exception as exc: # pylint: disable=broad-except
+ log.warn(exc)
+ await set_cache(
+ project_id=project_id,
+ user_id=user_id,
+ namespace="check_permissions",
+ key=cache_key,
+ value="deny",
+ )
+ raise Deny() from exc
diff --git a/api/oss/src/apis/fastapi/annotations/router.py b/api/oss/src/apis/fastapi/annotations/router.py
index 32a2b7821a..e6afa8e90a 100644
--- a/api/oss/src/apis/fastapi/annotations/router.py
+++ b/api/oss/src/apis/fastapi/annotations/router.py
@@ -24,8 +24,11 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/apis/fastapi/applications/router.py b/api/oss/src/apis/fastapi/applications/router.py
index 9d94a64ed4..c02f2e1ff6 100644
--- a/api/oss/src/apis/fastapi/applications/router.py
+++ b/api/oss/src/apis/fastapi/applications/router.py
@@ -88,23 +88,14 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
-# TEMPORARY: Disabling name editing
-RENAME_APPS_DISABLED_MESSAGE = "Renaming applications is temporarily disabled."
-
-
-def _build_rename_apps_disabled_detail(*, existing_name: Optional[str]) -> str:
- if existing_name:
- return (
- f"{RENAME_APPS_DISABLED_MESSAGE} "
- f"Current application name is '{existing_name}'."
- )
-
- return RENAME_APPS_DISABLED_MESSAGE
class ApplicationsRouter:
@@ -670,27 +661,6 @@ async def edit_application(
detail="Application ID in path does not match application ID in request body.",
)
- # TEMPORARY: Disabling name editing
- existing_application = await self.applications_service.fetch_application(
- project_id=UUID(request.state.project_id),
- application_ref=Reference(id=application_id),
- )
- if existing_application is None:
- return ApplicationResponse()
-
- edit_model = application_edit_request.application
- if (
- "name" in edit_model.model_fields_set
- and edit_model.name is not None
- and edit_model.name != existing_application.name
- ):
- raise HTTPException(
- status_code=status.HTTP_400_BAD_REQUEST,
- detail=_build_rename_apps_disabled_detail(
- existing_name=existing_application.name
- ),
- )
-
application = await self.applications_service.edit_application(
project_id=UUID(request.state.project_id),
user_id=UUID(request.state.user_id),
@@ -2014,26 +1984,6 @@ async def edit_simple_application(
)
# TEMPORARY: Disabling name editing
- existing_application = await self.simple_applications_service.applications_service.fetch_application(
- project_id=UUID(request.state.project_id),
- application_ref=Reference(id=application_id),
- )
- if existing_application is None:
- return SimpleApplicationResponse()
-
- edit_model = simple_application_edit_request.application
- if (
- "name" in edit_model.model_fields_set
- and edit_model.name is not None
- and edit_model.name != existing_application.name
- ):
- raise HTTPException(
- status_code=status.HTTP_400_BAD_REQUEST,
- detail=_build_rename_apps_disabled_detail(
- existing_name=existing_application.name
- ),
- )
-
simple_application = await self.simple_applications_service.edit(
project_id=UUID(request.state.project_id),
user_id=UUID(request.state.user_id),
diff --git a/api/oss/src/apis/fastapi/environments/router.py b/api/oss/src/apis/fastapi/environments/router.py
index 222424dcf9..457dda4c8b 100644
--- a/api/oss/src/apis/fastapi/environments/router.py
+++ b/api/oss/src/apis/fastapi/environments/router.py
@@ -74,8 +74,11 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/apis/fastapi/environments/utils.py b/api/oss/src/apis/fastapi/environments/utils.py
index 3dc4c403a4..b834270864 100644
--- a/api/oss/src/apis/fastapi/environments/utils.py
+++ b/api/oss/src/apis/fastapi/environments/utils.py
@@ -36,8 +36,11 @@
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
async def ensure_environment_deploy_allowed(
diff --git a/api/oss/src/apis/fastapi/evaluations/models.py b/api/oss/src/apis/fastapi/evaluations/models.py
index 8e87909942..86d8348657 100644
--- a/api/oss/src/apis/fastapi/evaluations/models.py
+++ b/api/oss/src/apis/fastapi/evaluations/models.py
@@ -1,5 +1,6 @@
from typing import Optional, List
from uuid import UUID
+from datetime import datetime
from pydantic import BaseModel, model_validator
from fastapi import HTTPException
@@ -12,6 +13,7 @@
EvaluationRunCreate,
EvaluationRunEdit,
EvaluationRunQuery,
+ EvaluationRunDataStep,
#
EvaluationScenario,
EvaluationScenarioCreate,
@@ -20,12 +22,10 @@
#
EvaluationResult,
EvaluationResultCreate,
- EvaluationResultEdit,
EvaluationResultQuery,
#
EvaluationMetrics,
EvaluationMetricsCreate,
- EvaluationMetricsEdit,
EvaluationMetricsQuery,
EvaluationMetricsRefresh,
#
@@ -81,6 +81,51 @@ def __init__(
self.queue_id = queue_id
+class DefaultQueueDataInvalidException(HTTPException):
+ """Raised when a default queue carries scenario/step/assignment/batch filters."""
+
+ def __init__(self, message: str, queue_id: Optional[UUID] = None):
+ details = dict(message=message)
+ if queue_id:
+ details["queue_id"] = str(queue_id)
+ super().__init__(status_code=422, detail=details)
+ self.queue_id = queue_id
+
+
+class EvaluationMetricsInvalidException(HTTPException):
+ """Raised when a metric does not match a valid global/variational/temporal shape."""
+
+ def __init__(
+ self,
+ message: str,
+ run_id: Optional[UUID] = None,
+ scenario_id: Optional[UUID] = None,
+ timestamp: Optional[datetime] = None,
+ ):
+ details = dict(message=message)
+ if run_id:
+ details["run_id"] = str(run_id)
+ if scenario_id:
+ details["scenario_id"] = str(scenario_id)
+ if timestamp:
+ details["timestamp"] = str(timestamp)
+ super().__init__(status_code=422, detail=details)
+ self.run_id = run_id
+ self.scenario_id = scenario_id
+ self.timestamp = timestamp
+
+
+class DefaultQueueEditingForbiddenException(HTTPException):
+ """Raised when demoting or hard-deleting a default queue is attempted."""
+
+ def __init__(self, message: str, queue_id: Optional[UUID] = None):
+ details = dict(message=message)
+ if queue_id:
+ details["queue_id"] = str(queue_id)
+ super().__init__(status_code=409, detail=details)
+ self.queue_id = queue_id
+
+
# EVALUATION RUNS --------------------------------------------------------------
@@ -177,18 +222,10 @@ class EvaluationScenarioIdsResponse(BaseModel):
# - EVALUATION RESULTS ---------------------------------------------------------
-class EvaluationResultsCreateRequest(BaseModel):
+class EvaluationResultsSetRequest(BaseModel):
results: List[EvaluationResultCreate]
-class EvaluationResultEditRequest(BaseModel):
- result: EvaluationResultEdit
-
-
-class EvaluationResultsEditRequest(BaseModel):
- results: List[EvaluationResultEdit]
-
-
class EvaluationResultQueryRequest(BaseModel):
result: Optional[EvaluationResultQuery] = None
#
@@ -219,15 +256,95 @@ class EvaluationResultIdsResponse(BaseModel):
result_ids: List[UUID] = []
-# - EVALUATION METRICS ---------------------------------------------------------
+# - EVALUATION TENSOR SLICE ----------------------------------------------------
-class EvaluationMetricsCreateRequest(BaseModel):
- metrics: List[EvaluationMetricsCreate]
+class TensorSliceRequest(BaseModel):
+ # Coordinate projection over EXISTING scenarios. Any omitted dimension is
+ # "all" for that axis; an explicit empty list means "none addressed".
+ scenario_ids: Optional[List[UUID]] = None
+ step_keys: Optional[List[str]] = None
+ repeat_idxs: Optional[List[int]] = None
+
+
+class PopulateSliceRequest(EvaluationResultsSetRequest):
+ # Write-side slice op: same `results` payload as the generic results setter,
+ # but the populate endpoint owns its own request type so its run-scoped
+ # validation and OpenAPI surface can diverge from `set_results`.
+ pass
+
+
+class ProcessSliceRequest(TensorSliceRequest):
+ # `overwrite=False` (default) runs only cells without a result (fill-missing);
+ # `overwrite=True` re-runs every addressed cell (force).
+ overwrite: bool = False
+
+
+class ProbeSliceRequest(TensorSliceRequest):
+ # Read-side slice op: coordinate projection over existing cells. Its own
+ # request type keeps the probe OpenAPI surface independent of the other
+ # tensor ops.
+ pass
+
+
+class PruneSliceRequest(TensorSliceRequest):
+ # Delete-side slice op: clears the addressed cells (and refreshes metrics).
+ # Owns its request type for the same reason.
+ pass
+
+
+class RefreshSliceRequest(TensorSliceRequest):
+ # Metrics-side slice op: recompute the metric rows (variational + aggregate)
+ # over the addressed scope without writing or executing cells. Owns its
+ # request type for the same reason as the others.
+ pass
+
+
+# `process` returns 202 (async dispatch acknowledged) and `prune`/`refresh`
+# return 204 — none carries a body, so there is no response model for them.
+
+# - EVALUATION GRAPH-SHAPE OPS -------------------------------------------------
+#
+# Reshape the tensor (scenarios x steps x repeats). Paired with the tensor ops
+# above: shape ops add/remove coordinates, tensor ops fill/clear cells within a
+# shape. One request model per axis op; responses reuse the scenario/run/result
+# envelopes already defined above.
-class EvaluationMetricsEditRequest(BaseModel):
- metrics: List[EvaluationMetricsEdit]
+
+class AddScenariosRequest(BaseModel):
+ # Height: append `count` empty scenario rows; `populate`/`process` fill them.
+ count: int
+ # Optional temporal bucket. Floored to the minute server-side (interval is
+ # fixed at 1 minute); omit to leave the new scenarios off the temporal axis.
+ timestamp: Optional[datetime] = None
+
+
+class RemoveScenariosRequest(BaseModel):
+ # Height: drop these scenario rows (and all their cells).
+ scenario_ids: List[UUID]
+
+
+class AddStepsRequest(BaseModel):
+ # Width: append graph step columns (idempotent on key).
+ steps: List[EvaluationRunDataStep]
+
+
+class RemoveStepsRequest(BaseModel):
+ # Width: drop graph step columns by key.
+ step_keys: List[str]
+
+
+class SetRepeatsRequest(BaseModel):
+ # Depth: set the run's repeat count.
+ repeats: int
+
+
+# - EVALUATION METRICS ---------------------------------------------------------
+
+
+class EvaluationMetricsSetRequest(BaseModel):
+ metrics: List[EvaluationMetricsCreate]
class EvaluationMetricsQueryRequest(BaseModel):
diff --git a/api/oss/src/apis/fastapi/evaluations/router.py b/api/oss/src/apis/fastapi/evaluations/router.py
index 3410b8d852..0004f3ad6f 100644
--- a/api/oss/src/apis/fastapi/evaluations/router.py
+++ b/api/oss/src/apis/fastapi/evaluations/router.py
@@ -46,18 +46,27 @@
EvaluationScenarioIdResponse,
EvaluationScenarioIdsResponse,
# EVALUATION RESULTS
- EvaluationResultsCreateRequest,
- EvaluationResultEditRequest,
- EvaluationResultsEditRequest,
+ EvaluationResultsSetRequest,
EvaluationResultQueryRequest,
EvaluationResultIdsRequest,
EvaluationResultResponse,
EvaluationResultsResponse,
EvaluationResultIdResponse,
EvaluationResultIdsResponse,
+ # EVALUATION TENSOR SLICE
+ ProcessSliceRequest,
+ PopulateSliceRequest,
+ ProbeSliceRequest,
+ PruneSliceRequest,
+ RefreshSliceRequest,
+ # EVALUATION GRAPH-SHAPE OPS
+ AddScenariosRequest,
+ RemoveScenariosRequest,
+ AddStepsRequest,
+ RemoveStepsRequest,
+ SetRepeatsRequest,
# EVALUATION METRICS
- EvaluationMetricsCreateRequest,
- EvaluationMetricsEditRequest,
+ EvaluationMetricsSetRequest,
EvaluationMetricsQueryRequest,
EvaluationMetricsIdsRequest,
EvaluationMetricsResponse,
@@ -99,12 +108,16 @@
from oss.src.core.evaluations.types import (
SimpleQueueScenariosQuery,
EvaluationQueueScenariosQuery,
+ EvaluationScenarioQuery,
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
- from ee.src.utils.entitlements import check_entitlements, Counter
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
+ from ee.src.core.access.entitlements.service import check_entitlements, Counter
log = get_module_logger(__name__)
@@ -124,7 +137,7 @@ def __init__(
self.admin_router = APIRouter()
- # EVALUATION RUNS ------------------------------------------------------
+ # ADMIN EVALUATION REFRESH ---------------------------------------------
# POST /api/evaluations/runs/refresh
self.admin_router.add_api_route(
@@ -134,6 +147,8 @@ def __init__(
response_model_exclude_none=True,
)
+ # EVALUATION RUNS ------------------------------------------------------
+
# POST /api/evaluations/runs/
self.router.add_api_route(
path="/runs/",
@@ -234,16 +249,6 @@ def __init__(
operation_id="close_run",
)
- # POST /api/evaluations/runs/{run_id}/close/{status}
- self.router.add_api_route(
- path="/runs/{run_id}/close/{status}",
- methods=["POST"],
- endpoint=self.close_run,
- response_model=EvaluationRunResponse,
- response_model_exclude_none=True,
- operation_id="close_run_with_status",
- )
-
# POST /api/evaluations/runs/{run_id}/open
self.router.add_api_route(
path="/runs/{run_id}/open",
@@ -254,6 +259,16 @@ def __init__(
operation_id="open_run",
)
+ # GET /api/evaluations/runs/{run_id}/queues/default
+ self.router.add_api_route(
+ path="/runs/{run_id}/queues/default",
+ methods=["GET"],
+ endpoint=self.fetch_default_queue,
+ response_model=EvaluationQueueResponse,
+ response_model_exclude_none=True,
+ operation_id="fetch_default_queue",
+ )
+
# EVALUATION SCENARIOS -------------------------------------------------
# POST /api/evaluations/scenarios/
@@ -332,20 +347,10 @@ def __init__(
self.router.add_api_route(
path="/results/",
methods=["POST"],
- endpoint=self.create_results,
- response_model=EvaluationResultsResponse,
- response_model_exclude_none=True,
- operation_id="create_results",
- )
-
- # PATCH /api/evaluations/results/
- self.router.add_api_route(
- path="/results/",
- methods=["PATCH"],
- endpoint=self.edit_results,
+ endpoint=self.set_results,
response_model=EvaluationResultsResponse,
response_model_exclude_none=True,
- operation_id="edit_results",
+ operation_id="set_results",
)
# DELETE /api/evaluations/results/
@@ -378,16 +383,6 @@ def __init__(
operation_id="fetch_result",
)
- # PATCH /api/evaluations/results/{result_id}
- self.router.add_api_route(
- path="/results/{result_id}",
- methods=["PATCH"],
- endpoint=self.edit_result,
- response_model=EvaluationResultResponse,
- response_model_exclude_none=True,
- operation_id="edit_result",
- )
-
# DELETE /api/evaluations/results/{result_id}
self.router.add_api_route(
path="/results/{result_id}",
@@ -410,24 +405,15 @@ def __init__(
operation_id="refresh_metrics",
)
+ # TODO: deprecate once web uses /mretrics/refresh
# POST /api/evaluations/metrics/
self.router.add_api_route(
path="/metrics/",
methods=["POST"],
- endpoint=self.create_metrics,
- response_model=EvaluationMetricsResponse,
- response_model_exclude_none=True,
- operation_id="create_metrics",
- )
-
- # PATCH /api/evaluations/metrics/
- self.router.add_api_route(
- path="/metrics/",
- methods=["PATCH"],
- endpoint=self.edit_metrics,
+ endpoint=self.set_metrics,
response_model=EvaluationMetricsResponse,
response_model_exclude_none=True,
- operation_id="edit_metrics",
+ operation_id="set_metrics",
)
# DELETE /api/evaluations/metrics/
@@ -450,6 +436,26 @@ def __init__(
operation_id="query_metrics",
)
+ # GET /api/evaluations/metrics/{metrics_id}
+ self.router.add_api_route(
+ path="/metrics/{metrics_id}",
+ methods=["GET"],
+ endpoint=self.fetch_metric,
+ response_model=EvaluationMetricsResponse,
+ response_model_exclude_none=True,
+ operation_id="fetch_metric",
+ )
+
+ # DELETE /api/evaluations/metrics/{metrics_id}
+ self.router.add_api_route(
+ path="/metrics/{metrics_id}",
+ methods=["DELETE"],
+ endpoint=self.delete_metric,
+ response_model=EvaluationMetricsIdsResponse,
+ response_model_exclude_none=True,
+ operation_id="delete_metric",
+ )
+
# EVALUATION QUEUES ----------------------------------------------------
# POST /api/evaluations/queues/
@@ -627,6 +633,7 @@ async def create_runs(
# PATCH /evaluations/runs/
@intercept_exceptions()
+ @handle_evaluation_closed_exception()
async def edit_runs(
self,
request: Request,
@@ -813,8 +820,32 @@ async def fetch_run(
return run_response
+ # GET /evaluations/runs/{run_id}/queues/default
+ @intercept_exceptions()
+ @suppress_exceptions(default=EvaluationQueueResponse(), exclude=[HTTPException])
+ async def fetch_default_queue(
+ self,
+ request: Request,
+ *,
+ run_id: UUID,
+ ) -> EvaluationQueueResponse:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.VIEW_EVALUATION_QUEUES, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ queue = await self.evaluations_service.fetch_default_queue(
+ project_id=UUID(request.state.project_id),
+ run_id=run_id,
+ )
+ return EvaluationQueueResponse(count=1 if queue else 0, queue=queue)
+
# PATCH /evaluations/runs/{run_id}
@intercept_exceptions()
+ @handle_evaluation_closed_exception()
async def edit_run(
self,
request: Request,
@@ -878,7 +909,7 @@ async def delete_run(
return run_id_response
# POST /evaluations/runs/{run_id}/close
- # POST /evaluations/runs/{run_id}/close/{status}
+ # POST /evaluations/runs/{run_id}/close?status=
@intercept_exceptions()
async def close_run(
self,
@@ -886,7 +917,7 @@ async def close_run(
*,
run_id: UUID,
#
- status: Optional[EvaluationStatus] = None,
+ status: Optional[EvaluationStatus] = Query(None),
) -> EvaluationRunResponse:
if is_ee():
if not await check_action_access( # type: ignore
@@ -1168,42 +1199,11 @@ async def delete_scenario(
# POST /evaluations/results/
@intercept_exceptions()
@handle_evaluation_closed_exception()
- async def create_results(
- self,
- request: Request,
- *,
- results_create_request: EvaluationResultsCreateRequest,
- ) -> EvaluationResultsResponse:
- if is_ee():
- if not await check_action_access( # type: ignore
- user_uid=request.state.user_id,
- project_id=request.state.project_id,
- permission=Permission.EDIT_EVALUATION_RESULTS, # type: ignore
- ):
- raise FORBIDDEN_EXCEPTION # type: ignore
-
- results = await self.evaluations_service.create_results(
- project_id=UUID(request.state.project_id),
- user_id=UUID(request.state.user_id),
- #
- results=results_create_request.results,
- )
-
- results_response = EvaluationResultsResponse(
- count=len(results),
- results=results,
- )
-
- return results_response
-
- # PATCH /evaluations/results/
- @intercept_exceptions()
- @handle_evaluation_closed_exception()
- async def edit_results(
+ async def set_results(
self,
request: Request,
*,
- results_edit_request: EvaluationResultsEditRequest,
+ results_set_request: EvaluationResultsSetRequest,
) -> EvaluationResultsResponse:
if is_ee():
if not await check_action_access( # type: ignore
@@ -1213,11 +1213,11 @@ async def edit_results(
):
raise FORBIDDEN_EXCEPTION # type: ignore
- results = await self.evaluations_service.edit_results(
+ results = await self.evaluations_service.set_results(
project_id=UUID(request.state.project_id),
user_id=UUID(request.state.user_id),
#
- results=results_edit_request.results,
+ results=results_set_request.results,
)
results_response = EvaluationResultsResponse(
@@ -1319,42 +1319,6 @@ async def fetch_result(
return result_response
- # PATCH /evaluations/results/{result_id}
- @intercept_exceptions()
- @handle_evaluation_closed_exception()
- async def edit_result(
- self,
- request: Request,
- *,
- result_id: UUID,
- #
- result_edit_request: EvaluationResultEditRequest,
- ) -> EvaluationResultResponse:
- if is_ee():
- if not await check_action_access( # type: ignore
- user_uid=request.state.user_id,
- project_id=request.state.project_id,
- permission=Permission.EDIT_EVALUATION_RESULTS, # type: ignore
- ):
- raise FORBIDDEN_EXCEPTION # type: ignore
-
- if str(result_id) != str(result_edit_request.result.id):
- return EvaluationResultResponse()
-
- result = await self.evaluations_service.edit_result(
- project_id=UUID(request.state.project_id),
- user_id=UUID(request.state.user_id),
- #
- result=result_edit_request.result,
- )
-
- result_response = EvaluationResultResponse(
- count=1 if result else 0,
- result=result,
- )
-
- return result_response
-
# DELETE /evaluations/results/{result_id}
@intercept_exceptions()
@handle_evaluation_closed_exception()
@@ -1421,11 +1385,11 @@ async def refresh_metrics(
# POST /evaluations/metrics/
@intercept_exceptions()
@handle_evaluation_closed_exception()
- async def create_metrics(
+ async def set_metrics(
self,
request: Request,
*,
- metrics_create_request: EvaluationMetricsCreateRequest,
+ metrics_set_request: EvaluationMetricsSetRequest,
) -> EvaluationMetricsResponse:
if is_ee():
if not await check_action_access( # type: ignore
@@ -1435,11 +1399,11 @@ async def create_metrics(
):
raise FORBIDDEN_EXCEPTION # type: ignore
- metrics = await self.evaluations_service.create_metrics(
+ metrics = await self.evaluations_service.set_metrics(
project_id=UUID(request.state.project_id),
user_id=UUID(request.state.user_id),
#
- metrics=metrics_create_request.metrics,
+ metrics=metrics_set_request.metrics,
)
metrics_response = EvaluationMetricsResponse(
@@ -1449,15 +1413,15 @@ async def create_metrics(
return metrics_response
- # PATCH /evaluations/metrics/
+ # DELETE /evaluations/metrics/
@intercept_exceptions()
@handle_evaluation_closed_exception()
- async def edit_metrics(
+ async def delete_metrics(
self,
request: Request,
*,
- metrics_edit_request: EvaluationMetricsEditRequest,
- ) -> EvaluationMetricsResponse:
+ metrics_ids_request: EvaluationMetricsIdsRequest,
+ ) -> EvaluationMetricsIdsResponse:
if is_ee():
if not await check_action_access( # type: ignore
user_uid=request.state.user_id,
@@ -1466,58 +1430,59 @@ async def edit_metrics(
):
raise FORBIDDEN_EXCEPTION # type: ignore
- metrics = await self.evaluations_service.edit_metrics(
+ metrics_ids = await self.evaluations_service.delete_metrics(
project_id=UUID(request.state.project_id),
- user_id=UUID(request.state.user_id),
#
- metrics=metrics_edit_request.metrics,
+ metrics_ids=metrics_ids_request.metrics_ids,
)
- metrics_response = EvaluationMetricsResponse(
- count=len(metrics),
- metrics=metrics,
+ metrics_ids_response = EvaluationMetricsIdsResponse(
+ count=len(metrics_ids),
+ metrics_ids=metrics_ids,
)
- return metrics_response
+ return metrics_ids_response
- # DELETE /evaluations/metrics/
+ # POST /evaluations/metrics/query
@intercept_exceptions()
- @handle_evaluation_closed_exception()
- async def delete_metrics(
+ @suppress_exceptions(default=EvaluationMetricsResponse(), exclude=[HTTPException])
+ async def query_metrics(
self,
request: Request,
*,
- metrics_ids_request: EvaluationMetricsIdsRequest,
- ) -> EvaluationMetricsIdsResponse:
+ metric_query_request: EvaluationMetricsQueryRequest,
+ ) -> EvaluationMetricsResponse:
if is_ee():
if not await check_action_access( # type: ignore
user_uid=request.state.user_id,
project_id=request.state.project_id,
- permission=Permission.EDIT_EVALUATION_METRICS, # type: ignore
+ permission=Permission.VIEW_EVALUATION_METRICS, # type: ignore
):
raise FORBIDDEN_EXCEPTION # type: ignore
- metrics_ids = await self.evaluations_service.delete_metrics(
+ metrics = await self.evaluations_service.query_metrics(
project_id=UUID(request.state.project_id),
#
- metrics_ids=metrics_ids_request.metrics_ids,
+ metric=metric_query_request.metrics,
+ #
+ windowing=metric_query_request.windowing,
)
- metrics_ids_response = EvaluationMetricsIdsResponse(
- count=len(metrics_ids),
- metrics_ids=metrics_ids,
+ metrics_response = EvaluationMetricsResponse(
+ count=len(metrics),
+ metrics=metrics,
)
- return metrics_ids_response
+ return metrics_response
- # POST /evaluations/metrics/query
+ # GET /evaluations/metrics/{metrics_id}
@intercept_exceptions()
@suppress_exceptions(default=EvaluationMetricsResponse(), exclude=[HTTPException])
- async def query_metrics(
+ async def fetch_metric(
self,
request: Request,
*,
- metric_query_request: EvaluationMetricsQueryRequest,
+ metrics_id: UUID,
) -> EvaluationMetricsResponse:
if is_ee():
if not await check_action_access( # type: ignore
@@ -1527,12 +1492,10 @@ async def query_metrics(
):
raise FORBIDDEN_EXCEPTION # type: ignore
- metrics = await self.evaluations_service.query_metrics(
+ metrics = await self.evaluations_service.fetch_metrics(
project_id=UUID(request.state.project_id),
#
- metric=metric_query_request.metrics,
- #
- windowing=metric_query_request.windowing,
+ metrics_ids=[metrics_id],
)
metrics_response = EvaluationMetricsResponse(
@@ -1542,6 +1505,36 @@ async def query_metrics(
return metrics_response
+ # DELETE /evaluations/metrics/{metrics_id}
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def delete_metric(
+ self,
+ request: Request,
+ *,
+ metrics_id: UUID,
+ ) -> EvaluationMetricsIdsResponse:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_METRICS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ metrics_ids = await self.evaluations_service.delete_metrics(
+ project_id=UUID(request.state.project_id),
+ #
+ metrics_ids=[metrics_id],
+ )
+
+ metrics_ids_response = EvaluationMetricsIdsResponse(
+ count=len(metrics_ids),
+ metrics_ids=metrics_ids,
+ )
+
+ return metrics_ids_response
+
# EVALUATION QUEUES --------------------------------------------------------
# POST /evaluations/queues/
@@ -1734,6 +1727,54 @@ async def edit_queue(
return queue_response
+ # POST /evaluations/queues/{queue_id}/archive
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def archive_queue(
+ self,
+ request: Request,
+ *,
+ queue_id: UUID,
+ ) -> EvaluationQueueResponse:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_QUEUES, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ queue = await self.evaluations_service.archive_queue(
+ project_id=UUID(request.state.project_id),
+ user_id=UUID(request.state.user_id),
+ queue_id=queue_id,
+ )
+ return EvaluationQueueResponse(count=1 if queue else 0, queue=queue)
+
+ # POST /evaluations/queues/{queue_id}/unarchive
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def unarchive_queue(
+ self,
+ request: Request,
+ *,
+ queue_id: UUID,
+ ) -> EvaluationQueueResponse:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_QUEUES, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ queue = await self.evaluations_service.unarchive_queue(
+ project_id=UUID(request.state.project_id),
+ user_id=UUID(request.state.user_id),
+ queue_id=queue_id,
+ )
+ return EvaluationQueueResponse(count=1 if queue else 0, queue=queue)
+
# DELETE /evaluations/queues/{queue_id}
@intercept_exceptions()
@handle_evaluation_closed_exception()
@@ -1837,6 +1878,16 @@ def __init__(
operation_id="create_simple_evaluation",
)
+ # POST /api/simple/evaluations/query
+ self.router.add_api_route(
+ path="/query",
+ methods=["POST"],
+ endpoint=self.query_evaluations,
+ response_model=SimpleEvaluationsResponse,
+ response_model_exclude_none=True,
+ operation_id="query_simple_evaluations",
+ )
+
# GET /api/simple/evaluations/{evaluation_id}
self.router.add_api_route(
path="/{evaluation_id}",
@@ -1867,19 +1918,9 @@ def __init__(
operation_id="delete_simple_evaluation",
)
- # POST /api/simple/evaluations/query
+ # POST /api/simple/evaluations/{evaluation_id}/start
self.router.add_api_route(
- path="/query",
- methods=["POST"],
- endpoint=self.query_evaluations,
- response_model=SimpleEvaluationsResponse,
- response_model_exclude_none=True,
- operation_id="query_simple_evaluations",
- )
-
- # POST /api/simple/evaluations/{evaluation_id}/start
- self.router.add_api_route(
- path="/{evaluation_id}/start",
+ path="/{evaluation_id}/start",
methods=["POST"],
endpoint=self.start_evaluation,
response_model=SimpleEvaluationResponse,
@@ -1917,6 +1958,104 @@ def __init__(
operation_id="open_simple_evaluation",
)
+ # POST /api/simple/evaluations/{evaluation_id}/populate
+ self.router.add_api_route(
+ path="/{evaluation_id}/populate",
+ methods=["POST"],
+ endpoint=self.populate_evaluation_slice,
+ response_model=EvaluationResultsResponse,
+ response_model_exclude_none=True,
+ operation_id="populate_slice",
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/process
+ self.router.add_api_route(
+ path="/{evaluation_id}/process",
+ methods=["POST"],
+ endpoint=self.process_evaluation_slice,
+ status_code=http_status.HTTP_202_ACCEPTED,
+ response_model=None,
+ responses={http_status.HTTP_202_ACCEPTED: {"description": "Accepted."}},
+ operation_id="process_slice",
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/probe
+ self.router.add_api_route(
+ path="/{evaluation_id}/probe",
+ methods=["POST"],
+ endpoint=self.probe_evaluation_slice,
+ response_model=EvaluationResultsResponse,
+ response_model_exclude_none=True,
+ operation_id="probe_slice",
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/prune
+ self.router.add_api_route(
+ path="/{evaluation_id}/prune",
+ methods=["POST"],
+ endpoint=self.prune_evaluation_slice,
+ status_code=http_status.HTTP_204_NO_CONTENT,
+ operation_id="prune_slice",
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/refresh
+ self.router.add_api_route(
+ path="/{evaluation_id}/refresh",
+ methods=["POST"],
+ endpoint=self.refresh_evaluation_slice,
+ status_code=http_status.HTTP_204_NO_CONTENT,
+ operation_id="refresh_slice",
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/scenarios/add
+ self.router.add_api_route(
+ path="/{evaluation_id}/scenarios/add",
+ methods=["POST"],
+ endpoint=self.add_evaluation_scenarios,
+ response_model=EvaluationScenariosResponse,
+ response_model_exclude_none=True,
+ operation_id="add_scenarios",
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/scenarios/remove
+ self.router.add_api_route(
+ path="/{evaluation_id}/scenarios/remove",
+ methods=["POST"],
+ endpoint=self.remove_evaluation_scenarios,
+ status_code=204, # rows removed — no body
+ operation_id="remove_scenarios",
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/steps/add
+ self.router.add_api_route(
+ path="/{evaluation_id}/steps/add",
+ methods=["POST"],
+ endpoint=self.add_evaluation_steps,
+ response_model=EvaluationRunResponse,
+ response_model_exclude_none=True,
+ operation_id="add_steps",
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/steps/remove
+ self.router.add_api_route(
+ path="/{evaluation_id}/steps/remove",
+ methods=["POST"],
+ endpoint=self.remove_evaluation_steps,
+ response_model=EvaluationRunResponse,
+ response_model_exclude_none=True,
+ operation_id="remove_steps",
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/repeats/set
+ self.router.add_api_route(
+ path="/{evaluation_id}/repeats/set",
+ methods=["POST"],
+ endpoint=self.set_evaluation_repeats,
+ response_model=EvaluationRunResponse,
+ response_model_exclude_none=True,
+ operation_id="set_repeats",
+ )
+
# SIMPLE EVALUATIONS -------------------------------------------------------
# POST /api/simple/evaluations/
@@ -2225,6 +2364,355 @@ async def open_evaluation(
return response
+ # TENSOR SLICE OPS ---------------------------------------------------------
+
+ # POST /api/simple/evaluations/{evaluation_id}/populate
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def populate_evaluation_slice(
+ self,
+ request: Request,
+ *,
+ evaluation_id: UUID,
+ populate_slice_request: PopulateSliceRequest,
+ ) -> EvaluationResultsResponse:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_RUNS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ # The path addresses ONE run; each result carries its own run_id. Reject
+ # any result whose run_id does not match the path so a caller cannot
+ # write cells into a different run via the body (the service/DAO only
+ # scope by project + per-result run_id, not the path).
+ mismatched = [
+ result
+ for result in populate_slice_request.results
+ if result.run_id != evaluation_id
+ ]
+ if mismatched:
+ raise HTTPException(
+ status_code=http_status.HTTP_400_BAD_REQUEST,
+ detail=(
+ "All results must target the evaluation in the path "
+ f"({evaluation_id})."
+ ),
+ )
+
+ results = await self.simple_evaluations_service.populate_slice(
+ project_id=UUID(request.state.project_id),
+ user_id=UUID(request.state.user_id),
+ #
+ results=populate_slice_request.results,
+ )
+
+ return EvaluationResultsResponse(
+ count=len(results),
+ results=results,
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/process
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def process_evaluation_slice(
+ self,
+ request: Request,
+ *,
+ evaluation_id: UUID,
+ preocess_slice_request: ProcessSliceRequest,
+ ) -> None:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_RUNS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ # Async dispatch via taskiq — the 202 acknowledges acceptance; the work
+ # finishes on the worker. No body to return. `overwrite` maps to the
+ # internal process mode (force = re-run all; else fill-missing).
+ await self.simple_evaluations_service.dispatch_tensor_slice(
+ project_id=UUID(request.state.project_id),
+ user_id=UUID(request.state.user_id),
+ #
+ run_id=evaluation_id,
+ scenario_ids=preocess_slice_request.scenario_ids,
+ step_keys=preocess_slice_request.step_keys,
+ repeat_idxs=preocess_slice_request.repeat_idxs,
+ process_mode="force"
+ if preocess_slice_request.overwrite
+ else "fill-missing",
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/probe
+ @intercept_exceptions()
+ async def probe_evaluation_slice(
+ self,
+ request: Request,
+ *,
+ evaluation_id: UUID,
+ probe_slice_request: ProbeSliceRequest,
+ ) -> EvaluationResultsResponse:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.VIEW_EVALUATION_RUNS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ results = await self.simple_evaluations_service.probe_slice(
+ project_id=UUID(request.state.project_id),
+ #
+ run_id=evaluation_id,
+ scenario_ids=probe_slice_request.scenario_ids,
+ step_keys=probe_slice_request.step_keys,
+ repeat_idxs=probe_slice_request.repeat_idxs,
+ )
+
+ return EvaluationResultsResponse(
+ count=len(results),
+ results=results,
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/prune
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def prune_evaluation_slice(
+ self,
+ request: Request,
+ *,
+ evaluation_id: UUID,
+ prune_slice_request: PruneSliceRequest,
+ ) -> None:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_RUNS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ # Removes the addressed result cells (and refreshes metrics over the
+ # scope). 204 — no body.
+ await self.simple_evaluations_service.prune_slice(
+ project_id=UUID(request.state.project_id),
+ user_id=UUID(request.state.user_id),
+ #
+ run_id=evaluation_id,
+ scenario_ids=prune_slice_request.scenario_ids,
+ step_keys=prune_slice_request.step_keys,
+ repeat_idxs=prune_slice_request.repeat_idxs,
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/refresh
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def refresh_evaluation_slice(
+ self,
+ request: Request,
+ *,
+ evaluation_id: UUID,
+ refresh_slice_request: RefreshSliceRequest,
+ ) -> None:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_RUNS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ # Recomputes the metric rows (variational + aggregate) over the addressed
+ # scope without writing or executing cells. Used by callers that populated
+ # finished cells themselves (e.g. the SDK). 204 — no body.
+ await self.simple_evaluations_service.refresh_slice(
+ project_id=UUID(request.state.project_id),
+ user_id=UUID(request.state.user_id),
+ #
+ run_id=evaluation_id,
+ scenario_ids=refresh_slice_request.scenario_ids,
+ step_keys=refresh_slice_request.step_keys,
+ repeat_idxs=refresh_slice_request.repeat_idxs,
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/scenarios/add
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def add_evaluation_scenarios(
+ self,
+ request: Request,
+ *,
+ evaluation_id: UUID,
+ add_request: AddScenariosRequest,
+ ) -> EvaluationScenariosResponse:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_RUNS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ scenarios = await self.simple_evaluations_service.add_scenarios(
+ project_id=UUID(request.state.project_id),
+ user_id=UUID(request.state.user_id),
+ #
+ run_id=evaluation_id,
+ count=add_request.count,
+ timestamp=add_request.timestamp,
+ )
+
+ return EvaluationScenariosResponse(
+ count=len(scenarios),
+ scenarios=scenarios,
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/scenarios/remove
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def remove_evaluation_scenarios(
+ self,
+ request: Request,
+ *,
+ evaluation_id: UUID,
+ remove_request: RemoveScenariosRequest,
+ ) -> None:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_RUNS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ # Scope to the run in the path: only delete scenarios that actually
+ # belong to `evaluation_id`, so a caller cannot delete another run's
+ # scenarios by id. Resolve the owned subset first; reject if any
+ # requested id is not in this run.
+ owned = set(
+ await self.simple_evaluations_service.evaluations_service.query_scenario_ids(
+ project_id=UUID(request.state.project_id),
+ scenario=EvaluationScenarioQuery(
+ run_id=evaluation_id,
+ ids=remove_request.scenario_ids,
+ ),
+ )
+ )
+ not_owned = [s for s in remove_request.scenario_ids if s not in owned]
+ if not_owned:
+ raise HTTPException(
+ status_code=http_status.HTTP_400_BAD_REQUEST,
+ detail=(
+ "All scenario_ids must belong to the evaluation in the path "
+ f"({evaluation_id})."
+ ),
+ )
+
+ # Drops the scenario rows (and their cells). 204 — no body.
+ await self.simple_evaluations_service.remove_scenarios(
+ project_id=UUID(request.state.project_id),
+ #
+ scenario_ids=remove_request.scenario_ids,
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/steps/add
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def add_evaluation_steps(
+ self,
+ request: Request,
+ *,
+ evaluation_id: UUID,
+ add_request: AddStepsRequest,
+ ) -> EvaluationRunResponse:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_RUNS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ run = await self.simple_evaluations_service.add_steps(
+ project_id=UUID(request.state.project_id),
+ user_id=UUID(request.state.user_id),
+ #
+ run_id=evaluation_id,
+ steps=add_request.steps,
+ )
+
+ return EvaluationRunResponse(
+ count=1 if run else 0,
+ run=run,
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/steps/remove
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def remove_evaluation_steps(
+ self,
+ request: Request,
+ *,
+ evaluation_id: UUID,
+ remove_request: RemoveStepsRequest,
+ ) -> EvaluationRunResponse:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_RUNS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ run = await self.simple_evaluations_service.remove_steps(
+ project_id=UUID(request.state.project_id),
+ user_id=UUID(request.state.user_id),
+ #
+ run_id=evaluation_id,
+ step_keys=remove_request.step_keys,
+ )
+
+ return EvaluationRunResponse(
+ count=1 if run else 0,
+ run=run,
+ )
+
+ # POST /api/simple/evaluations/{evaluation_id}/repeats/set
+ @intercept_exceptions()
+ @handle_evaluation_closed_exception()
+ async def set_evaluation_repeats(
+ self,
+ request: Request,
+ *,
+ evaluation_id: UUID,
+ repeats_request: SetRepeatsRequest,
+ ) -> EvaluationRunResponse:
+ if is_ee():
+ if not await check_action_access( # type: ignore
+ user_uid=request.state.user_id,
+ project_id=request.state.project_id,
+ permission=Permission.EDIT_EVALUATION_RUNS, # type: ignore
+ ):
+ raise FORBIDDEN_EXCEPTION # type: ignore
+
+ run = await self.simple_evaluations_service.set_repeats(
+ project_id=UUID(request.state.project_id),
+ user_id=UUID(request.state.user_id),
+ #
+ run_id=evaluation_id,
+ repeats=repeats_request.repeats,
+ )
+
+ return EvaluationRunResponse(
+ count=1 if run else 0,
+ run=run,
+ )
+
class SimpleQueuesRouter:
def __init__(
diff --git a/api/oss/src/apis/fastapi/evaluations/utils.py b/api/oss/src/apis/fastapi/evaluations/utils.py
index 3810092b92..63263d679e 100644
--- a/api/oss/src/apis/fastapi/evaluations/utils.py
+++ b/api/oss/src/apis/fastapi/evaluations/utils.py
@@ -16,6 +16,11 @@
EvaluationQueueQueryFlags,
#
EvaluationClosedConflict,
+ EvaluationMetricsInvalid,
+ DefaultQueueDataInvalid,
+ DefaultQueueDemotionForbidden,
+ DefaultQueueDeletionForbidden,
+ DefaultQueueArchiveForbidden,
)
from oss.src.apis.fastapi.shared.utils import (
@@ -38,6 +43,9 @@
EvaluationQueueQueryRequest,
#
EvaluationClosedException,
+ EvaluationMetricsInvalidException,
+ DefaultQueueDataInvalidException,
+ DefaultQueueEditingForbiddenException,
)
log = get_module_logger(__name__)
@@ -57,6 +65,27 @@ async def wrapper(*args, **kwargs):
result_id=e.result_id,
metrics_id=e.metrics_id,
) from e
+ except EvaluationMetricsInvalid as e:
+ raise EvaluationMetricsInvalidException(
+ message=e.message,
+ run_id=e.run_id,
+ scenario_id=e.scenario_id,
+ timestamp=e.timestamp,
+ ) from e
+ except DefaultQueueDataInvalid as e:
+ raise DefaultQueueDataInvalidException(
+ message=e.message,
+ queue_id=e.queue_id,
+ ) from e
+ except (
+ DefaultQueueDemotionForbidden,
+ DefaultQueueDeletionForbidden,
+ DefaultQueueArchiveForbidden,
+ ) as e:
+ raise DefaultQueueEditingForbiddenException(
+ message=e.message,
+ queue_id=e.queue_id,
+ ) from e
except Exception as e:
raise e
diff --git a/api/oss/src/apis/fastapi/evaluators/router.py b/api/oss/src/apis/fastapi/evaluators/router.py
index b181f65a8e..21a18a5386 100644
--- a/api/oss/src/apis/fastapi/evaluators/router.py
+++ b/api/oss/src/apis/fastapi/evaluators/router.py
@@ -99,8 +99,11 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/apis/fastapi/folders/router.py b/api/oss/src/apis/fastapi/folders/router.py
index fcefb0a611..54875685cb 100644
--- a/api/oss/src/apis/fastapi/folders/router.py
+++ b/api/oss/src/apis/fastapi/folders/router.py
@@ -31,8 +31,11 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/apis/fastapi/invocations/router.py b/api/oss/src/apis/fastapi/invocations/router.py
index 50ab6b8713..c95e1a306c 100644
--- a/api/oss/src/apis/fastapi/invocations/router.py
+++ b/api/oss/src/apis/fastapi/invocations/router.py
@@ -24,8 +24,11 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/apis/fastapi/legacy_variants/router.py b/api/oss/src/apis/fastapi/legacy_variants/router.py
index bec66a2046..4398c5af67 100644
--- a/api/oss/src/apis/fastapi/legacy_variants/router.py
+++ b/api/oss/src/apis/fastapi/legacy_variants/router.py
@@ -18,8 +18,11 @@
from oss.src.utils.exceptions import intercept_exceptions
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import FORBIDDEN_EXCEPTION, check_action_access
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ FORBIDDEN_EXCEPTION,
+ check_action_access,
+ )
def _as_reference(ref: Optional[ReferenceRequestModel]) -> Optional[Reference]:
diff --git a/api/oss/src/apis/fastapi/otlp/router.py b/api/oss/src/apis/fastapi/otlp/router.py
index c3ac194fac..d1dba97e4d 100644
--- a/api/oss/src/apis/fastapi/otlp/router.py
+++ b/api/oss/src/apis/fastapi/otlp/router.py
@@ -19,9 +19,12 @@
from oss.src.apis.fastapi.otlp.utils.processing import parse_from_otel_span_dto
if is_ee():
- from ee.src.utils.entitlements import check_entitlements, Counter
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.entitlements.service import check_entitlements, Counter
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
if TYPE_CHECKING:
from oss.src.core.tracing.service import TracingService
diff --git a/api/oss/src/apis/fastapi/queries/router.py b/api/oss/src/apis/fastapi/queries/router.py
index 91b9db0148..ff241102fa 100644
--- a/api/oss/src/apis/fastapi/queries/router.py
+++ b/api/oss/src/apis/fastapi/queries/router.py
@@ -56,8 +56,11 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/apis/fastapi/testcases/router.py b/api/oss/src/apis/fastapi/testcases/router.py
index be309f68bc..66977ea2a8 100644
--- a/api/oss/src/apis/fastapi/testcases/router.py
+++ b/api/oss/src/apis/fastapi/testcases/router.py
@@ -28,8 +28,11 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/apis/fastapi/testsets/router.py b/api/oss/src/apis/fastapi/testsets/router.py
index b6f59fa440..7a5f44d7a2 100644
--- a/api/oss/src/apis/fastapi/testsets/router.py
+++ b/api/oss/src/apis/fastapi/testsets/router.py
@@ -91,8 +91,11 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/apis/fastapi/tools/router.py b/api/oss/src/apis/fastapi/tools/router.py
index d066c0b8d7..043d114fa7 100644
--- a/api/oss/src/apis/fastapi/tools/router.py
+++ b/api/oss/src/apis/fastapi/tools/router.py
@@ -56,8 +56,11 @@
_SLUG_SEGMENT_RE = re.compile(r"^[a-zA-Z0-9_-]+$")
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/apis/fastapi/traces/router.py b/api/oss/src/apis/fastapi/traces/router.py
index faee284645..388d9ae6c9 100644
--- a/api/oss/src/apis/fastapi/traces/router.py
+++ b/api/oss/src/apis/fastapi/traces/router.py
@@ -20,8 +20,11 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/apis/fastapi/tracing/router.py b/api/oss/src/apis/fastapi/tracing/router.py
index 9f4ca68cd3..75610f36e9 100644
--- a/api/oss/src/apis/fastapi/tracing/router.py
+++ b/api/oss/src/apis/fastapi/tracing/router.py
@@ -64,9 +64,12 @@
log = get_module_logger(__name__)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
- from ee.src.utils.entitlements import check_entitlements, Counter
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
+ from ee.src.core.access.entitlements.service import check_entitlements, Counter
class TracingRouter:
diff --git a/api/oss/src/apis/fastapi/vault/router.py b/api/oss/src/apis/fastapi/vault/router.py
index 7f05e8bd0f..a78fd3ece0 100644
--- a/api/oss/src/apis/fastapi/vault/router.py
+++ b/api/oss/src/apis/fastapi/vault/router.py
@@ -17,8 +17,8 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import check_action_access
log = get_module_logger(__name__)
@@ -185,6 +185,7 @@ async def update_secret(
project_id=UUID(request.state.project_id),
secret_id=UUID(secret_id),
update_secret_dto=body,
+ user_id=UUID(request.state.user_id),
)
if secrets_dto is None:
raise HTTPException(
diff --git a/api/oss/src/apis/fastapi/webhooks/router.py b/api/oss/src/apis/fastapi/webhooks/router.py
index ff344a74e8..6ab1173d2a 100644
--- a/api/oss/src/apis/fastapi/webhooks/router.py
+++ b/api/oss/src/apis/fastapi/webhooks/router.py
@@ -32,8 +32,11 @@
)
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
class WebhooksRouter:
diff --git a/api/oss/src/apis/fastapi/workflows/router.py b/api/oss/src/apis/fastapi/workflows/router.py
index 8062ecf9d1..85828cef1d 100644
--- a/api/oss/src/apis/fastapi/workflows/router.py
+++ b/api/oss/src/apis/fastapi/workflows/router.py
@@ -97,8 +97,11 @@
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access, FORBIDDEN_EXCEPTION
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import (
+ check_action_access,
+ FORBIDDEN_EXCEPTION,
+ )
log = get_module_logger(__name__)
diff --git a/api/oss/src/core/accounts/service.py b/api/oss/src/core/accounts/service.py
index 4113f5d646..e30cffcdb6 100644
--- a/api/oss/src/core/accounts/service.py
+++ b/api/oss/src/core/accounts/service.py
@@ -87,15 +87,12 @@
from ee.src.core.subscriptions.types import ( # type: ignore[import]
get_default_plan as _ee_get_default_plan,
)
- from ee.src.core.entitlements.controls import ( # type: ignore[import]
+ from ee.src.core.access.controls import ( # type: ignore[import]
get_plans as _ee_get_plans,
)
- from ee.src.core.meters.service import MetersService as _EeMetersService # type: ignore[import]
- from ee.src.dbs.postgres.meters.dao import MetersDAO as _EeMetersDAO # type: ignore[import]
_ee_subscription_service = _EeSubscriptionsService(
subscriptions_dao=_EeSubscriptionsDAO(),
- meters_service=_EeMetersService(meters_dao=_EeMetersDAO()),
)
except ImportError:
pass
diff --git a/api/oss/src/core/auth/helper.py b/api/oss/src/core/auth/helper.py
index a0ad8eef95..bdd4b34a69 100644
--- a/api/oss/src/core/auth/helper.py
+++ b/api/oss/src/core/auth/helper.py
@@ -1,12 +1,11 @@
from dataclasses import dataclass
from typing import Any, Optional, Set
-import posthog
-
-from oss.src.services.exceptions import UnauthorizedException
+from oss.src.utils.exceptions import UnauthorizedException
from oss.src.utils.caching import get_cache, set_cache
from oss.src.utils.common import is_ee
from oss.src.utils.env import env
+from oss.src.utils.lazy import _load_posthog
from oss.src.utils.logging import get_module_logger
@@ -61,10 +60,27 @@ async def _get_posthog_string_entries(feature_flag: str) -> Set[str]:
if cached_entries is not None:
return _normalize_string_set(cached_entries)
- flag_entries = posthog.get_feature_flag_payload(
- feature_flag,
- "user distinct id",
- )
+ posthog = _load_posthog()
+ if posthog is None:
+ log.warning(
+ "[AUTH] PostHog feature flag lookup skipped",
+ feature_flag=feature_flag,
+ reason="unavailable",
+ )
+ return set()
+
+ try:
+ flag_entries = posthog.get_feature_flag_payload(
+ feature_flag,
+ "user distinct id",
+ )
+ except Exception as exc:
+ log.warning(
+ "[AUTH] PostHog feature flag lookup skipped",
+ feature_flag=feature_flag,
+ reason=str(exc),
+ )
+ return set()
normalized_entries = _normalize_string_set(flag_entries)
@@ -147,6 +163,6 @@ async def ensure_auth_info_not_blocked(
auth_info: Optional[AuthInfo],
) -> Optional[AuthInfo]:
if auth_info and await is_auth_info_blocked(auth_info):
- raise UnauthorizedException(detail="Access Denied.")
+ raise UnauthorizedException(message="Access Denied.")
return auth_info
diff --git a/api/oss/src/core/auth/service.py b/api/oss/src/core/auth/service.py
index a39310a8c4..2cf5ffadfa 100644
--- a/api/oss/src/core/auth/service.py
+++ b/api/oss/src/core/auth/service.py
@@ -11,7 +11,7 @@
from oss.src.models.db_models import InvitationDB, ProjectDB, OrganizationDB
from oss.src.services import db_manager
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import get_transactions_engine
from oss.src.dbs.postgres.users.dao import IdentitiesDAO
if is_ee():
@@ -130,7 +130,9 @@ async def discover(self, email: str) -> Dict[str, Any]:
# 2. Organizations with pending project invitations
if email:
try:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
# Query project_invitations for this email, join with projects to get organization_id
stmt = (
select(ProjectDB.organization_id)
@@ -480,7 +482,9 @@ async def enforce_domain_policies(self, email: str, user_id: UUID) -> None:
"Auto-join requires organization, user, and at least one workspace"
)
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
existing_org_member = await session.execute(
select(OrganizationMemberDB).filter_by(
user_id=user.id, organization_id=organization.id
@@ -791,7 +795,9 @@ async def _get_organization_flags(
if not is_ee():
return None
- async with db_manager.engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
stmt = select(OrganizationDB.flags).where(
OrganizationDB.id == organization_id
)
@@ -803,7 +809,9 @@ async def _get_organization_slug(self, organization_id: UUID) -> Optional[str]:
if not is_ee():
return None
- async with db_manager.engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
stmt = select(OrganizationDB.slug).where(
OrganizationDB.id == organization_id
)
@@ -820,7 +828,9 @@ async def _is_organization_member(
if not is_ee():
return False
- async with db_manager.engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
stmt = select(OrganizationMemberDB).where(
OrganizationMemberDB.user_id == user_id,
OrganizationMemberDB.organization_id == organization_id,
@@ -837,7 +847,9 @@ async def _is_organization_owner(
if not is_ee():
return False
- async with db_manager.engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
stmt = select(OrganizationMemberDB.role).where(
OrganizationMemberDB.user_id == user_id,
OrganizationMemberDB.organization_id == organization_id,
diff --git a/api/oss/src/core/auth/supertokens/overrides.py b/api/oss/src/core/auth/supertokens/overrides.py
index 0fc3ab1bda..ac05eb3255 100644
--- a/api/oss/src/core/auth/supertokens/overrides.py
+++ b/api/oss/src/core/auth/supertokens/overrides.py
@@ -1,9 +1,8 @@
from typing import Dict, Any, List, Optional, Union
from urllib.parse import urlparse
-import posthog
-
from oss.src.utils.logging import get_module_logger
+from oss.src.utils.lazy import _load_posthog
from supertokens_python.recipe.thirdparty.provider import (
ProviderInput,
@@ -65,7 +64,7 @@
)
from oss.src.services import db_manager
-from oss.src.services.exceptions import UnauthorizedException
+from oss.src.utils.exceptions import UnauthorizedException
from oss.src.services.db_manager import (
get_user_with_email,
check_if_user_invitation_exists,
@@ -234,7 +233,7 @@ async def _create_account(email: str, uid: str) -> bool:
organization_db = await get_oss_organization()
if not organization_db:
raise UnauthorizedException(
- detail="No organization found. Please contact the administrator."
+ message="No organization found. Please contact the administrator."
)
# Verify user can join (invitation check)
@@ -244,13 +243,14 @@ async def _create_account(email: str, uid: str) -> bool:
)
if not user_invitation_exists:
raise UnauthorizedException(
- detail="You need to be invited by the organization owner to gain access."
+ message="You need to be invited by the organization owner to gain access."
)
payload["organization_id"] = str(organization_db.id)
await create_accounts(payload)
- if env.posthog.enabled and env.posthog.api_key:
+ posthog = _load_posthog()
+ if posthog is not None:
try:
posthog.capture(
distinct_id=auth_info.email,
@@ -263,8 +263,11 @@ async def _create_account(email: str, uid: str) -> bool:
"$set": {"email": auth_info.email},
},
)
- except Exception:
- log.error("[AUTH] Failed to capture PostHog signup event", exc_info=True)
+ except Exception as exc:
+ log.warning(
+ "[AUTH] PostHog signup event capture skipped",
+ reason=str(exc),
+ )
log.info("[AUTH] _create_account done", email=auth_info.email, uid=uid)
return True
diff --git a/api/oss/src/core/auth/turnstile.py b/api/oss/src/core/auth/turnstile.py
index 8a90a05cc9..a51440173a 100644
--- a/api/oss/src/core/auth/turnstile.py
+++ b/api/oss/src/core/auth/turnstile.py
@@ -2,7 +2,7 @@
from supertokens_python.framework.request import BaseRequest
-from oss.src.services.exceptions import UnauthorizedException
+from oss.src.utils.exceptions import UnauthorizedException
from oss.src.utils.common import is_ee
from oss.src.utils.env import env
from oss.src.utils.logging import get_module_logger
@@ -70,7 +70,7 @@ async def verify_turnstile_or_raise(
auth_flow,
get_client_ip(request),
)
- raise UnauthorizedException(detail="Please complete the security check.")
+ raise UnauthorizedException(message="Please complete the security check.")
payload = {
"secret": env.cloudflare.turnstile.secret_key or "",
@@ -93,7 +93,7 @@ async def verify_turnstile_or_raise(
remote_ip,
exc_info=True,
)
- raise UnauthorizedException(detail=TURNSTILE_FAILURE_MESSAGE) from None
+ raise UnauthorizedException(message=TURNSTILE_FAILURE_MESSAGE) from None
if verification_result.get("success") is True:
actual_hostname = _normalize_hostname(verification_result.get("hostname"))
@@ -107,7 +107,7 @@ async def verify_turnstile_or_raise(
sorted(expected_hostnames),
remote_ip,
)
- raise UnauthorizedException(detail=TURNSTILE_FAILURE_MESSAGE)
+ raise UnauthorizedException(message=TURNSTILE_FAILURE_MESSAGE)
log.info(
"[AUTH] Turnstile verification succeeded auth_flow=%s hostname=%s action=%s client_ip=%s",
@@ -126,4 +126,4 @@ async def verify_turnstile_or_raise(
verification_result.get("action"),
remote_ip,
)
- raise UnauthorizedException(detail=TURNSTILE_FAILURE_MESSAGE)
+ raise UnauthorizedException(message=TURNSTILE_FAILURE_MESSAGE)
diff --git a/api/oss/src/core/evaluations/interfaces.py b/api/oss/src/core/evaluations/interfaces.py
index 5858682f64..658aacca3e 100644
--- a/api/oss/src/core/evaluations/interfaces.py
+++ b/api/oss/src/core/evaluations/interfaces.py
@@ -15,11 +15,9 @@
EvaluationScenarioQuery,
EvaluationResult,
EvaluationResultCreate,
- EvaluationResultEdit,
EvaluationResultQuery,
EvaluationMetrics,
EvaluationMetricsCreate,
- EvaluationMetricsEdit,
EvaluationMetricsQuery,
EvaluationQueue,
EvaluationQueueCreate,
@@ -308,7 +306,7 @@ async def create_result(
raise NotImplementedError
@abstractmethod
- async def create_results(
+ async def set_results(
self,
*,
project_id: UUID,
@@ -338,28 +336,6 @@ async def fetch_results(
) -> List[EvaluationResult]:
raise NotImplementedError
- @abstractmethod
- async def edit_result(
- self,
- *,
- project_id: UUID,
- user_id: UUID,
- #
- result: EvaluationResultEdit,
- ) -> Optional[EvaluationResult]:
- raise NotImplementedError
-
- @abstractmethod
- async def edit_results(
- self,
- *,
- project_id: UUID,
- user_id: UUID,
- #
- results: List[EvaluationResultEdit],
- ) -> List[EvaluationResult]:
- raise NotImplementedError
-
@abstractmethod
async def delete_result(
self,
@@ -392,37 +368,36 @@ async def query_results(
) -> List[EvaluationResult]:
raise NotImplementedError
- # - EVALUATION METRICS -----------------------------------------------------
-
@abstractmethod
- async def create_metrics(
+ async def query_result_ids(
self,
*,
project_id: UUID,
- user_id: UUID,
#
- metrics: List[EvaluationMetricsCreate],
- ) -> List[EvaluationMetrics]:
+ result: Optional[EvaluationResultQuery] = None,
+ ) -> List[UUID]:
raise NotImplementedError
+ # - EVALUATION METRICS -----------------------------------------------------
+
@abstractmethod
- async def fetch_metrics(
+ async def set_metrics(
self,
*,
project_id: UUID,
+ user_id: UUID,
#
- metrics_ids: List[UUID],
+ metrics: List[EvaluationMetricsCreate],
) -> List[EvaluationMetrics]:
raise NotImplementedError
@abstractmethod
- async def edit_metrics(
+ async def fetch_metrics(
self,
*,
project_id: UUID,
- user_id: UUID,
#
- metrics: List[EvaluationMetricsEdit],
+ metrics_ids: List[UUID],
) -> List[EvaluationMetrics]:
raise NotImplementedError
@@ -514,6 +489,26 @@ async def edit_queues(
) -> List[EvaluationQueue]:
raise NotImplementedError
+ @abstractmethod
+ async def archive_queue(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ queue_id: UUID,
+ ) -> Optional[EvaluationQueue]:
+ raise NotImplementedError
+
+ @abstractmethod
+ async def unarchive_queue(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ queue_id: UUID,
+ ) -> Optional[EvaluationQueue]:
+ raise NotImplementedError
+
@abstractmethod
async def delete_queue(
self,
diff --git a/api/oss/src/core/evaluations/runtime/adapters.py b/api/oss/src/core/evaluations/runtime/adapters.py
new file mode 100644
index 0000000000..b8a5eb9778
--- /dev/null
+++ b/api/oss/src/core/evaluations/runtime/adapters.py
@@ -0,0 +1,535 @@
+from asyncio import Semaphore, gather
+from typing import Any, Callable, Dict, List, Optional
+from uuid import UUID
+
+from agenta.sdk.evaluations.runtime.models import (
+ ResultLogRequest,
+ WorkflowExecutionRequest,
+ WorkflowExecutionResult,
+)
+from agenta.sdk.models.evaluations import EvaluationStatus as SdkEvaluationStatus
+
+from oss.src.core.evaluations.runtime.cache import RunnableCacheResolver
+from oss.src.core.evaluations.types import (
+ EvaluationClosedConflict,
+ EvaluationMetricsRefresh,
+ EvaluationMetricsInvalid,
+ EvaluationResultCreate,
+ EvaluationScenarioCreate,
+ EvaluationScenarioEdit,
+ EvaluationStatus,
+)
+from oss.src.core.evaluations.utils import fetch_trace
+from oss.src.core.workflows.dtos import (
+ WorkflowServiceRequest,
+ WorkflowServiceRequestData,
+)
+
+
+def _status(status: Any) -> EvaluationStatus:
+ value = getattr(status, "value", status)
+ return EvaluationStatus(value)
+
+
+def _read_field(source: Any, field: str) -> Any:
+ if isinstance(source, dict):
+ return source.get(field)
+ return getattr(source, field, None)
+
+
+def _project_inputs(inputs: Any, data: Any) -> Any:
+ """Project source inputs onto the revision's declared input schema.
+
+ A source row (e.g. a testcase) carries every column — input columns plus
+ ground-truth/bookkeeping keys like ``correct_answer`` or ``testcase_id``.
+ The invoked workflow should only receive the inputs its revision declares,
+ so filter ``inputs`` down to the keys present in
+ ``data.schemas.inputs.properties``.
+
+ If the revision declares no input schema (no ``properties``), inputs pass
+ through unchanged so untyped/legacy revisions are not broken.
+ """
+ if not isinstance(inputs, dict):
+ return inputs
+
+ schemas = _read_field(data, "schemas") if data is not None else None
+ inputs_schema = _read_field(schemas, "inputs") if schemas is not None else None
+ properties = (
+ _read_field(inputs_schema, "properties") if inputs_schema is not None else None
+ )
+ if not isinstance(properties, dict) or not properties:
+ return inputs
+
+ return {key: value for key, value in inputs.items() if key in properties}
+
+
+def _dump_model(source: Any, **kwargs: Any) -> Any:
+ if hasattr(source, "model_dump"):
+ return source.model_dump(**kwargs)
+ return source
+
+
+def _dump_json(source: Any) -> Any:
+ if hasattr(source, "model_dump"):
+ return source.model_dump(mode="json", exclude_none=True)
+ if isinstance(source, dict):
+ return {key: _dump_json(value) for key, value in source.items()}
+ if isinstance(source, list):
+ return [_dump_json(value) for value in source]
+ return source
+
+
+class APIWorkflowServiceRunner:
+ """API adapter from SDK runtime requests to the backend workflow service."""
+
+ def __init__(
+ self,
+ *,
+ workflows_service: Any,
+ request_builder: Optional[
+ Callable[[WorkflowExecutionRequest], Dict[str, Any]]
+ ] = None,
+ ):
+ self.workflows_service = workflows_service
+ self.request_builder = request_builder
+
+ async def execute(
+ self,
+ request: WorkflowExecutionRequest,
+ ) -> WorkflowExecutionResult:
+ kwargs = (
+ self.request_builder(request)
+ if self.request_builder
+ else request.model_dump(mode="python", exclude_none=True)
+ )
+ response = await self.workflows_service.invoke_workflow(**kwargs)
+ status = getattr(response, "status", None)
+ status_code = getattr(status, "code", None)
+ has_error = status_code != 200
+ error = None
+
+ if has_error:
+ error = (
+ status.model_dump(mode="json", exclude_none=True)
+ if hasattr(status, "model_dump")
+ else {"code": status_code}
+ )
+
+ return WorkflowExecutionResult(
+ status=(
+ SdkEvaluationStatus.FAILURE
+ if has_error
+ else SdkEvaluationStatus.SUCCESS
+ ),
+ trace_id=getattr(response, "trace_id", None),
+ span_id=getattr(response, "span_id", None),
+ error=error,
+ outputs=getattr(response, "outputs", None),
+ )
+
+
+class APIScenarioFactory:
+ def __init__(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ evaluations_service: Any,
+ ):
+ self.project_id = project_id
+ self.user_id = user_id
+ self.evaluations_service = evaluations_service
+
+ async def bulk_create(
+ self,
+ run_id: UUID,
+ *,
+ count: int,
+ timestamp: Any = None,
+ interval: Optional[int] = None,
+ ) -> List[Any]:
+ """Mint `count` RUNNING scenarios for a run in one DAO call.
+
+ The bulk counterpart of the retired streaming factory: the unified
+ ingest flows (run/slice) mint all scenarios up front, then populate and
+ re-execute them. `timestamp`/`interval` are the run-wide temporal
+ coordinates (live query); they stay None for non-live runs. Order is
+ preserved by `create_scenarios`, so the returned list aligns 1:1 with
+ the source items the caller intends to bind.
+ """
+ if count <= 0:
+ return []
+ scenarios = await self.evaluations_service.create_scenarios(
+ project_id=self.project_id,
+ user_id=self.user_id,
+ scenarios=[
+ EvaluationScenarioCreate(
+ run_id=run_id,
+ timestamp=timestamp,
+ interval=interval,
+ status=EvaluationStatus.RUNNING,
+ )
+ for _ in range(count)
+ ],
+ )
+ if len(scenarios) != count:
+ raise ValueError(
+ f"Failed to create {count} scenario(s) for run {run_id}: "
+ f"got {len(scenarios)}."
+ )
+ return scenarios
+
+
+class APIResultSetter:
+ def __init__(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ timestamp: Any,
+ interval: Optional[int],
+ evaluations_service: Any,
+ ):
+ self.project_id = project_id
+ self.user_id = user_id
+ self.timestamp = timestamp
+ self.interval = interval
+ self.evaluations_service = evaluations_service
+
+ async def set(self, request: ResultLogRequest) -> Any:
+ cell = request.cell
+ results = await self.evaluations_service.set_results(
+ project_id=self.project_id,
+ user_id=self.user_id,
+ results=[
+ EvaluationResultCreate(
+ run_id=cell.run_id,
+ scenario_id=cell.scenario_id,
+ step_key=cell.step_key,
+ repeat_idx=cell.repeat_idx,
+ status=_status(cell.status),
+ trace_id=(
+ request.trace_id
+ if request.trace_id is not None
+ else cell.trace_id
+ ),
+ testcase_id=(
+ request.testcase_id
+ if request.testcase_id is not None
+ else cell.testcase_id
+ ),
+ error=request.error if request.error is not None else cell.error,
+ timestamp=self.timestamp,
+ interval=self.interval,
+ )
+ ],
+ )
+ return results[0] if results else None
+
+
+class APIScenarioEditor:
+ """Engine `edit_scenario` adapter: write one scenario's terminal status.
+
+ The engine computes each scenario's verdict in-loop, so the status write is
+ a property of `process` itself (shared by ingest + re-execute) rather than a
+ separate post-process. Tolerates a mid-flight run close: closing is a lock,
+ not a failure, so a write that loses the race is skipped, not raised.
+ """
+
+ def __init__(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ evaluations_service: Any,
+ ):
+ self.project_id = project_id
+ self.user_id = user_id
+ self.evaluations_service = evaluations_service
+
+ async def __call__(self, scenario: Any, status: Any) -> Any:
+ try:
+ return await self.evaluations_service.edit_scenario(
+ project_id=self.project_id,
+ user_id=self.user_id,
+ scenario=EvaluationScenarioEdit(
+ id=scenario.id,
+ tags=getattr(scenario, "tags", None),
+ meta=getattr(scenario, "meta", None),
+ status=_status(status),
+ ),
+ )
+ except EvaluationClosedConflict:
+ return None
+
+
+class APIMetricsRefresher:
+ """Single adapter for all three metric-refresh shapes.
+
+ A metric belongs to exactly one of three kinds, keyed by which coordinates
+ are set (the same classification `set_metrics` enforces downstream):
+ - variational: scenario_id(s) set, no timestamp -> per-scenario rows
+ - temporal: timestamp(s)+interval, no scenario -> time-bucket rows
+ - global: neither -> the whole-run row
+
+ The caller chooses the shape by which arguments it passes; passing a
+ scenario together with a timestamp is the both-set shape that matches no
+ unique index and is rejected here before it can reach the DAO.
+ """
+
+ def __init__(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ evaluations_service: Any,
+ ):
+ self.project_id = project_id
+ self.user_id = user_id
+ self.evaluations_service = evaluations_service
+
+ async def __call__(
+ self,
+ run_id: UUID,
+ scenario_id: Optional[UUID] = None,
+ *,
+ scenario_ids: Optional[List[UUID]] = None,
+ timestamps: Optional[List[Any]] = None,
+ interval: Optional[int] = None,
+ ) -> Any:
+ # The SDK runtime calls this positionally as (run_id, scenario_id) for
+ # the per-scenario variational refresh and (run_id, None) for the
+ # run-level global rollup. `_refresh_slice_aggregate` calls it by keyword
+ # for the temporal buckets and the global fallback.
+ has_scenario = scenario_id is not None or bool(scenario_ids)
+ has_temporal = bool(timestamps)
+ if has_scenario and has_temporal:
+ raise EvaluationMetricsInvalid(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ timestamp=timestamps[0] if timestamps else None,
+ )
+
+ return await self.evaluations_service.refresh_metrics(
+ project_id=self.project_id,
+ user_id=self.user_id,
+ metrics=EvaluationMetricsRefresh(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ scenario_ids=scenario_ids,
+ timestamps=timestamps,
+ interval=interval,
+ ),
+ )
+
+
+class APITraceFetcher:
+ """Callable trace loader: `await loader(trace_id) -> trace`.
+
+ The engine's `fetch_trace` seam is a plain async callable; this named class
+ carries the bound `project_id`/`tracing_service` and is invoked directly
+ (its instance IS the callable), so the API keeps a readable named adapter
+ while satisfying the callable contract.
+ """
+
+ def __init__(
+ self,
+ *,
+ project_id: UUID,
+ tracing_service: Any,
+ ):
+ self.project_id = project_id
+ self.tracing_service = tracing_service
+
+ async def __call__(self, trace_id: str) -> Any:
+ return await fetch_trace(
+ tracing_service=self.tracing_service,
+ project_id=self.project_id,
+ trace_id=trace_id,
+ )
+
+
+class APIWorkflowRunner:
+ def __init__(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ workflows_service: Any,
+ ):
+ self.project_id = project_id
+ self.user_id = user_id
+ self.workflows_service = workflows_service
+
+ async def execute(
+ self,
+ request: WorkflowExecutionRequest,
+ ) -> WorkflowExecutionResult:
+ return (await self.execute_batch([request]))[0]
+
+ async def execute_batch(
+ self,
+ requests: List[WorkflowExecutionRequest],
+ semaphore: Optional[Semaphore] = None,
+ ) -> List[WorkflowExecutionResult]:
+ async def _guarded(
+ request: WorkflowExecutionRequest,
+ ) -> WorkflowExecutionResult:
+ if semaphore is not None:
+ async with semaphore:
+ return await self._execute_one(request)
+ return await self._execute_one(request)
+
+ return list(await gather(*(_guarded(r) for r in requests)))
+
+ async def _execute_one(
+ self,
+ request: WorkflowExecutionRequest,
+ ) -> WorkflowExecutionResult:
+ revision = request.revision
+ data = _read_field(revision, "data")
+ if isinstance(revision, dict):
+ revision_dump = revision
+ elif hasattr(revision, "model_dump"):
+ revision_dump = revision.model_dump(mode="json", exclude_none=True)
+ else:
+ revision_dump = revision
+
+ parameters = _read_field(data, "parameters") if data else None
+ flags = _read_field(revision, "flags")
+ flags = (
+ _dump_model(
+ flags,
+ mode="json",
+ exclude_none=True,
+ exclude_unset=True,
+ )
+ if flags
+ else None
+ )
+ response = await self.workflows_service.invoke_workflow(
+ project_id=self.project_id,
+ user_id=self.user_id,
+ request=WorkflowServiceRequest(
+ version="2025.07.14",
+ flags=flags,
+ data=WorkflowServiceRequestData(
+ revision=revision_dump,
+ parameters=parameters,
+ testcase=(
+ request.source.testcase.model_dump(
+ mode="json",
+ exclude_none=True,
+ )
+ if hasattr(request.source.testcase, "model_dump")
+ else request.source.testcase
+ ),
+ inputs=_project_inputs(request.source.inputs, data),
+ trace=(
+ request.upstream_trace.model_dump(
+ mode="json",
+ exclude_none=True,
+ )
+ if hasattr(request.upstream_trace, "model_dump")
+ else request.upstream_trace
+ ),
+ outputs=request.upstream_outputs or request.source.outputs,
+ ),
+ references=_dump_json(request.references),
+ links=request.links or {},
+ ),
+ )
+ status = getattr(response, "status", None)
+ status_code = getattr(status, "code", None)
+ has_error = status_code != 200
+ return WorkflowExecutionResult(
+ status=(
+ SdkEvaluationStatus.FAILURE
+ if has_error
+ else SdkEvaluationStatus.SUCCESS
+ ),
+ trace_id=getattr(response, "trace_id", None),
+ span_id=getattr(response, "span_id", None),
+ error=(
+ status.model_dump(mode="json", exclude_none=True)
+ if has_error and hasattr(status, "model_dump")
+ else {"code": status_code}
+ if has_error
+ else None
+ ),
+ outputs=getattr(response, "outputs", None),
+ )
+
+
+class APIEvaluatorRunner(APIWorkflowRunner):
+ def __init__(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ workflows_service: Any,
+ ):
+ super().__init__(
+ project_id=project_id,
+ user_id=user_id,
+ workflows_service=workflows_service,
+ )
+
+
+class APICachedRunner:
+ def __init__(
+ self,
+ *,
+ runner: Any,
+ tracing_service: Any,
+ project_id: UUID,
+ enabled: bool,
+ ):
+ self.runner = runner
+ self.tracing_service = tracing_service
+ self.project_id = project_id
+ self.enabled = enabled
+ self.cache_resolver = RunnableCacheResolver()
+
+ async def execute(
+ self,
+ request: WorkflowExecutionRequest,
+ ) -> WorkflowExecutionResult:
+ return (await self.execute_batch([request]))[0]
+
+ async def execute_batch(
+ self,
+ requests: List[WorkflowExecutionRequest],
+ semaphore: Optional[Semaphore] = None,
+ ) -> List[WorkflowExecutionResult]:
+ results: List[Optional[WorkflowExecutionResult]] = [None] * len(requests)
+ missing: List[WorkflowExecutionRequest] = []
+ missing_positions: List[int] = []
+
+ for idx, request in enumerate(requests):
+ cache = await self.cache_resolver.resolve(
+ tracing_service=self.tracing_service,
+ project_id=self.project_id,
+ enabled=self.enabled and self.tracing_service is not None,
+ references=request.references,
+ links=request.links,
+ required_count=1,
+ )
+ reusable = cache.reusable_traces[0] if cache.reusable_traces else None
+ if reusable and getattr(reusable, "trace_id", None):
+ results[idx] = WorkflowExecutionResult(
+ status=SdkEvaluationStatus.SUCCESS,
+ trace_id=str(reusable.trace_id),
+ trace=reusable,
+ )
+ continue
+
+ missing.append(request)
+ missing_positions.append(idx)
+
+ if missing:
+ executed = await self.runner.execute_batch(missing, semaphore=semaphore)
+ for idx, execution in zip(missing_positions, executed):
+ results[idx] = execution
+
+ return [result for result in results if result is not None]
diff --git a/api/oss/src/core/evaluations/runtime/cache.py b/api/oss/src/core/evaluations/runtime/cache.py
new file mode 100644
index 0000000000..805e4564f5
--- /dev/null
+++ b/api/oss/src/core/evaluations/runtime/cache.py
@@ -0,0 +1,60 @@
+from typing import Any, Dict, List, Optional
+from uuid import UUID
+
+from pydantic import BaseModel, ConfigDict
+
+from oss.src.core.evaluations.utils import (
+ fetch_traces_by_hash,
+ make_hash,
+ plan_missing_traces,
+ select_traces_for_reuse,
+)
+
+
+class CacheResolution(BaseModel):
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ hash_id: Optional[str]
+ reusable_traces: List[Any]
+ missing_count: int
+
+
+class RunnableCacheResolver:
+ async def resolve(
+ self,
+ *,
+ tracing_service: Any,
+ project_id: UUID,
+ enabled: bool,
+ references: Optional[Dict[str, Any]] = None,
+ links: Optional[Dict[str, Any]] = None,
+ required_count: int = 1,
+ ) -> CacheResolution:
+ hash_id = make_hash(references=references, links=links)
+
+ if not enabled or not hash_id or required_count <= 0:
+ return CacheResolution(
+ hash_id=hash_id,
+ reusable_traces=[],
+ missing_count=max(0, required_count),
+ )
+
+ cached_traces = await fetch_traces_by_hash(
+ tracing_service,
+ project_id,
+ hash_id=hash_id,
+ limit=required_count,
+ )
+ reusable_traces = select_traces_for_reuse(
+ traces=cached_traces,
+ required_count=required_count,
+ )
+
+ return CacheResolution(
+ hash_id=hash_id,
+ reusable_traces=reusable_traces,
+ missing_count=plan_missing_traces(
+ required_count=required_count,
+ reusable_count=len(reusable_traces),
+ ),
+ )
diff --git a/api/oss/src/core/evaluations/runtime/locks.py b/api/oss/src/core/evaluations/runtime/locks.py
index 33cff2b4f0..3309d791e6 100644
--- a/api/oss/src/core/evaluations/runtime/locks.py
+++ b/api/oss/src/core/evaluations/runtime/locks.py
@@ -21,6 +21,7 @@
from pydantic import BaseModel
import oss.src.utils.caching as caching
+import oss.src.utils.locking as locking
from oss.src.utils.logging import get_module_logger
log = get_module_logger(__name__)
@@ -121,10 +122,10 @@ async def _write_meta(
payload: LockPayload,
ttl: int,
) -> None:
- await caching.r_lock.set(
+ await locking.set_key(
_actual_meta_name(lock_key),
orjson.dumps(payload.model_dump(mode="json")),
- ex=ttl,
+ ttl=ttl,
)
@@ -134,7 +135,7 @@ async def _touch_meta(
ttl: int,
) -> None:
meta_key = _actual_meta_name(lock_key)
- raw = await caching.r_lock.get(meta_key)
+ raw = await locking.get_key(meta_key)
if not raw:
return
@@ -145,10 +146,10 @@ async def _touch_meta(
return
payload.updated_at = _now_iso()
- await caching.r_lock.set(
+ await locking.set_key(
meta_key,
orjson.dumps(payload.model_dump(mode="json")),
- ex=ttl,
+ ttl=ttl,
)
@@ -157,11 +158,11 @@ async def _read_meta_if_lock_exists(
lock_key: str,
) -> Optional[LockPayload]:
actual_lock_key = _actual_lock_name(lock_key)
- if not await caching.r_lock.exists(actual_lock_key):
- await caching.r_lock.delete(_actual_meta_name(lock_key))
+ if not await locking.has_key(actual_lock_key):
+ await locking.delete_key(_actual_meta_name(lock_key))
return None
- raw = await caching.r_lock.get(_actual_meta_name(lock_key))
+ raw = await locking.get_key(_actual_meta_name(lock_key))
if not raw:
return None
@@ -180,7 +181,7 @@ async def _acquire_lock(
ttl: int,
) -> Optional[LockPayload]:
namespace, key = _lock_args(lock_key)
- job_token = await caching.acquire_lock(
+ job_token = await locking.acquire_lock(
namespace=namespace,
key=key,
ttl=ttl,
@@ -207,7 +208,7 @@ async def _acquire_lock(
job_id=job_id,
exc_info=True,
)
- await caching.release_lock(
+ await locking.release_lock(
namespace=namespace,
key=key,
owner=job_token,
@@ -224,7 +225,7 @@ async def _renew_lock(
ttl: int,
) -> bool:
namespace, key = _lock_args(lock_key)
- renewed = await caching.renew_lock(
+ renewed = await locking.renew_lock(
namespace=namespace,
key=key,
ttl=ttl,
@@ -254,7 +255,7 @@ async def _release_lock(
job_token: str,
) -> bool:
namespace, key = _lock_args(lock_key)
- released = await caching.release_lock(
+ released = await locking.release_lock(
namespace=namespace,
key=key,
owner=job_token,
@@ -263,7 +264,7 @@ async def _release_lock(
return False
try:
- await caching.r_lock.delete(_actual_meta_name(lock_key))
+ await locking.delete_key(_actual_meta_name(lock_key))
except Exception:
log.warning(
"[LOCK] Released lock but failed to delete metadata",
@@ -367,7 +368,7 @@ async def list_active_job_locks(
Wildcard discovery must use SCAN, never KEYS.
"""
payloads: list[LockPayload] = []
- async for raw_lock_key in caching.r_lock.scan_iter(
+ async for raw_lock_key in locking.scan_keys(
match=_actual_lock_name(job_lock_pattern(run_id))
):
meta_key = (
@@ -375,7 +376,7 @@ async def list_active_job_locks(
if isinstance(raw_lock_key, bytes)
else f"{raw_lock_key}:meta"
)
- raw_payload = await caching.r_lock.get(meta_key)
+ raw_payload = await locking.get_key(meta_key)
if not raw_payload:
continue
@@ -403,9 +404,7 @@ async def is_run_executing(
*,
run_id: str,
) -> bool:
- async for _ in caching.r_lock.scan_iter(
- match=_actual_lock_name(job_lock_pattern(run_id))
- ):
+ async for _ in locking.scan_keys(match=_actual_lock_name(job_lock_pattern(run_id))):
return True
return False
@@ -414,7 +413,7 @@ async def has_mutation_lock(
*,
run_id: str,
) -> bool:
- return bool(await caching.r_lock.exists(_actual_lock_name(run_lock_key(run_id))))
+ return await locking.has_key(_actual_lock_name(run_lock_key(run_id)))
async def refresh_worker_heartbeat(
@@ -424,7 +423,7 @@ async def refresh_worker_heartbeat(
) -> WorkerHeartbeatPayload:
now = _now_iso()
hb_key = _actual_lock_name(worker_heartbeat_key(worker_id))
- raw = await caching.r_lock.get(hb_key)
+ raw = await locking.get_key(hb_key)
created_at = now
if raw:
@@ -442,10 +441,10 @@ async def refresh_worker_heartbeat(
created_at=created_at,
updated_at=now,
)
- await caching.r_lock.set(
+ await locking.set_key(
hb_key,
orjson.dumps(payload.model_dump(mode="json")),
- ex=ttl,
+ ttl=ttl,
)
return payload
diff --git a/api/oss/src/core/evaluations/runtime/models.py b/api/oss/src/core/evaluations/runtime/models.py
new file mode 100644
index 0000000000..ba92d4ea1e
--- /dev/null
+++ b/api/oss/src/core/evaluations/runtime/models.py
@@ -0,0 +1,131 @@
+from typing import Any, Dict, List, Literal, Optional
+from uuid import UUID
+
+from pydantic import BaseModel, ConfigDict, Field
+
+from oss.src.core.evaluations.types import EvaluationStatus, Origin, Type
+
+InputSourceKind = Literal["query", "testset", "trace", "testcase", "direct"]
+SourceBatchKind = Literal["traces", "testcases"]
+TopologyStatus = Literal["supported", "potential", "not_planned", "unsupported"]
+DispatchKind = Literal[
+ "batch_query",
+ "batch_testset",
+ "batch_invocation",
+ "queue_traces",
+ "queue_testcases",
+ "live_query",
+]
+SliceProcessMode = Literal["fill-missing", "force"]
+
+
+class RuntimeModel(BaseModel):
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+
+class InputSourceSpec(RuntimeModel):
+ kind: InputSourceKind
+ step_key: str
+ references: Dict[str, Any] = Field(default_factory=dict)
+
+
+class ResolvedSourceItem(RuntimeModel):
+ kind: InputSourceKind
+ step_key: str
+ references: Dict[str, Any] = Field(default_factory=dict)
+ trace_id: Optional[str] = None
+ span_id: Optional[str] = None
+ testcase_id: Optional[UUID] = None
+ testcase: Optional[Any] = None
+ trace: Optional[Any] = None
+ inputs: Optional[Any] = None
+ outputs: Optional[Any] = None
+
+
+class ResolvedSourceBatch(RuntimeModel):
+ kind: SourceBatchKind
+ step_key: str
+ trace_ids: List[str] = Field(default_factory=list)
+ testcase_ids: List[UUID] = Field(default_factory=list)
+
+
+class ResolvedTestsetInputSpec(RuntimeModel):
+ step_key: str
+ testset: Any
+ testset_revision: Any
+ testcases: List[Any] = Field(default_factory=list)
+ testcases_data: List[Dict[str, Any]] = Field(default_factory=list)
+
+
+class ScenarioBinding(RuntimeModel):
+ scenario_id: UUID
+ source: ResolvedSourceItem
+ interval: Optional[int] = None
+ timestamp: Optional[Any] = None
+
+
+class EvaluationStep(RuntimeModel):
+ key: str
+ type: Type
+ origin: Origin
+ references: Dict[str, Any] = Field(default_factory=dict)
+ inputs: List[str] = Field(default_factory=list)
+
+
+class TensorSlice(RuntimeModel):
+ run_id: UUID
+ scenario_ids: Optional[List[UUID]] = None
+ step_keys: Optional[List[str]] = None
+ repeat_idxs: Optional[List[int]] = None
+ process_mode: SliceProcessMode = "fill-missing"
+
+
+class TensorProbeSummary(RuntimeModel):
+ existing_count: int = 0
+ missing_count: int = 0
+ success_count: int = 0
+ failure_count: int = 0
+ pending_count: int = 0
+ any_count: int = 0
+
+
+class PlannedCell(RuntimeModel):
+ run_id: UUID
+ scenario_id: UUID
+ step_key: str
+ step_type: Type
+ origin: Origin
+ repeat_idx: int
+ status: EvaluationStatus
+ should_execute: bool = False
+ trace_id: Optional[str] = None
+ span_id: Optional[str] = None
+ testcase_id: Optional[UUID] = None
+ error: Optional[Dict[str, Any]] = None
+
+
+class ExecutionPlan(RuntimeModel):
+ run_id: UUID
+ cells: List[PlannedCell]
+
+ @property
+ def executable_cells(self) -> List[PlannedCell]:
+ return [cell for cell in self.cells if cell.should_execute]
+
+
+class ProcessSummary(RuntimeModel):
+ created: int = 0
+ reused: int = 0
+ pending: int = 0
+ failed: int = 0
+ # A coordinate whose input was never populated (no trace_id/testcase_id and
+ # no internal reference): there is nothing to run, so the line is SKIPPED —
+ # distinct from `failed`, which means execution was attempted and errored.
+ skipped: int = 0
+
+
+class TopologyDecision(RuntimeModel):
+ status: TopologyStatus
+ label: str
+ reason: str
+ dispatch: Optional[DispatchKind] = None
diff --git a/api/oss/src/core/evaluations/runtime/planner.py b/api/oss/src/core/evaluations/runtime/planner.py
new file mode 100644
index 0000000000..46de7bd0ca
--- /dev/null
+++ b/api/oss/src/core/evaluations/runtime/planner.py
@@ -0,0 +1,146 @@
+from typing import Dict, Iterable, List, Optional
+from uuid import UUID
+
+from oss.src.core.evaluations.runtime.models import (
+ EvaluationStep,
+ ExecutionPlan,
+ PlannedCell,
+ ResolvedSourceItem,
+ ScenarioBinding,
+)
+from oss.src.core.evaluations.types import (
+ EvaluationResultCreate,
+ EvaluationRun,
+ EvaluationRunDataStep,
+ EvaluationStatus,
+)
+from agenta.sdk.evaluations.runtime.planner import (
+ EvaluationPlanner as SdkEvaluationPlanner,
+)
+
+
+def _step_inputs(step: EvaluationRunDataStep) -> List[str]:
+ return [step_input.key for step_input in (step.inputs or []) if step_input.key]
+
+
+def normalize_steps(
+ steps: Optional[Iterable[EvaluationRunDataStep]],
+) -> List[EvaluationStep]:
+ return [
+ EvaluationStep(
+ key=step.key,
+ type=step.type,
+ origin=step.origin,
+ references=step.references or {},
+ inputs=_step_inputs(step),
+ )
+ for step in (steps or [])
+ ]
+
+
+def make_scenario_bindings(
+ *,
+ scenario_ids: List[UUID],
+ source_items: List[ResolvedSourceItem],
+) -> List[ScenarioBinding]:
+ if len(scenario_ids) != len(source_items):
+ raise ValueError("scenario_ids and source_items must have the same length")
+
+ return [
+ ScenarioBinding(scenario_id=scenario_id, source=source_item)
+ for scenario_id, source_item in zip(scenario_ids, source_items)
+ ]
+
+
+class EvaluationPlanner:
+ """Backend DTO adapter around the SDK-owned runtime planner."""
+
+ def plan(
+ self,
+ *,
+ run: EvaluationRun,
+ bindings: List[ScenarioBinding],
+ ) -> ExecutionPlan:
+ if not run.id:
+ raise ValueError("run.id is required")
+
+ steps = normalize_steps(run.data.steps if run.data else None)
+ flags = run.flags
+
+ sdk_plan = SdkEvaluationPlanner().plan_bindings(
+ run_id=run.id,
+ bindings=bindings, # type: ignore[arg-type]
+ steps=steps, # type: ignore[arg-type]
+ repeats=run.data.repeats if run.data else None,
+ is_split=bool(flags and flags.is_split),
+ is_live=bool(flags and flags.is_live),
+ has_traces=bool(flags and flags.has_traces),
+ has_testcases=bool(flags and flags.has_testcases),
+ )
+
+ return ExecutionPlan(
+ run_id=sdk_plan.run_id,
+ cells=[
+ PlannedCell(
+ run_id=cell.run_id,
+ scenario_id=cell.scenario_id,
+ step_key=cell.step_key,
+ step_type=cell.step_type,
+ origin=cell.origin,
+ repeat_idx=cell.repeat_idx,
+ status=EvaluationStatus(cell.status.value),
+ should_execute=cell.should_execute,
+ trace_id=cell.trace_id,
+ span_id=cell.span_id,
+ testcase_id=cell.testcase_id,
+ error=cell.error,
+ )
+ for cell in sdk_plan.cells
+ ],
+ )
+
+
+def index_cells_by_slot(
+ plan: ExecutionPlan,
+) -> Dict[tuple[UUID, str, int], PlannedCell]:
+ return {
+ (cell.scenario_id, cell.step_key, cell.repeat_idx): cell for cell in plan.cells
+ }
+
+
+def planned_cells_to_result_creates(
+ cells: Iterable[PlannedCell],
+) -> List[EvaluationResultCreate]:
+ return [
+ EvaluationResultCreate(
+ run_id=cell.run_id,
+ scenario_id=cell.scenario_id,
+ step_key=cell.step_key,
+ repeat_idx=cell.repeat_idx,
+ status=cell.status,
+ trace_id=cell.trace_id,
+ testcase_id=cell.testcase_id,
+ error=cell.error,
+ )
+ for cell in cells
+ ]
+
+
+def plan_source_input_result_creates(
+ *,
+ run: EvaluationRun,
+ scenario_id: UUID,
+ source_item: ResolvedSourceItem,
+) -> List[EvaluationResultCreate]:
+ plan = EvaluationPlanner().plan(
+ run=run,
+ bindings=make_scenario_bindings(
+ scenario_ids=[scenario_id],
+ source_items=[source_item],
+ ),
+ )
+ return planned_cells_to_result_creates(
+ cell
+ for cell in plan.cells
+ if cell.step_type == "input" and cell.step_key == source_item.step_key
+ )
diff --git a/api/oss/src/core/evaluations/runtime/runner.py b/api/oss/src/core/evaluations/runtime/runner.py
new file mode 100644
index 0000000000..60cd4313cd
--- /dev/null
+++ b/api/oss/src/core/evaluations/runtime/runner.py
@@ -0,0 +1,91 @@
+from datetime import datetime
+from typing import Any, List, Optional
+from uuid import UUID
+
+from agenta.sdk.evaluations.runtime.executor import EvaluationTaskRunner
+
+
+class TaskiqEvaluationTaskRunner(EvaluationTaskRunner):
+ """API adapter from generic evaluation dispatch to Taskiq tasks."""
+
+ def __init__(self, *, worker: Any):
+ self.worker = worker
+
+ async def process_run_from_source(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run_id: UUID,
+ newest: Optional[datetime] = None,
+ oldest: Optional[datetime] = None,
+ ) -> Any:
+ kwargs = dict(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ )
+ if newest is not None:
+ kwargs["newest"] = newest
+ if oldest is not None:
+ kwargs["oldest"] = oldest
+
+ return await self.worker.process_run_from_source.kiq(**kwargs)
+
+ async def process_run_from_batch(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run_id: UUID,
+ source_kind: str,
+ trace_ids: Optional[List[str]] = None,
+ testcase_ids: Optional[List[UUID]] = None,
+ input_step_key: Optional[str] = None,
+ ) -> Any:
+ kwargs = dict(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ source_kind=source_kind,
+ )
+ if trace_ids is not None:
+ kwargs["trace_ids"] = trace_ids
+ if testcase_ids is not None:
+ kwargs["testcase_ids"] = testcase_ids
+ if input_step_key is not None:
+ kwargs["input_step_key"] = input_step_key
+
+ return await self.worker.process_run_from_batch.kiq(**kwargs)
+
+ async def process_rerun(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run_id: UUID,
+ scenario_ids: Optional[List[UUID]] = None,
+ step_keys: Optional[List[str]] = None,
+ repeat_idxs: Optional[List[int]] = None,
+ process_mode: Optional[str] = None,
+ ) -> Any:
+ # Re-execute EXISTING scenarios by coordinate (the tensor process(slice)
+ # op): retry transiently-failed scenarios, run a newly-added evaluator
+ # over existing scenarios, re-run a specific repeat, etc. Distinct verb
+ # from process_run_from_batch, which ingests NEW source items into NEW
+ # scenarios.
+ kwargs: dict = dict(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ )
+ if scenario_ids is not None:
+ kwargs["scenario_ids"] = scenario_ids
+ if step_keys is not None:
+ kwargs["step_keys"] = step_keys
+ if repeat_idxs is not None:
+ kwargs["repeat_idxs"] = repeat_idxs
+ if process_mode is not None:
+ kwargs["process_mode"] = process_mode
+
+ return await self.worker.process_rerun.kiq(**kwargs)
diff --git a/api/oss/src/core/evaluations/runtime/sources.py b/api/oss/src/core/evaluations/runtime/sources.py
new file mode 100644
index 0000000000..b3f25b4994
--- /dev/null
+++ b/api/oss/src/core/evaluations/runtime/sources.py
@@ -0,0 +1,481 @@
+from datetime import datetime
+from typing import Any, Dict, List, Optional
+from uuid import UUID
+
+from oss.src.core.evaluations.runtime.models import (
+ ResolvedSourceBatch,
+ ResolvedSourceItem,
+ ResolvedTestsetInputSpec,
+)
+from oss.src.core.evaluations.types import EvaluationRun, EvaluationRunDataStep
+from oss.src.core.evaluations.utils import fetch_trace
+from oss.src.core.shared.dtos import Reference
+from oss.src.core.tracing.dtos import (
+ Filtering,
+ Windowing,
+ Formatting,
+ Format,
+ Focus,
+ TracingQuery,
+ LogicalOperator,
+)
+
+
+def _extract_root_span(trace: Any) -> Optional[Any]:
+ spans = (
+ trace.get("spans") if isinstance(trace, dict) else getattr(trace, "spans", None)
+ )
+ if not isinstance(spans, dict) or not spans:
+ return None
+
+ for span in spans.values():
+ if isinstance(span, list):
+ continue
+ if _extract_span_id(span):
+ return span
+
+ return None
+
+
+def _extract_span_id(span: Any) -> Optional[str]:
+ span_id = (
+ span.get("span_id")
+ if isinstance(span, dict)
+ else getattr(span, "span_id", None)
+ )
+ return str(span_id) if span_id else None
+
+
+def _extract_ag_data(trace: Any) -> Dict[str, Any]:
+ root_span = _extract_root_span(trace)
+ if root_span is None:
+ return {}
+
+ attributes = (
+ root_span.get("attributes", {})
+ if isinstance(root_span, dict)
+ else getattr(root_span, "attributes", {})
+ )
+ if hasattr(attributes, "model_dump"):
+ attributes = attributes.model_dump(mode="json", exclude_none=True)
+ if not isinstance(attributes, dict):
+ return {}
+
+ ag = attributes.get("ag") or {}
+ data = ag.get("data") if isinstance(ag, dict) else {}
+ return data if isinstance(data, dict) else {}
+
+
+class SourceResolutionError(Exception):
+ """An input step does not carry exactly one recognized source reference."""
+
+ pass
+
+
+class SourceResolver:
+ # The exact reference key this resolver handles. The dispatch loop selects a
+ # resolver by which key the step carries, not by which one happens to return
+ # a non-empty batch.
+ source_reference_key: str = ""
+
+ def applies(self, step: EvaluationRunDataStep) -> bool:
+ refs = step.references or {}
+ return self.source_reference_key in refs
+
+ async def resolve(
+ self,
+ *,
+ project_id: UUID,
+ step: EvaluationRunDataStep,
+ ) -> Optional[ResolvedSourceBatch]:
+ raise NotImplementedError
+
+
+class QueryRevisionTraceResolver(SourceResolver):
+ source_reference_key = "query_revision"
+
+ def __init__(self, *, queries_service: Any):
+ self.queries_service = queries_service
+
+ async def resolve(
+ self,
+ *,
+ project_id: UUID,
+ step: EvaluationRunDataStep,
+ ) -> Optional[ResolvedSourceBatch]:
+ refs = step.references or {}
+ query_revision_ref = refs.get("query_revision")
+
+ if not step.key or not query_revision_ref or not query_revision_ref.id:
+ return None
+
+ query_revision = await self.queries_service.fetch_query_revision(
+ project_id=project_id,
+ query_revision_ref=query_revision_ref,
+ include_trace_ids=True,
+ )
+ trace_ids = (
+ query_revision.data.trace_ids
+ if query_revision and query_revision.data and query_revision.data.trace_ids
+ else []
+ )
+
+ if not trace_ids:
+ return None
+
+ return ResolvedSourceBatch(
+ kind="traces",
+ step_key=step.key,
+ trace_ids=trace_ids,
+ )
+
+
+class TestsetRevisionTestcaseResolver(SourceResolver):
+ source_reference_key = "testset_revision"
+
+ def __init__(self, *, testsets_service: Any):
+ self.testsets_service = testsets_service
+
+ async def resolve(
+ self,
+ *,
+ project_id: UUID,
+ step: EvaluationRunDataStep,
+ ) -> Optional[ResolvedSourceBatch]:
+ refs = step.references or {}
+ testset_revision_ref = refs.get("testset_revision")
+
+ if not step.key or not testset_revision_ref or not testset_revision_ref.id:
+ return None
+
+ testset_revision = await self.testsets_service.fetch_testset_revision(
+ project_id=project_id,
+ testset_revision_ref=testset_revision_ref,
+ include_testcase_ids=True,
+ )
+ testcase_ids = (
+ testset_revision.data.testcase_ids
+ if testset_revision
+ and testset_revision.data
+ and testset_revision.data.testcase_ids
+ else []
+ )
+
+ if not testcase_ids:
+ return None
+
+ return ResolvedSourceBatch(
+ kind="testcases",
+ step_key=step.key,
+ testcase_ids=testcase_ids,
+ )
+
+
+class TestsetRevisionPayloadResolver:
+ def __init__(self, *, testsets_service: Any):
+ self.testsets_service = testsets_service
+
+ async def resolve(
+ self,
+ *,
+ project_id: UUID,
+ step: EvaluationRunDataStep,
+ ) -> ResolvedTestsetInputSpec:
+ refs = step.references or {}
+ testset_revision_ref = refs.get("testset_revision")
+
+ if not testset_revision_ref or not isinstance(testset_revision_ref.id, UUID):
+ raise ValueError(
+ f"Evaluation input step {step.key} missing testset_revision reference."
+ )
+
+ testset_revision = await self.testsets_service.fetch_testset_revision(
+ project_id=project_id,
+ testset_revision_ref=testset_revision_ref,
+ )
+ if not testset_revision:
+ raise ValueError(
+ f"Testset revision with id {testset_revision_ref.id} not found!"
+ )
+ if not testset_revision.data or not testset_revision.data.testcases:
+ raise ValueError(
+ f"Testset revision with id {testset_revision_ref.id} has no testcases!"
+ )
+
+ testset_variant = await self.testsets_service.fetch_testset_variant(
+ project_id=project_id,
+ testset_variant_ref=Reference(id=testset_revision.variant_id),
+ )
+ if not testset_variant:
+ raise ValueError(
+ f"Testset variant with id {testset_revision.variant_id} not found!"
+ )
+
+ testset = await self.testsets_service.fetch_testset(
+ project_id=project_id,
+ testset_ref=Reference(id=testset_variant.testset_id),
+ )
+ if not testset:
+ raise ValueError(f"Testset with id {testset_variant.testset_id} not found!")
+
+ testcases = testset_revision.data.testcases
+ return ResolvedTestsetInputSpec(
+ step_key=step.key,
+ testset=testset,
+ testset_revision=testset_revision,
+ testcases=testcases,
+ testcases_data=[
+ {**testcase.data, "testcase_id": str(testcase.id)}
+ for testcase in testcases
+ ],
+ )
+
+
+async def resolve_queue_source_batches(
+ *,
+ project_id: UUID,
+ run: EvaluationRun,
+ queries_service: Any,
+ testsets_service: Any,
+) -> List[ResolvedSourceBatch]:
+ if not run.data or not run.data.steps:
+ return []
+
+ resolvers: List[SourceResolver] = [
+ QueryRevisionTraceResolver(queries_service=queries_service),
+ TestsetRevisionTestcaseResolver(testsets_service=testsets_service),
+ ]
+ batches: List[ResolvedSourceBatch] = []
+
+ for step in run.data.steps:
+ if step.type != "input" or not step.key:
+ continue
+
+ # Exactly one recognized source reference per input step. Selecting by
+ # the applicable key (not by first non-empty result) means an empty
+ # result — a query with zero traces — stays an empty batch instead of
+ # falling through to the wrong resolver.
+ applicable = [resolver for resolver in resolvers if resolver.applies(step)]
+
+ if not applicable:
+ continue
+
+ if len(applicable) > 1:
+ raise SourceResolutionError(
+ f"Input step '{step.key}' carries multiple source references "
+ f"({', '.join(r.source_reference_key for r in applicable)}); "
+ "exactly one is allowed."
+ )
+
+ batch = await applicable[0].resolve(
+ project_id=project_id,
+ step=step,
+ )
+ if batch:
+ batches.append(batch)
+
+ return batches
+
+
+async def resolve_testset_input_specs(
+ *,
+ project_id: UUID,
+ input_steps: List[EvaluationRunDataStep],
+ testsets_service: Any,
+) -> List[ResolvedTestsetInputSpec]:
+ resolver = TestsetRevisionPayloadResolver(testsets_service=testsets_service)
+ return [
+ await resolver.resolve(
+ project_id=project_id,
+ step=input_step,
+ )
+ for input_step in input_steps
+ ]
+
+
+async def resolve_direct_source_items(
+ *,
+ project_id: UUID,
+ trace_ids: Optional[List[str]] = None,
+ testcase_ids: Optional[List[UUID]] = None,
+ testcases_service: Any = None,
+ tracing_service: Any = None,
+) -> List[ResolvedSourceItem]:
+ source_items: List[ResolvedSourceItem] = []
+ testcase_ids = testcase_ids or []
+ trace_ids = trace_ids or []
+
+ testcases = (
+ await testcases_service.fetch_testcases(
+ project_id=project_id,
+ testcase_ids=testcase_ids,
+ )
+ if testcase_ids and testcases_service is not None
+ else []
+ )
+ testcases_by_id = {
+ testcase.id: testcase for testcase in testcases if getattr(testcase, "id", None)
+ }
+ traces_by_id: Dict[str, Any] = {}
+
+ if trace_ids and tracing_service is not None:
+ for trace_id in trace_ids:
+ trace = await fetch_trace(
+ tracing_service=tracing_service,
+ project_id=project_id,
+ trace_id=trace_id,
+ max_retries=1,
+ delay=0,
+ )
+ if trace is not None:
+ traces_by_id[trace_id] = trace
+
+ source_items.extend(
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="",
+ testcase=testcases_by_id.get(testcase_id),
+ testcase_id=testcase_id,
+ )
+ for testcase_id in testcase_ids
+ )
+ for trace_id in trace_ids:
+ trace = traces_by_id.get(trace_id)
+ ag_data = _extract_ag_data(trace) if trace is not None else {}
+ root_span = _extract_root_span(trace) if trace is not None else None
+ source_items.append(
+ ResolvedSourceItem(
+ kind="trace",
+ step_key="",
+ trace_id=trace_id,
+ span_id=_extract_span_id(root_span),
+ trace=trace,
+ inputs=ag_data.get("inputs"),
+ outputs=ag_data.get("outputs"),
+ )
+ )
+
+ return source_items
+
+
+async def resolve_live_query_traces(
+ *,
+ project_id: UUID,
+ query_revisions: Dict[str, Any],
+ tracing_service: Any,
+ newest: Optional[datetime] = None,
+ oldest: Optional[datetime] = None,
+ use_windowing: bool = False,
+) -> Dict[str, List[Any]]:
+ query_traces: Dict[str, List[Any]] = {}
+
+ for query_step_key, query_revision in query_revisions.items():
+ formatting = Formatting(
+ focus=Focus.TRACE,
+ format=Format.AGENTA,
+ )
+ filtering = Filtering(
+ operator=LogicalOperator.AND,
+ conditions=[],
+ )
+ windowing = Windowing(
+ oldest=oldest,
+ newest=newest,
+ next=None,
+ limit=None,
+ order="ascending",
+ interval=None,
+ rate=None,
+ )
+
+ query_revision_data = getattr(query_revision, "data", None)
+ if query_revision_data:
+ query_filtering = getattr(query_revision_data, "filtering", None)
+ query_windowing = getattr(query_revision_data, "windowing", None)
+
+ if query_filtering:
+ filtering = query_filtering
+
+ if query_windowing and use_windowing:
+ windowing = Windowing(
+ oldest=query_windowing.oldest,
+ newest=query_windowing.newest,
+ limit=query_windowing.limit,
+ order=query_windowing.order,
+ rate=query_windowing.rate,
+ )
+ elif query_windowing:
+ windowing.rate = query_windowing.rate
+
+ query_traces[query_step_key] = (
+ await tracing_service.query_traces(
+ project_id=project_id,
+ query=TracingQuery(
+ formatting=formatting,
+ filtering=filtering,
+ windowing=windowing,
+ ),
+ )
+ or []
+ )
+
+ return query_traces
+
+
+async def resolve_query_source_items(
+ *,
+ project_id: UUID,
+ run: EvaluationRun,
+ queries_service: Any,
+ tracing_service: Any,
+ newest: Optional[datetime] = None,
+ oldest: Optional[datetime] = None,
+ use_windowing: bool = False,
+) -> Dict[str, List[ResolvedSourceItem]]:
+ if not run.data or not run.data.steps:
+ return {}
+
+ query_revisions: Dict[str, Any] = {}
+ for step in run.data.steps:
+ if step.type != "input" or not step.key:
+ continue
+
+ query_revision_ref = (step.references or {}).get("query_revision")
+ if not query_revision_ref:
+ continue
+
+ query_revision = await queries_service.fetch_query_revision(
+ project_id=project_id,
+ query_revision_ref=query_revision_ref,
+ )
+ if (
+ not query_revision
+ or not getattr(query_revision, "id", None)
+ or not getattr(query_revision, "slug", None)
+ ):
+ continue
+
+ query_revisions[step.key] = query_revision
+
+ query_traces = await resolve_live_query_traces(
+ project_id=project_id,
+ query_revisions=query_revisions,
+ tracing_service=tracing_service,
+ newest=newest,
+ oldest=oldest,
+ use_windowing=use_windowing,
+ )
+
+ return {
+ query_step_key: [
+ ResolvedSourceItem(
+ kind="trace",
+ step_key=query_step_key,
+ trace_id=trace.trace_id,
+ trace=trace,
+ )
+ for trace in traces
+ if trace and trace.trace_id
+ ]
+ for query_step_key, traces in query_traces.items()
+ }
diff --git a/api/oss/src/core/evaluations/runtime/tensor.py b/api/oss/src/core/evaluations/runtime/tensor.py
new file mode 100644
index 0000000000..ec995fee0b
--- /dev/null
+++ b/api/oss/src/core/evaluations/runtime/tensor.py
@@ -0,0 +1,313 @@
+from typing import List, Optional, Protocol
+from uuid import UUID
+
+from oss.src.core.evaluations.runtime.models import (
+ ProcessSummary,
+ TensorProbeSummary,
+ TensorSlice,
+)
+from oss.src.core.evaluations.types import (
+ EvaluationMetricsRefresh,
+ EvaluationResult,
+ EvaluationResultCreate,
+ EvaluationResultQuery,
+ EvaluationScenarioQuery,
+ EvaluationStatus,
+)
+
+
+def _empty_dimension(values: Optional[List[object]]) -> bool:
+ return values == []
+
+
+def _slice_is_empty(tensor_slice: TensorSlice) -> bool:
+ return any(
+ _empty_dimension(values)
+ for values in (
+ tensor_slice.scenario_ids,
+ tensor_slice.step_keys,
+ tensor_slice.repeat_idxs,
+ )
+ )
+
+
+def _query_from_slice(tensor_slice: TensorSlice) -> EvaluationResultQuery:
+ return EvaluationResultQuery(
+ run_id=tensor_slice.run_id,
+ scenario_ids=tensor_slice.scenario_ids,
+ step_keys=tensor_slice.step_keys,
+ repeat_idxs=tensor_slice.repeat_idxs,
+ )
+
+
+class SliceProcessor(Protocol):
+ """Execution boundary for `process(slice)`.
+
+ A slice processor takes the canonical output coordinate (existing
+ scenarios x steps x repeats) and re-executes the runnable cells in that
+ scope: it plans from the scenarios' existing source bindings, restricts to
+ the requested `step_keys`/`repeat_idxs`, invokes only missing work, and
+ populates the result cells. It does NOT refresh metrics — that is the
+ separate `refresh` op, invoked by the caller on the right boundary.
+
+ It is deliberately adapter-free at this seam so `runtime/` does not depend on
+ `tasks/`: the concrete implementation (which closes over the tracing /
+ testcases / workflows / applications services and the run's revisions) is
+ wired at the composition root and injected here. The same shape lets the SDK
+ or an in-memory test supply its own processor without changing tensor ops.
+ """
+
+ async def process(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ tensor_slice: TensorSlice,
+ ) -> ProcessSummary: ...
+
+
+class TensorSliceOperations:
+ def __init__(
+ self,
+ *,
+ evaluations_service,
+ slice_processor: Optional[SliceProcessor] = None,
+ ):
+ self.evaluations_service = evaluations_service
+ self.slice_processor = slice_processor
+
+ async def probe(
+ self,
+ *,
+ project_id: UUID,
+ tensor_slice: TensorSlice,
+ ) -> List[EvaluationResult]:
+ if _slice_is_empty(tensor_slice):
+ return []
+
+ return await self.evaluations_service.query_results(
+ project_id=project_id,
+ result=_query_from_slice(tensor_slice),
+ )
+
+ async def populate(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ results: List[EvaluationResultCreate],
+ ) -> List[EvaluationResult]:
+ # `populate` only writes result cells. Metrics are a separate operation
+ # (`refresh`): the three metric kinds refresh on different boundaries
+ # (scenario-complete / interval / run), so the caller decides when.
+ if not results:
+ return []
+
+ return await self.evaluations_service.set_results(
+ project_id=project_id,
+ user_id=user_id,
+ results=results,
+ )
+
+ async def probe_summary(
+ self,
+ *,
+ project_id: UUID,
+ tensor_slice: TensorSlice,
+ expected_count: Optional[int] = None,
+ ) -> TensorProbeSummary:
+ results = await self.probe(
+ project_id=project_id,
+ tensor_slice=tensor_slice,
+ )
+ existing_count = len(results)
+ expected = expected_count if expected_count is not None else existing_count
+
+ return TensorProbeSummary(
+ existing_count=existing_count,
+ missing_count=max(0, expected - existing_count),
+ success_count=sum(
+ 1 for result in results if result.status == EvaluationStatus.SUCCESS
+ ),
+ failure_count=sum(
+ 1
+ for result in results
+ if result.status
+ in {
+ EvaluationStatus.FAILURE,
+ EvaluationStatus.ERRORS,
+ }
+ ),
+ pending_count=sum(
+ 1 for result in results if result.status == EvaluationStatus.PENDING
+ ),
+ any_count=existing_count,
+ )
+
+ async def prune(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ tensor_slice: TensorSlice,
+ ) -> List[UUID]:
+ # `prune` removes result cells, then re-triggers a metrics refresh over
+ # the affected scope so aggregates recompute over the now-smaller cell
+ # set. Every tensor-write op (populate / process / prune) re-triggers
+ # refresh after touching cells — prune leaves nothing stale. It does NOT
+ # touch steps or scenarios; those are the graph-shape ops on the service
+ # (add_steps/remove_steps, add_scenarios/remove_scenarios).
+ if _slice_is_empty(tensor_slice):
+ return []
+ # prune only needs the ids to delete, so use the ID-only query rather
+ # than hydrating full result DTOs via `probe`.
+ result_ids = await self.evaluations_service.query_result_ids(
+ project_id=project_id,
+ result=_query_from_slice(tensor_slice),
+ )
+ if not result_ids:
+ return []
+
+ deleted = await self.evaluations_service.delete_results(
+ project_id=project_id,
+ result_ids=result_ids,
+ )
+ await self.refresh(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=tensor_slice,
+ )
+ return deleted
+
+ async def process(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ tensor_slice: TensorSlice,
+ ) -> ProcessSummary:
+ """Execute the runnable cells in the slice and return what changed.
+
+ This is the plan->execute->populate loop of the design's `process(slice)`
+ operation — results only. Metrics are refreshed by the separate
+ `refresh` op, not here. The actual execution is delegated to the
+ injected `slice_processor`; this method owns only the slice-level
+ guard (an empty dimension means "nothing addressed", so there is
+ nothing to execute).
+
+ Execution requires a wired `slice_processor`. Earlier this method
+ silently refreshed metrics and returned an empty summary, which read as
+ "executed the slice" while doing almost nothing (UEL-015) — so when no
+ processor is wired we now fail loudly rather than masquerade.
+ """
+ if _slice_is_empty(tensor_slice):
+ return ProcessSummary()
+
+ if self.slice_processor is None:
+ raise NotImplementedError(
+ "process(slice) requires a wired slice_processor; "
+ "TensorSliceOperations was constructed without one. "
+ "Use probe/populate/prune for read/write/delete, or wire a "
+ "SliceProcessor at the composition root to execute the slice."
+ )
+
+ return await self.slice_processor.process(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=tensor_slice,
+ )
+
+ async def refresh(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ tensor_slice: TensorSlice,
+ ) -> None:
+ """Recompute metrics over the slice's scope — variational AND aggregate.
+
+ First-class peer of probe/process/populate/prune. The three metric kinds
+ refresh on different boundaries (scenario-complete, interval, run), so a
+ complete refresh does both layers:
+
+ 1. variational — the per-scenario rows for the slice's scenarios;
+ 2. aggregate — temporal buckets (live runs, which aggregate over time)
+ or the single global row (non-live runs).
+
+ Callers that already refreshed variational inside `process` can still
+ call this; recomputing the per-scenario rows is idempotent. Kept separate
+ from process/populate so writes do not implicitly recompute — the caller
+ invokes `refresh` once, at the right boundary.
+ """
+ if _slice_is_empty(tensor_slice):
+ return
+
+ run_id = tensor_slice.run_id
+
+ # 1. Variational — per-scenario rows for the addressed scenarios.
+ await self.evaluations_service.refresh_metrics(
+ project_id=project_id,
+ user_id=user_id,
+ metrics=EvaluationMetricsRefresh(
+ run_id=run_id,
+ scenario_ids=tensor_slice.scenario_ids,
+ ),
+ )
+
+ # 2. Aggregate — temporal (live) or global (non-live).
+ run = await self.evaluations_service.fetch_run(
+ project_id=project_id,
+ run_id=run_id,
+ )
+ if not run:
+ return
+
+ is_live = bool(run.flags and run.flags.is_live)
+
+ if not is_live:
+ # Non-live: one global aggregate (no scenario, no timestamp).
+ await self.evaluations_service.refresh_metrics(
+ project_id=project_id,
+ user_id=user_id,
+ metrics=EvaluationMetricsRefresh(run_id=run_id),
+ )
+ return
+
+ # Live: recompute the temporal buckets the slice touched. Group the
+ # slice's scenarios' timestamps by interval so each affected
+ # (interval, timestamp) bucket is recomputed.
+ scenarios = await self.evaluations_service.query_scenarios(
+ project_id=project_id,
+ scenario=EvaluationScenarioQuery(
+ run_id=run_id,
+ ids=tensor_slice.scenario_ids,
+ ),
+ )
+ timestamps_by_interval: dict[int, set] = {}
+ for scenario in scenarios:
+ if scenario.timestamp is None or scenario.interval is None:
+ continue
+ timestamps_by_interval.setdefault(scenario.interval, set()).add(
+ scenario.timestamp
+ )
+
+ if not timestamps_by_interval:
+ # No temporal buckets on the slice's scenarios — fall back to the
+ # global aggregate so the run is not left with stale metrics.
+ await self.evaluations_service.refresh_metrics(
+ project_id=project_id,
+ user_id=user_id,
+ metrics=EvaluationMetricsRefresh(run_id=run_id),
+ )
+ return
+
+ for interval, timestamps in timestamps_by_interval.items():
+ await self.evaluations_service.refresh_metrics(
+ project_id=project_id,
+ user_id=user_id,
+ metrics=EvaluationMetricsRefresh(
+ run_id=run_id,
+ timestamps=sorted(timestamps),
+ interval=interval,
+ ),
+ )
diff --git a/api/oss/src/core/evaluations/runtime/topology.py b/api/oss/src/core/evaluations/runtime/topology.py
new file mode 100644
index 0000000000..f7950b6e0d
--- /dev/null
+++ b/api/oss/src/core/evaluations/runtime/topology.py
@@ -0,0 +1,34 @@
+from agenta.sdk.evaluations.runtime.topology import classify_steps_topology
+
+from oss.src.core.evaluations.runtime.planner import normalize_steps
+from oss.src.core.evaluations.runtime.models import TopologyDecision
+from oss.src.core.evaluations.types import EvaluationRun
+
+
+def classify_run_topology(run: EvaluationRun) -> TopologyDecision:
+ """Classify the current evaluation graph for worker dispatch.
+
+ This is intentionally conservative. It mirrors the currently supported
+ worker-dispatched topologies while naming future-interest and not-planned
+ shapes explicitly.
+ """
+
+ steps = run.data.steps if run.data and run.data.steps else []
+ flags = run.flags
+
+ decision = classify_steps_topology(
+ steps=normalize_steps(steps),
+ is_live=bool(flags and flags.is_live),
+ has_queries=bool(flags and flags.has_queries),
+ has_testsets=bool(flags and flags.has_testsets),
+ has_traces=bool(flags and flags.has_traces),
+ has_testcases=bool(flags and flags.has_testcases),
+ has_evaluators=bool(flags and flags.has_evaluators),
+ )
+
+ return TopologyDecision(
+ status=decision.status,
+ label=decision.label,
+ reason=decision.reason,
+ dispatch=decision.dispatch,
+ )
diff --git a/api/oss/src/core/evaluations/service.py b/api/oss/src/core/evaluations/service.py
index 6869e78e52..ab9066a7fc 100644
--- a/api/oss/src/core/evaluations/service.py
+++ b/api/oss/src/core/evaluations/service.py
@@ -20,6 +20,7 @@
EvaluationRunDataMapping,
EvaluationRunDataStepInput,
EvaluationRunDataStep,
+ EvaluationRunDataConcurrency,
EvaluationRunData,
EvaluationRun,
EvaluationRunCreate,
@@ -33,12 +34,10 @@
# EVALUATION RESULT
EvaluationResult,
EvaluationResultCreate,
- EvaluationResultEdit,
EvaluationResultQuery,
# EVALUATION METRICS
EvaluationMetrics,
EvaluationMetricsCreate,
- EvaluationMetricsEdit,
EvaluationMetricsQuery,
EvaluationMetricsRefresh,
# EVALUATION QUEUE
@@ -49,6 +48,11 @@
EvaluationQueueData,
EvaluationQueueEdit,
EvaluationQueueQuery,
+ # DEFAULT QUEUE EXCEPTIONS
+ DefaultQueueDataInvalid,
+ DefaultQueueDemotionForbidden,
+ DefaultQueueDeletionForbidden,
+ DefaultQueueArchiveForbidden,
)
from oss.src.core.evaluations.types import (
Target,
@@ -72,6 +76,7 @@
SimpleQueueSettings,
)
from oss.src.core.evaluations.types import CURRENT_VERSION
+from oss.src.core.evaluations.types import EvaluationClosedConflict
from oss.src.core.tracing.dtos import (
TracingQuery,
Filtering,
@@ -90,6 +95,8 @@
from oss.src.core.evaluators.dtos import EvaluatorRevision
from oss.src.core.queries.service import QueriesService
from oss.src.core.testsets.service import TestsetsService
+from oss.src.core.testcases.service import TestcasesService
+from oss.src.core.workflows.service import WorkflowsService
from oss.src.core.applications.service import ApplicationsService
from oss.src.core.evaluations.utils import (
@@ -100,10 +107,20 @@
)
from oss.src.core.evaluations.utils import get_metrics_keys_from_schema
+from oss.src.core.evaluations.runtime.topology import classify_run_topology
+from oss.src.core.evaluations.runtime.sources import resolve_queue_source_batches
+from oss.src.core.evaluations.runtime.runner import TaskiqEvaluationTaskRunner
+from oss.src.core.evaluations.runtime.models import SliceProcessMode, TensorSlice
+from oss.src.core.evaluations.runtime.tensor import TensorSliceOperations
log = get_module_logger(__name__)
+# Product policy toggle: when True, every evaluation run keeps a default queue
+# even when it has no human evaluators. Keep this as a global until the product
+# decision is finalized.
+EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS = False
+
if TYPE_CHECKING:
from oss.src.tasks.taskiq.evaluations.worker import EvaluationsWorker
@@ -191,6 +208,9 @@ def __init__(
testsets_service: TestsetsService,
evaluators_service: EvaluatorsService,
evaluations_worker: Optional["EvaluationsWorker"] = None,
+ testcases_service: Optional[TestcasesService] = None,
+ workflows_service: Optional[WorkflowsService] = None,
+ applications_service: Optional[ApplicationsService] = None,
):
self.evaluations_dao = evaluations_dao
@@ -199,6 +219,40 @@ def __init__(
self.testsets_service = testsets_service
self.evaluators_service = evaluators_service
self.evaluations_worker = evaluations_worker
+ self.testcases_service = testcases_service
+ self.workflows_service = workflows_service
+ self.applications_service = applications_service
+ self.evaluations_task_runner = (
+ TaskiqEvaluationTaskRunner(worker=evaluations_worker)
+ if evaluations_worker is not None
+ else None
+ )
+
+ # Tensor slice ops (probe/populate run in-process; process dispatches
+ # async via taskiq). Built here so the service owns its runtime
+ # collaborator, like `evaluations_task_runner` above. `APISliceProcessor`
+ # lives in `tasks/processor.py` which imports this module, so it is
+ # imported locally to avoid a circular import. Requires the sub-services
+ # the SDK engine needs; absent those (e.g. worker/parser contexts) the
+ # ops degrade to None and probe/populate no-op.
+ self.tensor_slice_operations: Optional[TensorSliceOperations] = None
+ if (
+ testcases_service is not None
+ and workflows_service is not None
+ and applications_service is not None
+ ):
+ from oss.src.core.evaluations.tasks.processor import APISliceProcessor
+
+ self.tensor_slice_operations = TensorSliceOperations(
+ evaluations_service=self,
+ slice_processor=APISliceProcessor(
+ evaluations_service=self,
+ tracing_service=tracing_service,
+ testcases_service=testcases_service,
+ workflows_service=workflows_service,
+ applications_service=applications_service,
+ ),
+ )
### CRUD
@@ -225,7 +279,7 @@ async def refresh_runs(
log.error(e, exc_info=True)
return False
- if self.evaluations_worker is None:
+ if self.evaluations_task_runner is None:
log.warning(
"[LIVE] Taskiq client is not configured; skipping live run dispatch"
)
@@ -266,12 +320,10 @@ async def refresh_runs(
run=run,
)
- await self.evaluations_worker.evaluate_live_query.kiq(
+ await self.evaluations_task_runner.process_run_from_source(
project_id=project_id,
user_id=user_id,
- #
run_id=run.id,
- #
newest=newest,
oldest=oldest,
)
@@ -359,34 +411,97 @@ async def _ensure_human_annotation_queue(
user_id: UUID,
run: EvaluationRun,
) -> None:
- """Create an EvaluationQueue for human annotation steps if none exists for this run."""
- if not run.id or not run.data or not run.data.steps:
- return
+ await self._reconcile_default_queue(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ )
- human_step_keys = [
- step.key
- for step in run.data.steps
- if step.type == "annotation" and step.origin == "human" and step.key
- ]
+ async def fetch_default_queue(
+ self,
+ *,
+ project_id: UUID,
+ run_id: UUID,
+ include_archived: bool = False,
+ ) -> Optional[EvaluationQueue]:
+ queues = await self.query_queues(
+ project_id=project_id,
+ queue=EvaluationQueueQuery(
+ run_id=run_id,
+ flags=EvaluationQueueQueryFlags(is_default=True),
+ include_archived=include_archived,
+ ),
+ )
+ return queues[0] if queues else None
- if not human_step_keys:
- return
+ async def _reconcile_default_queue(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run: EvaluationRun,
+ ) -> EvaluationRun:
+ if not run.id:
+ return run
- existing_queues = await self.query_queues(
+ has_human = bool(run.flags and run.flags.has_human)
+ should_exist = EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS or has_human
+ default_queue = await self.fetch_default_queue(
project_id=project_id,
- queue=EvaluationQueueQuery(run_id=run.id),
+ run_id=run.id,
+ include_archived=True,
)
- if any(q.run_id == run.id for q in existing_queues):
- return
- await self.create_queue(
- project_id=project_id,
- user_id=user_id,
- queue=EvaluationQueueCreate(
- run_id=run.id,
- status=EvaluationStatus.RUNNING,
- data=EvaluationQueueData(step_keys=human_step_keys),
- ),
+ if should_exist:
+ if default_queue is None:
+ default_queue = await self.create_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue=EvaluationQueueCreate(
+ run_id=run.id,
+ status=EvaluationStatus.RUNNING,
+ flags=EvaluationQueueFlags(is_default=True),
+ data=EvaluationQueueData(),
+ ),
+ )
+ elif default_queue.deleted_at is not None:
+ default_queue = await self.unarchive_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue_id=default_queue.id,
+ )
+ elif default_queue is not None and default_queue.deleted_at is None:
+ default_queue = await self.archive_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue_id=default_queue.id,
+ force=True,
+ )
+
+ is_queue = bool(
+ has_human and default_queue is not None and default_queue.deleted_at is None
+ )
+ if run.flags and run.flags.is_queue == is_queue:
+ return run
+
+ flags = run.flags.model_copy() if run.flags else EvaluationRunFlags()
+ flags.is_queue = is_queue
+ return (
+ await self.evaluations_dao.edit_run(
+ project_id=project_id,
+ user_id=user_id,
+ run=EvaluationRunEdit(
+ id=run.id,
+ name=run.name,
+ description=run.description,
+ flags=flags,
+ tags=run.tags,
+ meta=run.meta,
+ status=run.status,
+ data=run.data,
+ ),
+ )
+ or run
)
async def fetch_live_runs(
@@ -434,6 +549,120 @@ async def has_run_mutation_lock(
return await _has_mutation_lock(run_id=str(run_id))
+ @staticmethod
+ def _step_keys(run: Optional[EvaluationRun]) -> set:
+ if run is None or run.data is None or not run.data.steps:
+ return set()
+ return {step.key for step in run.data.steps}
+
+ async def _reconcile_run(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ run: EvaluationRun,
+ prior_step_keys: set,
+ ) -> EvaluationRun:
+ """Bring all run-derived state in line with the run's current graph.
+
+ This is the single post-write reconciliation path shared by create and
+ edit. `create_run` is just `edit_run` starting from an empty graph: it
+ passes `prior_step_keys=set()`, so the prune step is a no-op (there are
+ no prior cells), while the default-queue reconciliation runs identically
+ in both cases.
+
+ Steps:
+ 1. prune tensor cells (and input-only scenarios + their metrics) for
+ any step that existed before but is gone from the current graph,
+ per `docs/designs/unified-eval-loops/step-removal-semantics.md`.
+ 2. reconcile the default queue + `is_queue` from the current graph.
+ """
+ await self._prune_removed_steps(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ removed_step_keys=prior_step_keys - self._step_keys(run),
+ )
+
+ return await self._reconcile_default_queue(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ )
+
+ async def _prune_removed_steps(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ run: EvaluationRun,
+ removed_step_keys: set,
+ ) -> None:
+ """Destructively prune cells, orphan scenarios, and metrics for steps
+ that left the graph. Removal is destructive (Model A): stored graph and
+ stored tensor keep the same shape. A no-op when nothing was removed.
+ """
+ if not removed_step_keys or not run.id:
+ return
+
+ removed_results = await self.query_results(
+ project_id=project_id,
+ result=EvaluationResultQuery(
+ run_id=run.id,
+ step_keys=sorted(removed_step_keys),
+ ),
+ )
+ affected_scenario_ids = sorted(
+ {r.scenario_id for r in removed_results if r.scenario_id},
+ key=str,
+ )
+
+ removed_result_ids = [r.id for r in removed_results if r.id]
+ if removed_result_ids:
+ await self.delete_results(
+ project_id=project_id,
+ result_ids=removed_result_ids,
+ )
+
+ # Scenarios sourced only from a removed step have no remaining cells.
+ orphan_scenario_ids: List[UUID] = []
+ for scenario_id in affected_scenario_ids:
+ remaining = await self.query_results(
+ project_id=project_id,
+ result=EvaluationResultQuery(
+ run_id=run.id,
+ scenario_ids=[scenario_id],
+ ),
+ )
+ if not remaining:
+ orphan_scenario_ids.append(scenario_id)
+
+ if orphan_scenario_ids:
+ await self.delete_scenarios(
+ project_id=project_id,
+ scenario_ids=orphan_scenario_ids,
+ )
+
+ # Flush metrics for surviving affected scenarios so current metrics stay
+ # aligned with the post-removal graph. Orphans are gone.
+ orphans = set(orphan_scenario_ids)
+ surviving_scenario_ids = [
+ scenario_id
+ for scenario_id in affected_scenario_ids
+ if scenario_id not in orphans
+ ]
+ if surviving_scenario_ids:
+ await self.refresh_metrics(
+ project_id=project_id,
+ user_id=user_id,
+ metrics=EvaluationMetricsRefresh(
+ run_id=run.id,
+ scenario_ids=surviving_scenario_ids,
+ ),
+ )
+
async def create_run(
self,
*,
@@ -444,12 +673,21 @@ async def create_run(
) -> Optional[EvaluationRun]:
run.version = CURRENT_VERSION
- return await self.evaluations_dao.create_run(
+ created_run = await self.evaluations_dao.create_run(
project_id=project_id,
user_id=user_id,
#
run=run,
)
+ if created_run:
+ # Create is edit from an empty graph: no prior steps to prune.
+ created_run = await self._reconcile_run(
+ project_id=project_id,
+ user_id=user_id,
+ run=created_run,
+ prior_step_keys=set(),
+ )
+ return created_run
async def create_runs(
self,
@@ -462,12 +700,21 @@ async def create_runs(
for run in runs:
run.version = CURRENT_VERSION
- return await self.evaluations_dao.create_runs(
+ created_runs = await self.evaluations_dao.create_runs(
project_id=project_id,
user_id=user_id,
#
runs=runs,
)
+ return [
+ await self._reconcile_run(
+ project_id=project_id,
+ user_id=user_id,
+ run=created_run,
+ prior_step_keys=set(),
+ )
+ for created_run in created_runs
+ ]
async def fetch_run(
self,
@@ -505,12 +752,25 @@ async def edit_run(
) -> Optional[EvaluationRun]:
run.version = CURRENT_VERSION
- return await self.evaluations_dao.edit_run(
+ # Capture the prior graph so reconciliation can prune any step the edit
+ # drops. An edit that omits a step is a destructive removal.
+ prior_run = await self.fetch_run(project_id=project_id, run_id=run.id)
+ prior_step_keys = self._step_keys(prior_run)
+
+ edited_run = await self.evaluations_dao.edit_run(
project_id=project_id,
user_id=user_id,
#
run=run,
)
+ if edited_run:
+ edited_run = await self._reconcile_run(
+ project_id=project_id,
+ user_id=user_id,
+ run=edited_run,
+ prior_step_keys=prior_step_keys,
+ )
+ return edited_run
async def edit_runs(
self,
@@ -523,12 +783,29 @@ async def edit_runs(
for run in runs:
run.version = CURRENT_VERSION
- return await self.evaluations_dao.edit_runs(
+ prior_runs = await self.fetch_runs(
+ project_id=project_id,
+ run_ids=[run.id for run in runs],
+ )
+ prior_step_keys_by_id = {
+ prior_run.id: self._step_keys(prior_run) for prior_run in prior_runs
+ }
+
+ edited_runs = await self.evaluations_dao.edit_runs(
project_id=project_id,
user_id=user_id,
#
runs=runs,
)
+ return [
+ await self._reconcile_run(
+ project_id=project_id,
+ user_id=user_id,
+ run=edited_run,
+ prior_step_keys=prior_step_keys_by_id.get(edited_run.id, set()),
+ )
+ for edited_run in edited_runs
+ ]
async def delete_run(
self,
@@ -808,7 +1085,7 @@ async def create_result(
result=result,
)
- async def create_results(
+ async def set_results(
self,
*,
project_id: UUID,
@@ -819,7 +1096,7 @@ async def create_results(
for result in results:
result.version = CURRENT_VERSION
- return await self.evaluations_dao.create_results(
+ return await self.evaluations_dao.set_results(
project_id=project_id,
user_id=user_id,
#
@@ -852,41 +1129,6 @@ async def fetch_results(
result_ids=result_ids,
)
- async def edit_result(
- self,
- *,
- project_id: UUID,
- user_id: UUID,
- #
- result: EvaluationResultEdit,
- ) -> Optional[EvaluationResult]:
- result.version = CURRENT_VERSION
-
- return await self.evaluations_dao.edit_result(
- project_id=project_id,
- user_id=user_id,
- #
- result=result,
- )
-
- async def edit_results(
- self,
- *,
- project_id: UUID,
- user_id: UUID,
- #
- results: List[EvaluationResultEdit],
- ) -> List[EvaluationResult]:
- for result in results:
- result.version = CURRENT_VERSION
-
- return await self.evaluations_dao.edit_results(
- project_id=project_id,
- user_id=user_id,
- #
- results=results,
- )
-
async def delete_result(
self,
*,
@@ -930,9 +1172,22 @@ async def query_results(
windowing=windowing,
)
+ async def query_result_ids(
+ self,
+ *,
+ project_id: UUID,
+ #
+ result: Optional[EvaluationResultQuery] = None,
+ ) -> List[UUID]:
+ return await self.evaluations_dao.query_result_ids(
+ project_id=project_id,
+ #
+ result=result,
+ )
+
# - EVALUATION METRIC ------------------------------------------------------
- async def create_metrics(
+ async def set_metrics(
self,
*,
project_id: UUID,
@@ -943,7 +1198,7 @@ async def create_metrics(
for metric in metrics:
metric.version = CURRENT_VERSION
- return await self.evaluations_dao.create_metrics(
+ return await self.evaluations_dao.set_metrics(
project_id=project_id,
user_id=user_id,
#
@@ -963,24 +1218,6 @@ async def fetch_metrics(
metrics_ids=metrics_ids,
)
- async def edit_metrics(
- self,
- *,
- project_id: UUID,
- user_id: UUID,
- #
- metrics: List[EvaluationMetricsEdit],
- ) -> List[EvaluationMetrics]:
- for metric in metrics:
- metric.version = CURRENT_VERSION
-
- return await self.evaluations_dao.edit_metrics(
- project_id=project_id,
- user_id=user_id,
- #
- metrics=metrics,
- )
-
async def delete_metrics(
self,
*,
@@ -1178,7 +1415,15 @@ async def _refresh_metrics(
steps_trace_ids[step_key] = trace_ids
if not steps_trace_ids:
- log.warning("[METRICS] No trace_ids found! Cannot extract metrics.")
+ # A human/custom annotation is run elsewhere (web / SDK), so it has no
+ # trace here by design — only warn if a step we expected to trace
+ # (an invocation or auto annotation) failed to produce one.
+ expected_traces = any(
+ step.type != "annotation" or step.origin not in {"human", "custom"}
+ for step in refreshable_steps
+ )
+ if expected_traces:
+ log.warning("[METRICS] No trace_ids found! Cannot extract metrics.")
return []
inferred_metrics_keys_by_step: Dict[str, List[Dict[str, str]]] = {}
@@ -1328,14 +1573,6 @@ async def _refresh_metrics(
bucket = buckets[0]
- # log.info(
- # f"[METRICS] Step '{step_key}': bucket has metrics: {bool(bucket.metrics)}"
- # )
- # if bucket.metrics:
- # log.info(
- # f"[METRICS] Step '{step_key}': metrics keys: {list(bucket.metrics.keys())}"
- # )
-
if not bucket.metrics:
log.warning("Bucket metrics should not be empty")
log.warning("Bucket:", bucket)
@@ -1367,7 +1604,7 @@ async def _refresh_metrics(
)
]
- metrics = await self.create_metrics(
+ metrics = await self.set_metrics(
project_id=project_id,
user_id=user_id,
#
@@ -1538,6 +1775,24 @@ def mapping_key(
# - EVALUATION QUEUE -------------------------------------------------------
+ @staticmethod
+ def _validate_default_queue_data(
+ *, flags: Optional[EvaluationQueueFlags], data: Optional[EvaluationQueueData]
+ ) -> None:
+ if not flags or not flags.is_default or not data:
+ return
+ if any(
+ value is not None
+ for value in (
+ data.user_ids,
+ data.scenario_ids,
+ data.step_keys,
+ data.batch_size,
+ data.batch_offset,
+ )
+ ):
+ raise DefaultQueueDataInvalid()
+
async def create_queue(
self,
*,
@@ -1547,13 +1802,21 @@ async def create_queue(
queue: EvaluationQueueCreate,
) -> Optional[EvaluationQueue]:
queue.version = CURRENT_VERSION
+ self._validate_default_queue_data(flags=queue.flags, data=queue.data)
- return await self.evaluations_dao.create_queue(
+ created_queue = await self.evaluations_dao.create_queue(
project_id=project_id,
user_id=user_id,
#
queue=queue,
)
+ if created_queue:
+ await self._sync_run_queue_flag_for_default_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue=created_queue,
+ )
+ return created_queue
async def create_queues(
self,
@@ -1565,13 +1828,21 @@ async def create_queues(
) -> List[EvaluationQueue]:
for queue in queues:
queue.version = CURRENT_VERSION
+ self._validate_default_queue_data(flags=queue.flags, data=queue.data)
- return await self.evaluations_dao.create_queues(
+ created_queues = await self.evaluations_dao.create_queues(
project_id=project_id,
user_id=user_id,
#
queues=queues,
)
+ for created_queue in created_queues:
+ await self._sync_run_queue_flag_for_default_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue=created_queue,
+ )
+ return created_queues
async def fetch_queue(
self,
@@ -1608,13 +1879,29 @@ async def edit_queue(
queue: EvaluationQueueEdit,
) -> Optional[EvaluationQueue]:
queue.version = CURRENT_VERSION
+ existing = await self.fetch_queue(project_id=project_id, queue_id=queue.id)
+ if existing and existing.flags and existing.flags.is_default:
+ if queue.flags and not queue.flags.is_default:
+ raise DefaultQueueDemotionForbidden(queue_id=queue.id)
+ effective_flags = existing.flags
+ else:
+ effective_flags = queue.flags or (existing.flags if existing else None)
+ effective_data = queue.data or (existing.data if existing else None)
+ self._validate_default_queue_data(flags=effective_flags, data=effective_data)
- return await self.evaluations_dao.edit_queue(
+ edited_queue = await self.evaluations_dao.edit_queue(
project_id=project_id,
user_id=user_id,
#
queue=queue,
)
+ if edited_queue:
+ await self._sync_run_queue_flag_for_default_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue=edited_queue,
+ )
+ return edited_queue
async def edit_queues(
self,
@@ -1627,12 +1914,127 @@ async def edit_queues(
for queue in queues:
queue.version = CURRENT_VERSION
- return await self.evaluations_dao.edit_queues(
+ existing_queues = await self.fetch_queues(
+ project_id=project_id,
+ queue_ids=[queue.id for queue in queues],
+ )
+ existing_by_id = {queue.id: queue for queue in existing_queues}
+ for queue in queues:
+ existing = existing_by_id.get(queue.id)
+ if existing and existing.flags and existing.flags.is_default:
+ if queue.flags and not queue.flags.is_default:
+ raise DefaultQueueDemotionForbidden(queue_id=queue.id)
+ effective_flags = existing.flags
+ else:
+ effective_flags = queue.flags or (existing.flags if existing else None)
+ effective_data = queue.data or (existing.data if existing else None)
+ self._validate_default_queue_data(
+ flags=effective_flags, data=effective_data
+ )
+
+ edited_queues = await self.evaluations_dao.edit_queues(
project_id=project_id,
user_id=user_id,
#
queues=queues,
)
+ for edited_queue in edited_queues:
+ await self._sync_run_queue_flag_for_default_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue=edited_queue,
+ )
+ return edited_queues
+
+ async def _sync_run_queue_flag_for_default_queue(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ queue: EvaluationQueue,
+ ) -> None:
+ if not queue.flags or not queue.flags.is_default:
+ return
+ run = await self.fetch_run(project_id=project_id, run_id=queue.run_id)
+ if not run:
+ return
+ has_human = bool(run.flags and run.flags.has_human)
+ is_queue = bool(has_human and queue.deleted_at is None)
+ if run.flags and run.flags.is_queue == is_queue:
+ return
+ flags = run.flags.model_copy() if run.flags else EvaluationRunFlags()
+ flags.is_queue = is_queue
+ try:
+ await self.evaluations_dao.edit_run(
+ project_id=project_id,
+ user_id=user_id,
+ run=EvaluationRunEdit(
+ id=run.id,
+ name=run.name,
+ description=run.description,
+ flags=flags,
+ tags=run.tags,
+ meta=run.meta,
+ status=run.status,
+ data=run.data,
+ ),
+ )
+ except EvaluationClosedConflict:
+ # Archiving/unarchiving a default queue is a worklist action allowed
+ # on a closed run, but the closed run rejects content edits. The
+ # derived is_queue flag is best-effort here; it reconciles on reopen.
+ pass
+
+ async def archive_queue(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ queue_id: UUID,
+ force: bool = False,
+ ) -> Optional[EvaluationQueue]:
+ # Default queues are system-managed: only reconcile (force=True) may
+ # archive them. Direct user-facing archive of a default is forbidden.
+ if not force:
+ existing = await self.fetch_queue(
+ project_id=project_id,
+ queue_id=queue_id,
+ )
+ if existing and existing.flags and existing.flags.is_default:
+ raise DefaultQueueArchiveForbidden(queue_id=queue_id)
+
+ queue = await self.evaluations_dao.archive_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue_id=queue_id,
+ )
+ if queue:
+ await self._sync_run_queue_flag_for_default_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue=queue,
+ )
+ return queue
+
+ async def unarchive_queue(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ queue_id: UUID,
+ ) -> Optional[EvaluationQueue]:
+ queue = await self.evaluations_dao.unarchive_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue_id=queue_id,
+ )
+ if queue:
+ await self._sync_run_queue_flag_for_default_queue(
+ project_id=project_id,
+ user_id=user_id,
+ queue=queue,
+ )
+ return queue
async def delete_queue(
self,
@@ -1641,6 +2043,9 @@ async def delete_queue(
#
queue_id: UUID,
) -> Optional[UUID]:
+ existing = await self.fetch_queue(project_id=project_id, queue_id=queue_id)
+ if existing and existing.flags and existing.flags.is_default:
+ raise DefaultQueueDeletionForbidden(queue_id=queue_id)
return await self.evaluations_dao.delete_queue(
project_id=project_id,
#
@@ -1654,6 +2059,12 @@ async def delete_queues(
#
queue_ids: List[UUID],
) -> List[UUID]:
+ existing_queues = await self.fetch_queues(
+ project_id=project_id,
+ queue_ids=queue_ids,
+ )
+ if any(queue.flags and queue.flags.is_default for queue in existing_queues):
+ raise DefaultQueueDeletionForbidden()
return await self.evaluations_dao.delete_queues(
project_id=project_id,
#
@@ -1800,6 +2211,11 @@ def __init__(
self.evaluators_service = evaluators_service
self.evaluations_service = evaluations_service
self.evaluations_worker = evaluations_worker
+ self.evaluations_task_runner = (
+ TaskiqEvaluationTaskRunner(worker=evaluations_worker)
+ if evaluations_worker is not None
+ else None
+ )
async def create(
self,
@@ -1856,6 +2272,7 @@ async def create(
evaluator_steps=evaluation.data.evaluator_steps,
#
repeats=evaluation.data.repeats,
+ concurrency=evaluation.data.concurrency,
#
is_live=evaluation.flags.is_live,
)
@@ -2232,50 +2649,26 @@ async def start(
_evaluation = await self._parse_evaluation_run(run=run)
return _evaluation
- if self.evaluations_worker is None:
+ if self.evaluations_task_runner is None:
log.warning(
"[EVAL] Taskiq client missing; cannot dispatch evaluation run",
)
return _evaluation
- has_query_steps = bool(_evaluation.data.query_steps)
- has_testset_steps = bool(_evaluation.data.testset_steps)
- has_application_steps = bool(_evaluation.data.application_steps)
- has_evaluator_steps = bool(_evaluation.data.evaluator_steps)
+ # Worker task names are API-internal, so dispatch through the
+ # unified run processor rather than topology-specific handlers.
+ topology = classify_run_topology(run)
- if has_query_steps and has_evaluator_steps:
- await self._ensure_human_annotation_queue(
- project_id=project_id,
- user_id=user_id,
- run=run,
- )
- await self.evaluations_worker.evaluate_batch_query.kiq(
- project_id=project_id,
- user_id=user_id,
- #
- run_id=run.id,
- )
-
- elif (
- has_testset_steps and has_application_steps and has_evaluator_steps
- ):
- await self.evaluations_worker.evaluate_batch_testset.kiq(
- project_id=project_id,
- user_id=user_id,
- #
- run_id=run.id,
- )
-
- elif (
- has_testset_steps
- and has_application_steps
- and not has_evaluator_steps
- and not has_query_steps
- ):
- await self.evaluations_worker.evaluate_batch_invocation.kiq(
+ if topology.dispatch:
+ if topology.dispatch == "batch_query":
+ await self._ensure_human_annotation_queue(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ )
+ await self.evaluations_task_runner.process_run_from_source(
project_id=project_id,
user_id=user_id,
- #
run_id=run.id,
)
@@ -2283,10 +2676,9 @@ async def start(
log.warning(
"[EVAL] [start] [skip] unsupported non-live run topology",
run_id=run.id,
- has_query_steps=has_query_steps,
- has_testset_steps=has_testset_steps,
- has_application_steps=has_application_steps,
- has_evaluator_steps=has_evaluator_steps,
+ topology=topology.label,
+ topology_status=topology.status,
+ reason=topology.reason,
)
return _evaluation
@@ -2335,7 +2727,7 @@ async def _ensure_human_annotation_queue(
run=run,
)
- async def evaluate_batch_traces(
+ async def dispatch_trace_slice(
self,
*,
project_id: UUID,
@@ -2347,7 +2739,7 @@ async def evaluate_batch_traces(
) -> bool:
if not trace_ids:
return False
- if self.evaluations_worker is None:
+ if self.evaluations_task_runner is None:
log.warning(
"[EVAL] Taskiq client missing; cannot dispatch trace batch",
run_id=run_id,
@@ -2358,9 +2750,13 @@ async def evaluate_batch_traces(
project_id=project_id,
run_id=run_id,
)
- if not run or not run.flags or not run.flags.is_queue:
+ if (
+ not run
+ or not run.flags
+ or not (run.flags.has_traces or run.flags.has_queries)
+ ):
log.warning(
- "[EVAL] trace batch dispatch requires a queue evaluation run",
+ "[EVAL] trace batch dispatch requires a trace-capable evaluation run",
run_id=run_id,
)
return False
@@ -2371,17 +2767,17 @@ async def evaluate_batch_traces(
run=run,
)
- await self.evaluations_worker.evaluate_batch_traces.kiq(
+ await self.evaluations_task_runner.process_run_from_batch(
project_id=project_id,
user_id=user_id,
- #
run_id=run_id,
+ source_kind="traces",
trace_ids=trace_ids,
input_step_key=input_step_key,
)
return True
- async def evaluate_batch_testcases(
+ async def dispatch_testcase_slice(
self,
*,
project_id: UUID,
@@ -2393,7 +2789,7 @@ async def evaluate_batch_testcases(
) -> bool:
if not testcase_ids:
return False
- if self.evaluations_worker is None:
+ if self.evaluations_task_runner is None:
log.warning(
"[EVAL] Taskiq client missing; cannot dispatch testcase batch",
run_id=run_id,
@@ -2404,9 +2800,13 @@ async def evaluate_batch_testcases(
project_id=project_id,
run_id=run_id,
)
- if not run or not run.flags or not run.flags.is_queue:
+ if (
+ not run
+ or not run.flags
+ or not (run.flags.has_testcases or run.flags.has_testsets)
+ ):
log.warning(
- "[EVAL] testcase batch dispatch requires a queue evaluation run",
+ "[EVAL] testcase batch dispatch requires a testcase-capable evaluation run",
run_id=run_id,
)
return False
@@ -2417,16 +2817,384 @@ async def evaluate_batch_testcases(
run=run,
)
- await self.evaluations_worker.evaluate_batch_testcases.kiq(
+ await self.evaluations_task_runner.process_run_from_batch(
project_id=project_id,
user_id=user_id,
- #
run_id=run_id,
+ source_kind="testcases",
testcase_ids=testcase_ids,
input_step_key=input_step_key,
)
return True
+ # --- TENSOR SLICE OPS -----------------------------------------------------
+ #
+ # Coordinate-addressed ops over EXISTING scenarios (scenarios x steps x
+ # repeats), distinct from the source-keyed dispatch_*_slice above (which
+ # ingests NEW source items). `process` is the re-execution verb (retry /
+ # fill-missing / run-added-step), dispatched async via taskiq under the job
+ # lock. `probe` (read) and `populate` (write) are immediate, in-process.
+
+ async def dispatch_tensor_slice(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ run_id: UUID,
+ scenario_ids: Optional[List[UUID]] = None,
+ step_keys: Optional[List[str]] = None,
+ repeat_idxs: Optional[List[int]] = None,
+ process_mode: SliceProcessMode = "fill-missing",
+ ) -> bool:
+ if self.evaluations_task_runner is None:
+ log.warning(
+ "[EVAL] Taskiq client missing; cannot dispatch tensor slice",
+ run_id=run_id,
+ )
+ return False
+
+ run = await self.evaluations_service.fetch_run(
+ project_id=project_id,
+ run_id=run_id,
+ )
+ if not run:
+ log.warning(
+ "[EVAL] tensor slice dispatch requires an existing run",
+ run_id=run_id,
+ )
+ return False
+
+ await self.evaluations_task_runner.process_rerun(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ scenario_ids=scenario_ids,
+ step_keys=step_keys,
+ repeat_idxs=repeat_idxs,
+ process_mode=process_mode,
+ )
+ return True
+
+ async def probe_slice(
+ self,
+ *,
+ project_id: UUID,
+ #
+ run_id: UUID,
+ scenario_ids: Optional[List[UUID]] = None,
+ step_keys: Optional[List[str]] = None,
+ repeat_idxs: Optional[List[int]] = None,
+ ) -> List[EvaluationResult]:
+ tensor_ops = self.evaluations_service.tensor_slice_operations
+ if tensor_ops is None:
+ log.warning("[EVAL] tensor ops not wired; cannot probe slice")
+ return []
+
+ return await tensor_ops.probe(
+ project_id=project_id,
+ tensor_slice=TensorSlice(
+ run_id=run_id,
+ scenario_ids=scenario_ids,
+ step_keys=step_keys,
+ repeat_idxs=repeat_idxs,
+ ),
+ )
+
+ async def populate_slice(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ results: List[EvaluationResultCreate],
+ ) -> List[EvaluationResult]:
+ tensor_ops = self.evaluations_service.tensor_slice_operations
+ if tensor_ops is None:
+ log.warning("[EVAL] tensor ops not wired; cannot populate slice")
+ return []
+
+ return await tensor_ops.populate(
+ project_id=project_id,
+ user_id=user_id,
+ results=results,
+ )
+
+ async def prune_slice(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ run_id: UUID,
+ scenario_ids: Optional[List[UUID]] = None,
+ step_keys: Optional[List[str]] = None,
+ repeat_idxs: Optional[List[int]] = None,
+ ) -> List[UUID]:
+ tensor_ops = self.evaluations_service.tensor_slice_operations
+ if tensor_ops is None:
+ log.warning("[EVAL] tensor ops not wired; cannot prune slice")
+ return []
+
+ return await tensor_ops.prune(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=TensorSlice(
+ run_id=run_id,
+ scenario_ids=scenario_ids,
+ step_keys=step_keys,
+ repeat_idxs=repeat_idxs,
+ ),
+ )
+
+ async def refresh_slice(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ run_id: UUID,
+ scenario_ids: Optional[List[UUID]] = None,
+ step_keys: Optional[List[str]] = None,
+ repeat_idxs: Optional[List[int]] = None,
+ ) -> None:
+ """Recompute metrics over the slice scope (variational + aggregate).
+
+ The metrics counterpart of populate/process: callers that wrote cells
+ without executing (e.g. the SDK, which runs workflows locally and
+ populates the finished cells) invoke this to roll up the per-scenario,
+ temporal, and global metric rows without re-running anything.
+ """
+ tensor_ops = self.evaluations_service.tensor_slice_operations
+ if tensor_ops is None:
+ log.warning("[EVAL] tensor ops not wired; cannot refresh slice")
+ return
+
+ await tensor_ops.refresh(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=TensorSlice(
+ run_id=run_id,
+ scenario_ids=scenario_ids,
+ step_keys=step_keys,
+ repeat_idxs=repeat_idxs,
+ ),
+ )
+
+ # --- GRAPH-DIMENSION OPS --------------------------------------------------
+ #
+ # Modify the tensor's SHAPE (scenarios x steps x repeats) — distinct from the
+ # tensor ops (probe/populate/process/prune) that fill or clear cells WITHIN a
+ # fixed shape. Three axes, each with a paired add/remove (or set):
+ #
+ # height — `add_scenarios` / `remove_scenarios` (scenario rows)
+ # width — `add_steps` / `remove_steps` (graph step columns)
+ # depth — `set_repeats` (repeat count)
+ #
+ # `process` operates only on EXISTING coordinates — it never mints scenarios
+ # or steps, so callers grow the shape with these ops first when needed.
+
+ async def _edit_run_data(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ run: EvaluationRun,
+ new_data: EvaluationRunData,
+ ) -> Optional[EvaluationRun]:
+ """Persist a new `data` payload for `run`, preserving every other field."""
+ return await self.evaluations_service.edit_run(
+ project_id=project_id,
+ user_id=user_id,
+ run=EvaluationRunEdit(
+ id=run.id,
+ name=run.name,
+ description=run.description,
+ tags=run.tags,
+ meta=run.meta,
+ status=run.status,
+ flags=run.flags,
+ data=new_data,
+ ),
+ )
+
+ async def add_scenarios(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ run_id: UUID,
+ count: int,
+ timestamp: Optional[datetime] = None,
+ ) -> List[EvaluationScenario]:
+ """Create `count` scenario skeleton rows for the run (height dimension).
+
+ Skeleton only: rows with no input cells and no results. `populate` writes
+ the input cells (the trace_id/testcase_id binding); `process` plans and
+ executes. Returns the created scenarios so the caller has their ids.
+
+ `timestamp` buckets the new scenarios on the temporal (time) axis so they
+ participate in temporal metrics — mirroring the query path, which derives
+ a timestamp from its window. The bucket width (`interval`) is fixed at
+ `DEFAULT_REFRESH_INTERVAL` (1 minute); only the timestamp is caller-set,
+ and it is floored to the minute so it lands on the bucket boundary.
+ """
+ if count <= 0:
+ return []
+
+ bucket = (
+ timestamp.replace(second=0, microsecond=0)
+ if timestamp is not None
+ else None
+ )
+
+ return await self.evaluations_service.create_scenarios(
+ project_id=project_id,
+ user_id=user_id,
+ scenarios=[
+ EvaluationScenarioCreate(
+ run_id=run_id,
+ status=EvaluationStatus.RUNNING,
+ timestamp=bucket,
+ interval=DEFAULT_REFRESH_INTERVAL if bucket else None,
+ )
+ for _ in range(count)
+ ],
+ )
+
+ async def remove_scenarios(
+ self,
+ *,
+ project_id: UUID,
+ #
+ scenario_ids: List[UUID],
+ ) -> List[UUID]:
+ """Delete scenario rows (height dimension) — the inverse of `add_scenarios`.
+
+ Removing a scenario drops its whole row (every step/repeat cell with it).
+ Returns the ids actually deleted.
+
+ Deletion is scoped by `project_id` only — it does NOT verify the
+ scenarios belong to a particular run. The run-scoped HTTP endpoint
+ validates `scenario_ids` against its path `evaluation_id` before calling
+ here, so cross-run deletion cannot happen over the API.
+ """
+ if not scenario_ids:
+ return []
+
+ return await self.evaluations_service.delete_scenarios(
+ project_id=project_id,
+ scenario_ids=scenario_ids,
+ )
+
+ async def add_steps(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ run_id: UUID,
+ steps: List[EvaluationRunDataStep],
+ ) -> Optional[EvaluationRun]:
+ """Append graph steps to the run (width dimension).
+
+ Adds new step columns to `run.data.steps`; the cells under them start
+ empty and a subsequent `process` fills them. Steps whose key already
+ exists are skipped (add is idempotent on key). Existing steps, scenarios,
+ and result cells are untouched.
+ """
+ run = await self.evaluations_service.fetch_run(
+ project_id=project_id,
+ run_id=run_id,
+ )
+ if not run or not run.data:
+ return None
+ if not steps:
+ return run
+
+ existing = list(run.data.steps or [])
+ existing_keys = {step.key for step in existing}
+ fresh = [step for step in steps if step.key not in existing_keys]
+ if not fresh:
+ return run
+
+ new_data = run.data.model_copy(update={"steps": existing + fresh})
+ return await self._edit_run_data(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ new_data=new_data,
+ )
+
+ async def remove_steps(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ run_id: UUID,
+ step_keys: List[str],
+ ) -> Optional[EvaluationRun]:
+ """Drop graph steps from the run by key (width dimension).
+
+ The inverse of `add_steps`: removes the named step columns from
+ `run.data.steps`. The result cells under those steps are not deleted here
+ (that is `prune`); this op only narrows the graph's declared width.
+ """
+ run = await self.evaluations_service.fetch_run(
+ project_id=project_id,
+ run_id=run_id,
+ )
+ if not run or not run.data:
+ return None
+ if not step_keys:
+ return run
+
+ drop = set(step_keys)
+ kept = [step for step in (run.data.steps or []) if step.key not in drop]
+ if len(kept) == len(run.data.steps or []):
+ return run
+
+ new_data = run.data.model_copy(update={"steps": kept})
+ return await self._edit_run_data(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ new_data=new_data,
+ )
+
+ async def set_repeats(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ #
+ run_id: UUID,
+ repeats: int,
+ ) -> Optional[EvaluationRun]:
+ """Set the run's repeat (depth) dimension.
+
+ `repeats` is fixed at run creation today; this is the first-class op to
+ change it. Growing it adds repeat_idx slots that subsequent `process`
+ runs plan and fill; the existing result cells are untouched.
+ """
+ run = await self.evaluations_service.fetch_run(
+ project_id=project_id,
+ run_id=run_id,
+ )
+ if not run or not run.data:
+ return None
+
+ new_data = run.data.model_copy(update={"repeats": repeats})
+ return await self._edit_run_data(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ new_data=new_data,
+ )
+
async def close(
self,
*,
@@ -2485,8 +3253,11 @@ async def _make_evaluation_run_data(
evaluator_steps: Optional[Target] = None,
#
repeats: Optional[int] = None,
+ concurrency: Optional[EvaluationRunDataConcurrency] = None,
#
is_live: Optional[bool] = None,
+ #
+ default_evaluator_origin: Origin = DEFAULT_ORIGIN_EVALUATORS,
) -> Optional[EvaluationRunData]:
# IMPLICIT FLAG: is_multivariate=False
# IMPLICIT FLAG: all_inputs=True
@@ -2791,7 +3562,7 @@ async def _make_evaluation_run_data(
if isinstance(evaluator_steps, list):
evaluator_steps = {
- evaluator_revision_id: DEFAULT_ORIGIN_EVALUATORS
+ evaluator_revision_id: default_evaluator_origin
for evaluator_revision_id in evaluator_steps
}
@@ -3044,6 +3815,7 @@ async def _make_evaluation_run_data(
steps=steps,
mappings=mappings,
repeats=repeats or 1,
+ concurrency=concurrency,
)
except Exception: # pylint: disable=broad-exception-caught
@@ -3149,6 +3921,11 @@ async def _activate_evaluation_run(
run.flags.is_active = True
+ # A (re)dispatched run is running until its slice finalizes. Reset to
+ # RUNNING on every activation — not just creation — so an extended
+ # finished run goes back to `running` while the new work executes and is
+ # re-finalized by the slice. The slice's terminal status then replaces
+ # this via the (corrected) severity floor in source_slice.py.
run = await self.evaluations_service.edit_run(
project_id=project_id,
user_id=user_id,
@@ -3163,7 +3940,7 @@ async def _activate_evaluation_run(
tags=run.tags,
meta=run.meta,
#
- status=EvaluationStatus.RUNNING if just_created else run.status,
+ status=EvaluationStatus.RUNNING,
#
data=run.data,
),
@@ -3387,6 +4164,7 @@ async def create(
evaluator_steps=queue.data.evaluators,
repeats=repeats,
is_live=False,
+ default_evaluator_origin="human",
)
if not run_data or not run_data.steps:
return None
@@ -3409,7 +4187,7 @@ async def create(
is_live=False,
is_active=True,
is_closed=False,
- is_queue=True,
+ is_queue=False,
),
tags=queue.tags,
meta=queue.meta,
@@ -3534,40 +4312,39 @@ async def query(
run_ids_filter = list(dict.fromkeys(requested_run_ids))
+ eligible_runs = await self.evaluations_service.query_runs(
+ project_id=project_id,
+ run=EvaluationRunQuery(
+ flags=EvaluationRunQueryFlags(is_queue=True),
+ ),
+ )
+ eligible_run_ids = [run.id for run in eligible_runs if run and run.id]
if query and query.kind is not None:
- run_query = EvaluationRunQuery(
- flags=EvaluationRunQueryFlags(
- is_queue=True,
- has_queries=query.kind == SimpleQueueKind.TRACES,
- has_testsets=query.kind == SimpleQueueKind.TESTCASES,
- ),
- )
- runs = await self.evaluations_service.query_runs(
- project_id=project_id,
- run=run_query,
- )
+ eligible_run_ids = [
+ run.id
+ for run in eligible_runs
+ if run and run.id and self._get_kind(run) == query.kind
+ ]
+ if not eligible_run_ids:
+ return []
- kind_run_ids = [run.id for run in runs if run and run.id]
- if not kind_run_ids:
+ eligible_run_ids_set = set(eligible_run_ids)
+ if run_ids_filter is None:
+ run_ids_filter = eligible_run_ids
+ else:
+ run_ids_filter = [
+ run_id for run_id in run_ids_filter if run_id in eligible_run_ids_set
+ ]
+ if not run_ids_filter:
return []
- kind_run_ids_set = set(kind_run_ids)
- if run_ids_filter is None:
- run_ids_filter = kind_run_ids
- else:
- run_ids_filter = [
- run_id for run_id in run_ids_filter if run_id in kind_run_ids_set
- ]
- if not run_ids_filter:
- return []
-
queues = await self.evaluations_service.query_queues(
project_id=project_id,
queue=EvaluationQueueQuery(
name=query.name if query else None,
description=query.description if query else None,
#
- flags=EvaluationQueueQueryFlags(),
+ flags=EvaluationQueueQueryFlags(is_default=True),
tags=query.tags if query else None,
meta=query.meta if query else None,
#
@@ -3631,7 +4408,7 @@ async def add_traces(
if self._get_kind(run) != SimpleQueueKind.TRACES:
return None
- ok = await self.simple_evaluations_service.evaluate_batch_traces(
+ ok = await self.simple_evaluations_service.dispatch_trace_slice(
project_id=project_id,
user_id=user_id,
#
@@ -3671,7 +4448,7 @@ async def add_testcases(
if self._get_kind(run) != SimpleQueueKind.TESTCASES:
return None
- ok = await self.simple_evaluations_service.evaluate_batch_testcases(
+ ok = await self.simple_evaluations_service.dispatch_testcase_slice(
project_id=project_id,
user_id=user_id,
#
@@ -3799,63 +4576,33 @@ async def _dispatch_source_batches(
if not run.id or not run.data or not run.data.steps:
return False
- dispatched = False
- for step in run.data.steps:
- if step.type != "input" or not step.key:
- continue
-
- refs = step.references or {}
- query_revision_ref = refs.get("query_revision")
- testset_revision_ref = refs.get("testset_revision")
-
- if query_revision_ref and query_revision_ref.id:
- query_revision = await self.simple_evaluations_service.queries_service.fetch_query_revision(
- project_id=project_id,
- query_revision_ref=query_revision_ref,
- include_trace_ids=True,
- )
- trace_ids = (
- query_revision.data.trace_ids
- if query_revision
- and query_revision.data
- and query_revision.data.trace_ids
- else []
- )
- if not trace_ids:
- continue
+ batches = await resolve_queue_source_batches(
+ project_id=project_id,
+ run=run,
+ queries_service=self.simple_evaluations_service.queries_service,
+ testsets_service=self.simple_evaluations_service.testsets_service,
+ )
- ok = await self.simple_evaluations_service.evaluate_batch_traces(
+ dispatched = False
+ for batch in batches:
+ if batch.kind == "traces" and batch.trace_ids:
+ ok = await self.simple_evaluations_service.dispatch_trace_slice(
project_id=project_id,
user_id=user_id,
run_id=run.id,
- trace_ids=trace_ids,
- input_step_key=step.key,
+ trace_ids=batch.trace_ids,
+ input_step_key=batch.step_key,
)
dispatched = dispatched or ok
continue
- if testset_revision_ref and testset_revision_ref.id:
- testset_revision = await self.simple_evaluations_service.testsets_service.fetch_testset_revision(
- project_id=project_id,
- testset_revision_ref=testset_revision_ref,
- include_testcase_ids=True,
- )
- testcase_ids = (
- testset_revision.data.testcase_ids
- if testset_revision
- and testset_revision.data
- and testset_revision.data.testcase_ids
- else []
- )
- if not testcase_ids:
- continue
-
- ok = await self.simple_evaluations_service.evaluate_batch_testcases(
+ if batch.kind == "testcases" and batch.testcase_ids:
+ ok = await self.simple_evaluations_service.dispatch_testcase_slice(
project_id=project_id,
user_id=user_id,
run_id=run.id,
- testcase_ids=testcase_ids,
- input_step_key=step.key,
+ testcase_ids=batch.testcase_ids,
+ input_step_key=batch.step_key,
)
dispatched = dispatched or ok
@@ -3882,9 +4629,7 @@ async def _make_run_data(
annotation_mappings: List[EvaluationRunDataMapping] = []
annotation_step_keys: List[str] = []
- source_step_key = (
- "query-direct" if kind == SimpleQueueKind.TRACES else "testset-direct"
- )
+ source_step_key = "traces" if kind == SimpleQueueKind.TRACES else "testcases"
source_step = EvaluationRunDataStep(
key=source_step_key,
type="input",
@@ -4003,21 +4748,22 @@ def _get_kind(self, run: EvaluationRun) -> Optional[SimpleQueueKind]:
if not run.flags or not run.flags.is_queue:
return None
- if run.flags.has_queries and not run.flags.has_testsets:
- return SimpleQueueKind.TRACES
-
- if run.flags.has_testsets and not run.flags.has_queries:
- return SimpleQueueKind.TESTCASES
-
- return None
+ families = [
+ (run.flags.has_queries, SimpleQueueKind.QUERIES),
+ (run.flags.has_testsets, SimpleQueueKind.TESTSETS),
+ (run.flags.has_traces, SimpleQueueKind.TRACES),
+ (run.flags.has_testcases, SimpleQueueKind.TESTCASES),
+ ]
+ enabled = [kind for enabled, kind in families if enabled]
+ return enabled[0] if len(enabled) == 1 else None
@staticmethod
def _get_source_kind(*, queue_data: SimpleQueueData) -> Optional[SimpleQueueKind]:
if queue_data.queries:
- return SimpleQueueKind.TRACES
+ return SimpleQueueKind.QUERIES
if queue_data.testsets:
- return SimpleQueueKind.TESTCASES
+ return SimpleQueueKind.TESTSETS
return None
diff --git a/api/oss/src/core/evaluations/tasks/batch.py b/api/oss/src/core/evaluations/tasks/batch.py
deleted file mode 100644
index 1416010344..0000000000
--- a/api/oss/src/core/evaluations/tasks/batch.py
+++ /dev/null
@@ -1,148 +0,0 @@
-from uuid import UUID
-
-from oss.src.utils.logging import get_module_logger
-from oss.src.utils.common import is_ee
-
-if is_ee():
- pass
-
-from oss.src.dbs.postgres.queries.dbes import (
- QueryArtifactDBE,
- QueryVariantDBE,
- QueryRevisionDBE,
-)
-from oss.src.dbs.postgres.testcases.dbes import (
- TestcaseBlobDBE,
-)
-from oss.src.dbs.postgres.testsets.dbes import (
- TestsetArtifactDBE,
- TestsetVariantDBE,
- TestsetRevisionDBE,
-)
-from oss.src.dbs.postgres.workflows.dbes import (
- WorkflowArtifactDBE,
- WorkflowVariantDBE,
- WorkflowRevisionDBE,
-)
-
-from oss.src.dbs.postgres.tracing.dao import TracingDAO
-from oss.src.dbs.postgres.blobs.dao import BlobsDAO
-from oss.src.dbs.postgres.git.dao import GitDAO
-from oss.src.dbs.postgres.evaluations.dao import EvaluationsDAO
-
-from oss.src.core.tracing.service import TracingService
-from oss.src.core.queries.service import QueriesService
-from oss.src.core.testcases.service import TestcasesService
-from oss.src.core.testsets.service import TestsetsService
-from oss.src.core.testsets.service import SimpleTestsetsService
-from oss.src.core.workflows.service import WorkflowsService
-from oss.src.core.evaluators.service import EvaluatorsService
-from oss.src.core.evaluators.service import SimpleEvaluatorsService
-from oss.src.core.evaluations.service import EvaluationsService
-from oss.src.core.annotations.service import AnnotationsService
-
-
-log = get_module_logger(__name__)
-
-
-# DBS --------------------------------------------------------------------------
-
-tracing_dao = TracingDAO()
-
-testcases_dao = BlobsDAO(
- BlobDBE=TestcaseBlobDBE,
-)
-
-queries_dao = GitDAO(
- ArtifactDBE=QueryArtifactDBE,
- VariantDBE=QueryVariantDBE,
- RevisionDBE=QueryRevisionDBE,
-)
-
-testsets_dao = GitDAO(
- ArtifactDBE=TestsetArtifactDBE,
- VariantDBE=TestsetVariantDBE,
- RevisionDBE=TestsetRevisionDBE,
-)
-
-workflows_dao = GitDAO(
- ArtifactDBE=WorkflowArtifactDBE,
- VariantDBE=WorkflowVariantDBE,
- RevisionDBE=WorkflowRevisionDBE,
-)
-
-evaluations_dao = EvaluationsDAO()
-
-# CORE -------------------------------------------------------------------------
-
-tracing_service = TracingService(
- tracing_dao=tracing_dao,
-)
-
-queries_service = QueriesService(
- queries_dao=queries_dao,
-)
-
-testcases_service = TestcasesService(
- testcases_dao=testcases_dao,
-)
-
-testsets_service = TestsetsService(
- testsets_dao=testsets_dao,
- testcases_service=testcases_service,
-)
-
-simple_testsets_service = SimpleTestsetsService(
- testsets_service=testsets_service,
-)
-
-workflows_service = WorkflowsService(
- workflows_dao=workflows_dao,
-)
-
-evaluators_service = EvaluatorsService(
- workflows_service=workflows_service,
-)
-
-simple_evaluators_service = SimpleEvaluatorsService(
- evaluators_service=evaluators_service,
-)
-
-evaluations_service = EvaluationsService(
- evaluations_dao=evaluations_dao,
- tracing_service=tracing_service,
- queries_service=queries_service,
- testsets_service=testsets_service,
- evaluators_service=evaluators_service,
- #
-)
-
-annotations_service = AnnotationsService(
- tracing_service=tracing_service,
- evaluators_service=evaluators_service,
- simple_evaluators_service=simple_evaluators_service,
-)
-
-# ------------------------------------------------------------------------------
-
-
-def evaluate_testsets(
- self,
- *,
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
-):
- pass
-
-
-def evaluate_queries(
- self,
- *,
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
-):
- pass
diff --git a/api/oss/src/core/evaluations/tasks/legacy.py b/api/oss/src/core/evaluations/tasks/legacy.py
deleted file mode 100644
index 2ab518e421..0000000000
--- a/api/oss/src/core/evaluations/tasks/legacy.py
+++ /dev/null
@@ -1,2252 +0,0 @@
-from typing import Dict, List, Optional, Any
-
-from uuid import UUID
-from json import dumps
-
-from fastapi import Request
-
-from oss.src.utils.logging import get_module_logger
-from oss.src.services import llm_apps_service
-from oss.src.models.shared_models import InvokationResult
-
-from oss.src.core.queries.service import QueriesService
-from oss.src.core.testcases.service import TestcasesService
-from oss.src.core.testsets.service import TestsetsService
-from oss.src.core.applications.service import ApplicationsService
-from oss.src.core.workflows.service import WorkflowsService
-from oss.src.core.evaluators.service import SimpleEvaluatorsService
-from oss.src.core.evaluations.service import EvaluationsService
-
-from oss.src.core.tracing.service import TracingService
-
-
-from oss.src.core.evaluations.types import (
- EvaluationStatus,
- EvaluationRun,
- EvaluationRunEdit,
- EvaluationScenarioCreate,
- EvaluationScenarioEdit,
- EvaluationResultCreate,
- EvaluationMetricsRefresh,
-)
-
-from oss.src.core.shared.dtos import Reference
-from oss.src.core.workflows.dtos import (
- WorkflowServiceRequestData,
- WorkflowServiceRequest,
-)
-from oss.src.core.git.utils import revision_references
-
-
-from oss.src.core.evaluations.utils import (
- build_repeat_indices,
- effective_is_split,
- fetch_traces_by_hash,
- fetch_trace,
- make_hash,
- plan_missing_traces,
- required_traces_for_step,
- select_traces_for_reuse,
-)
-
-
-def _serialize_references(references: Dict[str, Any]) -> Dict[str, Any]:
- """Serialize Reference objects and UUIDs to JSON-compatible dicts."""
- from uuid import UUID
-
- def _deep_serialize(obj: Any) -> Any:
- if isinstance(obj, UUID):
- return str(obj)
- elif isinstance(obj, Reference):
- return obj.model_dump(exclude_none=True)
- elif isinstance(obj, dict):
- return {k: _deep_serialize(v) for k, v in obj.items()}
- elif isinstance(obj, (list, tuple)):
- return [_deep_serialize(item) for item in obj]
- return obj
-
- return {k: _deep_serialize(v) for k, v in references.items()}
-
-
-log = get_module_logger(__name__)
-
-
-def _resolve_runtime_uri(
- *,
- revision_data: Optional[Any],
-) -> Optional[str]:
- if revision_data is None:
- return None
-
- return WorkflowsService._get_service_url(revision_data=revision_data)
-
-
-def _extract_root_span(trace: Optional[Any]) -> Optional[Any]:
- if not trace:
- # log.debug("[TRACE] [ROOT]", reason="missing-trace")
- return None
-
- spans = getattr(trace, "spans", None)
-
- if not isinstance(spans, dict):
- # log.debug(
- # "[TRACE] [ROOT]",
- # trace_id=str(getattr(trace, "trace_id", None))
- # if getattr(trace, "trace_id", None)
- # else None,
- # reason="spans-not-dict",
- # spans_type=type(spans).__name__ if spans is not None else None,
- # )
- return None
-
- if not spans:
- # log.debug(
- # "[TRACE] [ROOT]",
- # trace_id=str(getattr(trace, "trace_id", None))
- # if getattr(trace, "trace_id", None)
- # else None,
- # reason="spans-empty",
- # )
- return None
-
- root_span = list(spans.values())[0]
- if isinstance(root_span, list):
- # log.debug(
- # "[TRACE] [ROOT]",
- # trace_id=str(getattr(trace, "trace_id", None))
- # if getattr(trace, "trace_id", None)
- # else None,
- # reason="first-span-is-list",
- # span_keys=list(spans.keys()),
- # first_list_len=len(root_span),
- # )
- return None
-
- # log.debug(
- # "[TRACE] [ROOT]",
- # trace_id=str(getattr(trace, "trace_id", None))
- # if getattr(trace, "trace_id", None)
- # else None,
- # reason="resolved",
- # span_keys=list(spans.keys()),
- # root_span_id=str(getattr(root_span, "span_id", None))
- # if getattr(root_span, "span_id", None)
- # else None,
- # )
- return root_span
-
-
-def _build_trace_context(
- *,
- trace: Optional[Any],
- error: Optional[Dict[str, Any]] = None,
-) -> Optional[Dict[str, Any]]:
- root_span = _extract_root_span(trace)
- trace_id = getattr(trace, "trace_id", None) if trace else None
-
- if not root_span or not trace_id:
- # log.debug(
- # "[TRACE] [CONTEXT]",
- # trace_id=str(trace_id) if trace_id else None,
- # has_root_span=bool(root_span),
- # has_error=bool(error),
- # error=error,
- # )
- return None
-
- # log.debug(
- # "[TRACE] [CONTEXT]",
- # trace_id=str(trace_id),
- # span_id=str(getattr(root_span, "span_id", None))
- # if getattr(root_span, "span_id", None)
- # else None,
- # has_error=bool(error),
- # )
- return {
- "trace": trace,
- "trace_id": str(trace_id),
- "span_id": getattr(root_span, "span_id", None),
- "root_span": root_span,
- "error": error,
- }
-
-
-async def _resolve_testset_input_specs(
- *,
- project_id: UUID,
- input_steps: List[Any],
- testsets_service: TestsetsService,
-) -> List[Dict[str, Any]]:
- input_specs: List[Dict[str, Any]] = []
-
- for input_step in input_steps:
- input_refs = input_step.references or {}
- testset_revision_ref = input_refs.get("testset_revision")
-
- if not testset_revision_ref or not isinstance(testset_revision_ref.id, UUID):
- raise ValueError(
- f"Evaluation input step {input_step.key} missing testset_revision reference."
- )
-
- testset_revision = await testsets_service.fetch_testset_revision(
- project_id=project_id,
- testset_revision_ref=testset_revision_ref,
- )
- if not testset_revision:
- raise ValueError(
- f"Testset revision with id {testset_revision_ref.id} not found!"
- )
- if not testset_revision.data or not testset_revision.data.testcases:
- raise ValueError(
- f"Testset revision with id {testset_revision_ref.id} has no testcases!"
- )
-
- testset_variant = await testsets_service.fetch_testset_variant(
- project_id=project_id,
- testset_variant_ref=Reference(id=testset_revision.variant_id),
- )
- if not testset_variant:
- raise ValueError(
- f"Testset variant with id {testset_revision.variant_id} not found!"
- )
-
- testset = await testsets_service.fetch_testset(
- project_id=project_id,
- testset_ref=Reference(id=testset_variant.testset_id),
- )
- if not testset:
- raise ValueError(f"Testset with id {testset_variant.testset_id} not found!")
-
- testcases = testset_revision.data.testcases
- input_specs.append(
- {
- "step_key": input_step.key,
- "testset": testset,
- "testset_variant": testset_variant,
- "testset_revision": testset_revision,
- "testcases": testcases,
- "testcases_data": [
- {**testcase.data, "testcase_id": str(testcase.id)}
- for testcase in testcases
- ],
- }
- )
-
- return input_specs
-
-
-async def evaluate_batch_testset(
- *,
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
- #
- tracing_service: TracingService,
- testsets_service: TestsetsService,
- queries_service: QueriesService,
- workflows_service: WorkflowsService,
- applications_service: ApplicationsService,
- evaluations_service: EvaluationsService,
- #
- simple_evaluators_service: SimpleEvaluatorsService,
-):
- """
- Annotates an application revision applied to a testset using auto evaluator(s).
-
- All testset, application, and evaluator information is extracted from the
- evaluation run's data.steps references.
-
- Args:
- project_id (UUID): The ID of the project.
- user_id (UUID): The ID of the user.
- run_id (UUID): The ID of the evaluation run.
-
- Returns:
- None
- """
- request = Request(
- scope={
- "type": "http",
- "http_version": "1.1",
- "scheme": "http",
- }
- )
- request.state.project_id = str(project_id)
- request.state.user_id = str(user_id)
-
- run = None
-
- try:
- # ----------------------------------------------------------------------
- log.info(
- "[SCOPE] ", run_id=run_id, project_id=project_id, user_id=user_id
- )
- # ----------------------------------------------------------------------
-
- # fetch run ------------------------------------------------------------
- run = await evaluations_service.fetch_run(
- project_id=project_id,
- #
- run_id=run_id,
- )
-
- if not run:
- raise ValueError(f"Evaluation run with id {run_id} not found!")
-
- if not run.data:
- raise ValueError(f"Evaluation run with id {run_id} has no data!")
-
- if not run.data.steps:
- raise ValueError(f"Evaluation run with id {run_id} has no steps!")
-
- steps = run.data.steps
- repeats = run.data.repeats or 1
- repeat_indices = build_repeat_indices(repeats)
- is_cached = bool(run.flags.is_cached) if run.flags else False
-
- input_steps = [step for step in steps if step.type == "input"]
- invocation_steps = [step for step in steps if step.type == "invocation"]
- annotation_steps = [step for step in steps if step.type == "annotation"]
-
- log.info(
- "[STEPS] ",
- run_id=run_id,
- count=len(steps),
- input_keys=[step.key for step in input_steps],
- invocation_keys=[step.key for step in invocation_steps],
- annotation_keys=[step.key for step in annotation_steps],
- step_types=[getattr(step, "type", None) for step in steps],
- )
-
- if not input_steps or len(invocation_steps) != 1:
- raise ValueError(
- f"Evaluation run with id {run_id} must have at least one input and exactly one invocation step."
- )
-
- invocation_step = invocation_steps[0]
- invocation_step_key = invocation_step.key
- is_split = effective_is_split(
- is_split=bool(run.flags.is_split) if run.flags else False,
- has_application_steps=True,
- has_evaluator_steps=bool(annotation_steps),
- )
- application_required_count = required_traces_for_step(
- repeats=repeats,
- is_split=is_split,
- step_kind="application",
- has_evaluator_steps=bool(annotation_steps),
- )
- evaluator_required_count = required_traces_for_step(
- repeats=repeats,
- is_split=is_split,
- step_kind="evaluator",
- has_evaluator_steps=bool(annotation_steps),
- )
-
- application_revision_ref = invocation_step.references.get(
- "application_revision"
- )
- if not application_revision_ref or not isinstance(
- application_revision_ref.id, UUID
- ):
- raise ValueError(
- f"Evaluation run with id {run_id} missing invocation.application_revision reference."
- )
-
- run_config = {
- "batch_size": 10,
- "max_retries": 3,
- "retry_delay": 3,
- "delay_between_batches": 5,
- }
-
- input_specs = await _resolve_testset_input_specs(
- project_id=project_id,
- input_steps=input_steps,
- testsets_service=testsets_service,
- )
- testset_revision_ids = [
- str(input_spec["testset_revision"].id) for input_spec in input_specs
- ]
-
- log.info("[TESTSET] ", run_id=run_id, ids=testset_revision_ids)
- log.info(
- "[APPLICATION] ",
- run_id=run_id,
- ids=[str(application_revision_ref.id)],
- )
- # ----------------------------------------------------------------------
-
- # flatten scenario sources ---------------------------------------------
- scenario_specs = [
- {
- "input_step_key": input_spec["step_key"],
- "testset": input_spec["testset"],
- "testset_revision": input_spec["testset_revision"],
- "testcase": testcase,
- "testcase_data": testcase_data,
- }
- for input_spec in input_specs
- for testcase, testcase_data in zip(
- input_spec["testcases"],
- input_spec["testcases_data"],
- )
- ]
- nof_scenarios = len(scenario_specs)
- # ----------------------------------------------------------------------
-
- # fetch application ----------------------------------------------------
- application_revision = await applications_service.fetch_application_revision(
- project_id=project_id,
- application_revision_ref=application_revision_ref,
- )
-
- if application_revision is None:
- raise ValueError(
- f"App revision with id {application_revision_ref.id} not found!"
- )
-
- application_variant = await applications_service.fetch_application_variant(
- project_id=project_id,
- application_variant_ref=Reference(
- id=application_revision.application_variant_id
- ),
- )
-
- if application_variant is None:
- raise ValueError(
- f"Application variant with id {application_revision.application_variant_id} not found!"
- )
-
- application = await applications_service.fetch_application(
- project_id=project_id,
- application_ref=Reference(id=application_variant.application_id),
- )
-
- if application is None:
- raise ValueError(
- f"Application with id {application_variant.application_id} not found!"
- )
-
- uri = _resolve_runtime_uri(revision_data=application_revision.data)
-
- if not uri:
- raise ValueError(
- f"No deployment URI found for revision {application_revision_ref.id}!"
- )
-
- # fetch evaluators -----------------------------------------------------
- evaluator_references = {step.key: step.references for step in annotation_steps}
- # log.debug(
- # "[EVALUATORS] ",
- # run_id=run_id,
- # count=len(annotation_steps),
- # refs={
- # step_key: (
- # {
- # key: str(reference.id)
- # if getattr(reference, "id", None)
- # else None
- # for key, reference in (references or {}).items()
- # }
- # )
- # for step_key, references in evaluator_references.items()
- # },
- # )
-
- evaluators = {}
- for evaluator_key, evaluator_refs in evaluator_references.items():
- evaluators[evaluator_key] = await workflows_service.fetch_workflow_revision(
- project_id=project_id,
- #
- workflow_revision_ref=evaluator_refs.get("evaluator_revision"),
- )
- # log.debug(
- # "[EVALUATORS] [FETCH]",
- # run_id=run_id,
- # resolved={
- # evaluator_key: (
- # str(evaluator_revision.id)
- # if evaluator_revision and evaluator_revision.id
- # else None
- # )
- # for evaluator_key, evaluator_revision in evaluators.items()
- # },
- # )
- # ----------------------------------------------------------------------
-
- # create scenarios -----------------------------------------------------
- scenarios_create = [
- EvaluationScenarioCreate(
- run_id=run_id,
- #
- status=EvaluationStatus.RUNNING,
- )
- for _ in range(nof_scenarios)
- ]
-
- scenarios = await evaluations_service.create_scenarios(
- project_id=project_id,
- user_id=user_id,
- #
- scenarios=scenarios_create,
- )
-
- if len(scenarios) != nof_scenarios:
- raise ValueError(f"Failed to create evaluation scenarios for run {run_id}!")
- # ----------------------------------------------------------------------
-
- # create input steps ---------------------------------------------------
- results_create = [
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=scenario_specs[idx]["input_step_key"],
- repeat_idx=repeat_idx,
- #
- status=EvaluationStatus.SUCCESS,
- #
- testcase_id=scenario_specs[idx]["testcase"].id,
- )
- for idx, scenario in enumerate(scenarios)
- for repeat_idx in repeat_indices
- ]
-
- steps = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- #
- results=results_create,
- )
-
- if len(steps) != nof_scenarios * len(repeat_indices):
- raise ValueError(f"Failed to create evaluation steps for run {run_id}!")
- # ----------------------------------------------------------------------
-
- # flatten testcases ----------------------------------------------------
- _testcases = [
- scenario_spec["testcase"].model_dump(mode="json")
- for scenario_spec in scenario_specs
- ]
-
- log.info(
- "[BATCH] ",
- run_id=run_id,
- ids=testset_revision_ids,
- count=len(_testcases),
- size=len(dumps(_testcases).encode("utf-8")),
- )
- # ----------------------------------------------------------------------
-
- run_has_errors = 0
- run_has_pending = False
- run_status = EvaluationStatus.SUCCESS
-
- # run invocations / evaluators -----------------------------------------
- for idx in range(nof_scenarios):
- scenario = scenarios[idx]
- scenario_spec = scenario_specs[idx]
- testcase = scenario_spec["testcase"]
- testcase_data = scenario_spec["testcase_data"]
- testset_revision = scenario_spec["testset_revision"]
-
- scenario_has_errors = 0
- scenario_has_pending = False
- scenario_status = EvaluationStatus.SUCCESS
- application_references = {
- "testcase": {"id": str(testcase.id)},
- **revision_references(
- revision=testset_revision,
- entity_type="testset",
- ),
- **revision_references(
- revision=application_revision,
- entity_type="application",
- ),
- }
-
- application_hash_id = make_hash(
- references=application_references,
- links=None,
- )
- cached_application_traces = []
- if is_cached and application_hash_id:
- cached_application_traces = await fetch_traces_by_hash(
- tracing_service,
- project_id,
- hash_id=application_hash_id,
- limit=application_required_count,
- )
-
- cached_application_contexts = []
- for reusable_trace in select_traces_for_reuse(
- traces=cached_application_traces,
- required_count=application_required_count,
- ):
- reusable_context = _build_trace_context(trace=reusable_trace)
- if reusable_context:
- cached_application_contexts.append(reusable_context)
-
- missing_application_count = plan_missing_traces(
- required_count=application_required_count,
- reusable_count=len(cached_application_contexts),
- )
-
- invoked_application_contexts = []
- if missing_application_count > 0:
- invocations: List[
- InvokationResult
- ] = await llm_apps_service.batch_invoke(
- project_id=str(project_id),
- user_id=str(user_id),
- testset_data=[
- testcase_data for _ in range(missing_application_count)
- ], # type: ignore[arg-type]
- revision=application_revision,
- uri=uri,
- rate_limit_config=run_config,
- application_id=str(application.id),
- references=_serialize_references(application_references),
- scenarios=[
- scenario.model_dump(
- mode="json",
- exclude_none=True,
- )
- for _ in range(missing_application_count)
- ],
- )
-
- if len(invocations) != missing_application_count:
- raise ValueError(
- f"Unexpected batch invocation count for scenario {scenario.id}!"
- )
-
- for invocation in invocations:
- invocation_error = (
- invocation.result.error.model_dump(mode="json")
- if invocation.result and invocation.result.error
- else None
- )
- invoked_trace = None
- if not invocation_error and invocation.trace_id:
- invoked_trace = await fetch_trace(
- tracing_service=tracing_service,
- project_id=project_id,
- trace_id=invocation.trace_id,
- )
-
- invocation_context = (
- _build_trace_context(
- trace=invoked_trace,
- error=invocation_error,
- )
- if invoked_trace
- else None
- )
- if invocation_context:
- invoked_application_contexts.append(invocation_context)
- else:
- invoked_application_contexts.append(
- {
- "trace": invoked_trace,
- "trace_id": invocation.trace_id,
- "span_id": invocation.span_id,
- "root_span": None,
- "error": invocation_error
- or {
- "message": "Invocation trace missing or malformed."
- },
- }
- )
-
- application_contexts = (
- cached_application_contexts + invoked_application_contexts
- )
- application_context_by_repeat: Dict[int, Dict[str, Any]] = {}
- if is_split:
- for repeat_idx, context in zip(repeat_indices, application_contexts):
- application_context_by_repeat[repeat_idx] = context
- else:
- shared_context = (
- application_contexts[0] if application_contexts else None
- )
- if shared_context:
- for repeat_idx in repeat_indices:
- application_context_by_repeat[repeat_idx] = shared_context
-
- invocation_results_create = []
- scenario_invocation_failed = False
- for repeat_idx in repeat_indices:
- application_context = application_context_by_repeat.get(repeat_idx)
- application_error = (
- application_context.get("error")
- if application_context
- else {"message": "Invocation trace missing."}
- )
- has_invocation_error = not (
- application_context
- and application_context.get("trace_id")
- and application_context.get("root_span")
- and not application_error
- )
- if has_invocation_error:
- scenario_invocation_failed = True
-
- invocation_results_create.append(
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=invocation_step_key,
- repeat_idx=repeat_idx,
- status=(
- EvaluationStatus.FAILURE
- if has_invocation_error
- else EvaluationStatus.SUCCESS
- ),
- trace_id=(
- application_context.get("trace_id")
- if application_context
- else None
- ),
- error=application_error if has_invocation_error else None,
- )
- )
-
- created_invocation_results = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- results=invocation_results_create,
- )
- if len(created_invocation_results) != len(repeat_indices):
- raise ValueError(
- f"Failed to create invocation results for scenario {scenario.id}!"
- )
-
- if scenario_invocation_failed:
- scenario_has_errors += 1
-
- for annotation_step in annotation_steps:
- annotation_step_key = annotation_step.key
-
- if annotation_step.origin in {"human", "custom"}:
- # log.debug(
- # "[EVALUATOR] [SKIP]",
- # run_id=run_id,
- # scenario_id=scenario.id,
- # step_key=annotation_step_key,
- # origin=annotation_step.origin,
- # reason="non-auto-origin",
- # )
- scenario_has_pending = True
- run_has_pending = True
- continue
-
- evaluator_revision = evaluators.get(annotation_step_key)
- if not evaluator_revision:
- # log.warning(
- # "[EVALUATOR] [MISSING]",
- # run_id=run_id,
- # scenario_id=scenario.id,
- # step_key=annotation_step_key,
- # references={
- # key: str(reference.id)
- # if getattr(reference, "id", None)
- # else None
- # for key, reference in (
- # evaluator_references.get(annotation_step_key, {}) or {}
- # ).items()
- # },
- # )
- log.error(
- f"Evaluator revision for {annotation_step_key} not found!"
- )
- scenario_has_errors += 1
- scenario_status = EvaluationStatus.ERRORS
- continue
-
- _revision = evaluator_revision.model_dump(
- mode="json",
- exclude_none=True,
- )
- interface = (
- dict(
- uri=evaluator_revision.data.uri,
- url=evaluator_revision.data.url,
- headers=evaluator_revision.data.headers,
- schemas=evaluator_revision.data.schemas,
- )
- if evaluator_revision.data
- else dict()
- )
- configuration = (
- dict(
- script=evaluator_revision.data.script,
- parameters=evaluator_revision.data.parameters,
- )
- if evaluator_revision.data
- else dict()
- )
- parameters = configuration.get("parameters")
- flags = (
- evaluator_revision.flags.model_dump(
- mode="json",
- exclude_none=True,
- exclude_unset=True,
- )
- if evaluator_revision.flags
- else None
- )
-
- base_references: Dict[str, Any] = {
- "testcase": {"id": str(testcase.id)},
- **revision_references(
- revision=testset_revision,
- entity_type="testset",
- ),
- **revision_references(
- revision=evaluator_revision,
- entity_type="evaluator",
- ),
- }
-
- evaluator_results_create = []
- if not is_split:
- shared_application_context = application_context_by_repeat.get(
- repeat_indices[0]
- )
- # log.debug(
- # "[EVALUATOR] [PLAN]",
- # run_id=run_id,
- # scenario_id=scenario.id,
- # step_key=annotation_step_key,
- # repeats=repeat_indices,
- # is_split=is_split,
- # has_shared_application_context=bool(shared_application_context),
- # has_shared_root_span=bool(
- # shared_application_context
- # and shared_application_context.get("root_span")
- # ),
- # )
- if (
- not shared_application_context
- or not shared_application_context.get("root_span")
- ):
- scenario_has_errors += 1
- scenario_status = EvaluationStatus.ERRORS
- evaluator_results_create = [
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=annotation_step_key,
- repeat_idx=repeat_idx,
- status=EvaluationStatus.FAILURE,
- error={
- "message": "Evaluator skipped because invocation trace is missing."
- },
- )
- for repeat_idx in repeat_indices
- ]
- else:
- shared_trace = shared_application_context["trace"]
- shared_root_span = shared_application_context["root_span"]
- shared_links = {
- invocation_step_key: {
- "trace_id": shared_application_context["trace_id"],
- "span_id": shared_application_context["span_id"],
- }
- }
- workflow_service_request_data = WorkflowServiceRequestData(
- revision=_revision,
- parameters=parameters,
- testcase=testcase.model_dump(mode="json"),
- inputs=testcase.data,
- trace=shared_trace.model_dump(
- mode="json",
- exclude_none=True,
- )
- if shared_trace
- else None,
- outputs=(
- (
- shared_root_span.model_dump(
- mode="json",
- exclude_none=True,
- )
- .get("attributes", {})
- .get("ag", {})
- .get("data", {})
- ).get("outputs")
- if shared_root_span
- else None
- ),
- )
- workflow_service_request = WorkflowServiceRequest(
- version="2025.07.14",
- flags=flags,
- interface=interface,
- configuration=configuration,
- data=workflow_service_request_data,
- references=base_references,
- links=shared_links,
- )
- evaluator_hash_id = make_hash(
- references=base_references,
- links=shared_links,
- )
- cached_evaluator_traces = []
- if is_cached and evaluator_hash_id:
- cached_evaluator_traces = await fetch_traces_by_hash(
- tracing_service,
- project_id,
- hash_id=evaluator_hash_id,
- limit=evaluator_required_count,
- )
-
- reusable_evaluator_traces = select_traces_for_reuse(
- traces=cached_evaluator_traces,
- required_count=evaluator_required_count,
- )
- evaluator_results_create.extend(
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=annotation_step_key,
- repeat_idx=repeat_idx,
- status=EvaluationStatus.SUCCESS,
- trace_id=str(reusable_trace.trace_id),
- )
- for repeat_idx, reusable_trace in zip(
- repeat_indices,
- reusable_evaluator_traces,
- )
- if reusable_trace and reusable_trace.trace_id
- )
-
- for repeat_idx in repeat_indices[
- len(reusable_evaluator_traces) :
- ]:
- # log.debug(
- # "[EVALUATOR] [INVOKE]",
- # run_id=run_id,
- # scenario_id=scenario.id,
- # step_key=annotation_step_key,
- # repeat_idx=repeat_idx,
- # cached_reuse_count=len(reusable_evaluator_traces),
- # trace_links=shared_links,
- # )
- workflows_service_response = (
- await workflows_service.invoke_workflow(
- project_id=project_id,
- user_id=user_id,
- request=workflow_service_request,
- annotate=True,
- )
- )
- has_error = workflows_service_response.status.code != 200
- result_trace_id = workflows_service_response.trace_id
- result_error = None
- result_status = EvaluationStatus.SUCCESS
-
- if has_error:
- result_status = EvaluationStatus.FAILURE
- result_error = (
- workflows_service_response.status.model_dump(
- mode="json",
- exclude_none=True,
- )
- )
- scenario_has_errors += 1
- scenario_status = EvaluationStatus.ERRORS
- elif result_trace_id:
- fetched_evaluator_trace = await fetch_trace(
- tracing_service=tracing_service,
- project_id=project_id,
- trace_id=result_trace_id,
- )
- if not fetched_evaluator_trace:
- result_status = EvaluationStatus.FAILURE
- result_error = {
- "message": "Evaluator trace missing after invocation."
- }
- scenario_has_errors += 1
- scenario_status = EvaluationStatus.ERRORS
- else:
- result_status = EvaluationStatus.FAILURE
- result_error = {
- "message": "Evaluator trace_id is missing."
- }
- scenario_has_errors += 1
- scenario_status = EvaluationStatus.ERRORS
-
- evaluator_results_create.append(
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=annotation_step_key,
- repeat_idx=repeat_idx,
- status=result_status,
- trace_id=result_trace_id,
- error=result_error,
- )
- )
- else:
- for repeat_idx in repeat_indices:
- application_context = application_context_by_repeat.get(
- repeat_idx
- )
- # log.debug(
- # "[EVALUATOR] [PLAN]",
- # run_id=run_id,
- # scenario_id=scenario.id,
- # step_key=annotation_step_key,
- # repeat_idx=repeat_idx,
- # is_split=is_split,
- # has_application_context=bool(application_context),
- # has_root_span=bool(
- # application_context
- # and application_context.get("root_span")
- # ),
- # )
- if not application_context or not application_context.get(
- "root_span"
- ):
- scenario_has_errors += 1
- scenario_status = EvaluationStatus.ERRORS
- evaluator_results_create.append(
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=annotation_step_key,
- repeat_idx=repeat_idx,
- status=EvaluationStatus.FAILURE,
- error={
- "message": "Evaluator skipped because invocation trace is missing."
- },
- )
- )
- continue
-
- application_trace = application_context["trace"]
- application_root_span = application_context["root_span"]
- application_root_span_data = (
- application_root_span.model_dump(
- mode="json",
- exclude_none=True,
- )
- .get("attributes", {})
- .get("ag", {})
- .get("data", {})
- )
- links = {
- invocation_step_key: {
- "trace_id": application_context["trace_id"],
- "span_id": application_context["span_id"],
- }
- }
- workflow_service_request = WorkflowServiceRequest(
- version="2025.07.14",
- flags=flags,
- interface=interface,
- configuration=configuration,
- data=WorkflowServiceRequestData(
- revision=_revision,
- parameters=parameters,
- testcase=testcase.model_dump(mode="json"),
- inputs=testcase.data,
- trace=application_trace.model_dump(
- mode="json",
- exclude_none=True,
- )
- if application_trace
- else None,
- outputs=application_root_span_data.get("outputs"),
- ),
- references=base_references,
- links=links,
- )
- evaluator_hash_id = make_hash(
- references=base_references,
- links=links,
- )
- cached_evaluator_trace = None
- if is_cached and evaluator_hash_id:
- cached_matches = await fetch_traces_by_hash(
- tracing_service,
- project_id,
- hash_id=evaluator_hash_id,
- limit=1,
- )
- reusable_match = select_traces_for_reuse(
- traces=cached_matches,
- required_count=1,
- )
- if reusable_match:
- cached_evaluator_trace = reusable_match[0]
-
- if cached_evaluator_trace and cached_evaluator_trace.trace_id:
- evaluator_results_create.append(
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=annotation_step_key,
- repeat_idx=repeat_idx,
- status=EvaluationStatus.SUCCESS,
- trace_id=str(cached_evaluator_trace.trace_id),
- )
- )
- continue
-
- # log.debug(
- # "[EVALUATOR] [INVOKE]",
- # run_id=run_id,
- # scenario_id=scenario.id,
- # step_key=annotation_step_key,
- # repeat_idx=repeat_idx,
- # trace_links=links,
- # )
- workflows_service_response = (
- await workflows_service.invoke_workflow(
- project_id=project_id,
- user_id=user_id,
- request=workflow_service_request,
- annotate=True,
- )
- )
-
- result_trace_id = workflows_service_response.trace_id
- result_error = None
- result_status = EvaluationStatus.SUCCESS
- has_error = workflows_service_response.status.code != 200
- if has_error:
- result_status = EvaluationStatus.FAILURE
- result_error = workflows_service_response.status.model_dump(
- mode="json",
- exclude_none=True,
- )
- scenario_has_errors += 1
- scenario_status = EvaluationStatus.ERRORS
- elif result_trace_id:
- fetched_evaluator_trace = await fetch_trace(
- tracing_service=tracing_service,
- project_id=project_id,
- trace_id=result_trace_id,
- )
- if not fetched_evaluator_trace:
- result_status = EvaluationStatus.FAILURE
- result_error = {
- "message": "Evaluator trace missing after invocation."
- }
- scenario_has_errors += 1
- scenario_status = EvaluationStatus.ERRORS
- else:
- result_status = EvaluationStatus.FAILURE
- result_error = {"message": "Evaluator trace_id is missing."}
- scenario_has_errors += 1
- scenario_status = EvaluationStatus.ERRORS
-
- evaluator_results_create.append(
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=annotation_step_key,
- repeat_idx=repeat_idx,
- status=result_status,
- trace_id=result_trace_id,
- error=result_error,
- )
- )
-
- created_annotation_results = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- results=evaluator_results_create,
- )
- # log.debug(
- # "[EVALUATOR] [RESULTS]",
- # run_id=run_id,
- # scenario_id=scenario.id,
- # step_key=annotation_step_key,
- # created=len(created_annotation_results),
- # expected=len(repeat_indices),
- # )
-
- if len(created_annotation_results) != len(repeat_indices):
- raise ValueError(
- f"Failed to create evaluation results for scenario with id {scenario.id}!"
- )
-
- final_scenario_status = (
- EvaluationStatus.PENDING
- if scenario_status == EvaluationStatus.SUCCESS and scenario_has_pending
- else scenario_status
- )
-
- if final_scenario_status == EvaluationStatus.ERRORS:
- run_has_errors += 1
-
- scenario_edit = EvaluationScenarioEdit(
- id=scenario.id,
- tags=scenario.tags,
- meta=scenario.meta,
- status=final_scenario_status,
- )
-
- scenario = await evaluations_service.edit_scenario(
- project_id=project_id,
- user_id=user_id,
- #
- scenario=scenario_edit,
- )
-
- if not scenario:
- raise ValueError(
- f"Failed to edit evaluation scenario with id {scenario.id}!"
- )
-
- if scenario_status != EvaluationStatus.FAILURE:
- try:
- metrics = await evaluations_service.refresh_metrics(
- project_id=project_id,
- user_id=user_id,
- #
- metrics=EvaluationMetricsRefresh(
- run_id=run_id,
- scenario_id=scenario.id,
- ),
- )
-
- if not metrics:
- log.warning(
- f"Refreshing metrics failed for {run_id} | {scenario.id}"
- )
-
- except Exception:
- log.warning(
- f"Refreshing metrics failed for {run_id} | {scenario.id}",
- exc_info=True,
- )
- # ----------------------------------------------------------------------
-
- if run_status != EvaluationStatus.FAILURE:
- if run_has_errors:
- run_status = EvaluationStatus.ERRORS
- elif run_has_pending:
- run_status = EvaluationStatus.RUNNING
- else:
- run_status = EvaluationStatus.SUCCESS
-
- except Exception as e: # pylint: disable=broad-exception-caught
- log.error(
- f"An error occurred during evaluation: {e}",
- exc_info=True,
- )
-
- run_status = EvaluationStatus.FAILURE
-
- if not run:
- log.info("[FAIL] ", run_id=run_id, project_id=project_id, user_id=user_id)
- return
-
- if run_status != EvaluationStatus.FAILURE:
- try:
- metrics = await evaluations_service.refresh_metrics(
- project_id=project_id,
- user_id=user_id,
- #
- metrics=EvaluationMetricsRefresh(
- run_id=run_id,
- ),
- )
-
- if not metrics:
- log.warning(f"Refreshing metrics failed for {run_id}")
-
- run_status = EvaluationStatus.FAILURE
-
- except Exception: # pylint: disable=broad-exception-caught
- log.warning(f"Refreshing metrics failed for {run_id}", exc_info=True)
-
- run_status = EvaluationStatus.FAILURE
-
- # edit evaluation run status -----------------------------------------------
- run_edit = EvaluationRunEdit(
- id=run_id,
- #
- name=run.name,
- description=run.description,
- #
- tags=run.tags,
- meta=run.meta,
- #
- status=run_status,
- flags=run.flags,
- #
- data=run.data,
- )
-
- await evaluations_service.edit_run(
- project_id=project_id,
- user_id=user_id,
- #
- run=run_edit,
- )
-
- log.info("[DONE] ", run_id=run_id, project_id=project_id, user_id=user_id)
-
- return
-
-
-async def evaluate_batch_invocation(
- *,
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
- #
- tracing_service: TracingService,
- testsets_service: TestsetsService,
- applications_service: ApplicationsService,
- evaluations_service: EvaluationsService,
-):
- """
- Run batch invocation over a testset without evaluator steps.
-
- This loop creates scenarios and input/invocation results, but does not
- invoke evaluator workflows and does not refresh evaluation metrics.
- """
- run = None
- run_status = EvaluationStatus.SUCCESS
-
- try:
- # ----------------------------------------------------------------------
- log.info(
- "[SCOPE] ", run_id=run_id, project_id=project_id, user_id=user_id
- )
- # ----------------------------------------------------------------------
-
- # fetch run ------------------------------------------------------------
- run = await evaluations_service.fetch_run(
- project_id=project_id,
- run_id=run_id,
- )
-
- if not run:
- raise ValueError(f"Evaluation run with id {run_id} not found!")
- if not run.data or not run.data.steps:
- raise ValueError(f"Evaluation run with id {run_id} has no steps!")
- repeats = run.data.repeats or 1
- repeat_indices = build_repeat_indices(repeats)
- is_cached = bool(run.flags.is_cached) if run.flags else False
- application_required_count = required_traces_for_step(
- repeats=repeats,
- is_split=False,
- step_kind="application",
- has_evaluator_steps=False,
- )
-
- steps = run.data.steps
- input_steps = [step for step in steps if step.type == "input"]
- invocation_steps = [step for step in steps if step.type == "invocation"]
- annotation_steps = [step for step in steps if step.type == "annotation"]
-
- if annotation_steps:
- raise ValueError(
- f"Evaluation run with id {run_id} contains annotation steps; "
- "use evaluate_batch_testset instead."
- )
- if not input_steps or len(invocation_steps) != 1:
- raise ValueError(
- f"Evaluation run with id {run_id} must have at least one input and exactly one invocation step."
- )
-
- invocation_step_key = invocation_steps[0].key
- invocation_refs = invocation_steps[0].references or {}
-
- application_revision_ref = invocation_refs.get("application_revision")
- if not application_revision_ref or not isinstance(
- application_revision_ref.id, UUID
- ):
- raise ValueError(
- f"Evaluation run with id {run_id} missing invocation.application_revision reference."
- )
- # ----------------------------------------------------------------------
-
- input_specs = await _resolve_testset_input_specs(
- project_id=project_id,
- input_steps=input_steps,
- testsets_service=testsets_service,
- )
- scenario_specs = [
- {
- "input_step_key": input_spec["step_key"],
- "testset": input_spec["testset"],
- "testset_revision": input_spec["testset_revision"],
- "testcase": testcase,
- "testcase_data": testcase_data,
- }
- for input_spec in input_specs
- for testcase, testcase_data in zip(
- input_spec["testcases"],
- input_spec["testcases_data"],
- )
- ]
- nof_scenarios = len(scenario_specs)
- # ----------------------------------------------------------------------
-
- # fetch application ----------------------------------------------------
- application_revision = await applications_service.fetch_application_revision(
- project_id=project_id,
- application_revision_ref=application_revision_ref,
- )
- if not application_revision:
- raise ValueError(
- f"Application revision with id {application_revision_ref.id} not found!"
- )
-
- application_variant = await applications_service.fetch_application_variant(
- project_id=project_id,
- application_variant_ref=Reference(
- id=application_revision.application_variant_id
- ),
- )
- if not application_variant:
- raise ValueError(
- f"Application variant with id {application_revision.application_variant_id} not found!"
- )
-
- application = await applications_service.fetch_application(
- project_id=project_id,
- application_ref=Reference(id=application_variant.application_id),
- )
- if not application:
- raise ValueError(
- f"Application with id {application_variant.application_id} not found!"
- )
-
- uri = _resolve_runtime_uri(revision_data=application_revision.data)
- if not uri:
- raise ValueError(
- f"No deployment URI found for revision {application_revision_ref.id}!"
- )
-
- # create scenarios -----------------------------------------------------
- scenarios = await evaluations_service.create_scenarios(
- project_id=project_id,
- user_id=user_id,
- scenarios=[
- EvaluationScenarioCreate(
- run_id=run_id,
- status=EvaluationStatus.RUNNING,
- )
- for _ in range(nof_scenarios)
- ],
- )
- if len(scenarios) != nof_scenarios:
- raise ValueError(f"Failed to create evaluation scenarios for run {run_id}!")
- # ----------------------------------------------------------------------
-
- # create input results -------------------------------------------------
- input_results = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- results=[
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=scenario_specs[idx]["input_step_key"],
- repeat_idx=repeat_idx,
- status=EvaluationStatus.SUCCESS,
- testcase_id=scenario_specs[idx]["testcase"].id,
- )
- for idx, scenario in enumerate(scenarios)
- for repeat_idx in repeat_indices
- ],
- )
- if len(input_results) != nof_scenarios * len(repeat_indices):
- raise ValueError(f"Failed to create input results for run {run_id}!")
- # ----------------------------------------------------------------------
-
- # resolve cache / invoke application -----------------------------------
- run_config = {
- "batch_size": 10,
- "max_retries": 3,
- "retry_delay": 3,
- "delay_between_batches": 5,
- }
- scenario_invocations: Dict[tuple[int, int], Dict[str, Any]] = {}
- for idx, scenario in enumerate(scenarios):
- scenario_spec = scenario_specs[idx]
- testcase = scenario_spec["testcase"]
- testcase_data = scenario_spec["testcase_data"]
- testset_revision = scenario_spec["testset_revision"]
- references = {
- "testcase": {"id": str(testcase.id)},
- **revision_references(
- revision=testset_revision,
- entity_type="testset",
- ),
- **revision_references(
- revision=application_revision,
- entity_type="application",
- ),
- }
- hash_id = make_hash(references=references, links=None)
- cached_traces = []
- if is_cached and hash_id:
- cached_traces = await fetch_traces_by_hash(
- tracing_service,
- project_id,
- hash_id=hash_id,
- limit=application_required_count,
- )
- reusable_traces = select_traces_for_reuse(
- traces=cached_traces,
- required_count=application_required_count,
- )
- for repeat_idx, reusable_trace in zip(repeat_indices, reusable_traces):
- scenario_invocations[(idx, repeat_idx)] = {
- "status": EvaluationStatus.SUCCESS,
- "trace_id": (
- str(reusable_trace.trace_id)
- if reusable_trace and reusable_trace.trace_id
- else None
- ),
- "error": None,
- }
-
- missing_repeat_indices = repeat_indices[len(reusable_traces) :]
- if missing_repeat_indices:
- invocations = await llm_apps_service.batch_invoke(
- project_id=str(project_id),
- user_id=str(user_id),
- testset_data=[
- testcase_data for _ in range(len(missing_repeat_indices))
- ], # type: ignore[arg-type]
- revision=application_revision,
- uri=uri,
- rate_limit_config=run_config,
- application_id=str(application.id),
- references=_serialize_references(references),
- scenarios=[
- scenario.model_dump(
- mode="json",
- exclude_none=True,
- )
- for _ in range(len(missing_repeat_indices))
- ],
- )
- if len(invocations) != len(missing_repeat_indices):
- raise ValueError(
- f"Unexpected batch invocation count for scenario {scenario.id}!"
- )
- for repeat_idx, invocation in zip(missing_repeat_indices, invocations):
- invocation_error = (
- invocation.result.error.model_dump(mode="json")
- if invocation.result and invocation.result.error
- else None
- )
- scenario_invocations[(idx, repeat_idx)] = {
- "status": (
- EvaluationStatus.FAILURE
- if invocation_error
- else EvaluationStatus.SUCCESS
- ),
- "trace_id": invocation.trace_id,
- "error": invocation_error,
- }
- # ----------------------------------------------------------------------
-
- # create invocation results + finalize scenarios ------------------------
- run_has_errors = 0
- invocation_results = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- results=[
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=invocation_step_key,
- repeat_idx=repeat_idx,
- status=(
- scenario_invocations.get((idx, repeat_idx), {}).get("status")
- or EvaluationStatus.FAILURE
- ),
- trace_id=scenario_invocations.get((idx, repeat_idx), {}).get(
- "trace_id"
- ),
- error=scenario_invocations.get((idx, repeat_idx), {}).get("error"),
- )
- for idx, scenario in enumerate(scenarios)
- for repeat_idx in repeat_indices
- ],
- )
- if len(invocation_results) != nof_scenarios * len(repeat_indices):
- raise ValueError(f"Failed to create invocation results for run {run_id}!")
-
- for idx, scenario in enumerate(scenarios):
- scenario_status = (
- EvaluationStatus.SUCCESS
- if all(
- scenario_invocations.get((idx, repeat_idx), {}).get("status")
- == EvaluationStatus.SUCCESS
- for repeat_idx in repeat_indices
- )
- else EvaluationStatus.ERRORS
- )
- if not all(
- scenario_invocations.get((idx, repeat_idx), {}).get("status")
- == EvaluationStatus.SUCCESS
- for repeat_idx in repeat_indices
- ):
- run_has_errors += 1
-
- edited_scenario = await evaluations_service.edit_scenario(
- project_id=project_id,
- user_id=user_id,
- scenario=EvaluationScenarioEdit(
- id=scenario.id,
- tags=scenario.tags,
- meta=scenario.meta,
- status=scenario_status,
- ),
- )
- if not edited_scenario:
- raise ValueError(
- f"Failed to edit evaluation scenario with id {scenario.id}!"
- )
-
- if run_has_errors:
- run_status = EvaluationStatus.ERRORS
- # ----------------------------------------------------------------------
-
- except Exception as e: # pylint: disable=broad-exception-caught
- log.error(
- f"An error occurred during batch invocation: {e}",
- exc_info=True,
- )
- run_status = EvaluationStatus.FAILURE
-
- if not run:
- log.info("[FAIL] ", run_id=run_id, project_id=project_id, user_id=user_id)
- return
-
- await evaluations_service.edit_run(
- project_id=project_id,
- user_id=user_id,
- run=EvaluationRunEdit(
- id=run_id,
- name=run.name,
- description=run.description,
- tags=run.tags,
- meta=run.meta,
- status=run_status,
- flags=run.flags,
- data=run.data,
- ),
- )
-
- log.info("[DONE] ", run_id=run_id, project_id=project_id, user_id=user_id)
- return
-
-
-async def _evaluate_batch_items(
- *,
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
- #
- testcase_ids: Optional[List[UUID]] = None,
- trace_ids: Optional[List[str]] = None,
- input_step_key: Optional[str] = None,
- #
- tracing_service: Optional[TracingService] = None,
- testcases_service: Optional[TestcasesService] = None,
- workflows_service: WorkflowsService,
- evaluations_service: EvaluationsService,
-):
- request = Request(
- scope={
- "type": "http",
- "http_version": "1.1",
- "scheme": "http",
- }
- )
- request.state.project_id = str(project_id)
- request.state.user_id = str(user_id)
-
- run: Optional[EvaluationRun] = None
- scenarios = []
- run_status = EvaluationStatus.SUCCESS
-
- try:
- run = await evaluations_service.fetch_run(
- project_id=project_id,
- run_id=run_id,
- )
- if not run:
- raise ValueError(f"Evaluation run with id {run_id} not found!")
- if not run.flags or not run.flags.is_queue:
- raise ValueError(
- f"Evaluation run with id {run_id} is not configured for ad-hoc batching!"
- )
- if not run.data or not run.data.steps:
- raise ValueError(f"Evaluation run with id {run_id} has no data steps!")
- repeats = run.data.repeats or 1
- repeat_indices = build_repeat_indices(repeats)
- is_cached = bool(run.flags.is_cached)
-
- testcase_ids = testcase_ids or []
- trace_ids = trace_ids or []
- if not testcase_ids and not trace_ids:
- raise ValueError(
- f"Evaluation run with id {run_id} has no testcase_ids or trace_ids!"
- )
- if trace_ids and tracing_service is None:
- raise ValueError("tracing_service is required for trace batches")
- if testcase_ids and testcases_service is None:
- raise ValueError("testcases_service is required for testcase batches")
-
- steps = run.data.steps
- input_steps = [step for step in steps if step.type == "input"]
- invocation_steps = [step for step in steps if step.type == "invocation"]
- annotation_steps = [step for step in steps if step.type == "annotation"]
-
- if input_step_key is not None:
- matching_input_step = next(
- (step for step in input_steps if step.key == input_step_key),
- None,
- )
- if matching_input_step is None:
- raise ValueError(
- f"Evaluation run with id {run_id} has no input step '{input_step_key}'!"
- )
- else:
- input_step_key = input_steps[0].key if input_steps else None
- invocation_step_key = invocation_steps[0].key if invocation_steps else None
- evaluator_references = {
- step.key: step.references or {} for step in annotation_steps
- }
- evaluator_revisions: Dict[str, Any] = {}
- for annotation_step_key, annotation_refs in evaluator_references.items():
- evaluator_revision_ref = annotation_refs.get("evaluator_revision")
- evaluator_revisions[annotation_step_key] = (
- await workflows_service.fetch_workflow_revision(
- project_id=project_id,
- workflow_revision_ref=evaluator_revision_ref,
- )
- if evaluator_revision_ref
- else None
- )
-
- testcases = (
- await testcases_service.fetch_testcases(
- project_id=project_id,
- testcase_ids=testcase_ids,
- )
- if testcase_ids
- else []
- )
- testcases_by_id = {
- testcase.id: testcase for testcase in testcases if testcase.id
- }
-
- scenario_items = []
- for testcase_id in testcase_ids:
- testcase = testcases_by_id.get(testcase_id)
- scenario_items.append(
- dict(
- kind="testcase",
- testcase=testcase,
- testcase_id=testcase_id,
- trace_id=None,
- )
- )
- for trace_id in trace_ids:
- scenario_items.append(
- dict(
- kind="trace",
- testcase=None,
- testcase_id=None,
- trace_id=trace_id,
- )
- )
-
- scenarios = await evaluations_service.create_scenarios(
- project_id=project_id,
- user_id=user_id,
- scenarios=[
- EvaluationScenarioCreate(
- run_id=run_id,
- status=EvaluationStatus.RUNNING,
- )
- for _ in scenario_items
- ],
- )
- if len(scenarios) != len(scenario_items):
- raise ValueError(f"Failed to create scenarios for run {run_id}")
-
- run_has_errors = False
- run_has_pending = False
-
- for idx, scenario in enumerate(scenarios):
- scenario_status = EvaluationStatus.SUCCESS
- scenario_has_pending = False
- scenario_item = scenario_items[idx]
-
- source_testcase = scenario_item["testcase"]
- source_testcase_id = scenario_item["testcase_id"]
- source_trace_id = scenario_item["trace_id"]
-
- _trace = None
- inputs = None
- outputs = None
- query_span_id = None
-
- if source_testcase_id and source_testcase is None:
- run_has_errors = True
- scenario_status = EvaluationStatus.ERRORS
- await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- results=[
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=step.key,
- repeat_idx=repeat_idx,
- status=EvaluationStatus.ERRORS,
- testcase_id=source_testcase_id,
- error={
- "message": f"Testcase {source_testcase_id} not found."
- },
- )
- for step in annotation_steps
- for repeat_idx in repeat_indices
- ],
- )
-
- if source_testcase_id and source_testcase and input_step_key:
- input_results = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- results=[
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=input_step_key,
- repeat_idx=repeat_idx,
- status=EvaluationStatus.SUCCESS,
- testcase_id=source_testcase_id,
- )
- for repeat_idx in repeat_indices
- ],
- )
- if len(input_results) != len(repeat_indices):
- raise ValueError(
- f"Failed to create input result for scenario {scenario.id}"
- )
-
- if source_testcase and source_testcase.data:
- inputs = source_testcase.data
-
- if source_trace_id:
- trace = await fetch_trace(
- project_id=project_id,
- trace_id=source_trace_id,
- tracing_service=tracing_service,
- )
- if not trace or not isinstance(trace.spans, dict):
- scenario_status = EvaluationStatus.ERRORS
- run_has_errors = True
- else:
- root_span = list(trace.spans.values())[0]
- if isinstance(root_span, list):
- scenario_status = EvaluationStatus.ERRORS
- run_has_errors = True
- else:
- query_span_id = root_span.span_id
- _trace = trace.model_dump(mode="json", exclude_none=True)
- _root_span = root_span.model_dump(
- mode="json", exclude_none=True
- )
-
- root_span_attributes: dict = _root_span.get("attributes") or {}
- root_span_ag: dict = root_span_attributes.get("ag") or {}
- root_span_ag_data: dict = root_span_ag.get("data") or {}
- outputs = root_span_ag_data.get("outputs")
- if not inputs:
- inputs = root_span_ag_data.get("inputs")
-
- if (
- source_trace_id
- and input_step_key
- and scenario_status == EvaluationStatus.SUCCESS
- ):
- input_results = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- results=[
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=input_step_key,
- repeat_idx=repeat_idx,
- status=EvaluationStatus.SUCCESS,
- trace_id=source_trace_id,
- )
- for repeat_idx in repeat_indices
- ],
- )
- if len(input_results) != len(repeat_indices):
- raise ValueError(
- f"Failed to create trace input result for scenario {scenario.id}"
- )
-
- if (
- source_trace_id
- and invocation_step_key
- and scenario_status == EvaluationStatus.SUCCESS
- ):
- invocation_results = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- results=[
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=invocation_step_key,
- repeat_idx=repeat_idx,
- status=EvaluationStatus.SUCCESS,
- trace_id=source_trace_id,
- )
- for repeat_idx in repeat_indices
- ],
- )
- if len(invocation_results) != len(repeat_indices):
- raise ValueError(
- f"Failed to create invocation result for scenario {scenario.id}"
- )
-
- if scenario_status == EvaluationStatus.SUCCESS:
- for annotation_step in annotation_steps:
- annotation_step_key = annotation_step.key
- if annotation_step.origin in {"human", "custom"}:
- scenario_has_pending = True
- run_has_pending = True
- # Human/custom steps are not auto-invoked here.
- # Results are created later by the annotator via the annotation submission flow.
- continue
-
- evaluator_revision = evaluator_revisions.get(annotation_step_key)
- if not evaluator_revision:
- run_has_errors = True
- scenario_status = EvaluationStatus.ERRORS
- continue
-
- _revision = evaluator_revision.model_dump(
- mode="json",
- exclude_none=True,
- )
- interface = (
- dict(
- uri=evaluator_revision.data.uri,
- url=evaluator_revision.data.url,
- headers=evaluator_revision.data.headers,
- schemas=evaluator_revision.data.schemas,
- )
- if evaluator_revision.data
- else dict()
- )
- configuration = (
- dict(
- script=evaluator_revision.data.script,
- parameters=evaluator_revision.data.parameters,
- )
- if evaluator_revision.data
- else dict()
- )
- parameters = configuration.get("parameters")
- flags = (
- evaluator_revision.flags.model_dump(
- mode="json",
- exclude_none=True,
- exclude_unset=True,
- )
- if evaluator_revision.flags
- else None
- )
-
- links: Dict[str, Any] = {}
- source_step_key = invocation_step_key or input_step_key
- if source_step_key and source_trace_id and query_span_id:
- links[source_step_key] = dict(
- trace_id=source_trace_id,
- span_id=query_span_id,
- )
-
- workflow_service_request = WorkflowServiceRequest(
- version="2025.07.14",
- flags=flags,
- interface=interface,
- configuration=configuration,
- data=WorkflowServiceRequestData(
- revision=_revision,
- parameters=parameters,
- testcase=(
- source_testcase.model_dump(
- mode="json", exclude_none=True
- )
- if source_testcase
- else None
- ),
- inputs=inputs,
- trace=_trace,
- outputs=outputs,
- ),
- references=evaluator_references.get(annotation_step_key, {}),
- links=links,
- )
- hash_references: Dict[str, Any] = {
- **(evaluator_references.get(annotation_step_key, {}) or {})
- }
- if source_testcase_id:
- hash_references["testcase"] = {"id": str(source_testcase_id)}
-
- hash_id = make_hash(
- references=hash_references,
- links=links,
- )
- cached_traces = []
- if is_cached and hash_id and tracing_service is not None:
- cached_traces = await fetch_traces_by_hash(
- tracing_service,
- project_id,
- hash_id=hash_id,
- limit=len(repeat_indices),
- )
-
- reusable_traces = select_traces_for_reuse(
- traces=cached_traces,
- required_count=len(repeat_indices),
- )
- _ = plan_missing_traces(
- required_count=len(repeat_indices),
- reusable_count=len(reusable_traces),
- )
-
- results_payload = [
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=annotation_step_key,
- repeat_idx=repeat_idx,
- status=EvaluationStatus.SUCCESS,
- testcase_id=source_testcase_id,
- trace_id=str(reusable_trace.trace_id),
- )
- for repeat_idx, reusable_trace in zip(
- repeat_indices,
- reusable_traces,
- )
- if reusable_trace and reusable_trace.trace_id
- ]
-
- for repeat_idx in repeat_indices[len(reusable_traces) :]:
- workflows_service_response = (
- await workflows_service.invoke_workflow(
- project_id=project_id,
- user_id=user_id,
- request=workflow_service_request,
- annotate=True,
- )
- )
-
- has_error = workflows_service_response.status.code != 200
- result_trace_id = workflows_service_response.trace_id
- result_error = None
- result_status = EvaluationStatus.SUCCESS
- if has_error:
- result_status = EvaluationStatus.FAILURE
- result_error = workflows_service_response.status.model_dump(
- mode="json",
- exclude_none=True,
- )
- scenario_status = EvaluationStatus.ERRORS
- run_has_errors = True
-
- results_payload.append(
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario.id,
- step_key=annotation_step_key,
- repeat_idx=repeat_idx,
- status=result_status,
- testcase_id=source_testcase_id,
- trace_id=result_trace_id,
- error=result_error,
- )
- )
-
- step_results = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- results=results_payload,
- )
- if len(step_results) != len(repeat_indices):
- raise ValueError(
- f"Failed to create annotation results for scenario {scenario.id}"
- )
-
- final_scenario_status = (
- EvaluationStatus.PENDING
- if scenario_status == EvaluationStatus.SUCCESS and scenario_has_pending
- else scenario_status
- )
- await evaluations_service.edit_scenario(
- project_id=project_id,
- user_id=user_id,
- scenario=EvaluationScenarioEdit(
- id=scenario.id,
- tags=scenario.tags,
- meta=scenario.meta,
- status=final_scenario_status,
- ),
- )
-
- try:
- await evaluations_service.refresh_metrics(
- project_id=project_id,
- user_id=user_id,
- metrics=EvaluationMetricsRefresh(
- run_id=run_id,
- scenario_id=scenario.id,
- ),
- )
- except Exception: # pylint: disable=broad-exception-caught
- log.warning(
- f"Refreshing metrics failed for {run_id} | {scenario.id}",
- exc_info=True,
- )
-
- if run_has_errors:
- run_status = EvaluationStatus.ERRORS
- elif run_has_pending:
- run_status = EvaluationStatus.RUNNING
- else:
- run_status = EvaluationStatus.SUCCESS
-
- except Exception as e: # pylint: disable=broad-exception-caught
- log.error(
- f"An error occurred during batch items evaluation: {e}",
- exc_info=True,
- )
- run_status = EvaluationStatus.FAILURE
-
- if not run:
- return
-
- # For ad-hoc/queue runs (multiple independent batches writing to the same run),
- # re-fetch the current stored status and never downgrade it to a less severe state.
- # This prevents a later successful batch from overwriting ERRORS from an earlier one.
- if run.flags and run.flags.is_queue and run_status != EvaluationStatus.FAILURE:
- _severity = {
- EvaluationStatus.FAILURE: 4,
- EvaluationStatus.ERRORS: 3,
- EvaluationStatus.RUNNING: 2,
- EvaluationStatus.SUCCESS: 1,
- EvaluationStatus.PENDING: 0,
- }
- current_run = await evaluations_service.fetch_run(
- project_id=project_id,
- run_id=run_id,
- )
- if current_run and current_run.status:
- stored_severity = _severity.get(current_run.status, 0)
- if stored_severity > _severity.get(run_status, 0):
- run_status = current_run.status
-
- try:
- if run_status != EvaluationStatus.FAILURE:
- await evaluations_service.refresh_metrics(
- project_id=project_id,
- user_id=user_id,
- metrics=EvaluationMetricsRefresh(run_id=run_id),
- )
- except Exception: # pylint: disable=broad-exception-caught
- log.warning(f"Refreshing metrics failed for {run_id}", exc_info=True)
- run_status = EvaluationStatus.FAILURE
-
- await evaluations_service.edit_run(
- project_id=project_id,
- user_id=user_id,
- run=EvaluationRunEdit(
- id=run_id,
- name=run.name,
- description=run.description,
- tags=run.tags,
- meta=run.meta,
- status=run_status,
- flags=run.flags,
- data=run.data,
- ),
- )
-
- log.info("[DONE] ", run_id=run_id, project_id=project_id, user_id=user_id)
-
- return
-
-
-async def evaluate_batch_traces(
- *,
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
- trace_ids: List[str],
- input_step_key: Optional[str] = None,
- #
- tracing_service: TracingService,
- workflows_service: WorkflowsService,
- evaluations_service: EvaluationsService,
-):
- return await _evaluate_batch_items(
- project_id=project_id,
- user_id=user_id,
- run_id=run_id,
- #
- trace_ids=trace_ids,
- input_step_key=input_step_key,
- tracing_service=tracing_service,
- workflows_service=workflows_service,
- evaluations_service=evaluations_service,
- )
-
-
-async def evaluate_batch_testcases(
- *,
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
- testcase_ids: List[UUID],
- input_step_key: Optional[str] = None,
- #
- tracing_service: TracingService,
- testcases_service: TestcasesService,
- workflows_service: WorkflowsService,
- evaluations_service: EvaluationsService,
-):
- return await _evaluate_batch_items(
- project_id=project_id,
- user_id=user_id,
- run_id=run_id,
- #
- testcase_ids=testcase_ids,
- input_step_key=input_step_key,
- tracing_service=tracing_service,
- testcases_service=testcases_service,
- workflows_service=workflows_service,
- evaluations_service=evaluations_service,
- )
diff --git a/api/oss/src/core/evaluations/tasks/live.py b/api/oss/src/core/evaluations/tasks/live.py
deleted file mode 100644
index 7a535b64a3..0000000000
--- a/api/oss/src/core/evaluations/tasks/live.py
+++ /dev/null
@@ -1,921 +0,0 @@
-from typing import Dict, Any, Optional
-from uuid import UUID
-from datetime import datetime, timezone
-
-from oss.src.utils.logging import get_module_logger
-
-from oss.src.dbs.postgres.queries.dbes import (
- QueryArtifactDBE,
- QueryVariantDBE,
- QueryRevisionDBE,
-)
-from oss.src.dbs.postgres.testcases.dbes import (
- TestcaseBlobDBE,
-)
-from oss.src.dbs.postgres.testsets.dbes import (
- TestsetArtifactDBE,
- TestsetVariantDBE,
- TestsetRevisionDBE,
-)
-from oss.src.dbs.postgres.workflows.dbes import (
- WorkflowArtifactDBE,
- WorkflowVariantDBE,
- WorkflowRevisionDBE,
-)
-
-from oss.src.dbs.postgres.tracing.dao import TracingDAO
-from oss.src.dbs.postgres.blobs.dao import BlobsDAO
-from oss.src.dbs.postgres.git.dao import GitDAO
-from oss.src.dbs.postgres.evaluations.dao import EvaluationsDAO
-
-from oss.src.core.tracing.service import TracingService
-from oss.src.core.queries.service import QueriesService
-from oss.src.core.testcases.service import TestcasesService
-from oss.src.core.testsets.service import TestsetsService
-from oss.src.core.testsets.service import SimpleTestsetsService
-from oss.src.core.workflows.service import WorkflowsService
-from oss.src.core.evaluators.service import EvaluatorsService
-from oss.src.core.evaluators.service import SimpleEvaluatorsService
-from oss.src.core.evaluations.service import EvaluationsService
-from oss.src.core.annotations.service import AnnotationsService
-
-
-from oss.src.core.evaluations.types import (
- EvaluationMetricsRefresh,
- EvaluationStatus,
- EvaluationScenarioCreate,
- EvaluationScenarioEdit,
- EvaluationResultCreate,
-)
-from oss.src.core.shared.dtos import (
- Reference,
- Traces,
-)
-from oss.src.core.tracing.dtos import (
- Filtering,
- Windowing,
- Formatting,
- Format,
- Focus,
- TracingQuery,
- LogicalOperator,
-)
-from oss.src.core.workflows.dtos import (
- WorkflowServiceRequestData,
- WorkflowServiceRequest,
-)
-from oss.src.core.queries.dtos import (
- QueryRevision,
-)
-from oss.src.core.evaluators.dtos import (
- EvaluatorRevision,
-)
-
-from oss.src.core.evaluations.utils import (
- build_repeat_indices,
- fetch_trace,
- fetch_traces_by_hash,
- make_hash,
- select_traces_for_reuse,
-)
-from oss.src.core.git.utils import revision_references
-
-
-log = get_module_logger(__name__)
-
-
-# DBS --------------------------------------------------------------------------
-
-tracing_dao = TracingDAO()
-
-testcases_dao = BlobsDAO(
- BlobDBE=TestcaseBlobDBE,
-)
-
-queries_dao = GitDAO(
- ArtifactDBE=QueryArtifactDBE,
- VariantDBE=QueryVariantDBE,
- RevisionDBE=QueryRevisionDBE,
-)
-
-testsets_dao = GitDAO(
- ArtifactDBE=TestsetArtifactDBE,
- VariantDBE=TestsetVariantDBE,
- RevisionDBE=TestsetRevisionDBE,
-)
-
-workflows_dao = GitDAO(
- ArtifactDBE=WorkflowArtifactDBE,
- VariantDBE=WorkflowVariantDBE,
- RevisionDBE=WorkflowRevisionDBE,
-)
-
-evaluations_dao = EvaluationsDAO()
-
-# CORE -------------------------------------------------------------------------
-
-tracing_service = TracingService(
- tracing_dao=tracing_dao,
-)
-
-queries_service = QueriesService(
- queries_dao=queries_dao,
-)
-
-testcases_service = TestcasesService(
- testcases_dao=testcases_dao,
-)
-
-testsets_service = TestsetsService(
- testsets_dao=testsets_dao,
- testcases_service=testcases_service,
-)
-
-simple_testsets_service = SimpleTestsetsService(
- testsets_service=testsets_service,
-)
-
-workflows_service = WorkflowsService(
- workflows_dao=workflows_dao,
-)
-
-evaluators_service = EvaluatorsService(
- workflows_service=workflows_service,
-)
-
-simple_evaluators_service = SimpleEvaluatorsService(
- evaluators_service=evaluators_service,
-)
-
-evaluations_service = EvaluationsService(
- evaluations_dao=evaluations_dao,
- tracing_service=tracing_service,
- queries_service=queries_service,
- testsets_service=testsets_service,
- evaluators_service=evaluators_service,
- #
-)
-
-# APIS -------------------------------------------------------------------------
-
-annotations_service = AnnotationsService(
- tracing_service=tracing_service,
- evaluators_service=evaluators_service,
- simple_evaluators_service=simple_evaluators_service,
-)
-
-# ------------------------------------------------------------------------------
-
-
-async def _resolve_query_revisions(
- *,
- queries_service: QueriesService,
- project_id: UUID,
- query_revision_refs: Dict[str, Reference],
-) -> Dict[str, QueryRevision]:
- """Fetch each referenced query revision and skip ones missing identity or data."""
- resolved: Dict[str, QueryRevision] = dict()
-
- for query_step_key, query_revision_ref in query_revision_refs.items():
- query_revision = await queries_service.fetch_query_revision(
- project_id=project_id,
- #
- query_revision_ref=query_revision_ref,
- )
-
- if not query_revision:
- log.warn(
- "Skipping query revision: not found.",
- query_step_key=query_step_key,
- query_revision_ref=query_revision_ref.model_dump(mode="json"),
- )
- continue
-
- if not query_revision.id or not query_revision.slug:
- log.warn(
- "Skipping query revision: found but missing identity.",
- query_step_key=query_step_key,
- query_revision_ref=query_revision_ref.model_dump(mode="json"),
- has_id=bool(query_revision.id),
- has_slug=bool(query_revision.slug),
- )
- continue
-
- if not query_revision.data:
- log.warn(
- "Skipping query revision: found but missing data.",
- query_step_key=query_step_key,
- query_revision_ref=query_revision_ref.model_dump(mode="json"),
- )
- continue
-
- resolved[query_step_key] = query_revision
-
- return resolved
-
-
-async def _resolve_evaluator_revisions(
- *,
- evaluators_service: EvaluatorsService,
- project_id: UUID,
- evaluator_revision_refs: Dict[str, Reference],
-) -> Dict[str, EvaluatorRevision]:
- """Fetch each referenced evaluator revision and skip ones missing identity or data."""
- resolved: Dict[str, EvaluatorRevision] = dict()
-
- for evaluator_step_key, evaluator_revision_ref in evaluator_revision_refs.items():
- evaluator_revision = await evaluators_service.fetch_evaluator_revision(
- project_id=project_id,
- #
- evaluator_revision_ref=evaluator_revision_ref,
- )
-
- if not evaluator_revision:
- log.warn(
- "Skipping evaluator revision: not found.",
- evaluator_step_key=evaluator_step_key,
- evaluator_revision_ref=evaluator_revision_ref.model_dump(mode="json"),
- )
- continue
-
- if not evaluator_revision.id or not evaluator_revision.slug:
- log.warn(
- "Skipping evaluator revision: found but missing identity.",
- evaluator_step_key=evaluator_step_key,
- evaluator_revision_ref=evaluator_revision_ref.model_dump(mode="json"),
- has_id=bool(evaluator_revision.id),
- has_slug=bool(evaluator_revision.slug),
- )
- continue
-
- if not evaluator_revision.data:
- log.warn(
- "Skipping evaluator revision: found but missing data.",
- evaluator_step_key=evaluator_step_key,
- evaluator_revision_ref=evaluator_revision_ref.model_dump(mode="json"),
- )
- continue
-
- resolved[evaluator_step_key] = evaluator_revision
-
- return resolved
-
-
-async def evaluate_live_query(
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
- #
- newest: Optional[datetime] = None,
- oldest: Optional[datetime] = None,
- #
- use_windowing: bool = False,
-):
- # count in minutes
- timestamp = oldest or datetime.now(timezone.utc)
- interval: Optional[int] = None
- if newest and oldest:
- interval = int((newest - oldest).total_seconds() / 60)
-
- try:
- # ----------------------------------------------------------------------
- log.info(
- "[SCOPE] ",
- run_id=run_id,
- project_id=project_id,
- user_id=user_id,
- )
-
- log.info(
- "[RANGE] ",
- run_id=run_id,
- timestamp=timestamp,
- interval=interval,
- newest=newest,
- oldest=oldest,
- use_windowing=use_windowing,
- )
- # ----------------------------------------------------------------------
-
- # fetch evaluation run -------------------------------------------------
- run = await evaluations_service.fetch_run(
- project_id=project_id,
- run_id=run_id,
- )
-
- if not run:
- raise ValueError(f"Evaluation run with id {run_id} not found!")
-
- if not run.data:
- raise ValueError(f"Evaluation run with id {run_id} has no data!")
-
- if not run.data.steps:
- raise ValueError(f"Evaluation run with id {run_id} has no steps!")
-
- steps = run.data.steps
- repeats = run.data.repeats or 1
- repeat_indices = build_repeat_indices(repeats)
- is_cached = bool(getattr(run.flags, "is_cached", False))
-
- input_steps = {
- step.key: step
- for step in steps
- if step.type == "input" # --------
- }
- invocation_steps = {
- step.key: step for step in steps if step.type == "invocation"
- }
- annotation_steps = {
- step.key: step for step in steps if step.type == "annotation"
- }
-
- input_steps_keys = list(input_steps.keys())
- invocation_steps_keys = list(invocation_steps.keys()) # noqa: F841
- annotation_steps_keys = list(annotation_steps.keys())
-
- nof_annotations = len(annotation_steps_keys)
- # ----------------------------------------------------------------------
-
- # initialize query variables -------------------------------------------
- query_revision_refs: Dict[str, Reference] = dict()
- #
- query_revisions: Dict[str, QueryRevision] = dict()
- query_references: Dict[str, Dict[str, Reference]] = dict()
- #
- query_traces: Dict[str, Traces] = dict()
- # ----------------------------------------------------------------------
-
- # initialize evaluator variables ---------------------------------------
- evaluator_revision_refs: Dict[str, Reference] = dict()
- #
- evaluator_revisions: Dict[str, EvaluatorRevision] = dict()
- evaluator_references: Dict[str, Dict[str, Reference]] = dict()
- # ----------------------------------------------------------------------
-
- # get query steps references -------------------------------------------
- for input_step_key in input_steps_keys:
- query_refs = input_steps[input_step_key].references
- query_revision_ref = query_refs.get("query_revision")
-
- if query_revision_ref:
- query_revision_refs[input_step_key] = query_revision_ref
-
- # ----------------------------------------------------------------------
-
- # get evaluator steps references ---------------------------------------
- for annotation_step_key in annotation_steps_keys:
- evaluator_refs = annotation_steps[annotation_step_key].references
- evaluator_revision_ref = evaluator_refs.get("evaluator_revision")
-
- if evaluator_revision_ref:
- evaluator_revision_refs[annotation_step_key] = evaluator_revision_ref
- # ----------------------------------------------------------------------
-
- # fetch query revisions ------------------------------------------------
- query_revisions = await _resolve_query_revisions(
- queries_service=queries_service,
- project_id=project_id,
- query_revision_refs=query_revision_refs,
- )
- for query_step_key in query_revisions:
- query_references[query_step_key] = input_steps[query_step_key].references
- # ----------------------------------------------------------------------
-
- # fetch evaluator revisions --------------------------------------------
- evaluator_revisions = await _resolve_evaluator_revisions(
- evaluators_service=evaluators_service,
- project_id=project_id,
- evaluator_revision_refs=evaluator_revision_refs,
- )
- for evaluator_step_key in evaluator_revisions:
- evaluator_references[evaluator_step_key] = annotation_steps[
- evaluator_step_key
- ].references
- # ----------------------------------------------------------------------
-
- # run query revisions --------------------------------------------------
- for query_step_key, query_revision in query_revisions.items():
- formatting = Formatting(
- focus=Focus.TRACE,
- format=Format.AGENTA,
- )
- filtering = Filtering(
- operator=LogicalOperator.AND,
- conditions=list(),
- )
- windowing = Windowing(
- oldest=oldest,
- newest=newest,
- next=None,
- limit=None,
- order="ascending",
- interval=None,
- rate=None,
- )
-
- if query_revision.data:
- if query_revision.data.filtering:
- filtering = query_revision.data.filtering
-
- if query_revision.data.windowing:
- query_windowing = query_revision.data.windowing
-
- if use_windowing:
- windowing = Windowing(
- oldest=query_windowing.oldest,
- newest=query_windowing.newest,
- limit=query_windowing.limit,
- order=query_windowing.order,
- rate=query_windowing.rate,
- # next=
- # interval=
- )
- else:
- windowing.rate = query_windowing.rate
-
- query = TracingQuery(
- formatting=formatting,
- filtering=filtering,
- windowing=windowing,
- )
-
- query_traces_result = await tracing_service.query_traces(
- project_id=project_id,
- query=TracingQuery(
- formatting=query.formatting,
- filtering=query.filtering,
- windowing=query.windowing,
- ),
- )
-
- nof_traces = len(query_traces_result)
-
- log.info(
- "[TRACES] ",
- run_id=run_id,
- count=nof_traces,
- )
-
- query_traces[query_step_key] = query_traces_result or []
- # ----------------------------------------------------------------------
-
- total_traces = sum(len(traces) for traces in query_traces.values())
- if total_traces == 0:
- return
-
- # run online evaluation ------------------------------------------------
- any_results_created = False
- for query_step_key in query_traces.keys():
- query_step_traces = [
- trace
- for trace in query_traces[query_step_key]
- if trace and trace.trace_id
- ]
- if not query_step_traces:
- continue
-
- # create scenarios -------------------------------------------------
-
- nof_traces = len(query_step_traces)
-
- scenarios_create = [
- EvaluationScenarioCreate(
- run_id=run_id,
- timestamp=timestamp,
- interval=interval,
- #
- status=EvaluationStatus.RUNNING,
- )
- for _ in range(nof_traces)
- ]
-
- scenarios = await evaluations_service.create_scenarios(
- project_id=project_id,
- user_id=user_id,
- #
- scenarios=scenarios_create,
- )
-
- if len(scenarios) != nof_traces:
- log.error(
- "[LIVE] Could not create evaluation scenarios",
- run_id=run_id,
- )
- continue
- # ------------------------------------------------------------------
-
- # create query steps -----------------------------------------------
- query_trace_ids = [
- trace.trace_id for trace in query_step_traces if trace.trace_id
- ]
- scenario_ids = [scenario.id for scenario in scenarios if scenario.id]
-
- results_create = [
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario_id,
- step_key=query_step_key,
- repeat_idx=repeat_idx,
- timestamp=timestamp,
- interval=interval,
- #
- status=EvaluationStatus.SUCCESS,
- #
- trace_id=query_trace_id,
- )
- for scenario_id, query_trace_id in zip(scenario_ids, query_trace_ids)
- for repeat_idx in repeat_indices
- ]
-
- results = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- #
- results=results_create,
- )
-
- if len(results) != nof_traces * len(repeat_indices):
- raise ValueError(
- f"Failed to create evaluation results for run {run_id}!"
- )
- # ------------------------------------------------------------------
-
- scenario_has_errors: Dict[int, int] = dict()
- scenario_status: Dict[int, EvaluationStatus] = dict()
- scenario_has_pending: Dict[int, bool] = dict()
-
- # iterate over query traces ----------------------------------------
- for idx, trace in enumerate(query_step_traces):
- scenario_results_created = False
- scenario_has_errors[idx] = 0
- scenario_status[idx] = EvaluationStatus.SUCCESS
- scenario_has_pending[idx] = False
-
- scenario = scenarios[idx]
- scenario_id = scenario_ids[idx]
- query_trace_id = query_trace_ids[idx]
-
- if not isinstance(trace.spans, dict):
- log.warn(
- f"Trace with id {query_trace_id} has no root spans",
- run_id=run_id,
- )
- scenario_has_errors[idx] += 1
- scenario_status[idx] = EvaluationStatus.ERRORS
- continue
-
- root_span = list(trace.spans.values())[0]
-
- if isinstance(root_span, list):
- log.warn(
- f"More than one root span for trace with id {query_trace_id}",
- run_id=run_id,
- )
- scenario_has_errors[idx] += 1
- scenario_status[idx] = EvaluationStatus.ERRORS
- continue
-
- query_span_id = root_span.span_id
-
- log.info(
- "[TRACE] ",
- run_id=run_id,
- trace_id=query_trace_id,
- )
-
- # run evaluator revisions --------------------------------------
- for jdx in range(nof_annotations):
- annotation_step_key = annotation_steps_keys[jdx]
- annotation_step = annotation_steps[annotation_step_key]
-
- if annotation_step.origin in {"human", "custom"}:
- scenario_has_pending[idx] = True
- continue
-
- # skip annotation steps whose evaluator revision was not
- # resolved (missing identity or data) — both maps are only
- # populated for successfully resolved revisions.
- if annotation_step_key not in evaluator_revisions:
- log.error(
- "Evaluator revision not resolved; skipping annotation step.",
- run_id=run_id,
- annotation_step_key=annotation_step_key,
- )
- scenario_has_errors[idx] += 1
- scenario_status[idx] = EvaluationStatus.ERRORS
- continue
-
- step_status = EvaluationStatus.SUCCESS
-
- evaluator_revision = evaluator_revisions[annotation_step_key]
- query_revision = query_revisions[query_step_key]
- references: Dict[str, Any] = {
- **revision_references(
- revision=query_revision,
- entity_type="query",
- ),
- **revision_references(
- revision=evaluator_revision,
- entity_type="evaluator",
- ),
- }
- links: Dict[str, Any] = {
- query_step_key: dict(
- trace_id=query_trace_id,
- span_id=query_span_id,
- )
- }
-
- # invoke annotation workflow -------------------------------
- _revision = evaluator_revision.model_dump(
- mode="json",
- exclude_none=True,
- )
- interface = (
- dict(
- uri=evaluator_revision.data.uri,
- url=evaluator_revision.data.url,
- headers=evaluator_revision.data.headers,
- schemas=evaluator_revision.data.schemas,
- )
- if evaluator_revision.data
- else dict()
- )
- configuration = (
- dict(
- script=evaluator_revision.data.script,
- parameters=evaluator_revision.data.parameters,
- )
- if evaluator_revision.data
- else dict()
- )
- parameters = configuration.get("parameters")
-
- _testcase = None
- inputs = None
-
- _trace: Optional[dict] = (
- trace.model_dump(
- mode="json",
- exclude_none=True,
- )
- if trace
- else None
- )
-
- _root_span = root_span.model_dump(mode="json", exclude_none=True)
- testcase_data = None
-
- root_span_attributes: dict = _root_span.get("attributes") or {}
- root_span_attributes_ag: dict = root_span_attributes.get("ag") or {}
- root_span_attributes_ag_data: dict = (
- root_span_attributes_ag.get("data") or {}
- )
- root_span_attributes_ag_data_outputs = (
- root_span_attributes_ag_data.get("outputs")
- )
- root_span_attributes_ag_data_inputs = (
- root_span_attributes_ag_data.get("inputs")
- )
-
- outputs = root_span_attributes_ag_data_outputs
- inputs = testcase_data or root_span_attributes_ag_data_inputs
-
- workflow_service_request_data = WorkflowServiceRequestData(
- revision=_revision,
- parameters=parameters,
- #
- testcase=_testcase,
- inputs=inputs,
- #
- trace=_trace,
- outputs=outputs,
- )
-
- flags = (
- evaluator_revision.flags.model_dump(
- mode="json",
- exclude_none=True,
- exclude_unset=True,
- )
- if evaluator_revision.flags
- else None
- )
-
- workflow_service_request = WorkflowServiceRequest(
- version="2025.07.14",
- #
- flags=flags,
- #
- interface=interface,
- configuration=configuration,
- #
- data=workflow_service_request_data,
- #
- references=references,
- links=links,
- )
- hash_id = make_hash(references=references, links=links)
- cached_traces = []
- if is_cached and hash_id:
- cached_traces = await fetch_traces_by_hash(
- tracing_service,
- project_id,
- hash_id=hash_id,
- limit=len(repeat_indices),
- )
-
- reusable_traces = select_traces_for_reuse(
- traces=cached_traces,
- required_count=len(repeat_indices),
- )
- results_create = [
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario_id,
- step_key=annotation_step_key,
- repeat_idx=repeat_idx,
- #
- timestamp=timestamp,
- interval=interval,
- #
- status=EvaluationStatus.SUCCESS,
- #
- trace_id=str(reusable_trace.trace_id),
- )
- for repeat_idx, reusable_trace in zip(
- repeat_indices,
- reusable_traces,
- )
- if reusable_trace and reusable_trace.trace_id
- ]
-
- for repeat_idx in repeat_indices[len(reusable_traces) :]:
- log.info(
- "Invoking evaluator... ",
- scenario_id=scenario.id,
- repeat_idx=repeat_idx,
- trace_id=query_trace_id,
- uri=interface.get("uri"),
- )
- workflows_service_response = (
- await workflows_service.invoke_workflow(
- project_id=project_id,
- user_id=user_id,
- #
- request=workflow_service_request,
- #
- annotate=True,
- )
- )
- log.info(
- "Invoked evaluator ",
- scenario_id=scenario.id,
- repeat_idx=repeat_idx,
- trace_id=workflows_service_response.trace_id,
- )
-
- trace_id = workflows_service_response.trace_id
- error = None
- step_status = EvaluationStatus.SUCCESS
- has_error = workflows_service_response.status.code != 200
-
- if has_error:
- log.warn(
- "There is an error in evaluator %s for query %s.",
- annotation_step_key,
- query_trace_id,
- )
- step_status = EvaluationStatus.FAILURE
- scenario_has_errors[idx] += 1
- scenario_status[idx] = EvaluationStatus.ERRORS
- error = workflows_service_response.status.model_dump(
- mode="json",
- exclude_none=True,
- )
- else:
- annotation = workflows_service_response
- trace_id = annotation.trace_id
-
- if not annotation.trace_id:
- log.warn("annotation trace_id is missing.")
- scenario_has_errors[idx] += 1
- scenario_status[idx] = EvaluationStatus.ERRORS
- continue
-
- fetched_trace = await fetch_trace(
- tracing_service=tracing_service,
- project_id=project_id,
- trace_id=annotation.trace_id,
- )
-
- if fetched_trace:
- log.info(
- "Trace found ",
- scenario_id=scenario.id,
- step_key=annotation_step_key,
- trace_id=annotation.trace_id,
- )
- else:
- log.warn(
- "Trace missing",
- scenario_id=scenario.id,
- step_key=annotation_step_key,
- trace_id=annotation.trace_id,
- )
- scenario_has_errors[idx] += 1
- scenario_status[idx] = EvaluationStatus.ERRORS
- continue
-
- results_create.append(
- EvaluationResultCreate(
- run_id=run_id,
- scenario_id=scenario_id,
- step_key=annotation_step_key,
- repeat_idx=repeat_idx,
- #
- timestamp=timestamp,
- interval=interval,
- #
- status=step_status,
- #
- trace_id=trace_id,
- error=error,
- )
- )
-
- results = await evaluations_service.create_results(
- project_id=project_id,
- user_id=user_id,
- #
- results=results_create,
- )
-
- if len(results) != len(repeat_indices):
- raise ValueError(
- f"Failed to create evaluation results for scenario with id {scenario.id}!"
- )
- scenario_results_created = True
- any_results_created = True
- # --------------------------------------------------------------
-
- scenario_edit = EvaluationScenarioEdit(
- id=scenario.id,
- tags=scenario.tags,
- meta=scenario.meta,
- status=(
- EvaluationStatus.PENDING
- if (
- scenario_status[idx] == EvaluationStatus.SUCCESS
- and scenario_has_pending[idx]
- )
- else scenario_status[idx]
- ),
- )
-
- scenario = await evaluations_service.edit_scenario(
- project_id=project_id,
- user_id=user_id,
- #
- scenario=scenario_edit,
- )
-
- if not scenario or not scenario.id:
- log.error(
- f"Failed to update evaluation scenario with id {scenario_id}!",
- run_id=run_id,
- )
-
- if scenario_results_created:
- await evaluations_service.refresh_metrics(
- project_id=project_id,
- user_id=user_id,
- #
- metrics=EvaluationMetricsRefresh(
- run_id=run_id,
- scenario_id=scenario_id,
- ),
- )
- # ------------------------------------------------------------------
-
- if any_results_created:
- await evaluations_service.refresh_metrics(
- project_id=project_id,
- user_id=user_id,
- #
- metrics=EvaluationMetricsRefresh(
- run_id=run_id,
- timestamp=timestamp,
- interval=interval,
- ),
- )
- except Exception as e: # pylint: disable=broad-exception-caught
- log.error(e, exc_info=True)
-
- log.info(
- "[DONE] ",
- run_id=run_id,
- )
-
- return
diff --git a/api/oss/src/core/evaluations/tasks/processor.py b/api/oss/src/core/evaluations/tasks/processor.py
new file mode 100644
index 0000000000..a2449006e3
--- /dev/null
+++ b/api/oss/src/core/evaluations/tasks/processor.py
@@ -0,0 +1,845 @@
+import asyncio
+from typing import Dict, List, Optional, Any, Tuple
+from types import SimpleNamespace
+
+from uuid import UUID
+
+from agenta.sdk.evaluations.runtime.models import (
+ EvaluationStep as SdkEvaluationStep,
+ ResolvedSourceItem as SdkResolvedSourceItem,
+)
+from agenta.sdk.evaluations.runtime.planner import EvaluationPlanner
+from agenta.sdk.evaluations.runtime.processor import (
+ process_sources as sdk_process_evaluation_source_slice,
+ run_status as compute_run_status,
+)
+
+from oss.src.utils.logging import get_module_logger
+
+from oss.src.core.testcases.service import TestcasesService
+from oss.src.core.applications.service import ApplicationsService
+from oss.src.core.workflows.service import WorkflowsService
+from oss.src.core.evaluations.service import EvaluationsService
+
+from oss.src.core.tracing.service import TracingService
+
+
+from oss.src.core.evaluations.types import (
+ EvaluationStatus,
+ EvaluationRun,
+ EvaluationRunEdit,
+ EvaluationResult,
+ EvaluationResultQuery,
+ EvaluationClosedConflict,
+)
+
+from oss.src.core.evaluations.utils import (
+ effective_is_split,
+)
+from oss.src.core.evaluations.runtime.adapters import (
+ APICachedRunner,
+ APIMetricsRefresher,
+ APIResultSetter,
+ APIScenarioEditor,
+ APITraceFetcher,
+ APIWorkflowRunner,
+)
+from oss.src.core.evaluations.runtime.models import (
+ ProcessSummary,
+ PlannedCell,
+ ResolvedSourceItem,
+ ScenarioBinding,
+)
+from oss.src.core.evaluations.runtime.sources import (
+ resolve_direct_source_items,
+)
+
+
+log = get_module_logger(__name__)
+
+
+def _cell_key(cell: Any) -> Tuple[str, int]:
+ return cell.step_key, int(cell.repeat_idx or 0)
+
+
+def _to_sdk_source_item(
+ source_item: ResolvedSourceItem,
+ *,
+ step_key_fallback: Optional[str] = None,
+) -> SdkResolvedSourceItem:
+ """Shape an api-side ResolvedSourceItem into the SDK engine's input type.
+
+ The ingest and re-execute paths build this identically; the only variation
+ is the step key, which re-execute carries on the item and ingest derives
+ from the run's input step. Keeping one helper removes that duplication.
+ """
+ return SdkResolvedSourceItem(
+ kind=source_item.kind,
+ step_key=source_item.step_key or step_key_fallback or "",
+ references=source_item.references or {},
+ trace_id=source_item.trace_id,
+ span_id=source_item.span_id,
+ testcase_id=source_item.testcase_id,
+ testcase=source_item.testcase,
+ trace=source_item.trace,
+ inputs=source_item.inputs or getattr(source_item.testcase, "data", None),
+ outputs=source_item.outputs,
+ )
+
+
+def _cell_is_addressed(
+ *,
+ cell: PlannedCell,
+ requested_steps: set[str],
+ requested_repeats: set[int],
+) -> bool:
+ if requested_steps and cell.step_key not in requested_steps:
+ return False
+ if requested_repeats and cell.repeat_idx not in requested_repeats:
+ return False
+ return True
+
+
+def _seed_context_from_source(
+ *,
+ source_item: ResolvedSourceItem,
+ repeats: Optional[int],
+) -> Dict[int, Dict[str, Any]]:
+ """Build per-repeat upstream context from an ALREADY-HYDRATED source item.
+
+ The API-side counterpart of the SDK's `_initial_context_by_repeat`, for the
+ seeded ingest path: the trace was fetched once by the resolver and lives on
+ the `ResolvedSourceItem`, so the runner's upstream context is read straight
+ from it instead of re-fetching by id. Testcase sources carry no trace, so
+ there is no upstream context to seed (returns {}).
+ """
+ trace = source_item.trace
+ trace_id = source_item.trace_id
+ if not trace and not trace_id:
+ return {}
+ if not trace_id:
+ return {}
+
+ context = {
+ "trace": trace,
+ "trace_id": str(trace_id),
+ "span_id": source_item.span_id,
+ "outputs": source_item.outputs,
+ }
+ count = max(repeats or 1, 1)
+ return {repeat_idx: context for repeat_idx in range(count)}
+
+
+async def _seed_context_by_repeat(
+ *,
+ project_id: UUID,
+ scenario_cells: List[EvaluationResult],
+ invocation_step_keys: set[str],
+ tracing_service: Optional[TracingService],
+) -> Dict[int, Dict[str, Any]]:
+ trace_ids_by_repeat = {
+ int(cell.repeat_idx or 0): cell.trace_id
+ for cell in scenario_cells
+ if cell.step_key in invocation_step_keys and cell.trace_id
+ }
+ if not trace_ids_by_repeat:
+ return {}
+
+ hydrated = await resolve_direct_source_items(
+ project_id=project_id,
+ trace_ids=list(dict.fromkeys(trace_ids_by_repeat.values())),
+ tracing_service=tracing_service,
+ )
+ trace_items = {item.trace_id: item for item in hydrated if item.trace_id}
+ context_by_repeat: Dict[int, Dict[str, Any]] = {}
+
+ for repeat_idx, trace_id in trace_ids_by_repeat.items():
+ item = trace_items.get(trace_id)
+ context_by_repeat[repeat_idx] = {
+ "trace": item.trace if item is not None else None,
+ "trace_id": trace_id,
+ "span_id": item.span_id if item is not None else None,
+ "outputs": item.outputs if item is not None else None,
+ }
+
+ return context_by_repeat
+
+
+async def _resolve_runners_and_revisions(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run: EvaluationRun,
+ invocation_steps: List[Any],
+ annotation_steps: List[Any],
+ tracing_service: Optional[TracingService],
+ workflows_service: Optional[WorkflowsService],
+ applications_service: Optional[ApplicationsService],
+) -> tuple[Dict[str, Any], Dict[str, Any]]:
+ """Wire one cache-aware runner + its revision per executable step.
+
+ The returned `runners` are `APICachedRunner`s, so hashed-trace reuse
+ (cache lookup by step references/links before invoking) is handled here for
+ both ingest and slice re-execution. `auto` annotations are wired; `human`
+ and `custom` annotations are not (the backend never executes them).
+ """
+ run_id = run.id
+ runners: Dict[str, Any] = {}
+ revisions: Dict[str, Any] = {}
+
+ if invocation_steps:
+ if applications_service is None:
+ raise ValueError("applications_service is required for invocation steps")
+ if workflows_service is None:
+ raise ValueError("workflows_service is required for invocation steps")
+ invocation_step = invocation_steps[0]
+ application_revision_ref = invocation_step.references.get(
+ "application_revision"
+ )
+ if not application_revision_ref or not isinstance(
+ application_revision_ref.id, UUID
+ ):
+ raise ValueError(
+ f"Evaluation run with id {run_id} missing invocation.application_revision reference."
+ )
+ application_revision = await applications_service.fetch_application_revision(
+ project_id=project_id,
+ application_revision_ref=application_revision_ref,
+ )
+ if application_revision is None:
+ raise ValueError(
+ f"App revision with id {application_revision_ref.id} not found!"
+ )
+ runners[invocation_step.key] = APICachedRunner(
+ runner=APIWorkflowRunner(
+ project_id=project_id,
+ user_id=user_id,
+ workflows_service=workflows_service,
+ ),
+ tracing_service=tracing_service,
+ project_id=project_id,
+ enabled=bool(run.flags and run.flags.is_cached),
+ )
+ revisions[invocation_step.key] = application_revision
+
+ auto_annotation_steps = [
+ step for step in annotation_steps if step.origin not in {"human", "custom"}
+ ]
+ if auto_annotation_steps and workflows_service is None:
+ raise ValueError("workflows_service is required for auto annotation steps")
+ for annotation_step in auto_annotation_steps:
+ evaluator_revision_ref = (annotation_step.references or {}).get(
+ "evaluator_revision"
+ )
+ evaluator_revision = (
+ await workflows_service.fetch_workflow_revision( # type: ignore[union-attr]
+ project_id=project_id,
+ workflow_revision_ref=evaluator_revision_ref,
+ )
+ if evaluator_revision_ref
+ else None
+ )
+ if evaluator_revision is None:
+ continue
+ runners[annotation_step.key] = APICachedRunner(
+ runner=APIWorkflowRunner(
+ project_id=project_id,
+ user_id=user_id,
+ workflows_service=workflows_service,
+ ),
+ tracing_service=tracing_service,
+ project_id=project_id,
+ enabled=bool(run.flags and run.flags.is_cached),
+ )
+ revisions[annotation_step.key] = evaluator_revision
+
+ return runners, revisions
+
+
+def _source_item_from_input_cells(
+ *,
+ input_steps: List[Any],
+ cells_by_step: Dict[str, List[EvaluationResult]],
+) -> Optional[ResolvedSourceItem]:
+ """Rebuild the scenario's source binding from its stored input result cells.
+
+ A slice addresses EXISTING scenarios, so the source is not re-resolved from
+ a query/testset — it is recovered from the input step's already-written
+ cell, which carries the bound `trace_id` (trace/query source) or
+ `testcase_id` (testcase/testset source). Trace/testcase context is
+ re-hydrated by the slice processor's trace loader / testcase fetch so cache
+ reuse and evaluator inputs match the original run.
+ """
+ for step in input_steps:
+ cells = cells_by_step.get(step.key) or []
+ if not cells:
+ continue
+ cell = cells[0]
+ if cell.trace_id:
+ return ResolvedSourceItem(
+ kind="trace",
+ step_key=step.key,
+ trace_id=cell.trace_id,
+ )
+ if cell.testcase_id:
+ return ResolvedSourceItem(
+ kind="testcase",
+ step_key=step.key,
+ testcase_id=cell.testcase_id,
+ )
+ return None
+
+
+async def _resolve_source_from_input_cells(
+ *,
+ project_id: UUID,
+ input_steps: List[Any],
+ cells_by_step: Dict[str, List[EvaluationResult]],
+ tracing_service: Optional[Any],
+ testcases_service: Optional[Any],
+) -> Optional[SdkResolvedSourceItem]:
+ """The input-cache ladder: recover a scenario's source from its stored cell.
+
+ A scenario that already exists carries its source identity in its input
+ result cell (a `trace_id` or `testcase_id`). This reads that id back and
+ re-hydrates the trace/testcase payload — the same data the original run
+ resolved — so cache reuse and evaluator inputs match. Returns None when the
+ scenario has no usable input cell (nothing to reconstruct from); the caller
+ treats that as "must be populated first".
+ """
+ source_item = _source_item_from_input_cells(
+ input_steps=input_steps,
+ cells_by_step=cells_by_step,
+ )
+ if source_item is None:
+ return None
+
+ hydrated = await resolve_direct_source_items(
+ project_id=project_id,
+ testcase_ids=[source_item.testcase_id] if source_item.testcase_id else None,
+ trace_ids=[source_item.trace_id] if source_item.trace_id else None,
+ testcases_service=testcases_service,
+ tracing_service=tracing_service,
+ )
+ resolved = hydrated[0] if hydrated else source_item
+ resolved.step_key = source_item.step_key
+ return _to_sdk_source_item(resolved)
+
+
+async def _run_sdk_source_slice(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run: Any,
+ evaluations_service: Any,
+ sdk_source_items: List[SdkResolvedSourceItem],
+ sdk_steps: List[SdkEvaluationStep],
+ invocation_steps: List[Any],
+ annotation_steps: List[Any],
+ runners: Any,
+ revisions: Any,
+ #
+ # --- the seams (the only things that differ between callers) ---
+ create_scenario: Any,
+ refresh_metrics: Any,
+ log_pending: bool,
+ timestamp: Optional[Any] = None,
+ interval: Optional[int] = None,
+ refresh_metrics_without_auto_results: bool = True,
+ plan_cell_filter: Optional[Any] = None,
+ initial_context_by_repeat: Optional[Any] = None,
+ tracing_service: Optional[Any] = None,
+) -> List[Any]:
+ """The single execution call: drive the SDK engine over a source slice.
+
+ Both the ingest path (NEW scenarios from source ids) and the re-execute path
+ (EXISTING scenarios by coordinate) funnel through here. They differ only in
+ the injected seams: the scenario factory (create vs reuse), the metrics
+ refresher (inline vs deferred), `log_pending`, the cell filter, and the
+ per-repeat context seed. Everything else is intrinsic to `run` + services
+ and identical for both, so it lives here once.
+ """
+ return await sdk_process_evaluation_source_slice(
+ run_id=run.id,
+ source_items=sdk_source_items,
+ steps=sdk_steps,
+ repeats=run.data.repeats,
+ create_scenario=create_scenario,
+ set_results=APIResultSetter(
+ project_id=project_id,
+ user_id=user_id,
+ timestamp=timestamp,
+ interval=interval,
+ evaluations_service=evaluations_service,
+ ),
+ edit_scenario=APIScenarioEditor(
+ project_id=project_id,
+ user_id=user_id,
+ evaluations_service=evaluations_service,
+ ),
+ refresh_metrics=refresh_metrics,
+ runners=runners,
+ revisions=revisions,
+ fetch_trace=(
+ APITraceFetcher(
+ project_id=project_id,
+ tracing_service=tracing_service,
+ )
+ if tracing_service is not None
+ else None
+ ),
+ is_split=effective_is_split(
+ is_split=bool(run.flags and run.flags.is_split),
+ has_application_steps=bool(invocation_steps),
+ has_evaluator_steps=bool(annotation_steps),
+ ),
+ log_pending=log_pending,
+ refresh_metrics_without_auto_results=refresh_metrics_without_auto_results,
+ batch_size=run.data.concurrency.batch_size if run.data.concurrency else None,
+ max_retries=run.data.concurrency.max_retries if run.data.concurrency else None,
+ retry_delay=run.data.concurrency.retry_delay if run.data.concurrency else None,
+ initial_context_by_repeat=initial_context_by_repeat,
+ plan_cell_filter=plan_cell_filter,
+ )
+
+
+async def _finalize_run_after_slice(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run: Any,
+ processed: List[Any],
+ run_status_override: Optional[Any] = None,
+ evaluations_service: Any,
+ finalize_run_status: bool = True,
+) -> None:
+ """Shared "done" for `process`: finalize the RUN from the touched set.
+
+ Per-scenario status is no longer written here — the engine
+ (`process_sources`) owns that via the injected `edit_scenario` adapter, the
+ same path for ingest, re-execute, and the SDK. This function is the
+ remaining RUN-level post-process every slice owns:
+
+ 1. computes the run status from the touched set (or uses an override, e.g.
+ FAILURE when the slice itself raised);
+ 2. if `finalize_run_status`, floors the run status across concurrent slices
+ off the CURRENT run (not the caller's stale snapshot) and flips
+ `is_active` off on a terminal status.
+
+ `finalize_run_status=False` is the live-query loop, which never finalizes —
+ it keeps ticking and leaves run status alone.
+ """
+ # 1. run status from the touched set (or the override). The rollup itself is
+ # the shared engine verdict (same as the SDK); only the override + the
+ # cross-slice floor below are API-specific.
+ if run_status_override is not None:
+ run_status = run_status_override
+ else:
+ run_status = compute_run_status(processed)
+
+ if not finalize_run_status:
+ return
+
+ # 2. floor + is_active, off the CURRENT run (concurrent-slice safe).
+ # Concurrent slices each hold a stale snapshot of `run`; finalize both floors
+ # the status and flips `is_active`, so it must read the CURRENT run or a
+ # late-finishing slice clobbers another's status/flags (e.g. resurrecting
+ # is_active=True).
+ current_run = await evaluations_service.fetch_run(
+ project_id=project_id,
+ run_id=run.id,
+ )
+
+ if (
+ run.flags
+ and (
+ run.flags.has_traces
+ or run.flags.has_testcases
+ or run.flags.has_queries
+ or run.flags.has_testsets
+ )
+ and run_status != EvaluationStatus.FAILURE
+ ):
+ # Only terminal "bad" statuses floor across slices: if an earlier slice
+ # already marked the run FAILURE/ERRORS, a later SUCCESS-only slice must
+ # not downgrade it. RUNNING/PENDING rank BELOW SUCCESS so a freshly
+ # computed terminal status (incl. SUCCESS) always replaces a stale
+ # RUNNING — otherwise a run pins at RUNNING forever.
+ severity = {
+ EvaluationStatus.FAILURE: 4,
+ EvaluationStatus.ERRORS: 3,
+ EvaluationStatus.SUCCESS: 2,
+ EvaluationStatus.RUNNING: 1,
+ EvaluationStatus.PENDING: 0,
+ }
+ if current_run and current_run.status:
+ stored_severity = severity.get(current_run.status, 0)
+ if stored_severity > severity.get(run_status, 0):
+ run_status = current_run.status
+
+ # When the run reaches a terminal status, it is no longer active. A
+ # non-terminal status (RUNNING/PENDING) leaves it active so further slices
+ # can continue. Base the flags on the freshly-fetched run so a concurrent
+ # slice's flag updates are not lost, and only flip the one field this owns.
+ final_flags = (current_run.flags if current_run else None) or run.flags
+ if final_flags is not None and run_status in (
+ EvaluationStatus.SUCCESS,
+ EvaluationStatus.ERRORS,
+ EvaluationStatus.FAILURE,
+ ):
+ final_flags = final_flags.model_copy(update={"is_active": False})
+
+ try:
+ await evaluations_service.edit_run(
+ project_id=project_id,
+ user_id=user_id,
+ run=EvaluationRunEdit(
+ id=run.id,
+ name=run.name,
+ description=run.description,
+ tags=run.tags,
+ meta=run.meta,
+ status=run_status,
+ flags=final_flags,
+ data=run.data,
+ ),
+ )
+ except EvaluationClosedConflict:
+ # The run was closed (locked) mid-flight. Closing is a lock, not a
+ # failure — leave its status as-is rather than erroring finalization.
+ log.info(
+ "[WORKER] finalize skipped: run closed mid-flight",
+ run_id=str(run.id),
+ run_status=str(run_status),
+ )
+
+
+class APISliceProcessor:
+ """API `SliceProcessor`: re-execute the runnable cells in a slice.
+
+ Unlike `process_evaluation_source_slice` (an INGEST loop that creates a new
+ scenario per source item), this re-executes EXISTING scenarios addressed by
+ a `TensorSlice` — the retry / fill-missing / re-run-one-evaluator axis. For
+ each scenario in the slice it: rebuilds the source binding from the stored
+ input cells, re-hydrates trace/testcase context, plans only the requested
+ `step_keys`/`repeat_idxs`, runs the cache-aware runners (so hashed traces are
+ reused), populates the result cells, and refreshes metrics. Modified steps
+ re-run because the plan is rebuilt from the run's CURRENT graph and the
+ fresh evaluator revisions resolved here.
+ """
+
+ def __init__(
+ self,
+ *,
+ evaluations_service: EvaluationsService,
+ tracing_service: Optional[TracingService] = None,
+ testcases_service: Optional[TestcasesService] = None,
+ workflows_service: Optional[WorkflowsService] = None,
+ applications_service: Optional[ApplicationsService] = None,
+ ):
+ self.evaluations_service = evaluations_service
+ self.tracing_service = tracing_service
+ self.testcases_service = testcases_service
+ self.workflows_service = workflows_service
+ self.applications_service = applications_service
+
+ async def process(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ tensor_slice,
+ seed_bindings: Optional[Dict[UUID, ScenarioBinding]] = None,
+ refresh_metrics_without_auto_results: bool = True,
+ finalize_run_status: bool = True,
+ ) -> ProcessSummary:
+ """Re-execute scenarios in the slice.
+
+ When `seed_bindings` is supplied (the mint→populate→re-execute ingest
+ flows: run/slice), each addressed scenario's source is taken from its
+ binding's ALREADY-HYDRATED `ResolvedSourceItem` — no re-read of input
+ cells, no per-id trace/testcase re-fetch. Bindings also carry the
+ per-scenario `timestamp`/`interval` (live-query temporal coordinates).
+
+ When `seed_bindings` is None (the tensor-retry flow), the source is
+ recovered from the scenario's stored input cells as before.
+ """
+ seed_bindings = seed_bindings or {}
+ run_id = tensor_slice.run_id
+ run = await self.evaluations_service.fetch_run(
+ project_id=project_id,
+ run_id=run_id,
+ )
+ if not run or not run.data or not run.data.steps:
+ return ProcessSummary()
+
+ steps = run.data.steps
+ input_steps = [step for step in steps if step.type == "input"]
+ invocation_steps = [step for step in steps if step.type == "invocation"]
+ annotation_steps = [step for step in steps if step.type == "annotation"]
+
+ # Probe the existing cells in the slice scope, grouped by scenario.
+ existing = await self.evaluations_service.query_results(
+ project_id=project_id,
+ result=EvaluationResultQuery(
+ run_id=run_id,
+ scenario_ids=tensor_slice.scenario_ids,
+ step_keys=tensor_slice.step_keys,
+ repeat_idxs=tensor_slice.repeat_idxs,
+ ),
+ )
+ # Inputs are always needed to rebuild the source binding even when the
+ # slice's step_keys exclude them, so probe inputs separately per scenario.
+ scenario_ids = (
+ sorted(set(tensor_slice.scenario_ids or []), key=str)
+ if tensor_slice.scenario_ids is not None
+ else sorted(
+ {cell.scenario_id for cell in existing if cell.scenario_id},
+ key=str,
+ )
+ )
+ if not scenario_ids:
+ return ProcessSummary()
+
+ runners, revisions = await _resolve_runners_and_revisions(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ invocation_steps=invocation_steps,
+ annotation_steps=annotation_steps,
+ tracing_service=self.tracing_service,
+ workflows_service=self.workflows_service,
+ applications_service=self.applications_service,
+ )
+
+ requested_steps = set(tensor_slice.step_keys or [])
+ requested_repeats = set(tensor_slice.repeat_idxs or [])
+ force_rerun = tensor_slice.process_mode == "force"
+
+ sdk_steps_all = [
+ SdkEvaluationStep(
+ key=step.key,
+ type=step.type,
+ origin=step.origin,
+ references=step.references or {},
+ inputs=[step_input.key for step_input in (step.inputs or [])],
+ )
+ for step in steps
+ ]
+
+ summary = ProcessSummary()
+
+ effective_is_split_value = effective_is_split(
+ is_split=bool(run.flags and run.flags.is_split),
+ has_application_steps=bool(invocation_steps),
+ has_evaluator_steps=bool(annotation_steps),
+ )
+
+ # --- Recovery pass (per scenario): resolve each scenario's source,
+ # compute its addressed/target cells and reuse, and recover its upstream
+ # context. NO execution here — we collect, then run ONE batched slice so
+ # the engine's gather+semaphore give cross-scenario concurrency (matching
+ # the SDK and the design's process_slice(all scenarios)).
+ scenarios_in_order: List[Any] = []
+ batch_source_items: List[SdkResolvedSourceItem] = []
+ target_keys_by_scenario: Dict[UUID, set] = {}
+ context_by_scenario: Dict[UUID, Dict[int, Any]] = {}
+ # timestamp/interval are constant across a single process call (seeded:
+ # one value from _mint_and_bind; recovered: None), so capture once.
+ slice_timestamp: Optional[Any] = None
+ slice_interval: Optional[int] = None
+
+ for scenario_id in scenario_ids:
+ binding = seed_bindings.get(scenario_id)
+
+ if binding is not None:
+ # Seeded (ingest) path: the source is already hydrated in memory,
+ # so skip the input-cell read and per-id re-fetch. Fresh scenarios
+ # have no prior cells, hence no reuse to account for.
+ existing_cell_keys: set = set()
+ sdk_source_item = _to_sdk_source_item(binding.source)
+ scenario_context = _seed_context_from_source(
+ source_item=binding.source,
+ repeats=run.data.repeats,
+ )
+ slice_timestamp = binding.timestamp
+ slice_interval = binding.interval
+ else:
+ input_cells = await self.evaluations_service.query_results(
+ project_id=project_id,
+ result=EvaluationResultQuery(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ ),
+ )
+ cells_by_step: Dict[str, List[EvaluationResult]] = {}
+ for cell in input_cells:
+ cells_by_step.setdefault(cell.step_key, []).append(cell)
+ existing_cell_keys = {_cell_key(cell) for cell in input_cells}
+
+ sdk_source_item = await _resolve_source_from_input_cells(
+ project_id=project_id,
+ input_steps=input_steps,
+ cells_by_step=cells_by_step,
+ tracing_service=self.tracing_service,
+ testcases_service=self.testcases_service,
+ )
+ if sdk_source_item is None:
+ # No populated input for this scenario (no trace_id/testcase_id
+ # to reconstruct from): there is nothing to run, so the line is
+ # skipped — not a failure (which means execution errored).
+ summary.skipped += 1
+ continue
+ scenario_context = await _seed_context_by_repeat(
+ project_id=project_id,
+ scenario_cells=input_cells,
+ invocation_step_keys={step.key for step in invocation_steps},
+ tracing_service=self.tracing_service,
+ )
+ preview_plan = EvaluationPlanner().plan(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ source=sdk_source_item,
+ steps=sdk_steps_all,
+ repeats=run.data.repeats,
+ is_split=effective_is_split_value,
+ )
+ addressed_cells = [
+ cell
+ for cell in preview_plan.cells
+ if _cell_is_addressed(
+ cell=cell,
+ requested_steps=requested_steps,
+ requested_repeats=requested_repeats,
+ )
+ ]
+ if not force_rerun:
+ summary.reused += sum(
+ 1
+ for cell in addressed_cells
+ if _cell_key(cell) in existing_cell_keys
+ )
+ target_keys = {
+ _cell_key(cell)
+ for cell in addressed_cells
+ if force_rerun or _cell_key(cell) not in existing_cell_keys
+ }
+ if not target_keys:
+ continue
+
+ scenarios_in_order.append(SimpleNamespace(id=scenario_id))
+ batch_source_items.append(sdk_source_item)
+ target_keys_by_scenario[scenario_id] = target_keys
+ context_by_scenario[scenario_id] = scenario_context
+ summary.created += len(target_keys)
+
+ # --- Single batched execution over all recovered scenarios. The engine
+ # creates scenarios via the ordered cursor, filters cells per-scenario,
+ # and resolves each scenario's recovered context lazily via the callable.
+ all_processed: List[Any] = []
+ if batch_source_items:
+
+ async def _scenario_context(
+ scenario_id: UUID,
+ _ctx: Dict[UUID, Dict[int, Any]] = context_by_scenario,
+ ) -> Dict[int, Any]:
+ return _ctx.get(scenario_id, {})
+
+ def _plan_cell_filter(
+ cell: Any,
+ _keys: Dict[UUID, set] = target_keys_by_scenario,
+ ) -> bool:
+ return _cell_key(cell) in _keys.get(cell.scenario_id, set())
+
+ all_processed = await _run_sdk_source_slice(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ evaluations_service=self.evaluations_service,
+ sdk_source_items=batch_source_items,
+ sdk_steps=sdk_steps_all,
+ invocation_steps=invocation_steps,
+ annotation_steps=annotation_steps,
+ runners=runners,
+ revisions=revisions,
+ # reuse existing scenarios in order; do NOT mint new ones.
+ create_scenario=_OrderedScenarios(scenarios_in_order),
+ # process is a tensor-write op: it refreshes the touched scope's
+ # metrics incrementally per-scenario (and rolls up), the same as
+ # ingest — re-execute no longer opts out with a no-op.
+ refresh_metrics=APIMetricsRefresher(
+ project_id=project_id,
+ user_id=user_id,
+ evaluations_service=self.evaluations_service,
+ ),
+ log_pending=True,
+ refresh_metrics_without_auto_results=refresh_metrics_without_auto_results,
+ # Seeded scenarios carry the run's temporal coordinates (live
+ # query); recovered scenarios already have them on their cells.
+ # Constant across the slice, so passed once.
+ timestamp=slice_timestamp,
+ interval=slice_interval,
+ tracing_service=self.tracing_service,
+ initial_context_by_repeat=_scenario_context,
+ plan_cell_filter=_plan_cell_filter,
+ )
+
+ for item in all_processed:
+ if item.has_pending:
+ summary.pending += 1
+ if item.has_errors:
+ summary.failed += 1
+
+ # Shared "done": write per-scenario status + finalize the run from the
+ # touched set — identical to ingest (a re-run IS a run-state change).
+ if all_processed:
+ await _finalize_run_after_slice(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ processed=all_processed,
+ evaluations_service=self.evaluations_service,
+ finalize_run_status=finalize_run_status,
+ )
+
+ log.info(
+ "[SLICE] re-execute complete",
+ run_id=str(run_id),
+ scenarios=len(scenario_ids),
+ created=summary.created,
+ pending=summary.pending,
+ failed=summary.failed,
+ skipped=summary.skipped,
+ requested_steps=sorted(requested_steps) or None,
+ requested_repeats=sorted(requested_repeats) or None,
+ )
+ return summary
+
+
+class _OrderedScenarios:
+ """`create_scenario` adapter handing back EXISTING scenarios in order.
+
+ The engine calls `create_scenario(run_id)` once per source item; for a
+ batched re-execute slice we hand back the recovered scenarios in the order
+ their sources were collected, instead of minting new ones — the API analogue
+ of the SDK's `_PreMintedScenarios`.
+
+ Order/concurrency: the engine runs scenarios concurrently (gather +
+ semaphore), so multiple coroutines call this. `create_scenario` is the FIRST
+ statement of the engine's `_process_one` and this body has no `await`, so
+ each task runs through the pop synchronously before any real suspension —
+ i.e. the pops happen in source-item order, pairing scenario i with source i.
+ The lock makes the index increment atomic so the ordering can never degrade
+ into a double-hand-out if scheduling shifts.
+ """
+
+ def __init__(self, scenarios: List[Any]):
+ self._scenarios = list(scenarios)
+ self._idx = 0
+ self._lock = asyncio.Lock()
+
+ async def __call__(self, run_id: UUID):
+ async with self._lock:
+ scenario = self._scenarios[self._idx]
+ self._idx += 1
+ return scenario
diff --git a/api/oss/src/core/evaluations/tasks/run.py b/api/oss/src/core/evaluations/tasks/run.py
new file mode 100644
index 0000000000..c858754a3c
--- /dev/null
+++ b/api/oss/src/core/evaluations/tasks/run.py
@@ -0,0 +1,683 @@
+from datetime import datetime, timezone
+from typing import Any, List, Literal, Optional
+from uuid import UUID
+
+from oss.src.core.applications.service import ApplicationsService
+from oss.src.core.evaluations.runtime.models import (
+ ResolvedSourceItem,
+ ScenarioBinding,
+ SliceProcessMode,
+ TensorSlice,
+)
+from oss.src.core.evaluations.runtime.tensor import TensorSliceOperations
+from oss.src.core.evaluations.runtime.topology import classify_run_topology
+from oss.src.core.evaluations.runtime.sources import (
+ resolve_direct_source_items,
+ resolve_query_source_items,
+ resolve_testset_input_specs,
+)
+from oss.src.core.evaluations.runtime.adapters import (
+ APIScenarioFactory,
+)
+from oss.src.core.evaluations.service import EvaluationsService
+from oss.src.core.evaluations.types import (
+ EvaluationRun,
+ EvaluationRunEdit,
+ EvaluationRunFlags,
+ EvaluationStatus,
+)
+from oss.src.core.evaluations.tasks.processor import APISliceProcessor
+from oss.src.core.evaluators.service import SimpleEvaluatorsService
+from oss.src.core.queries.service import QueriesService
+from oss.src.core.testcases.service import TestcasesService
+from oss.src.core.testsets.service import TestsetsService
+from oss.src.core.tracing.service import TracingService
+from oss.src.core.workflows.service import WorkflowsService
+from oss.src.utils.logging import get_module_logger
+
+log = get_module_logger(__name__)
+
+EvaluationSliceSource = Literal["traces", "testcases"]
+
+
+# =============================================================================
+# Shared skeleton — every flow is: validate run -> resolve+mint+bind (the
+# per-flow seam) -> re-execute via APISliceProcessor with the hydrated source
+# seeded in -> finalize. The only thing that differs per flow is HOW source
+# items are produced; the mint/bind/execute/finalize machinery is shared.
+# The input cell is written once, by the SDK on execute — not pre-written.
+# =============================================================================
+
+
+async def _fetch_validated_run(
+ *,
+ project_id: UUID,
+ run_id: UUID,
+ evaluations_service: EvaluationsService,
+ require: bool = False,
+) -> Optional[EvaluationRun]:
+ """Fetch a run and assert it has executable steps.
+
+ `require=False` (default) returns None on a missing/empty run so the caller
+ can warn-and-skip; `require=True` raises so a pre-execution error finalizes
+ the run to FAILURE through the caller's handler.
+ """
+ run = await evaluations_service.fetch_run(
+ project_id=project_id,
+ run_id=run_id,
+ )
+ if not run or not run.data or not run.data.steps:
+ if require:
+ raise ValueError(f"Evaluation run with id {run_id} not found or empty!")
+ return None
+ return run
+
+
+def _input_step_keys(run: EvaluationRun) -> List[str]:
+ return [step.key for step in run.data.steps if step.type == "input"]
+
+
+async def _mint_and_bind(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run: EvaluationRun,
+ source_items: List[ResolvedSourceItem],
+ default_step_key: str,
+ timestamp: Optional[datetime],
+ interval: Optional[int],
+ evaluations_service: EvaluationsService,
+) -> List[ScenarioBinding]:
+ """Bulk-mint one scenario per source item and bind its hydrated source.
+
+ Shared by every ingest flow. The source item is ALREADY hydrated (the
+ resolver fetched the trace/testcase once), so the returned bindings carry it
+ straight into the executor — no re-read, no per-id re-fetch downstream.
+
+ The input cell is NOT written here. The SDK slice loop logs the input step
+ first (before any runnable cell), writing the same `trace_id`/`testcase_id`
+ and temporal coordinates via `APIResultSetter`. Pre-writing it here would
+ just be overwritten by that log — a redundant DB round-trip per scenario.
+ The durable input cell a later tensor retry recovers from is the SDK's.
+ """
+ if not source_items:
+ return []
+
+ factory = APIScenarioFactory(
+ project_id=project_id,
+ user_id=user_id,
+ evaluations_service=evaluations_service,
+ )
+ scenarios = await factory.bulk_create(
+ run.id,
+ count=len(source_items),
+ timestamp=timestamp,
+ interval=interval,
+ )
+
+ bindings: List[ScenarioBinding] = []
+ for scenario, source_item in zip(scenarios, source_items):
+ step_key = source_item.step_key or default_step_key
+ bound_source = source_item.model_copy(update={"step_key": step_key})
+ bindings.append(
+ ScenarioBinding(
+ scenario_id=scenario.id,
+ source=bound_source,
+ timestamp=timestamp,
+ interval=interval,
+ )
+ )
+ return bindings
+
+
+async def _execute_bindings(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run_id: UUID,
+ bindings: List[ScenarioBinding],
+ tracing_service: Optional[TracingService],
+ testcases_service: Optional[TestcasesService],
+ workflows_service: Optional[WorkflowsService],
+ applications_service: Optional[ApplicationsService],
+ evaluations_service: EvaluationsService,
+ refresh_metrics_without_auto_results: bool = True,
+ finalize_run_status: bool = True,
+) -> None:
+ """Re-execute freshly-minted scenarios with their hydrated source seeded in.
+
+ `process_mode="force"` because the scenarios are new: their runnable cells
+ must be filled even though no result exists yet. `APISliceProcessor` owns
+ per-scenario status writes and run finalization for terminal status.
+
+ `refresh_metrics_without_auto_results=False` (the query flow) skips the
+ metric refresh for scenarios that produced no auto results — e.g. a live
+ run whose only annotation step is human — matching the legacy query loop.
+
+ `finalize_run_status=False` (the LIVE query flow) leaves the run RUNNING and
+ active so the scheduler keeps polling; batch/testset runs finalize.
+ """
+ slice_processor = APISliceProcessor(
+ evaluations_service=evaluations_service,
+ tracing_service=tracing_service,
+ testcases_service=testcases_service,
+ workflows_service=workflows_service,
+ applications_service=applications_service,
+ )
+ await slice_processor.process(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=TensorSlice(
+ run_id=run_id,
+ scenario_ids=[binding.scenario_id for binding in bindings],
+ process_mode="force",
+ ),
+ seed_bindings={binding.scenario_id: binding for binding in bindings},
+ refresh_metrics_without_auto_results=refresh_metrics_without_auto_results,
+ finalize_run_status=finalize_run_status,
+ )
+
+
+async def _finalize_run_terminal(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run_id: UUID,
+ status: EvaluationStatus,
+ evaluations_service: EvaluationsService,
+) -> None:
+ """Flip a run to a terminal status + inactive, tolerating a vanished run.
+
+ Used for the two cases the slice processor's own finalize never sees: an
+ empty result set (nothing to execute) and a pre-execution error. Re-fetches
+ the run so it does not clobber concurrent flag updates.
+ """
+ try:
+ current = await evaluations_service.fetch_run(
+ project_id=project_id,
+ run_id=run_id,
+ )
+ if not current:
+ return
+ flags = current.flags.model_copy() if current.flags else EvaluationRunFlags()
+ flags.is_active = False
+ await evaluations_service.edit_run(
+ project_id=project_id,
+ user_id=user_id,
+ run=EvaluationRunEdit(
+ id=run_id,
+ name=current.name,
+ description=current.description,
+ tags=current.tags,
+ meta=current.meta,
+ status=status,
+ flags=flags,
+ data=current.data,
+ ),
+ )
+ except Exception as finalize_error: # pylint: disable=broad-exception-caught
+ # Best-effort: a run closed mid-flight or vanished must not mask the
+ # original outcome.
+ log.error(
+ "[EVAL] failed to finalize run",
+ run_id=str(run_id),
+ status=str(status),
+ error=str(finalize_error),
+ )
+
+
+# =============================================================================
+# Entry point 1: run_from_source — orchestrate a run by topology.
+# =============================================================================
+
+
+async def run_from_source(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run_id: UUID,
+ newest: Optional[datetime] = None,
+ oldest: Optional[datetime] = None,
+ tracing_service: TracingService,
+ testsets_service: TestsetsService,
+ queries_service: QueriesService,
+ workflows_service: WorkflowsService,
+ applications_service: ApplicationsService,
+ evaluations_service: EvaluationsService,
+ simple_evaluators_service: SimpleEvaluatorsService,
+) -> bool:
+ run = await _fetch_validated_run(
+ project_id=project_id,
+ run_id=run_id,
+ evaluations_service=evaluations_service,
+ )
+ if not run:
+ log.warning("[EVAL] [process-run] run not found or empty", run_id=run_id)
+ return False
+
+ topology = classify_run_topology(run)
+
+ if topology.dispatch in ("live_query", "batch_query"):
+ use_windowing = topology.dispatch == "batch_query"
+ await _run_query_source(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ # Batch query runs window from the query revision's own bounds, not
+ # the scheduler tick — so the tick's newest/oldest are dropped. Live
+ # runs carry the tick's range for temporal bucketing.
+ newest=None if use_windowing else newest,
+ oldest=None if use_windowing else oldest,
+ use_windowing=use_windowing,
+ tracing_service=tracing_service,
+ queries_service=queries_service,
+ workflows_service=workflows_service,
+ applications_service=applications_service,
+ evaluations_service=evaluations_service,
+ )
+ return True
+
+ if topology.dispatch in ("batch_testset", "batch_invocation"):
+ await _run_testset_source(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ tracing_service=tracing_service,
+ testsets_service=testsets_service,
+ testcases_service=None,
+ workflows_service=workflows_service,
+ applications_service=applications_service,
+ evaluations_service=evaluations_service,
+ )
+ return True
+
+ if topology.dispatch in ("queue_traces", "queue_testcases"):
+ # An open queue: direct trace/testcase batches arrive later via
+ # run_from_batch and each finalizes its own scenarios. There
+ # is nothing to execute at run-start; leave the run RUNNING and active.
+ log.info(
+ "[EVAL] [process-run] queue run started; awaiting batches",
+ run_id=str(run.id),
+ )
+ return True
+
+ log.warning(
+ "[EVAL] [process-run] unsupported run topology",
+ run_id=run_id,
+ topology=topology.label,
+ topology_status=topology.status,
+ reason=topology.reason,
+ )
+ return False
+
+
+async def _run_testset_source(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run: EvaluationRun,
+ tracing_service: TracingService,
+ testsets_service: TestsetsService,
+ testcases_service: Optional[TestcasesService],
+ workflows_service: WorkflowsService,
+ applications_service: ApplicationsService,
+ evaluations_service: EvaluationsService,
+) -> None:
+ """Resolve testset rows -> mint -> populate -> re-execute.
+
+ Batch (non-live) runs finalize: an empty testset goes straight to SUCCESS
+ so it does not hang RUNNING; a pre-execution error goes to FAILURE.
+ """
+ try:
+ input_steps = [step for step in run.data.steps if step.type == "input"]
+ input_specs = await resolve_testset_input_specs(
+ project_id=project_id,
+ input_steps=input_steps,
+ testsets_service=testsets_service,
+ )
+ source_items = [
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key=input_spec.step_key,
+ references={
+ "testcase": {"id": str(testcase.id)},
+ "testset": {"id": str(input_spec.testset.id)},
+ "testset_variant": {
+ "id": str(input_spec.testset_revision.variant_id)
+ },
+ "testset_revision": {"id": str(input_spec.testset_revision.id)},
+ },
+ testcase_id=testcase.id,
+ testcase=testcase,
+ inputs=testcase_data,
+ )
+ for input_spec in input_specs
+ for testcase, testcase_data in zip(
+ input_spec.testcases,
+ input_spec.testcases_data,
+ )
+ ]
+ except Exception as e: # pylint: disable=broad-exception-caught
+ log.error("[EVAL] [process-run] testset resolution failed", error=str(e))
+ await _finalize_run_terminal(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run.id,
+ status=EvaluationStatus.FAILURE,
+ evaluations_service=evaluations_service,
+ )
+ return
+
+ if not source_items:
+ await _finalize_run_terminal(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run.id,
+ status=EvaluationStatus.SUCCESS,
+ evaluations_service=evaluations_service,
+ )
+ return
+
+ try:
+ bindings = await _mint_and_bind(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ source_items=source_items,
+ default_step_key=(
+ _input_step_keys(run)[0] if _input_step_keys(run) else ""
+ ),
+ timestamp=None,
+ interval=None,
+ evaluations_service=evaluations_service,
+ )
+ await _execute_bindings(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run.id,
+ bindings=bindings,
+ tracing_service=tracing_service,
+ testcases_service=testcases_service,
+ workflows_service=workflows_service,
+ applications_service=applications_service,
+ evaluations_service=evaluations_service,
+ )
+ except Exception as e: # pylint: disable=broad-exception-caught
+ log.error("[EVAL] [process-run] testset execution failed", error=str(e))
+ await _finalize_run_terminal(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run.id,
+ status=EvaluationStatus.FAILURE,
+ evaluations_service=evaluations_service,
+ )
+
+
+async def _run_query_source(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run: EvaluationRun,
+ newest: Optional[datetime],
+ oldest: Optional[datetime],
+ use_windowing: bool,
+ tracing_service: TracingService,
+ queries_service: QueriesService,
+ workflows_service: WorkflowsService,
+ applications_service: ApplicationsService,
+ evaluations_service: EvaluationsService,
+) -> None:
+ """Resolve query traces -> mint -> populate -> re-execute, per query step.
+
+ timestamp/interval are TEMPORAL coordinates and only meaningful for LIVE
+ runs (use_windowing=False), which bucket metrics over time. Batch query runs
+ (use_windowing=True) have no temporal axis, so they stay None.
+
+ Batch query runs finalize (empty -> SUCCESS, error -> FAILURE). Live runs
+ intentionally never finalize — the scheduler keeps polling — so an empty
+ tick or an error leaves the run untouched.
+ """
+ timestamp: Optional[datetime] = None
+ interval: Optional[int] = None
+ if not use_windowing:
+ timestamp = oldest or datetime.now(timezone.utc)
+ if newest and oldest:
+ interval = int((newest - oldest).total_seconds() / 60)
+
+ finalize = use_windowing
+
+ try:
+ source_items_by_step = await resolve_query_source_items(
+ project_id=project_id,
+ run=run,
+ queries_service=queries_service,
+ tracing_service=tracing_service,
+ newest=newest,
+ oldest=oldest,
+ use_windowing=use_windowing,
+ )
+ total = sum(len(items) for items in source_items_by_step.values())
+
+ if total == 0:
+ # Live run: just wait for the next tick. Batch run: finalize SUCCESS
+ # so it does not hang RUNNING.
+ if finalize:
+ await _finalize_run_terminal(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run.id,
+ status=EvaluationStatus.SUCCESS,
+ evaluations_service=evaluations_service,
+ )
+ return
+
+ for step_key, source_items in source_items_by_step.items():
+ if not source_items:
+ continue
+ bindings = await _mint_and_bind(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ source_items=source_items,
+ default_step_key=step_key,
+ timestamp=timestamp,
+ interval=interval,
+ evaluations_service=evaluations_service,
+ )
+ await _execute_bindings(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run.id,
+ bindings=bindings,
+ tracing_service=tracing_service,
+ testcases_service=None,
+ workflows_service=workflows_service,
+ applications_service=applications_service,
+ evaluations_service=evaluations_service,
+ # Query runs only refresh metrics when auto results were created
+ # (a human-only live tick produces none) — matches the legacy
+ # query loop's refresh_metrics_without_auto_results=False.
+ refresh_metrics_without_auto_results=False,
+ # Live runs (finalize=False) keep ticking; batch runs finalize.
+ finalize_run_status=finalize,
+ )
+ except Exception as e: # pylint: disable=broad-exception-caught
+ log.error("[EVAL] [process-run] query flow failed", error=str(e))
+ # A pre-execution error in a batch run never reaches the slice's own
+ # finalize, so flip it to FAILURE here. Live runs keep ticking.
+ if finalize:
+ await _finalize_run_terminal(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run.id,
+ status=EvaluationStatus.FAILURE,
+ evaluations_service=evaluations_service,
+ )
+
+
+# =============================================================================
+# Entry point 2: run_from_batch — ingest a DIRECT id batch into an
+# open queue run. Same mint -> populate -> re-execute as the run flows; the only
+# difference is the source comes from explicit trace_ids / testcase_ids.
+# =============================================================================
+
+
+async def run_from_batch(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run_id: UUID,
+ source_kind: EvaluationSliceSource,
+ trace_ids: Optional[list[str]] = None,
+ testcase_ids: Optional[list[UUID]] = None,
+ input_step_key: Optional[str] = None,
+ tracing_service: TracingService,
+ testcases_service: TestcasesService,
+ workflows_service: WorkflowsService,
+ applications_service: ApplicationsService,
+ evaluations_service: EvaluationsService,
+) -> bool:
+ """Ingest a batch of DIRECT source ids (trace_ids / testcase_ids).
+
+ NOTE: not idempotent. There is no dedup on source id, so dispatching the
+ SAME batch twice mints a second set of scenarios for the same ids. The task
+ is allow_concurrency=True, so a re-dispatch with a fresh job id also bypasses
+ the singleton run lock. Acceptable today because batches are dispatched once
+ per ingest.
+ """
+ if source_kind == "traces":
+ ids: List[Any] = list(trace_ids or [])
+ elif source_kind == "testcases":
+ ids = list(testcase_ids or [])
+ else:
+ log.warning(
+ "[EVAL] [process-slice] unsupported source kind",
+ run_id=run_id,
+ source_kind=source_kind,
+ )
+ return False
+
+ if not ids:
+ return True
+
+ run = await _fetch_validated_run(
+ project_id=project_id,
+ run_id=run_id,
+ evaluations_service=evaluations_service,
+ )
+ if not run:
+ log.warning(
+ "[EVAL] [process-slice] run not found or has no steps", run_id=run_id
+ )
+ return False
+
+ input_keys = _input_step_keys(run)
+ step_key = input_step_key or (input_keys[0] if input_keys else None)
+ if step_key is None:
+ log.warning("[EVAL] [process-slice] run has no input step", run_id=run_id)
+ return False
+
+ # Resolve the direct ids into hydrated source items (one batched fetch for
+ # testcases; per-id for traces — same as before, but now only once).
+ source_items = await resolve_direct_source_items(
+ project_id=project_id,
+ trace_ids=list(trace_ids or []) if source_kind == "traces" else None,
+ testcase_ids=list(testcase_ids or []) if source_kind == "testcases" else None,
+ testcases_service=testcases_service,
+ tracing_service=tracing_service,
+ )
+ for source_item in source_items:
+ source_item.step_key = step_key
+
+ bindings = await _mint_and_bind(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ source_items=source_items,
+ default_step_key=step_key,
+ timestamp=None,
+ interval=None,
+ evaluations_service=evaluations_service,
+ )
+ await _execute_bindings(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ bindings=bindings,
+ tracing_service=tracing_service,
+ testcases_service=testcases_service,
+ workflows_service=workflows_service,
+ applications_service=applications_service,
+ evaluations_service=evaluations_service,
+ )
+ return True
+
+
+# =============================================================================
+# Entry point 3: rerun — re-execute EXISTING scenarios
+# by coordinate. No mint; the source is RECOVERED from stored input cells (no
+# seed_bindings). Owns the aggregate-metrics boundary the ingest flows don't.
+# =============================================================================
+
+
+async def rerun(
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run_id: UUID,
+ scenario_ids: Optional[List[UUID]] = None,
+ step_keys: Optional[List[str]] = None,
+ repeat_idxs: Optional[List[int]] = None,
+ process_mode: SliceProcessMode = "fill-missing",
+ tracing_service: TracingService,
+ testcases_service: TestcasesService,
+ workflows_service: WorkflowsService,
+ applications_service: ApplicationsService,
+ evaluations_service: EvaluationsService,
+) -> bool:
+ """Re-execute EXISTING scenarios addressed by a tensor coordinate slice.
+
+ The coordinate counterpart of the ingest flows: it re-runs the runnable
+ cells of scenarios that already exist (retry, fill-missing, or run a
+ newly-added step). It rebuilds each scenario's source from its stored input
+ cell rather than receiving a hydrated one — so NO seed_bindings.
+
+ `process` is results-only by design; this entry point owns the metrics
+ `refresh` boundary, invoking it after execution over the same slice scope.
+ """
+ tensor_slice = TensorSlice(
+ run_id=run_id,
+ scenario_ids=scenario_ids,
+ step_keys=step_keys,
+ repeat_idxs=repeat_idxs,
+ process_mode=process_mode,
+ )
+
+ slice_processor = APISliceProcessor(
+ evaluations_service=evaluations_service,
+ tracing_service=tracing_service,
+ testcases_service=testcases_service,
+ workflows_service=workflows_service,
+ applications_service=applications_service,
+ )
+ tensor_ops = TensorSliceOperations(
+ evaluations_service=evaluations_service,
+ slice_processor=slice_processor,
+ )
+
+ await tensor_ops.process(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=tensor_slice,
+ )
+
+ # Metrics boundary for the slice. `refresh` recomputes both the per-scenario
+ # (variational) rows and the AGGREGATE the slice affected — temporal buckets
+ # for live runs, the global row for non-live. `process` already refreshed
+ # variational inline; recomputing it is idempotent.
+ await tensor_ops.refresh(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=tensor_slice,
+ )
+ return True
diff --git a/api/oss/src/core/evaluations/types.py b/api/oss/src/core/evaluations/types.py
index b9167f13a3..c4d9ec2d2b 100644
--- a/api/oss/src/core/evaluations/types.py
+++ b/api/oss/src/core/evaluations/types.py
@@ -75,6 +75,106 @@ def __str__(self):
return _message
+class EvaluationMetricsInvalid(Exception):
+ """Raised when a metric does not match any of the three valid shapes:
+ global (scenario_id IS NULL, timestamp IS NULL),
+ variational (scenario_id set, timestamp IS NULL),
+ temporal (scenario_id IS NULL, timestamp set).
+ """
+
+ def __init__(
+ self,
+ message: str = "Metric does not match a valid global/variational/temporal shape.",
+ run_id: Optional[UUID] = None,
+ scenario_id: Optional[UUID] = None,
+ timestamp: Optional[datetime] = None,
+ ):
+ super().__init__(message)
+
+ self.message = message
+ self.run_id = run_id
+ self.scenario_id = scenario_id
+ self.timestamp = timestamp
+
+ def __str__(self):
+ _message = self.message
+
+ if self.run_id:
+ _message += f" run_id={self.run_id}"
+ if self.scenario_id:
+ _message += f" scenario_id={self.scenario_id}"
+ if self.timestamp:
+ _message += f" timestamp={self.timestamp}"
+
+ return _message
+
+
+class DefaultQueueError(Exception):
+ """Base exception for default-queue policy violations."""
+
+ def __init__(self, message: str, queue_id: Optional[UUID] = None):
+ super().__init__(message)
+ self.message = message
+ self.queue_id = queue_id
+
+ def __str__(self):
+ _message = self.message
+ if self.queue_id:
+ _message += f" queue_id={self.queue_id}"
+ return _message
+
+
+class DefaultQueueDataInvalid(DefaultQueueError):
+ """Raised when a default queue carries scenario/step/assignment/batch filters."""
+
+ def __init__(
+ self,
+ message: str = (
+ "default queues cannot filter scenarios, steps, assignments, or batches"
+ ),
+ queue_id: Optional[UUID] = None,
+ ):
+ super().__init__(message, queue_id=queue_id)
+
+
+class DefaultQueueDemotionForbidden(DefaultQueueError):
+ """Raised when an edit attempts to demote a default queue."""
+
+ def __init__(
+ self,
+ message: str = "default queues cannot be demoted",
+ queue_id: Optional[UUID] = None,
+ ):
+ super().__init__(message, queue_id=queue_id)
+
+
+class DefaultQueueDeletionForbidden(DefaultQueueError):
+ """Raised when a hard delete targets a default queue (must be archived instead)."""
+
+ def __init__(
+ self,
+ message: str = "default queues must be archived, not hard deleted",
+ queue_id: Optional[UUID] = None,
+ ):
+ super().__init__(message, queue_id=queue_id)
+
+
+class DefaultQueueArchiveForbidden(DefaultQueueError):
+ """Raised when a user-facing archive targets a default queue.
+
+ Default queues are system-managed: their archive/unarchive lifecycle is
+ driven by run reconciliation, not by direct user action. (Internally,
+ reconcile archives via `force=True`.)
+ """
+
+ def __init__(
+ self,
+ message: str = "default queues are system-managed and cannot be archived directly",
+ queue_id: Optional[UUID] = None,
+ ):
+ super().__init__(message, queue_id=queue_id)
+
+
# - EVALUATION RUN -------------------------------------------------------------
@@ -82,12 +182,14 @@ class EvaluationRunFlags(BaseModel):
is_live: bool = False # Indicates if the run has live queries
is_active: bool = False # Indicates if the run is currently active
is_closed: bool = False # Indicates if the run is modifiable
- is_queue: bool = False # Indicates this run belongs to a simple annotation queue
+ is_queue: bool = False # Indicates active default queue + active human work
is_cached: bool = False # Indicates the run should reuse traces by hash
is_split: bool = False # Indicates repeats fan out at the application step
#
- has_queries: bool = False # Indicates if the run has queries
- has_testsets: bool = False # Indicates if the run has testsets
+ has_queries: bool = False # Indicates if the run has query-backed inputs
+ has_testsets: bool = False # Indicates if the run has testset-backed inputs
+ has_traces: bool = False # Indicates if the run has direct trace inputs
+ has_testcases: bool = False # Indicates if the run has direct testcase inputs
has_evaluators: bool = False # Indicates if the run has evaluators
#
has_custom: bool = False # Indicates if the run has custom evaluators
@@ -100,13 +202,19 @@ class EvaluationRunQueryFlags(BaseModel):
is_active: Optional[bool] = None # Indicates if the run is currently active
is_closed: Optional[bool] = None # Indicates if the run is modifiable
is_queue: Optional[bool] = (
- None # Indicates this run belongs to a simple annotation queue
+ None # Indicates active default queue + active human work
)
is_cached: Optional[bool] = None # Indicates the run should reuse traces by hash
is_split: Optional[bool] = None # Indicates repeats fan out at the application step
#
- has_queries: Optional[bool] = None # Indicates if the run has queries
- has_testsets: Optional[bool] = None # Indicates if the run has testsets
+ has_queries: Optional[bool] = None # Indicates if the run has query-backed inputs
+ has_testsets: Optional[bool] = (
+ None # Indicates if the run has testset-backed inputs
+ )
+ has_traces: Optional[bool] = None # Indicates if the run has direct trace inputs
+ has_testcases: Optional[bool] = (
+ None # Indicates if the run has direct testcase inputs
+ )
has_evaluators: Optional[bool] = None # Indicates if the run has evaluators
#
has_custom: Optional[bool] = None # Indicates if the run has custom evaluators
@@ -141,9 +249,16 @@ class EvaluationRunDataMapping(BaseModel):
step: EvaluationRunDataMappingStep
+class EvaluationRunDataConcurrency(BaseModel):
+ batch_size: Optional[int] = None
+ max_retries: Optional[int] = None
+ retry_delay: Optional[float] = None
+
+
class EvaluationRunData(BaseModel):
steps: Optional[List[EvaluationRunDataStep]] = None
repeats: Optional[int] = 1
+ concurrency: Optional[EvaluationRunDataConcurrency] = None
mappings: Optional[List[EvaluationRunDataMapping]] = None
@field_validator("repeats")
@@ -387,10 +502,12 @@ class EvaluationMetricsSpecsRefresh(BaseModel):
class EvaluationQueueFlags(BaseModel):
is_sequential: bool = False
+ is_default: bool = False
class EvaluationQueueQueryFlags(BaseModel):
is_sequential: Optional[bool] = None
+ is_default: Optional[bool] = None
class EvaluationQueueData(BaseModel):
@@ -466,6 +583,7 @@ class EvaluationQueueEdit(Identifier, Header, Metadata):
class EvaluationQueueQuery(Header, Metadata):
flags: Optional[EvaluationQueueQueryFlags] = None # type: ignore
+ include_archived: Optional[bool] = None
user_id: Optional[UUID] = None
user_ids: Optional[List[UUID]] = None
@@ -500,6 +618,7 @@ class SimpleEvaluationData(BaseModel):
evaluator_steps: Optional[Target] = None
repeats: Optional[int] = None
+ concurrency: Optional[EvaluationRunDataConcurrency] = None
class SimpleEvaluation(Version, Identifier, Lifecycle, Header, Metadata):
@@ -534,6 +653,8 @@ class SimpleEvaluationQuery(Header, Metadata):
class SimpleQueueKind(str, Enum):
+ QUERIES = "queries"
+ TESTSETS = "testsets"
TRACES = "traces"
TESTCASES = "testcases"
@@ -592,8 +713,12 @@ class SimpleQueueData(BaseModel):
evaluators: Optional[Target] = None
"""
The evaluators to run on each scenario.
- Either a list of evaluator revision UUIDs (all treated as 'human'),
- or a dict mapping evaluator revision UUID -> origin ('human' | 'auto' | 'custom').
+ Either a list of evaluator revision UUIDs (origin-less; for a simple queue
+ these default to 'human'), or a dict mapping evaluator revision UUID ->
+ origin ('human' | 'auto' | 'custom'). A simple queue must resolve to at
+ least one 'human' evaluator; an explicit dict of only non-human evaluators
+ is rejected at the simple-queue endpoint (the underlying run itself has no
+ such restriction).
"""
repeats: Optional[int] = None
@@ -632,6 +757,28 @@ def validate_sources(self):
if not has_kind and not has_queries and not has_testsets:
raise ValueError("simple queue requires kind, queries, or testsets")
+ if has_queries and self.kind not in (None, SimpleQueueKind.QUERIES):
+ raise ValueError("query-backed queues must use kind='queries'")
+ if has_testsets and self.kind not in (None, SimpleQueueKind.TESTSETS):
+ raise ValueError("testset-backed queues must use kind='testsets'")
+ if self.kind == SimpleQueueKind.QUERIES and not has_queries:
+ raise ValueError("kind='queries' requires query sources")
+ if self.kind == SimpleQueueKind.TESTSETS and not has_testsets:
+ raise ValueError("kind='testsets' requires testset sources")
+
+ # Simple-queue constraint (endpoint-only, not a run-layer rule): a queue
+ # is human work, so it must resolve to at least one human evaluator.
+ # An evaluator is human when it is origin-less (defaults to human at
+ # build time) or explicitly origin="human". So:
+ # - a bare list is all origin-less -> always valid.
+ # - an explicit dict is valid only if at least one value is "human";
+ # a dict with only non-human origins (any of auto/custom, or a mix
+ # of them) has no human evaluator and is rejected.
+ # The underlying evaluation run has no such restriction.
+ if isinstance(self.evaluators, dict) and self.evaluators:
+ if not any(origin == "human" for origin in self.evaluators.values()):
+ raise ValueError("simple queues must have at least one human evaluator")
+
return self
diff --git a/api/oss/src/core/evaluations/utils.py b/api/oss/src/core/evaluations/utils.py
index 8cdc68905b..f27efe659b 100644
--- a/api/oss/src/core/evaluations/utils.py
+++ b/api/oss/src/core/evaluations/utils.py
@@ -370,11 +370,12 @@ def effective_is_split(
*,
is_split: bool,
is_live: bool = False,
- is_queue: bool = False,
+ has_traces: bool = False,
+ has_testcases: bool = False,
has_application_steps: bool = False,
has_evaluator_steps: bool = False,
) -> bool:
- if is_live or is_queue:
+ if is_live or has_traces or has_testcases:
return False
if not has_application_steps or not has_evaluator_steps:
return False
@@ -412,16 +413,6 @@ async def fetch_trace(
project_id=project_id,
trace_id=trace_id,
)
- # spans = getattr(trace, "spans", None) if trace else None
- # log.debug(
- # "[EVAL] [trace] fetch attempt",
- # trace_id=trace_id,
- # attempt=attempt + 1,
- # found=bool(trace),
- # spans_type=type(spans).__name__ if spans is not None else None,
- # span_count=len(spans) if isinstance(spans, dict) else None,
- # usable_root_span=_has_usable_root_span(trace) if trace else False,
- # )
if trace and _has_usable_root_span(trace):
if isinstance(trace, Trace):
return trace
diff --git a/api/oss/src/core/events/streaming.py b/api/oss/src/core/events/streaming.py
index c8d6f2b0ba..90e19726b4 100644
--- a/api/oss/src/core/events/streaming.py
+++ b/api/oss/src/core/events/streaming.py
@@ -4,7 +4,6 @@
from orjson import dumps, loads
from pydantic import BaseModel
-from redis.asyncio import Redis
try:
from asyncpg.pgproto.pgproto import UUID as AsyncpgUUID
@@ -12,7 +11,7 @@
AsyncpgUUID = None
from oss.src.core.events.dtos import Event
-from oss.src.utils.env import env
+from oss.src.dbs.redis.shared.engine import get_streams_engine
from oss.src.utils.logging import get_module_logger
log = get_module_logger(__name__)
@@ -24,16 +23,9 @@ def _orjson_default(obj):
raise TypeError(f"Type is not JSON serializable: {type(obj)}")
-_redis: Optional[Redis] = None
-
-
-def _get_redis() -> Optional[Redis]:
- global _redis
-
- if _redis is None and env.redis.uri_durable:
- _redis = Redis.from_url(env.redis.uri_durable, decode_responses=False)
-
- return _redis
+def _get_redis():
+ engine = get_streams_engine()
+ return engine.get_redis() if engine else None
class EventMessage(BaseModel):
diff --git a/api/oss/src/core/events/utils.py b/api/oss/src/core/events/utils.py
index 5e3c3682cb..8770de46cf 100644
--- a/api/oss/src/core/events/utils.py
+++ b/api/oss/src/core/events/utils.py
@@ -273,11 +273,11 @@ async def _check_l1_events_quota(
try:
# Deferred import: EE-only symbols stay out of the OSS import graph.
- from ee.src.utils.entitlements import ( # noqa: PLC0415
+ from ee.src.core.access.entitlements.service import ( # noqa: PLC0415
check_entitlements,
scope_from,
)
- from ee.src.core.entitlements.types import Counter # noqa: PLC0415
+ from ee.src.core.access.entitlements.types import Counter # noqa: PLC0415
allowed, _, _ = await check_entitlements(
key=Counter.EVENTS_INGESTED,
diff --git a/api/oss/src/core/secrets/services.py b/api/oss/src/core/secrets/services.py
index f986ed911a..ebd527ecb8 100644
--- a/api/oss/src/core/secrets/services.py
+++ b/api/oss/src/core/secrets/services.py
@@ -64,6 +64,7 @@ async def update_secret(
update_secret_dto: UpdateSecretDTO,
project_id: UUID | None = None,
organization_id: UUID | None = None,
+ user_id: UUID | None = None,
):
with set_data_encryption_key(
data_encryption_key=self._data_encryption_key,
@@ -73,6 +74,7 @@ async def update_secret(
update_secret_dto=update_secret_dto,
project_id=project_id,
organization_id=organization_id,
+ user_id=user_id,
)
return secret_dto
diff --git a/api/oss/src/core/tracing/streaming.py b/api/oss/src/core/tracing/streaming.py
index eb41d27aa7..81a145aa77 100644
--- a/api/oss/src/core/tracing/streaming.py
+++ b/api/oss/src/core/tracing/streaming.py
@@ -1,29 +1,20 @@
import zlib
-from typing import List, Optional
+from typing import List
from uuid import UUID
from orjson import dumps, loads
from pydantic import BaseModel
-from redis.asyncio import Redis
-from oss.src.utils.env import env
+from oss.src.dbs.redis.shared.engine import get_streams_engine
from oss.src.utils.logging import get_module_logger
from oss.src.core.tracing.dtos import OTelFlatSpan
log = get_module_logger(__name__)
-_redis: Optional[Redis] = None
-def _get_redis() -> Redis:
- global _redis
-
- if _redis is None:
- if not env.redis.uri_durable:
- raise RuntimeError("REDIS_URI_DURABLE is required for tracing streams.")
- _redis = Redis.from_url(env.redis.uri_durable, decode_responses=False)
-
- return _redis
+def _get_redis():
+ return get_streams_engine().get_redis()
class SpanMessage(BaseModel):
diff --git a/api/oss/src/core/tracing/utils/hashing.py b/api/oss/src/core/tracing/utils/hashing.py
index c54fd8fe4c..a7cde121ca 100644
--- a/api/oss/src/core/tracing/utils/hashing.py
+++ b/api/oss/src/core/tracing/utils/hashing.py
@@ -1,6 +1,6 @@
from hashlib import blake2b
from json import dumps
-from typing import Dict, Optional, Tuple, Union
+from typing import Dict, Optional, Tuple
from uuid import UUID
from oss.src.core.tracing.dtos import OTelSpan
@@ -12,15 +12,11 @@
}
-def _trace_id_from_uuid(trace_id: Union[UUID, str]) -> str:
- if isinstance(trace_id, UUID):
- return trace_id.hex
+def _trace_id_from_uuid(trace_id: str) -> str:
return UUID(trace_id).hex
-def _span_id_from_uuid(span_id: Union[UUID, str]) -> str:
- if isinstance(span_id, UUID):
- return span_id.hex[16:]
+def _span_id_from_uuid(span_id: str) -> str:
return UUID(span_id).hex[16:]
diff --git a/api/oss/src/core/tracing/utils/parsing.py b/api/oss/src/core/tracing/utils/parsing.py
index bc00dc7ea2..759599012b 100644
--- a/api/oss/src/core/tracing/utils/parsing.py
+++ b/api/oss/src/core/tracing/utils/parsing.py
@@ -132,8 +132,7 @@ def parse_trace_id_to_uuid(
clean_trace_id = str(UUID(trace_id))
except Exception as e:
log.error(
- "trace_id must be a UUID, got %s [%s]",
- type(trace_id),
+ "trace_id must be a UUID-style or hex string, got %r",
trace_id,
)
raise TypeError() from e
@@ -160,8 +159,7 @@ def parse_span_id_to_uuid(
clean_span_id = str(UUID(span_id))
except Exception as e:
log.error(
- "span_id must be a UUID, got %s [%s]",
- type(span_id),
+ "span_id must be a UUID-style or hex string, got %r",
span_id,
)
raise TypeError() from e
@@ -170,23 +168,15 @@ def parse_span_id_to_uuid(
def parse_trace_id_from_uuid(
- trace_id: Union[UUID, str],
+ trace_id: str,
):
- if isinstance(trace_id, UUID):
- return trace_id.hex
-
- if isinstance(trace_id, str):
- return UUID(trace_id).hex
+ return UUID(trace_id).hex
def parse_span_id_from_uuid(
- span_id: Union[UUID, str],
+ span_id: str,
):
- if isinstance(span_id, UUID):
- return span_id.hex[16:]
-
- if isinstance(span_id, str):
- return UUID(span_id).hex[16:]
+ return UUID(span_id).hex[16:]
def parse_span_kind_to_enum(
diff --git a/api/oss/src/core/workflows/service.py b/api/oss/src/core/workflows/service.py
index 4ba9e7bd91..1a754ffef2 100644
--- a/api/oss/src/core/workflows/service.py
+++ b/api/oss/src/core/workflows/service.py
@@ -95,7 +95,7 @@
ResolutionInfo,
)
-from oss.src.services.auth_service import sign_secret_token
+from oss.src.middlewares.auth import sign_secret_token
from oss.src.services.db_manager import get_project_by_id
from agenta.sdk.decorators.running import (
diff --git a/api/oss/src/dbs/postgres/blobs/dao.py b/api/oss/src/dbs/postgres/blobs/dao.py
index a14bc1bc5b..527e5e9e8a 100644
--- a/api/oss/src/dbs/postgres/blobs/dao.py
+++ b/api/oss/src/dbs/postgres/blobs/dao.py
@@ -15,7 +15,10 @@
from oss.src.dbs.postgres.shared.utils import apply_windowing
from oss.src.dbs.postgres.shared.exceptions import check_entity_creation_conflict
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
from oss.src.dbs.postgres.blobs.mappings import map_dbe_to_dto, map_dto_to_dbe
@@ -30,8 +33,12 @@ def __init__(
self,
*,
BlobDBE: Type[T],
+ engine: TransactionsEngine = None,
):
self.BlobDBE = BlobDBE # pylint: disable=invalid-name
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
# ─ blobs ──────────────────────────────────────────────────────────────────
@@ -63,7 +70,7 @@ async def add_blob(
)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.BlobDBE).filter(
self.BlobDBE.project_id == project_id, # type: ignore
)
@@ -106,7 +113,7 @@ async def fetch_blob(
#
blob_id: UUID,
) -> Optional[Blob]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.BlobDBE).filter(
self.BlobDBE.project_id == project_id, # type: ignore
)
@@ -138,7 +145,7 @@ async def edit_blob(
#
blob_edit: BlobEdit,
) -> Optional[Blob]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.BlobDBE).filter(
self.BlobDBE.project_id == project_id, # type: ignore
)
@@ -179,7 +186,7 @@ async def remove_blob(
#
blob_id: UUID,
) -> Optional[Blob]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.BlobDBE).filter(
self.BlobDBE.project_id == project_id, # type: ignore
)
@@ -239,7 +246,7 @@ async def add_blobs(
blob_ids = [blob.id for blob in blobs]
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.BlobDBE).filter(
self.BlobDBE.project_id == project_id, # type: ignore
)
@@ -295,7 +302,7 @@ async def fetch_blobs(
#
blob_ids: List[UUID],
) -> List[Blob]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.BlobDBE).filter(
self.BlobDBE.project_id == project_id, # type: ignore
)
@@ -331,7 +338,7 @@ async def edit_blobs(
#
blob_edits: List[BlobEdit],
) -> List[Blob]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.BlobDBE).filter(
self.BlobDBE.project_id == project_id, # type: ignore
)
@@ -381,7 +388,7 @@ async def remove_blobs(
#
blob_ids: List[UUID],
) -> List[Blob]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.BlobDBE).filter(
self.BlobDBE.project_id == project_id, # type: ignore
)
@@ -422,7 +429,7 @@ async def query_blobs(
#
windowing: Optional[Windowing] = None,
) -> List[Blob]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.BlobDBE).filter(
self.BlobDBE.project_id == project_id, # type: ignore
)
diff --git a/api/oss/src/dbs/postgres/evaluations/dao.py b/api/oss/src/dbs/postgres/evaluations/dao.py
index 7fd522e215..1d4a88bfba 100644
--- a/api/oss/src/dbs/postgres/evaluations/dao.py
+++ b/api/oss/src/dbs/postgres/evaluations/dao.py
@@ -15,7 +15,10 @@
from oss.src.core.shared.exceptions import EntityCreationConflict
from oss.src.core.shared.dtos import Windowing
from oss.src.core.evaluations.interfaces import EvaluationsDAOInterface
-from oss.src.core.evaluations.types import EvaluationClosedConflict
+from oss.src.core.evaluations.types import (
+ EvaluationClosedConflict,
+ EvaluationMetricsInvalid,
+)
from oss.src.core.evaluations.types import (
EvaluationStatus,
EvaluationRunFlags,
@@ -31,12 +34,10 @@
#
EvaluationResult,
EvaluationResultCreate,
- EvaluationResultEdit,
EvaluationResultQuery,
#
EvaluationMetrics,
EvaluationMetricsCreate,
- EvaluationMetricsEdit,
EvaluationMetricsQuery,
#
EvaluationQueue,
@@ -47,7 +48,10 @@
from oss.src.dbs.postgres.shared.utils import apply_windowing
from oss.src.dbs.postgres.shared.exceptions import check_entity_creation_conflict
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
from oss.src.dbs.postgres.evaluations.utils import (
create_run_references,
edit_run_references,
@@ -74,8 +78,10 @@
class EvaluationsDAO(EvaluationsDAOInterface):
- def __init__(self):
- pass
+ def __init__(self, engine: TransactionsEngine = None):
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
# - EVALUATION RUN ---------------------------------------------------------
@@ -113,7 +119,7 @@ async def create_run(
run_dbe.data = _run.data.model_dump(mode="json") # type: ignore
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add(run_dbe)
await session.commit()
@@ -172,7 +178,7 @@ async def create_runs(
run_dbes.append(run_dbe)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add_all(run_dbes)
await session.commit()
@@ -200,7 +206,7 @@ async def fetch_run(
#
run_id: UUID,
) -> Optional[EvaluationRun]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
)
@@ -233,7 +239,7 @@ async def fetch_runs(
#
run_ids: List[UUID],
) -> List[EvaluationRun]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
)
@@ -258,7 +264,7 @@ async def fetch_runs(
return _runs
- @suppress_exceptions()
+ @suppress_exceptions(exclude=[EvaluationClosedConflict])
async def edit_run(
self,
*,
@@ -267,7 +273,7 @@ async def edit_run(
#
run: EvaluationRunEdit,
) -> Optional[EvaluationRun]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
)
@@ -309,6 +315,11 @@ async def edit_run(
references=run_references,
)
+ # `status` is a VARCHAR but `edit_dbe_from_dto` dumps without `mode="json"`.
+ if run.status is not None:
+ run_dbe.status = run.status.value # type: ignore
+ flag_modified(run_dbe, "status")
+
if run.data:
run_dbe.data = run.data.model_dump(mode="json") # type: ignore
@@ -321,7 +332,7 @@ async def edit_run(
return _run
- @suppress_exceptions(default=[])
+ @suppress_exceptions(default=[], exclude=[EvaluationClosedConflict])
async def edit_runs(
self,
*,
@@ -332,7 +343,7 @@ async def edit_runs(
) -> List[EvaluationRun]:
run_ids = [run.id for run in runs]
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
)
@@ -406,7 +417,7 @@ async def delete_run(
#
run_id: UUID,
) -> Optional[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
)
@@ -438,7 +449,7 @@ async def delete_runs(
#
run_ids: List[UUID],
) -> List[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
)
@@ -478,7 +489,7 @@ async def close_run(
#
status: Optional[EvaluationStatus] = None,
) -> Optional[EvaluationRun]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
EvaluationRunDBE.id == run_id,
@@ -526,7 +537,7 @@ async def close_runs(
#
run_ids: List[UUID],
) -> List[EvaluationRun]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
EvaluationRunDBE.id.in_(run_ids),
@@ -576,7 +587,7 @@ async def open_run(
#
run_id: UUID,
) -> Optional[EvaluationRun]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
EvaluationRunDBE.id == run_id,
@@ -620,7 +631,7 @@ async def open_runs(
#
run_ids: List[UUID],
) -> List[EvaluationRun]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
EvaluationRunDBE.id.in_(run_ids),
@@ -671,7 +682,7 @@ async def query_runs(
#
windowing: Optional[Windowing] = None,
) -> List[EvaluationRun]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE).filter(
EvaluationRunDBE.project_id == project_id,
)
@@ -704,11 +715,7 @@ async def query_runs(
EvaluationRunDBE.tags.contains(run.tags),
)
- # meta is JSON (not JSONB) — containment (@>) is not supported
- # if run.meta is not None:
- # stmt = stmt.filter(
- # EvaluationRunDBE.meta.contains(run.meta),
- # )
+ # meta is JSON (not JSONB) — containment (@>) filtering unsupported
if run.status is not None:
stmt = stmt.filter(
@@ -759,7 +766,7 @@ async def fetch_live_runs(
*,
windowing: Optional[Windowing] = None,
) -> List[Tuple[UUID, EvaluationRun]]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationRunDBE)
stmt = stmt.filter(
@@ -806,7 +813,7 @@ async def fetch_live_runs(
# - EVALUATION SCENARIO ----------------------------------------------------
- @suppress_exceptions(exclude=[EntityCreationConflict])
+ @suppress_exceptions(exclude=[EntityCreationConflict, EvaluationClosedConflict])
async def create_scenario(
self,
*,
@@ -841,7 +848,7 @@ async def create_scenario(
)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add(scenario_dbe)
await session.commit()
@@ -858,7 +865,9 @@ async def create_scenario(
raise
- @suppress_exceptions(default=[], exclude=[EntityCreationConflict])
+ @suppress_exceptions(
+ default=[], exclude=[EntityCreationConflict, EvaluationClosedConflict]
+ )
async def create_scenarios(
self,
*,
@@ -900,7 +909,7 @@ async def create_scenarios(
]
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add_all(scenario_dbes)
await session.commit()
@@ -928,7 +937,7 @@ async def fetch_scenario(
#
scenario_id: UUID,
) -> Optional[EvaluationScenario]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationScenarioDBE).filter(
EvaluationScenarioDBE.project_id == project_id,
)
@@ -961,7 +970,7 @@ async def fetch_scenarios(
#
scenario_ids: List[UUID],
) -> List[EvaluationScenario]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationScenarioDBE).filter(
EvaluationScenarioDBE.project_id == project_id,
)
@@ -986,7 +995,7 @@ async def fetch_scenarios(
return _scenarios
- @suppress_exceptions()
+ @suppress_exceptions(exclude=[EvaluationClosedConflict])
async def edit_scenario(
self,
*,
@@ -995,7 +1004,7 @@ async def edit_scenario(
#
scenario: EvaluationScenarioEdit,
) -> Optional[EvaluationScenario]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationScenarioDBE).filter(
EvaluationScenarioDBE.project_id == project_id,
)
@@ -1041,7 +1050,7 @@ async def edit_scenario(
return _scenario
- @suppress_exceptions(default=[])
+ @suppress_exceptions(default=[], exclude=[EvaluationClosedConflict])
async def edit_scenarios(
self,
*,
@@ -1052,7 +1061,7 @@ async def edit_scenarios(
) -> List[EvaluationScenario]:
scenario_ids = [scenario.id for scenario in scenarios]
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationScenarioDBE).filter(
EvaluationScenarioDBE.project_id == project_id,
)
@@ -1108,7 +1117,7 @@ async def edit_scenarios(
return _scenarios
- @suppress_exceptions()
+ @suppress_exceptions(exclude=[EvaluationClosedConflict])
async def delete_scenario(
self,
*,
@@ -1116,7 +1125,7 @@ async def delete_scenario(
#
scenario_id: UUID,
) -> Optional[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationScenarioDBE).filter(
EvaluationScenarioDBE.project_id == project_id,
)
@@ -1152,7 +1161,7 @@ async def delete_scenario(
return scenario_id
- @suppress_exceptions(default=[])
+ @suppress_exceptions(default=[], exclude=[EvaluationClosedConflict])
async def delete_scenarios(
self,
*,
@@ -1160,7 +1169,7 @@ async def delete_scenarios(
#
scenario_ids: List[UUID],
) -> List[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationScenarioDBE).filter(
EvaluationScenarioDBE.project_id == project_id,
)
@@ -1207,7 +1216,7 @@ async def query_scenario_ids(
#
scenario: Optional[EvaluationScenarioQuery] = None,
) -> List[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationScenarioDBE.id).filter(
EvaluationScenarioDBE.project_id == project_id,
)
@@ -1254,7 +1263,7 @@ async def query_scenarios(
#
windowing: Optional[Windowing] = None,
) -> List[EvaluationScenario]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationScenarioDBE).filter(
EvaluationScenarioDBE.project_id == project_id,
)
@@ -1305,11 +1314,7 @@ async def query_scenarios(
EvaluationScenarioDBE.tags.contains(scenario.tags),
)
- # meta is JSON (not JSONB) — containment (@>) is not supported
- # if scenario.meta is not None:
- # stmt = stmt.filter(
- # EvaluationScenarioDBE.meta.contains(scenario.meta),
- # )
+ # meta is JSON (not JSONB) — containment (@>) filtering unsupported
if scenario.status is not None:
stmt = stmt.filter(
@@ -1346,7 +1351,7 @@ async def query_scenarios(
# - EVALUATION RESULT ------------------------------------------------------
- @suppress_exceptions(exclude=[EntityCreationConflict])
+ @suppress_exceptions(exclude=[EntityCreationConflict, EvaluationClosedConflict])
async def create_result(
self,
*,
@@ -1381,7 +1386,7 @@ async def create_result(
)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add(result_dbe)
await session.commit()
@@ -1398,8 +1403,8 @@ async def create_result(
raise
- @suppress_exceptions(default=[], exclude=[EntityCreationConflict])
- async def create_results(
+ @suppress_exceptions(default=[], exclude=[EvaluationClosedConflict])
+ async def set_results(
self,
*,
project_id: UUID,
@@ -1407,6 +1412,21 @@ async def create_results(
#
results: List[EvaluationResultCreate],
) -> List[EvaluationResult]:
+ """Create or update results (upsert via the composite unique index).
+
+ Conflict target: (project_id, run_id, scenario_id, step_key, repeat_idx).
+
+ Fields updated on conflict:
+ - Lifecycle: updated_at, updated_by_id
+ - Data: hash_id, trace_id, testcase_id, error, status, interval,
+ timestamp, flags, tags, meta (user-defined)
+ - Management: version (from user data)
+
+ Fields preserved:
+ - created_at, created_by_id (original)
+ - id, project_id, run_id, scenario_id, step_key, repeat_idx (identity)
+ """
+
for result in results:
run_flags = await _get_run_flags(
project_id=project_id,
@@ -1418,41 +1438,98 @@ async def create_results(
run_id=result.run_id,
)
- async with engine.core_session() as session:
- _results = [
- EvaluationResult(
- **result.model_dump(
- mode="json",
- exclude_none=True,
- ),
- created_at=datetime.now(timezone.utc),
- created_by_id=user_id,
- )
- for result in results
- ]
+ _results = [
+ EvaluationResult(
+ **result.model_dump(
+ mode="json",
+ exclude_none=True,
+ ),
+ created_at=datetime.now(timezone.utc),
+ created_by_id=user_id,
+ )
+ for result in results
+ ]
- result_dbes = [
- create_dbe_from_dto(
- DBE=EvaluationResultDBE,
- project_id=project_id,
- dto=_result,
- )
- for _result in _results
- ]
+ result_dbes = [
+ create_dbe_from_dto(
+ DBE=EvaluationResultDBE,
+ project_id=project_id,
+ dto=_result,
+ )
+ for _result in _results
+ ]
- session.add_all(result_dbes)
+ # Batch upsert over the single composite unique index, returning the
+ # upserted rows in the same statement (no per-row follow-up SELECT).
+ async with self.engine.session() as session:
+ returned_result_dbes = []
+ # Convert DBE instances to dicts using SQLAlchemy's inspection
+ mapper = inspect(EvaluationResultDBE)
+ column_names = {col.name for col in mapper.columns}
- await session.commit()
+ now = datetime.now(timezone.utc)
+ values_list = []
+ for dbe in result_dbes:
+ values_dict = {
+ k: v
+ for k, v in dbe.__dict__.items()
+ if k in column_names and not (k == "id" and v is None)
+ }
+ # Add lifecycle values
+ values_dict["updated_at"] = now
+ values_dict["updated_by_id"] = user_id
+ values_list.append(values_dict)
- _results = [
- create_dto_from_dbe(
- DTO=EvaluationResult,
- dbe=result_dbe,
- )
- for result_dbe in result_dbes
+ # A multi-row pg_insert().values([...]) renders a single VALUES
+ # clause from a uniform column set, so every dict must share the
+ # same keys (DTOs are dumped with exclude_none, so optional columns
+ # vary per row). Backfill missing keys with None.
+ values_list = _uniform_values(values_list)
+
+ # Fields refreshed on conflict (identity/created_* are preserved).
+ conflict_update_cols = [
+ EvaluationResultDBE.updated_at,
+ EvaluationResultDBE.updated_by_id,
+ EvaluationResultDBE.hash_id,
+ EvaluationResultDBE.trace_id,
+ EvaluationResultDBE.testcase_id,
+ EvaluationResultDBE.error,
+ EvaluationResultDBE.status,
+ EvaluationResultDBE.interval,
+ EvaluationResultDBE.timestamp,
+ EvaluationResultDBE.flags,
+ EvaluationResultDBE.tags,
+ EvaluationResultDBE.meta,
+ EvaluationResultDBE.version,
]
- return _results
+ if values_list:
+ stmt = pg_insert(EvaluationResultDBE).values(values_list)
+ stmt = stmt.on_conflict_do_update(
+ index_elements=[
+ EvaluationResultDBE.project_id,
+ EvaluationResultDBE.run_id,
+ EvaluationResultDBE.scenario_id,
+ EvaluationResultDBE.step_key,
+ EvaluationResultDBE.repeat_idx,
+ ],
+ set_={
+ col.name: stmt.excluded[col.name]
+ for col in conflict_update_cols
+ },
+ )
+ res = await session.execute(stmt.returning(EvaluationResultDBE))
+ returned_result_dbes.extend(res.scalars().all())
+
+ await session.commit()
+
+ return [
+ create_dto_from_dbe(
+ DTO=EvaluationResult,
+ dbe=result_dbe,
+ )
+ for result_dbe in returned_result_dbes
+ ]
@suppress_exceptions()
async def fetch_result(
@@ -1462,7 +1539,7 @@ async def fetch_result(
#
result_id: UUID,
) -> Optional[EvaluationResult]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationResultDBE).filter(
EvaluationResultDBE.project_id == project_id,
)
@@ -1495,7 +1572,7 @@ async def fetch_results(
#
result_ids: List[UUID],
) -> List[EvaluationResult]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationResultDBE).filter(
EvaluationResultDBE.project_id == project_id,
)
@@ -1520,131 +1597,7 @@ async def fetch_results(
return _results
- @suppress_exceptions()
- async def edit_result(
- self,
- *,
- project_id: UUID,
- user_id: UUID,
- #
- result: EvaluationResultEdit,
- ) -> Optional[EvaluationResult]:
- async with engine.core_session() as session:
- stmt = select(EvaluationResultDBE).filter(
- EvaluationResultDBE.project_id == project_id,
- )
-
- stmt = stmt.filter(
- EvaluationResultDBE.id == result.id,
- )
-
- stmt = stmt.limit(1)
-
- res = await session.execute(stmt)
-
- result_dbe = res.scalars().first()
-
- if result_dbe is None:
- return None
-
- run_flags = await _get_run_flags(
- session=session,
- project_id=project_id,
- run_id=result_dbe.run_id, # type: ignore
- )
-
- if run_flags.get("is_closed", False):
- raise EvaluationClosedConflict(
- run_id=result_dbe.run_id, # type: ignore
- scenario_id=result_dbe.scenario_id, # type: ignore
- result_id=result_dbe.id, # type: ignore
- )
-
- result_dbe = edit_dbe_from_dto(
- dbe=result_dbe,
- dto=result,
- updated_at=datetime.now(timezone.utc),
- updated_by_id=user_id,
- )
-
- await session.commit()
-
- _result = create_dto_from_dbe(
- DTO=EvaluationResult,
- dbe=result_dbe,
- )
-
- return _result
-
- @suppress_exceptions(default=[])
- async def edit_results(
- self,
- *,
- project_id: UUID,
- user_id: UUID,
- #
- results: List[EvaluationResultEdit],
- ) -> List[EvaluationResult]:
- result_ids = [result.id for result in results]
-
- async with engine.core_session() as session:
- stmt = select(EvaluationResultDBE).filter(
- EvaluationResultDBE.project_id == project_id,
- )
-
- stmt = stmt.filter(
- EvaluationResultDBE.id.in_(result_ids),
- )
-
- stmt = stmt.limit(len(result_ids))
-
- res = await session.execute(stmt)
-
- result_dbes = res.scalars().all()
-
- if not result_dbes:
- return []
-
- for result_dbe in result_dbes:
- run_flags = await _get_run_flags(
- session=session,
- project_id=project_id,
- run_id=result_dbe.run_id, # type: ignore
- )
-
- if run_flags.get("is_closed", False):
- raise EvaluationClosedConflict(
- run_id=result_dbe.run_id, # type: ignore
- scenario_id=result_dbe.scenario_id, # type: ignore
- result_id=result_dbe.id, # type: ignore
- )
-
- result = next(
- (s for s in results if s.id == result_dbe.id),
- None,
- )
-
- if result is not None:
- result_dbe = edit_dbe_from_dto(
- dbe=result_dbe,
- dto=result,
- updated_at=datetime.now(timezone.utc),
- updated_by_id=user_id,
- )
-
- await session.commit()
-
- _results = [
- create_dto_from_dbe(
- DTO=EvaluationResult,
- dbe=result_dbe,
- )
- for result_dbe in result_dbes
- ]
-
- return _results
-
- @suppress_exceptions()
+ @suppress_exceptions(exclude=[EvaluationClosedConflict])
async def delete_result(
self,
*,
@@ -1652,7 +1605,7 @@ async def delete_result(
#
result_id: UUID,
) -> Optional[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationResultDBE).filter(
EvaluationResultDBE.project_id == project_id,
)
@@ -1689,7 +1642,7 @@ async def delete_result(
return result_id
- @suppress_exceptions(default=[])
+ @suppress_exceptions(default=[], exclude=[EvaluationClosedConflict])
async def delete_results(
self,
*,
@@ -1697,7 +1650,7 @@ async def delete_results(
#
result_ids: List[UUID],
) -> List[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationResultDBE).filter(
EvaluationResultDBE.project_id == project_id,
)
@@ -1745,7 +1698,7 @@ async def query_results(
#
windowing: Optional[Windowing] = None,
) -> List[EvaluationResult]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationResultDBE).filter(
EvaluationResultDBE.project_id == project_id,
)
@@ -1826,11 +1779,7 @@ async def query_results(
EvaluationResultDBE.tags.contains(result.tags),
)
- # meta is JSON (not JSONB) — containment (@>) is not supported
- # if result.meta is not None:
- # stmt = stmt.filter(
- # EvaluationResultDBE.meta.contains(result.meta),
- # )
+ # meta is JSON (not JSONB) — containment (@>) filtering unsupported
if result.status is not None:
stmt = stmt.filter(
@@ -1865,9 +1814,73 @@ async def query_results(
return results
+ @suppress_exceptions(default=[])
+ async def query_result_ids(
+ self,
+ *,
+ project_id: UUID,
+ #
+ result: Optional[EvaluationResultQuery] = None,
+ ) -> List[UUID]:
+ # ID-only counterpart of `query_results` (mirrors `query_scenario_ids`):
+ # selects just the id column so callers that delete/count by id do not
+ # hydrate full result DTOs. Supports the slice-coordinate filters that
+ # the tensor ops address by; full-row filters live on `query_results`.
+ async with self.engine.session() as session:
+ stmt = select(EvaluationResultDBE.id).filter(
+ EvaluationResultDBE.project_id == project_id,
+ )
+
+ if result is not None:
+ if result.ids is not None:
+ stmt = stmt.filter(EvaluationResultDBE.id.in_(result.ids))
+
+ if result.run_id is not None:
+ stmt = stmt.filter(EvaluationResultDBE.run_id == result.run_id)
+
+ if result.run_ids is not None:
+ stmt = stmt.filter(EvaluationResultDBE.run_id.in_(result.run_ids))
+
+ if result.scenario_id is not None:
+ stmt = stmt.filter(
+ EvaluationResultDBE.scenario_id == result.scenario_id
+ )
+
+ if result.scenario_ids is not None:
+ stmt = stmt.filter(
+ EvaluationResultDBE.scenario_id.in_(result.scenario_ids)
+ )
+
+ if result.step_key is not None:
+ stmt = stmt.filter(EvaluationResultDBE.step_key == result.step_key)
+
+ if result.step_keys is not None:
+ stmt = stmt.filter(
+ EvaluationResultDBE.step_key.in_(result.step_keys)
+ )
+
+ if result.repeat_idx is not None:
+ stmt = stmt.filter(
+ EvaluationResultDBE.repeat_idx == result.repeat_idx
+ )
+
+ if result.repeat_idxs is not None:
+ stmt = stmt.filter(
+ EvaluationResultDBE.repeat_idx.in_(result.repeat_idxs)
+ )
+
+ stmt = stmt.order_by(EvaluationResultDBE.id.asc())
+
+ res = await session.execute(stmt)
+
+ return list(res.scalars().all())
+
# - EVALUATION METRICS -----------------------------------------------------
- async def create_metrics(
+ @suppress_exceptions(
+ default=[], exclude=[EvaluationClosedConflict, EvaluationMetricsInvalid]
+ )
+ async def set_metrics(
self,
*,
project_id: UUID,
@@ -1926,12 +1939,13 @@ async def create_metrics(
]
# Classify metrics into 3 groups based on NULL pattern, then batch upsert
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
returned_metric_dbes = []
# Convert DBE instances to dicts using SQLAlchemy's inspection
mapper = inspect(EvaluationMetricsDBE)
column_names = {col.name for col in mapper.columns}
+ now = datetime.now(timezone.utc)
values_list = []
for dbe in metric_dbes:
values_dict = {
@@ -1939,10 +1953,12 @@ async def create_metrics(
for k, v in dbe.__dict__.items()
if k in column_names and not (k == "id" and v is None)
}
+ # Add lifecycle values
+ values_dict["updated_at"] = now
+ values_dict["updated_by_id"] = user_id
values_list.append(values_dict)
# Precompute which metrics belong to each of the 3 index types
- now = datetime.now(timezone.utc)
global_metrics = [] # scenario_id IS NULL AND timestamp IS NULL
variational_metrics = [] # scenario_id IS NOT NULL AND timestamp IS NULL
temporal_metrics = [] # scenario_id IS NULL AND timestamp IS NOT NULL
@@ -1951,10 +1967,6 @@ async def create_metrics(
scenario_id = value_dict.get("scenario_id")
timestamp = value_dict.get("timestamp")
- # Add lifecycle values
- value_dict["updated_at"] = now
- value_dict["updated_by_id"] = user_id
-
if scenario_id is None and timestamp is None:
global_metrics.append(value_dict)
elif timestamp is None and scenario_id is not None:
@@ -1962,27 +1974,31 @@ async def create_metrics(
elif scenario_id is None and timestamp is not None:
temporal_metrics.append(value_dict)
else:
- get_module_logger(__name__).warning(
- f"Unexpected metric pattern: scenario_id={scenario_id}, "
- f"timestamp={timestamp}. Skipping upsert."
- )
-
- # Upsert each metric type with its corresponding partial unique index
- # Shared update set for all upserts
- conflict_update_set = {
- EvaluationMetricsDBE.updated_at: EvaluationMetricsDBE.updated_at,
- EvaluationMetricsDBE.updated_by_id: EvaluationMetricsDBE.updated_by_id,
- EvaluationMetricsDBE.data: EvaluationMetricsDBE.data,
- EvaluationMetricsDBE.flags: EvaluationMetricsDBE.flags,
- EvaluationMetricsDBE.tags: EvaluationMetricsDBE.tags,
- EvaluationMetricsDBE.meta: EvaluationMetricsDBE.meta,
- EvaluationMetricsDBE.status: EvaluationMetricsDBE.status,
- EvaluationMetricsDBE.version: EvaluationMetricsDBE.version,
- }
+ # scenario_id AND timestamp both set matches no unique index;
+ # surface it rather than silently dropping the metric.
+ raise EvaluationMetricsInvalid(
+ run_id=value_dict.get("run_id"),
+ scenario_id=scenario_id,
+ timestamp=timestamp,
+ )
+
+ # Fields refreshed on conflict (identity/created_* are preserved).
+ conflict_update_cols = [
+ EvaluationMetricsDBE.updated_at,
+ EvaluationMetricsDBE.updated_by_id,
+ EvaluationMetricsDBE.data,
+ EvaluationMetricsDBE.flags,
+ EvaluationMetricsDBE.tags,
+ EvaluationMetricsDBE.meta,
+ EvaluationMetricsDBE.status,
+ EvaluationMetricsDBE.version,
+ ]
# Global: (project_id, run_id) WHERE scenario_id IS NULL AND timestamp IS NULL
if global_metrics:
- stmt = pg_insert(EvaluationMetricsDBE).values(global_metrics)
+ stmt = pg_insert(EvaluationMetricsDBE).values(
+ _uniform_values(global_metrics)
+ )
stmt = stmt.on_conflict_do_update(
index_elements=[
EvaluationMetricsDBE.project_id,
@@ -1992,16 +2008,19 @@ async def create_metrics(
EvaluationMetricsDBE.scenario_id.is_(None),
EvaluationMetricsDBE.timestamp.is_(None),
),
- set_=dict(
- (k, stmt.excluded[k.name]) for k in conflict_update_set.keys()
- ),
+ set_={
+ col.name: stmt.excluded[col.name]
+ for col in conflict_update_cols
+ },
)
res = await session.execute(stmt.returning(EvaluationMetricsDBE))
returned_metric_dbes.extend(res.scalars().all())
# Variational: (project_id, run_id, scenario_id) WHERE timestamp IS NULL AND scenario_id IS NOT NULL
if variational_metrics:
- stmt = pg_insert(EvaluationMetricsDBE).values(variational_metrics)
+ stmt = pg_insert(EvaluationMetricsDBE).values(
+ _uniform_values(variational_metrics)
+ )
stmt = stmt.on_conflict_do_update(
index_elements=[
EvaluationMetricsDBE.project_id,
@@ -2012,16 +2031,19 @@ async def create_metrics(
EvaluationMetricsDBE.scenario_id.isnot(None),
EvaluationMetricsDBE.timestamp.is_(None),
),
- set_=dict(
- (k, stmt.excluded[k.name]) for k in conflict_update_set.keys()
- ),
+ set_={
+ col.name: stmt.excluded[col.name]
+ for col in conflict_update_cols
+ },
)
res = await session.execute(stmt.returning(EvaluationMetricsDBE))
returned_metric_dbes.extend(res.scalars().all())
# Temporal: (project_id, run_id, timestamp) WHERE scenario_id IS NULL AND timestamp IS NOT NULL
if temporal_metrics:
- stmt = pg_insert(EvaluationMetricsDBE).values(temporal_metrics)
+ stmt = pg_insert(EvaluationMetricsDBE).values(
+ _uniform_values(temporal_metrics)
+ )
stmt = stmt.on_conflict_do_update(
index_elements=[
EvaluationMetricsDBE.project_id,
@@ -2032,9 +2054,10 @@ async def create_metrics(
EvaluationMetricsDBE.scenario_id.is_(None),
EvaluationMetricsDBE.timestamp.isnot(None),
),
- set_=dict(
- (k, stmt.excluded[k.name]) for k in conflict_update_set.keys()
- ),
+ set_={
+ col.name: stmt.excluded[col.name]
+ for col in conflict_update_cols
+ },
)
res = await session.execute(stmt.returning(EvaluationMetricsDBE))
returned_metric_dbes.extend(res.scalars().all())
@@ -2059,7 +2082,7 @@ async def fetch_metrics(
#
metrics_ids: List[UUID],
) -> List[EvaluationMetrics]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationMetricsDBE).filter(
EvaluationMetricsDBE.project_id == project_id,
)
@@ -2084,75 +2107,7 @@ async def fetch_metrics(
return _metrics
- @suppress_exceptions(default=[])
- async def edit_metrics(
- self,
- *,
- project_id: UUID,
- user_id: UUID,
- #
- metrics: List[EvaluationMetricsEdit],
- ) -> List[EvaluationMetrics]:
- metrics_ids = [metric.id for metric in metrics]
-
- async with engine.core_session() as session:
- stmt = select(EvaluationMetricsDBE).filter(
- EvaluationMetricsDBE.project_id == project_id,
- )
-
- stmt = stmt.filter(
- EvaluationMetricsDBE.id.in_(metrics_ids),
- )
-
- stmt = stmt.limit(len(metrics_ids))
-
- res = await session.execute(stmt)
-
- metric_dbes = res.scalars().all()
-
- if not metric_dbes:
- return []
-
- for metric_dbe in metric_dbes:
- run_flags = await _get_run_flags(
- session=session,
- project_id=project_id,
- run_id=metric_dbe.run_id, # type: ignore
- )
-
- if run_flags.get("is_closed", False):
- raise EvaluationClosedConflict(
- run_id=metric_dbe.run_id, # type: ignore
- scenario_id=metric_dbe.scenario_id, # type: ignore
- metrics_id=metric_dbe.id, # type: ignore
- )
-
- metric = next(
- (m for m in metrics if m.id == metric_dbe.id),
- None,
- )
-
- if metric is not None:
- metric_dbe = edit_dbe_from_dto(
- dbe=metric_dbe,
- dto=metric,
- updated_at=datetime.now(timezone.utc),
- updated_by_id=user_id,
- )
-
- await session.commit()
-
- _metrics = [
- create_dto_from_dbe(
- DTO=EvaluationMetrics,
- dbe=metric_dbe,
- )
- for metric_dbe in metric_dbes
- ]
-
- return _metrics
-
- @suppress_exceptions(default=[])
+ @suppress_exceptions(default=[], exclude=[EvaluationClosedConflict])
async def delete_metrics(
self,
*,
@@ -2160,7 +2115,7 @@ async def delete_metrics(
#
metrics_ids: Optional[List[UUID]] = None,
) -> List[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
if metrics_ids is None:
return []
@@ -2211,7 +2166,7 @@ async def query_metrics(
#
windowing: Optional[Windowing] = None,
) -> List[EvaluationMetrics]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationMetricsDBE).filter(
EvaluationMetricsDBE.project_id == project_id,
)
@@ -2284,11 +2239,7 @@ async def query_metrics(
EvaluationMetricsDBE.tags.contains(metric.tags),
)
- # meta is JSON (not JSONB) — containment (@>) is not supported
- # if metric.meta is not None:
- # stmt = stmt.filter(
- # EvaluationMetricsDBE.meta.contains(metric.meta),
- # )
+ # meta is JSON (not JSONB) — containment (@>) filtering unsupported
if metric.status is not None:
stmt = stmt.filter(
@@ -2325,7 +2276,7 @@ async def query_metrics(
# - EVALUATION QUEUE -------------------------------------------------------
- @suppress_exceptions(exclude=[EntityCreationConflict])
+ @suppress_exceptions(exclude=[EntityCreationConflict, EvaluationClosedConflict])
async def create_queue(
self,
*,
@@ -2366,7 +2317,7 @@ async def create_queue(
queue_dbe.user_ids = _flatten_queue_user_ids(queue.data)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add(queue_dbe)
await session.commit()
@@ -2379,11 +2330,13 @@ async def create_queue(
return _queue
except Exception as e:
- check_entity_creation_conflict(e)
+ check_entity_creation_conflict(e, entity="Evaluation queue")
raise
- @suppress_exceptions(default=[], exclude=[EntityCreationConflict])
+ @suppress_exceptions(
+ default=[], exclude=[EntityCreationConflict, EvaluationClosedConflict]
+ )
async def create_queues(
self,
*,
@@ -2422,7 +2375,7 @@ async def create_queues(
queue_dbe.user_ids = _flatten_queue_user_ids(queue.data)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add_all(queue_dbes)
await session.commit()
@@ -2450,7 +2403,7 @@ async def fetch_queue(
#
queue_id: UUID,
) -> Optional[EvaluationQueue]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationQueueDBE).filter(
EvaluationQueueDBE.project_id == project_id,
)
@@ -2483,7 +2436,7 @@ async def fetch_queues(
#
queue_ids: List[UUID],
) -> List[EvaluationQueue]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationQueueDBE).filter(
EvaluationQueueDBE.project_id == project_id,
)
@@ -2508,7 +2461,7 @@ async def fetch_queues(
return _queues
- @suppress_exceptions()
+ @suppress_exceptions(exclude=[EvaluationClosedConflict])
async def edit_queue(
self,
*,
@@ -2517,7 +2470,7 @@ async def edit_queue(
#
queue: EvaluationQueueEdit,
) -> Optional[EvaluationQueue]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationQueueDBE).filter(
EvaluationQueueDBE.project_id == project_id,
)
@@ -2569,7 +2522,7 @@ async def edit_queue(
return _queue
- @suppress_exceptions(default=[])
+ @suppress_exceptions(default=[], exclude=[EvaluationClosedConflict])
async def edit_queues(
self,
*,
@@ -2579,7 +2532,7 @@ async def edit_queues(
) -> List[EvaluationQueue]:
queue_ids = [queue.id for queue in queues]
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationQueueDBE).filter(
EvaluationQueueDBE.project_id == project_id,
)
@@ -2641,6 +2594,63 @@ async def edit_queues(
return _queues
+ @suppress_exceptions()
+ async def archive_queue(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ queue_id: UUID,
+ ) -> Optional[EvaluationQueue]:
+ async with self.engine.session() as session:
+ stmt = (
+ select(EvaluationQueueDBE)
+ .filter(
+ EvaluationQueueDBE.project_id == project_id,
+ EvaluationQueueDBE.id == queue_id,
+ )
+ .limit(1)
+ )
+ queue_dbe = (await session.execute(stmt)).scalars().first()
+ if queue_dbe is None:
+ return None
+
+ now = datetime.now(timezone.utc)
+ queue_dbe.deleted_at = now
+ queue_dbe.deleted_by_id = user_id
+ queue_dbe.updated_at = now
+ queue_dbe.updated_by_id = user_id
+ await session.commit()
+ return create_dto_from_dbe(DTO=EvaluationQueue, dbe=queue_dbe)
+
+ @suppress_exceptions()
+ async def unarchive_queue(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ queue_id: UUID,
+ ) -> Optional[EvaluationQueue]:
+ async with self.engine.session() as session:
+ stmt = (
+ select(EvaluationQueueDBE)
+ .filter(
+ EvaluationQueueDBE.project_id == project_id,
+ EvaluationQueueDBE.id == queue_id,
+ )
+ .limit(1)
+ )
+ queue_dbe = (await session.execute(stmt)).scalars().first()
+ if queue_dbe is None:
+ return None
+
+ queue_dbe.deleted_at = None
+ queue_dbe.deleted_by_id = None
+ queue_dbe.updated_at = datetime.now(timezone.utc)
+ queue_dbe.updated_by_id = user_id
+ await session.commit()
+ return create_dto_from_dbe(DTO=EvaluationQueue, dbe=queue_dbe)
+
@suppress_exceptions()
async def delete_queue(
self,
@@ -2649,7 +2659,7 @@ async def delete_queue(
#
queue_id: UUID,
) -> Optional[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationQueueDBE).filter(
EvaluationQueueDBE.project_id == project_id,
)
@@ -2681,7 +2691,7 @@ async def delete_queues(
#
queue_ids: List[UUID],
) -> List[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationQueueDBE).filter(
EvaluationQueueDBE.project_id == project_id,
)
@@ -2716,11 +2726,14 @@ async def query_queues(
#
windowing: Optional[Windowing] = None,
) -> List[EvaluationQueue]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(EvaluationQueueDBE).filter(
EvaluationQueueDBE.project_id == project_id,
)
+ if not queue or not queue.include_archived:
+ stmt = stmt.filter(EvaluationQueueDBE.deleted_at.is_(None))
+
if queue is not None:
if queue.ids is not None:
stmt = stmt.filter(
@@ -2763,11 +2776,7 @@ async def query_queues(
EvaluationQueueDBE.tags.contains(queue.tags),
)
- # meta is JSON (not JSONB) — containment (@>) is not supported
- # if queue.meta is not None:
- # stmt = stmt.filter(
- # EvaluationQueueDBE.meta.contains(queue.meta),
- # )
+ # meta is JSON (not JSONB) — containment (@>) filtering unsupported
if queue.name is not None:
stmt = stmt.filter(
@@ -2805,6 +2814,33 @@ async def query_queues(
# --------------------------------------------------------------------------
+def _uniform_values(values_list: list[dict]) -> list[dict]:
+ """Backfill a list of insert dicts to a uniform key set.
+
+ A multi-row ``pg_insert().values([...])`` renders ONE VALUES clause whose
+ columns are taken from the union of keys; rows missing a key would shift
+ columns and silently corrupt (or empty) the insert. DTOs are dumped with
+ ``exclude_none``, so optional columns are absent on some rows. We backfill
+ every missing key with ``None`` so all rows align.
+
+ ``id`` is special: it is the server-defaulted primary key, so forcing
+ ``id=None`` would override the default. It is therefore all-or-nothing —
+ kept only when EVERY row already carries it (explicit-id upsert), otherwise
+ dropped from all rows so the DB generates it.
+ """
+ if not values_list:
+ return values_list
+
+ all_keys = set()
+ for values in values_list:
+ all_keys.update(values.keys())
+
+ if not all(("id" in values) for values in values_list):
+ all_keys.discard("id")
+
+ return [{key: values.get(key) for key in all_keys} for values in values_list]
+
+
async def _get_run_flags(
*,
project_id: UUID,
@@ -2812,7 +2848,8 @@ async def _get_run_flags(
session: Optional[AsyncSession] = None,
) -> dict:
if session is None:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+ async with engine.session() as session:
return await _get_run_flags(
project_id=project_id,
run_id=run_id,
diff --git a/api/oss/src/dbs/postgres/evaluations/dbes.py b/api/oss/src/dbs/postgres/evaluations/dbes.py
index e3ad7e8490..bf971022cb 100644
--- a/api/oss/src/dbs/postgres/evaluations/dbes.py
+++ b/api/oss/src/dbs/postgres/evaluations/dbes.py
@@ -3,6 +3,7 @@
ForeignKeyConstraint,
UniqueConstraint,
Index,
+ text,
)
from oss.src.dbs.postgres.shared.base import Base
@@ -286,6 +287,13 @@ class EvaluationQueueDBE(
"ix_evaluation_queues_run_id",
"run_id",
), # for filtering
+ Index(
+ "ux_evaluation_queues_default_per_run",
+ "project_id",
+ "run_id",
+ unique=True,
+ postgresql_where=text("(flags ->> 'is_default')::boolean = true"),
+ ),
Index(
"ix_evaluation_queues_user_ids",
"user_ids",
diff --git a/api/oss/src/dbs/postgres/evaluations/utils.py b/api/oss/src/dbs/postgres/evaluations/utils.py
index f1d60fcfa7..9bd596bb8c 100644
--- a/api/oss/src/dbs/postgres/evaluations/utils.py
+++ b/api/oss/src/dbs/postgres/evaluations/utils.py
@@ -8,6 +8,14 @@
EvaluationRunQuery,
)
+# Source-family detection keys. An input step's family comes from the exact
+# reference key the resolvers read (`query_revision` / `testset_revision`), or —
+# for reference-less direct sources — from the exact step key.
+QUERY_REFERENCE_KEY = "query_revision"
+TESTSET_REFERENCE_KEY = "testset_revision"
+DIRECT_TRACE_STEP_KEYS = {"traces", "query-direct"}
+DIRECT_TESTCASE_STEP_KEYS = {"testcases", "testset-direct"}
+
def _make_run_references(
run: Optional[Union[EvaluationRun, EvaluationRunEdit]] = None,
@@ -91,8 +99,14 @@ def _make_run_flags(
if not run.data or not run.data.steps:
return flags
+ # `is_queue` is deliberately NOT recomputed here: it depends on the
+ # default-queue lifecycle (which the DAO does not load) and is owned by
+ # EvaluationsService._reconcile_default_queue. Writing it via the DAO without
+ # running reconcile leaves it stale. Only the `has_*` shape flags below.
flags.has_queries = False
flags.has_testsets = False
+ flags.has_traces = False
+ flags.has_testcases = False
flags.has_evaluators = False
#
flags.has_custom = False
@@ -103,21 +117,22 @@ def _make_run_flags(
if _step.type == "input":
_references = _step.references or dict()
- if flags.is_queue and not _references:
+ if not _references:
step_key = (_step.key or "").lower()
- if "query" in step_key:
- flags.has_queries = True
- if "testset" in step_key:
- flags.has_testsets = True
-
- for _key in _references.keys():
- step_key = str(_key).lower()
-
- if "query" in step_key:
- flags.has_queries = True
- if "testset" in step_key:
- flags.has_testsets = True
+ # Direct source inputs are explicit source families. Legacy
+ # direct keys remain recognized for old rows.
+ if step_key in DIRECT_TRACE_STEP_KEYS:
+ flags.has_traces = True
+ if step_key in DIRECT_TESTCASE_STEP_KEYS:
+ flags.has_testcases = True
+
+ # Match the exact reference key, not a substring: a substring rule
+ # misfires on incidental keys like `query_anchor` / `testset_metadata`.
+ if QUERY_REFERENCE_KEY in _references:
+ flags.has_queries = True
+ if TESTSET_REFERENCE_KEY in _references:
+ flags.has_testsets = True
if _step.type == "annotation":
flags.has_evaluators = True
diff --git a/api/oss/src/dbs/postgres/events/dao.py b/api/oss/src/dbs/postgres/events/dao.py
index fcedab16cc..8dd86d0b19 100644
--- a/api/oss/src/dbs/postgres/events/dao.py
+++ b/api/oss/src/dbs/postgres/events/dao.py
@@ -13,12 +13,14 @@
map_event_dto_to_dbe,
map_event_dbe_to_dto,
)
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import AnalyticsEngine, get_analytics_engine
class EventsDAO(EventsDAOInterface):
- def __init__(self):
- pass
+ def __init__(self, engine: AnalyticsEngine = None):
+ if engine is None:
+ engine = get_analytics_engine()
+ self.engine = engine
### EVENTS
@@ -32,7 +34,7 @@ async def ingest(
if not events:
return 0
- async with engine.tracing_session() as session:
+ async with self.engine.session() as session:
total_ingested = 0
for event in events:
@@ -87,7 +89,7 @@ async def query(
#
windowing: Optional[Windowing] = None,
) -> List[Event]:
- async with engine.tracing_session() as session:
+ async with self.engine.session() as session:
# BASE
stmt = select(EventDBE)
diff --git a/api/oss/src/dbs/postgres/folders/dao.py b/api/oss/src/dbs/postgres/folders/dao.py
index 2a03df3a93..c81b062f8d 100644
--- a/api/oss/src/dbs/postgres/folders/dao.py
+++ b/api/oss/src/dbs/postgres/folders/dao.py
@@ -20,7 +20,10 @@
FolderPathDepthExceeded,
FolderPathLengthExceeded,
)
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
from oss.src.dbs.postgres.folders.dbes import FolderDBE
from oss.src.dbs.postgres.folders.mappings import (
create_dbe_from_dto,
@@ -111,8 +114,10 @@ async def _delete_folder_tree(
class FoldersDAO(FoldersDAOInterface):
- def __init__(self):
- pass
+ def __init__(self, engine: TransactionsEngine = None):
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
@suppress_exceptions(
exclude=[
@@ -133,7 +138,7 @@ async def create(
parent_path = None
if folder_create.parent_id:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
parent = await _get_folder_row(
session=session,
folder_id=folder_create.parent_id,
@@ -153,7 +158,7 @@ async def create(
)
folder_dbe.created_by_id = user_id
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
try:
session.add(folder_dbe)
await session.commit()
@@ -175,7 +180,7 @@ async def fetch(
project_id: UUID,
folder_id: UUID,
) -> Optional[Folder]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
folder = await _get_folder_row(
session=session,
folder_id=folder_id,
@@ -207,7 +212,7 @@ async def edit(
) -> Optional[Folder]:
kind = folder_edit.kind or FolderKind.APPLICATIONS
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
folder = await _get_folder_row(
session=session,
folder_id=folder_edit.id,
@@ -285,7 +290,7 @@ async def delete(
user_id: UUID,
folder_id: UUID,
) -> Optional[UUID]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
folder = await _get_folder_row(
session=session,
folder_id=folder_id,
@@ -311,7 +316,7 @@ async def query(
project_id: UUID,
folder_query: FolderQuery,
) -> List[Folder]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(FolderDBE).filter(FolderDBE.project_id == project_id)
if folder_query.id is not None:
diff --git a/api/oss/src/dbs/postgres/git/dao.py b/api/oss/src/dbs/postgres/git/dao.py
index 154381cad6..c601db6ebd 100644
--- a/api/oss/src/dbs/postgres/git/dao.py
+++ b/api/oss/src/dbs/postgres/git/dao.py
@@ -35,7 +35,10 @@
from oss.src.dbs.postgres.shared.utils import apply_windowing
from oss.src.dbs.postgres.shared.exceptions import check_entity_creation_conflict
from oss.src.utils.exceptions import suppress_exceptions
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
from oss.src.dbs.postgres.git.mappings import (
map_dbe_to_dto,
map_dto_to_dbe,
@@ -55,10 +58,14 @@ def __init__(
ArtifactDBE: Type[T],
VariantDBE: Type[T],
RevisionDBE: Type[T],
+ engine: TransactionsEngine = None,
):
self.ArtifactDBE = ArtifactDBE # pylint: disable=invalid-name
self.VariantDBE = VariantDBE # pylint: disable=invalid-name
self.RevisionDBE = RevisionDBE # pylint: disable=invalid-name
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
# ─ artifacts ──────────────────────────────────────────────────────────────
@@ -97,7 +104,7 @@ async def create_artifact(
)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add(artifact_dbe)
await session.commit()
@@ -130,7 +137,7 @@ async def fetch_artifact(
if not artifact_ref:
return None
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.ArtifactDBE).filter(
self.ArtifactDBE.project_id == project_id, # type: ignore
)
@@ -168,7 +175,7 @@ async def edit_artifact(
#
artifact_edit: ArtifactEdit,
) -> Optional[Artifact]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.ArtifactDBE).filter(
self.ArtifactDBE.project_id == project_id, # type: ignore
)
@@ -225,7 +232,7 @@ async def archive_artifact(
#
artifact_id: UUID,
) -> Optional[Artifact]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.ArtifactDBE).filter(
self.ArtifactDBE.project_id == project_id, # type: ignore
)
@@ -267,7 +274,7 @@ async def unarchive_artifact(
#
artifact_id: UUID,
) -> Optional[Artifact]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.ArtifactDBE).filter(
self.ArtifactDBE.project_id == project_id, # type: ignore
)
@@ -314,7 +321,7 @@ async def query_artifacts(
#
windowing: Optional[Windowing] = None,
) -> List[Artifact]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.ArtifactDBE).filter(
self.ArtifactDBE.project_id == project_id, # type: ignore
)
@@ -453,7 +460,7 @@ async def create_variant(
)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add(variant_dbe)
await session.commit()
@@ -487,9 +494,7 @@ async def fetch_variant(
if not artifact_ref and not variant_ref:
return None
- applied_identifying_filter = False
-
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
select(self.VariantDBE)
.options(
@@ -502,6 +507,12 @@ async def fetch_variant(
pick_default_variant = False
+ # Track whether any identifying filter was applied. If we reach the
+ # query without one, bail out instead of running
+ # `WHERE project_id = ... LIMIT 1`, which would return an arbitrary
+ # row.
+ applied_identifying_filter = False
+
if artifact_ref:
if artifact_ref.id:
stmt = stmt.filter(self.VariantDBE.artifact_id == artifact_ref.id) # type: ignore
@@ -566,7 +577,7 @@ async def edit_variant(
#
variant_edit: VariantEdit,
) -> Optional[Variant]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.VariantDBE).filter(
self.VariantDBE.project_id == project_id, # type: ignore
)
@@ -613,7 +624,7 @@ async def archive_variant(
#
variant_id: UUID,
) -> Optional[Variant]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.VariantDBE).filter(
self.VariantDBE.project_id == project_id, # type: ignore
)
@@ -672,7 +683,7 @@ async def unarchive_variant(
#
variant_id: UUID,
) -> Optional[Variant]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.VariantDBE).filter(
self.VariantDBE.project_id == project_id, # type: ignore
)
@@ -736,7 +747,7 @@ async def query_variants(
#
windowing: Optional[Windowing] = None,
) -> List[Variant]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
select(self.VariantDBE)
.options(
@@ -1031,7 +1042,7 @@ async def create_revision(
)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add(revision_dbe)
await session.commit()
@@ -1077,15 +1088,7 @@ async def fetch_revision(
if not variant_ref and not revision_ref:
return None
- # Track whether any identifying filter was applied. If we reach the
- # query without one (e.g. `revision_ref` carries only a `version` and
- # no `variant_ref` is provided to scope it), bail out instead of
- # running `WHERE project_id = ... LIMIT 1`, which would return an
- # arbitrary row. A version is a per-variant sequence number and cannot
- # identify a revision on its own.
- applied_identifying_filter = False
-
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
select(self.RevisionDBE)
.options(
@@ -1097,6 +1100,14 @@ async def fetch_revision(
)
)
+ # Track whether any identifying filter was applied. If we reach the
+ # query without one (e.g. `revision_ref` carries only a `version` and
+ # no `variant_ref` is provided to scope it), bail out instead of
+ # running `WHERE project_id = ... LIMIT 1`, which would return an
+ # arbitrary row. A version is a per-variant sequence number and cannot
+ # identify a revision on its own.
+ applied_identifying_filter = False
+
if revision_ref and (revision_ref.id or revision_ref.slug):
if revision_ref.id:
stmt = stmt.filter(self.RevisionDBE.id == revision_ref.id) # type: ignore
@@ -1163,7 +1174,7 @@ async def edit_revision(
#
revision_edit: RevisionEdit,
) -> Optional[Revision]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.RevisionDBE).filter(
self.RevisionDBE.project_id == project_id, # type: ignore
)
@@ -1210,7 +1221,7 @@ async def archive_revision(
#
revision_id: UUID,
) -> Optional[Revision]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.RevisionDBE).filter(
self.RevisionDBE.project_id == project_id, # type: ignore
)
@@ -1252,7 +1263,7 @@ async def unarchive_revision(
#
revision_id: UUID,
) -> Optional[Revision]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.RevisionDBE).filter(
self.RevisionDBE.project_id == project_id, # type: ignore
)
@@ -1303,7 +1314,7 @@ async def query_revisions(
#
windowing: Optional[Windowing] = None,
) -> List[Revision]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
select(self.RevisionDBE)
.options(
@@ -1591,7 +1602,7 @@ async def commit_revision(
)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
if initial and revision_commit.variant_id:
# Lock the variant row so concurrent initial commits queue up rather
# than racing through the count check below.
@@ -1727,7 +1738,7 @@ async def log_revisions(
# `include_archived`. ROW_NUMBER() over that set gives us each row's
# 1-indexed position; we then keep rows up to the target's position
# and limit to `depth` from the tail.
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
visibility_filter = (
(self.RevisionDBE.deleted_at.is_(None),) # type: ignore
if not include_archived
@@ -1793,7 +1804,7 @@ async def _get_version(
variant_id: UUID,
revision_id: UUID,
) -> str:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
select(func.count()) # pylint: disable=not-callable
.select_from(self.RevisionDBE) # type: ignore
@@ -1817,7 +1828,7 @@ async def _set_version(
revision_id: UUID,
version: str,
) -> None:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = update(self.RevisionDBE).filter(
self.RevisionDBE.project_id == project_id, # type: ignore
)
@@ -1836,7 +1847,7 @@ async def _null_revision_fields(
project_id: UUID,
revision_id: UUID,
) -> None:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
update(self.RevisionDBE)
.filter(
diff --git a/api/oss/src/dbs/postgres/secrets/dao.py b/api/oss/src/dbs/postgres/secrets/dao.py
index e356e84059..7a755bb8fc 100644
--- a/api/oss/src/dbs/postgres/secrets/dao.py
+++ b/api/oss/src/dbs/postgres/secrets/dao.py
@@ -3,8 +3,10 @@
from oss.src.dbs.postgres.secrets.dbes import SecretsDBE
from oss.src.core.secrets.interfaces import SecretsDAOInterface
-
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
from oss.src.core.secrets.dtos import CreateSecretDTO, UpdateSecretDTO
from oss.src.dbs.postgres.secrets.mappings import (
@@ -17,8 +19,10 @@
class SecretsDAO(SecretsDAOInterface):
- def __init__(self):
- pass
+ def __init__(self, engine: TransactionsEngine = None):
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
@staticmethod
def _validate_scope(project_id: UUID | None, organization_id: UUID | None) -> None:
@@ -48,7 +52,7 @@ async def create(
organization_id=organization_id,
secret_dto=create_secret_dto,
)
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add(secrets_dbe)
await session.commit()
@@ -61,7 +65,7 @@ async def get(
project_id: UUID | None,
organization_id: UUID | None,
):
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
scope_filter = self._scope_filter(project_id, organization_id)
stmt = select(SecretsDBE).filter_by(
id=secret_id,
@@ -77,7 +81,7 @@ async def get(
return secrets_dto
async def list(self, project_id: UUID | None, organization_id: UUID | None):
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
scope_filter = self._scope_filter(project_id, organization_id)
stmt = select(SecretsDBE).filter_by(**scope_filter)
@@ -95,8 +99,9 @@ async def update(
update_secret_dto: UpdateSecretDTO,
project_id: UUID | None,
organization_id: UUID | None,
+ user_id: UUID | None = None,
):
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
scope_filter = self._scope_filter(project_id, organization_id)
stmt = select(SecretsDBE).filter_by(
id=secret_id,
@@ -109,7 +114,9 @@ async def update(
return None
map_secrets_dto_to_dbe_update(
- secrets_dbe=secrets_dbe, update_secret_dto=update_secret_dto
+ secrets_dbe=secrets_dbe,
+ update_secret_dto=update_secret_dto,
+ user_id=user_id,
)
await session.commit()
@@ -124,7 +131,7 @@ async def delete(
project_id: UUID | None,
organization_id: UUID | None,
):
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
scope_filter = self._scope_filter(project_id, organization_id)
stmt = select(SecretsDBE).filter_by(
id=secret_id,
diff --git a/api/oss/src/dbs/postgres/secrets/mappings.py b/api/oss/src/dbs/postgres/secrets/mappings.py
index 14397c3194..4390f6a05b 100644
--- a/api/oss/src/dbs/postgres/secrets/mappings.py
+++ b/api/oss/src/dbs/postgres/secrets/mappings.py
@@ -1,5 +1,6 @@
import uuid
import json
+from datetime import datetime, timezone
from oss.src.dbs.postgres.secrets.dbes import SecretsDBE
from oss.src.core.secrets.dtos import (
@@ -30,8 +31,13 @@ def map_secrets_dto_to_dbe(
def map_secrets_dto_to_dbe_update(
- secrets_dbe: SecretsDBE, update_secret_dto: UpdateSecretDTO
+ secrets_dbe: SecretsDBE,
+ update_secret_dto: UpdateSecretDTO,
+ user_id=None,
) -> None:
+ secrets_dbe.updated_at = datetime.now(timezone.utc)
+ secrets_dbe.updated_by_id = user_id
+
if update_secret_dto.header:
for key, value in update_secret_dto.header.model_dump(
exclude_none=True
diff --git a/api/oss/src/dbs/postgres/shared/dbas.py b/api/oss/src/dbs/postgres/shared/dbas.py
index 846d0f99df..68a9cc5714 100644
--- a/api/oss/src/dbs/postgres/shared/dbas.py
+++ b/api/oss/src/dbs/postgres/shared/dbas.py
@@ -97,7 +97,6 @@ class LegacyLifecycleDBA:
)
updated_at = Column(
TIMESTAMP(timezone=True),
- server_onupdate=func.current_timestamp(),
nullable=True,
)
updated_by_id = Column(
@@ -116,7 +115,6 @@ class LifecycleDBA:
)
updated_at = Column(
TIMESTAMP(timezone=True),
- server_onupdate=func.current_timestamp(),
nullable=True,
)
deleted_at = Column(
diff --git a/api/oss/src/dbs/postgres/shared/engine.py b/api/oss/src/dbs/postgres/shared/engine.py
index 67253fbed1..b37985ccb9 100644
--- a/api/oss/src/dbs/postgres/shared/engine.py
+++ b/api/oss/src/dbs/postgres/shared/engine.py
@@ -1,5 +1,5 @@
from asyncio import current_task
-from typing import AsyncGenerator
+from typing import AsyncGenerator, Optional
from contextlib import asynccontextmanager
from math import floor
@@ -11,17 +11,14 @@
async_scoped_session,
)
-from oss.src.dbs.postgres.shared.config import (
- POSTGRES_URI_CORE,
- POSTGRES_URI_TRACING,
-)
+from oss.src.utils.env import env
DATABASE_MEMORY = 32 * 1024 * 1024 * 1024 # 32 GB
DATABASE_FACTOR = 8 * 1024 * 1024 * 1.15 # 8 MB + 15% overhead
-DATABASE_MAX_CONNECTIONS = 5000 # 5000 connections
+DATABASE_MAX_CONNECTIONS = 5000
MAX_CONNECTIONS = min(DATABASE_MEMORY / DATABASE_FACTOR, DATABASE_MAX_CONNECTIONS)
-APP_CONNECTIONS = MAX_CONNECTIONS * 0.9 # reserve 10% for non-app connections
+APP_CONNECTIONS = MAX_CONNECTIONS * 0.9
NOF_CONSUMERS = 2 * 4 # 2 engines x 4 containers
NOF_CONNECTIONS = floor(APP_CONNECTIONS / NOF_CONSUMERS)
POOL_SIZE = floor(NOF_CONNECTIONS * 0.25)
@@ -29,98 +26,99 @@
POOL_RECYCLE = 30 * 60 # 30 minutes
-class Engine:
- def __init__(self) -> None:
- self.postgres_uri_core = POSTGRES_URI_CORE
+class TransactionsEngine:
+ """Postgres core DB — application data."""
- self.async_core_engine: AsyncEngine = create_async_engine(
- url=self.postgres_uri_core,
+ def __init__(self) -> None:
+ self._engine: AsyncEngine = create_async_engine(
+ url=env.postgres.uri_core,
pool_pre_ping=True,
pool_recycle=POOL_RECYCLE,
pool_size=POOL_SIZE,
max_overflow=MAX_OVERFLOW,
)
- self.async_core_session_maker = async_sessionmaker(
+ _session_maker = async_sessionmaker(
autocommit=False,
autoflush=False,
class_=AsyncSession,
expire_on_commit=False,
- bind=self.async_core_engine,
+ bind=self._engine,
)
- self.async_core_session = async_scoped_session(
- session_factory=self.async_core_session_maker,
+ self._session = async_scoped_session(
+ session_factory=_session_maker,
scopefunc=current_task,
)
- self.postgres_uri_tracing = POSTGRES_URI_TRACING
+ async def close(self) -> None:
+ if self._engine is not None:
+ await self._engine.dispose()
- self.async_tracing_engine: AsyncEngine = create_async_engine(
- url=self.postgres_uri_tracing,
+ @asynccontextmanager
+ async def session(self) -> AsyncGenerator[AsyncSession, None]:
+ session: AsyncSession = self._session()
+ try:
+ yield session
+ await session.commit()
+ except Exception as e:
+ await session.rollback()
+ raise e
+ finally:
+ await session.close()
+
+
+class AnalyticsEngine:
+ """Postgres tracing DB — observability data."""
+
+ def __init__(self) -> None:
+ self._engine: AsyncEngine = create_async_engine(
+ url=env.postgres.uri_tracing,
pool_pre_ping=True,
pool_recycle=POOL_RECYCLE,
pool_size=POOL_SIZE,
max_overflow=MAX_OVERFLOW,
)
- self.async_tracing_session_maker = async_sessionmaker(
+ _session_maker = async_sessionmaker(
autocommit=False,
autoflush=False,
class_=AsyncSession,
expire_on_commit=False,
- bind=self.async_tracing_engine,
+ bind=self._engine,
)
-
- self.async_tracing_session = async_scoped_session(
- session_factory=self.async_tracing_session_maker,
+ self._session = async_scoped_session(
+ session_factory=_session_maker,
scopefunc=current_task,
)
- async def open(self):
- raise NotImplementedError()
-
- async def close(self):
- if self.async_core_engine is not None:
- await self.async_core_engine.dispose()
-
- if self.async_tracing_engine is not None:
- await self.async_tracing_engine.dispose()
+ async def close(self) -> None:
+ if self._engine is not None:
+ await self._engine.dispose()
@asynccontextmanager
- async def core_session(self) -> AsyncGenerator[AsyncSession, None]:
- session: AsyncSession = self.async_core_session()
-
+ async def session(self) -> AsyncGenerator[AsyncSession, None]:
+ session: AsyncSession = self._session()
try:
yield session
await session.commit()
-
except Exception as e:
await session.rollback()
raise e
-
finally:
await session.close()
- @asynccontextmanager
- async def tracing_session(self) -> AsyncGenerator[AsyncSession, None]:
- session: AsyncSession = self.async_tracing_session()
-
- try:
- yield session
- await session.commit()
-
- except Exception as e:
- await session.rollback()
- raise e
-
- finally:
- await session.close()
- ### LEGACY CODE ###
+_transactions_engine: Optional[TransactionsEngine] = None
+_analytics_engine: Optional[AnalyticsEngine] = None
- async def init_db(self):
- self.open()
- async def close_db(self):
- self.close()
+def get_transactions_engine() -> TransactionsEngine:
+ global _transactions_engine
+ if _transactions_engine is None:
+ _transactions_engine = TransactionsEngine()
+ return _transactions_engine
-engine = Engine()
+def get_analytics_engine() -> AnalyticsEngine:
+ global _analytics_engine
+ if _analytics_engine is None:
+ _analytics_engine = AnalyticsEngine()
+ return _analytics_engine
diff --git a/api/oss/src/dbs/postgres/tools/dao.py b/api/oss/src/dbs/postgres/tools/dao.py
index f94e87f273..c3cefe279c 100644
--- a/api/oss/src/dbs/postgres/tools/dao.py
+++ b/api/oss/src/dbs/postgres/tools/dao.py
@@ -16,7 +16,10 @@
ToolConnectionCreate,
)
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
from oss.src.dbs.postgres.tools.dbes import ToolConnectionDBE
from oss.src.dbs.postgres.tools.mappings import (
map_connection_create_to_dbe,
@@ -28,8 +31,16 @@
class ToolsDAO(ToolsDAOInterface):
- def __init__(self, *, ToolConnectionDBE: type = ToolConnectionDBE):
+ def __init__(
+ self,
+ *,
+ ToolConnectionDBE: type = ToolConnectionDBE,
+ engine: TransactionsEngine = None,
+ ):
self.ToolConnectionDBE = ToolConnectionDBE
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
@suppress_exceptions(exclude=[EntityCreationConflict])
async def create_connection(
@@ -49,7 +60,7 @@ async def create_connection(
)
try:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add(dbe)
await session.commit()
await session.refresh(dbe)
@@ -80,7 +91,7 @@ async def get_connection(
connection_id: UUID,
) -> Optional[ToolConnection]:
"""Fetch a connection by ID scoped to project_id. Returns None if not found."""
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
select(self.ToolConnectionDBE)
.filter(self.ToolConnectionDBE.project_id == project_id)
@@ -109,7 +120,7 @@ async def update_connection(
data_update: Optional[dict] = None,
) -> Optional[ToolConnection]:
"""Partially update flags and/or data for a connection. Returns updated DTO or None."""
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
select(self.ToolConnectionDBE)
.filter(self.ToolConnectionDBE.project_id == project_id)
@@ -158,7 +169,7 @@ async def delete_connection(
connection_id: UUID,
) -> bool:
"""Hard-delete a connection row. Returns True if a row was deleted."""
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
delete(self.ToolConnectionDBE)
.where(self.ToolConnectionDBE.project_id == project_id)
@@ -181,7 +192,7 @@ async def query_connections(
is_active: Optional[bool] = True,
) -> List[ToolConnection]:
"""List connections with optional filters. Defaults to active-only (is_active=True)."""
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.ToolConnectionDBE).filter(
self.ToolConnectionDBE.project_id == project_id,
)
@@ -215,7 +226,7 @@ async def activate_connection_by_provider_id(
project_id: Optional[UUID] = None,
) -> Optional[ToolConnection]:
"""Set is_valid=True and is_active=True for the connection matching the provider ID."""
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(self.ToolConnectionDBE).filter(
self.ToolConnectionDBE.data["connected_account_id"].astext
== provider_connection_id
@@ -252,7 +263,7 @@ async def find_connection_by_provider_id(
provider_connection_id: str,
) -> Optional[ToolConnection]:
"""Lookup any connection by provider-side connected_account_id (no project scope)."""
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = (
select(self.ToolConnectionDBE)
.filter(
diff --git a/api/oss/src/dbs/postgres/tracing/dao.py b/api/oss/src/dbs/postgres/tracing/dao.py
index e2295cac8a..e10ce0f31d 100644
--- a/api/oss/src/dbs/postgres/tracing/dao.py
+++ b/api/oss/src/dbs/postgres/tracing/dao.py
@@ -30,7 +30,7 @@
)
from oss.src.dbs.postgres.shared.utils import apply_windowing
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import AnalyticsEngine, get_analytics_engine
from oss.src.dbs.postgres.tracing.dbes import SpanDBE
from oss.src.dbs.postgres.tracing.mappings import (
map_span_dbe_to_link_dto,
@@ -67,8 +67,10 @@
class TracingDAO(TracingDAOInterface):
- def __init__(self):
- pass
+ def __init__(self, engine: AnalyticsEngine = None):
+ if engine is None:
+ engine = get_analytics_engine()
+ self.engine = engine
### SPANS
@@ -85,7 +87,7 @@ async def ingest(
if not span_dtos:
return []
- async with engine.tracing_session() as session:
+ async with self.engine.session() as session:
link_dtos: List[OTelLink] = []
for span_dto in span_dtos:
@@ -158,7 +160,7 @@ async def query(
# ---------
try:
- async with engine.tracing_session() as session:
+ async with self.engine.session() as session:
# TIMEOUT
await session.execute(TIMEOUT_STMT)
# -------
@@ -413,7 +415,7 @@ async def analytics(
# log.trace(str(statistics_stmt.compile(**DEBUG_ARGS)).replace("\n", " "))
# ---------
- async with engine.tracing_session() as session:
+ async with self.engine.session() as session:
await session.execute(TIMEOUT_STMT)
rows = (await session.execute(select(statistics_stmt))).mappings().all()
@@ -544,7 +546,7 @@ async def legacy_analytics(
) = parse_windowing(query.windowing)
try:
- async with engine.tracing_session() as session:
+ async with self.engine.session() as session:
await session.execute(TIMEOUT_STMT)
# BASE QUERY HELPERS
@@ -747,7 +749,7 @@ async def fetch(
if not trace_ids and not span_ids:
return []
- async with engine.tracing_session() as session:
+ async with self.engine.session() as session:
stmt = select(SpanDBE).filter(SpanDBE.project_id == project_id)
if trace_ids:
@@ -785,7 +787,7 @@ async def delete(
if not trace_ids:
return []
- async with engine.tracing_session() as session:
+ async with self.engine.session() as session:
stmt = select(SpanDBE).filter(
SpanDBE.project_id == project_id,
SpanDBE.trace_id.in_(trace_ids),
@@ -874,7 +876,7 @@ async def _query_by_group(
realtime: If True, use last_active (mutable, shows recent activity but unstable cursors).
If False/None, use first_active (immutable, stable cursors but doesn't reflect new activity).
"""
- async with engine.tracing_session() as session:
+ async with self.engine.session() as session:
# TIMEOUT
await session.execute(TIMEOUT_STMT)
diff --git a/api/oss/src/dbs/postgres/users/dao.py b/api/oss/src/dbs/postgres/users/dao.py
index 2fbe1c71b9..5da796a824 100644
--- a/api/oss/src/dbs/postgres/users/dao.py
+++ b/api/oss/src/dbs/postgres/users/dao.py
@@ -3,7 +3,10 @@
from sqlalchemy import select
from sqlalchemy.exc import IntegrityError
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
from oss.src.dbs.postgres.users.dbes import UserIdentityDBE
from oss.src.dbs.postgres.users.mappings import (
map_identity_dbe_to_dto,
@@ -13,10 +16,15 @@
class IdentitiesDAO:
+ def __init__(self, engine: Optional[TransactionsEngine] = None):
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
+
async def create(self, dto: UserIdentityCreate) -> UserIdentity:
identity_dbe = map_create_dto_to_dbe(dto)
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
try:
session.add(identity_dbe)
await session.commit()
@@ -37,7 +45,7 @@ async def create(self, dto: UserIdentityCreate) -> UserIdentity:
async def get_by_method_subject(
self, method: str, subject: str
) -> Optional[UserIdentity]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(UserIdentityDBE).filter_by(
method=method,
subject=subject,
@@ -51,7 +59,7 @@ async def get_by_method_subject(
return map_identity_dbe_to_dto(identity_dbe)
async def list_by_user(self, user_id: UUID) -> List[UserIdentity]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(UserIdentityDBE).filter_by(user_id=user_id)
result = await session.execute(stmt)
identity_dbes = result.scalars().all()
@@ -59,7 +67,7 @@ async def list_by_user(self, user_id: UUID) -> List[UserIdentity]:
return [map_identity_dbe_to_dto(dbe) for dbe in identity_dbes]
async def list_by_domain(self, domain: str) -> List[UserIdentity]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(UserIdentityDBE).filter_by(domain=domain)
result = await session.execute(stmt)
identity_dbes = result.scalars().all()
diff --git a/api/oss/src/dbs/postgres/webhooks/dao.py b/api/oss/src/dbs/postgres/webhooks/dao.py
index 47a31154af..6df48b8e4e 100644
--- a/api/oss/src/dbs/postgres/webhooks/dao.py
+++ b/api/oss/src/dbs/postgres/webhooks/dao.py
@@ -17,7 +17,10 @@
)
from oss.src.core.webhooks.interfaces import WebhooksDAOInterface
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ TransactionsEngine,
+ get_transactions_engine,
+)
from oss.src.dbs.postgres.shared.utils import apply_windowing
from oss.src.dbs.postgres.webhooks.dbes import (
WebhookSubscriptionDBE,
@@ -33,8 +36,10 @@
class WebhooksDAO(WebhooksDAOInterface):
- def __init__(self):
- pass
+ def __init__(self, engine: TransactionsEngine = None):
+ if engine is None:
+ engine = get_transactions_engine()
+ self.engine = engine
# --- SUBSCRIPTIONS ------------------------------------------------------ #
@@ -57,7 +62,7 @@ async def create_subscription(
secret_id=secret_id,
)
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
session.add(subscription_dbe)
await session.commit()
@@ -75,7 +80,7 @@ async def fetch_subscription(
#
subscription_id: UUID,
) -> Optional[WebhookSubscription]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(WebhookSubscriptionDBE).where(
WebhookSubscriptionDBE.project_id == project_id,
WebhookSubscriptionDBE.id == subscription_id,
@@ -102,7 +107,7 @@ async def edit_subscription(
#
secret_id: UUID | None = None,
) -> Optional[WebhookSubscription]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(WebhookSubscriptionDBE).where(
WebhookSubscriptionDBE.id == subscription.id,
WebhookSubscriptionDBE.project_id == project_id,
@@ -140,7 +145,7 @@ async def delete_subscription(
#
subscription_id: UUID,
) -> bool:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(WebhookSubscriptionDBE).where(
WebhookSubscriptionDBE.project_id == project_id,
WebhookSubscriptionDBE.id == subscription_id,
@@ -168,7 +173,7 @@ async def query_subscriptions(
#
windowing: Optional[Windowing] = None,
) -> List[WebhookSubscription]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(WebhookSubscriptionDBE).filter(
WebhookSubscriptionDBE.project_id == project_id,
)
@@ -234,7 +239,7 @@ async def create_delivery(
delivery=delivery,
)
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
values = {
c.name: getattr(delivery_dbe, c.name)
for c in WebhookDeliveryDBE.__table__.columns
@@ -275,7 +280,7 @@ async def fetch_delivery(
#
delivery_id: UUID,
) -> Optional[WebhookDelivery]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(WebhookDeliveryDBE).where(
WebhookDeliveryDBE.project_id == project_id,
WebhookDeliveryDBE.id == delivery_id,
@@ -301,7 +306,7 @@ async def query_deliveries(
#
windowing: Optional[Windowing] = None,
) -> List[WebhookDelivery]:
- async with engine.core_session() as session:
+ async with self.engine.session() as session:
stmt = select(WebhookDeliveryDBE).filter(
WebhookDeliveryDBE.project_id == project_id,
)
diff --git a/api/oss/src/dbs/redis/shared/engine.py b/api/oss/src/dbs/redis/shared/engine.py
new file mode 100644
index 0000000000..59eeeba976
--- /dev/null
+++ b/api/oss/src/dbs/redis/shared/engine.py
@@ -0,0 +1,131 @@
+from typing import TYPE_CHECKING, Optional
+
+from oss.src.utils.env import env
+
+if TYPE_CHECKING:
+ from redis.asyncio import Redis
+
+
+class CacheEngine:
+ """Redis volatile — caching (short socket timeout).
+
+ Lazily opens a single client and delegates unknown attributes to it, so
+ callers use `cache_engine.get(...)`, `cache_engine.scan(...)`, etc. directly
+ (no separate accessor). Distributed locks use `LockEngine` instead — it has
+ a longer socket timeout suited to blocking lock operations.
+ """
+
+ # 0.5s — cache ops are fast; fail quickly rather than stall a request.
+ _SOCKET_TIMEOUT = 0.5
+
+ def __init__(self) -> None:
+ from redis.asyncio import Redis
+
+ self._r: Optional[Redis] = None
+
+ def _client(self) -> "Redis":
+ if self._r is None:
+ from redis.asyncio import Redis
+
+ self._r = Redis.from_url(
+ url=env.redis.uri_volatile,
+ decode_responses=False,
+ socket_timeout=self._SOCKET_TIMEOUT,
+ )
+ return self._r
+
+ def __getattr__(self, name: str):
+ # Only reached for attributes not found normally (so `_r`, `_client`,
+ # `close`, etc. are unaffected). Proxies redis client methods.
+ return getattr(self._client(), name)
+
+ async def close(self) -> None:
+ if self._r is not None:
+ await self._r.close()
+ self._r = None
+
+
+class LockEngine:
+ """Redis volatile — distributed locks (long socket timeout).
+
+ Same volatile Redis as `CacheEngine`, but a separate client with a longer
+ socket timeout because lock operations may block. Delegates unknown
+ attributes to its lazy client, so callers use `lock_engine.set(...)`,
+ `lock_engine.eval(...)`, etc. directly.
+ """
+
+ # 30s — lock ops may block (e.g. waiting to acquire); don't time out early.
+ _SOCKET_TIMEOUT = 30
+
+ def __init__(self) -> None:
+ from redis.asyncio import Redis
+
+ self._r: Optional[Redis] = None
+
+ def _client(self) -> "Redis":
+ if self._r is None:
+ from redis.asyncio import Redis
+
+ self._r = Redis.from_url(
+ url=env.redis.uri_volatile,
+ decode_responses=False,
+ socket_timeout=self._SOCKET_TIMEOUT,
+ )
+ return self._r
+
+ def __getattr__(self, name: str):
+ return getattr(self._client(), name)
+
+ async def close(self) -> None:
+ if self._r is not None:
+ await self._r.close()
+ self._r = None
+
+
+class StreamsEngine:
+ """Redis durable — persistent streams for tracing/events."""
+
+ def __init__(self) -> None:
+ from redis.asyncio import Redis
+
+ self._redis: Optional[Redis] = None
+
+ def get_redis(self) -> "Redis":
+ if self._redis is None:
+ from redis.asyncio import Redis
+
+ if not env.redis.uri_durable:
+ raise RuntimeError("REDIS_URI_DURABLE is required for streams.")
+ self._redis = Redis.from_url(env.redis.uri_durable, decode_responses=False)
+ return self._redis
+
+ async def close(self) -> None:
+ if self._redis is not None:
+ await self._redis.close()
+ self._redis = None
+
+
+_cache_engine: Optional[CacheEngine] = None
+_lock_engine: Optional[LockEngine] = None
+_streams_engine: Optional[StreamsEngine] = None
+
+
+def get_cache_engine() -> CacheEngine:
+ global _cache_engine
+ if _cache_engine is None:
+ _cache_engine = CacheEngine()
+ return _cache_engine
+
+
+def get_lock_engine() -> LockEngine:
+ global _lock_engine
+ if _lock_engine is None:
+ _lock_engine = LockEngine()
+ return _lock_engine
+
+
+def get_streams_engine() -> StreamsEngine:
+ global _streams_engine
+ if _streams_engine is None:
+ _streams_engine = StreamsEngine()
+ return _streams_engine
diff --git a/api/oss/src/middlewares/__init__.py b/api/oss/src/middlewares/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/api/oss/src/services/analytics_service.py b/api/oss/src/middlewares/analytics.py
similarity index 88%
rename from api/oss/src/services/analytics_service.py
rename to api/oss/src/middlewares/analytics.py
index 77b08fe8c7..48acc8f90e 100644
--- a/api/oss/src/services/analytics_service.py
+++ b/api/oss/src/middlewares/analytics.py
@@ -3,12 +3,12 @@
from datetime import datetime
from typing import Callable, Optional
-import posthog
from fastapi import Request
from oss.src.utils.caching import get_cache, set_cache
from oss.src.utils.common import is_oss
from oss.src.utils.env import env
from oss.src.utils.logging import get_module_logger
+from oss.src.utils.lazy import _load_posthog
log = get_module_logger(__name__)
@@ -44,15 +44,6 @@
}
-# Initialize PostHog only if enabled
-if env.posthog.enabled:
- posthog.api_key = env.posthog.api_key
- posthog.host = env.posthog.api_url
- log.info("✓ PostHog enabled")
-else:
- log.warn("✗ PostHog disabled")
-
-
async def _set_activation_property(
distinct_id: str,
property_name: str,
@@ -63,7 +54,11 @@ async def _set_activation_property(
Uses caching to ensure the property is only set once per user.
Uses PostHog's $set_once to ensure idempotency.
"""
- if not distinct_id or not env.posthog.enabled:
+ if not distinct_id:
+ return
+
+ posthog = _load_posthog()
+ if posthog is None:
return
project_id = getattr(request.state, "project_id", None)
@@ -120,7 +115,11 @@ def capture_oss_deployment_created(user_email: str, organization_id: str):
No-op if PostHog is not configured.
"""
- if is_oss() and env.posthog.enabled:
+ if is_oss():
+ posthog = _load_posthog()
+ if posthog is None:
+ return
+
try:
posthog.capture(
distinct_id=user_email,
@@ -246,29 +245,33 @@ async def analytics_middleware(request: Request, call_next: Callable):
except Exception: # pylint: disable=bare-except
pass
- if distinct_id and env.posthog.api_key:
- properties["$set"] = {"email": distinct_id}
-
- posthog.capture(
- distinct_id=distinct_id,
- event=event_name,
- properties=properties or {},
- )
-
- # Check if this is an activation event
- if event_name in ACTIVATION_EVENTS:
- property_name, allowed_auth_methods = ACTIVATION_EVENTS[event_name]
-
- # Check if auth method is allowed for this activation
- if (
- allowed_auth_methods is None
- or auth_method in allowed_auth_methods
- ):
- await _set_activation_property(
- distinct_id=distinct_id,
- property_name=property_name,
- request=request,
- )
+ if distinct_id:
+ posthog = _load_posthog()
+ if posthog is not None:
+ properties["$set"] = {"email": distinct_id}
+
+ posthog.capture(
+ distinct_id=distinct_id,
+ event=event_name,
+ properties=properties or {},
+ )
+
+ # Check if this is an activation event
+ if event_name in ACTIVATION_EVENTS:
+ property_name, allowed_auth_methods = ACTIVATION_EVENTS[
+ event_name
+ ]
+
+ # Check if auth method is allowed for this activation
+ if (
+ allowed_auth_methods is None
+ or auth_method in allowed_auth_methods
+ ):
+ await _set_activation_property(
+ distinct_id=distinct_id,
+ property_name=property_name,
+ request=request,
+ )
except Exception as e:
log.error(f"❌ Error capturing event in PostHog: {e}")
diff --git a/api/oss/src/services/auth_service.py b/api/oss/src/middlewares/auth.py
similarity index 99%
rename from api/oss/src/services/auth_service.py
rename to api/oss/src/middlewares/auth.py
index 2470262875..e86b4d5f02 100644
--- a/api/oss/src/services/auth_service.py
+++ b/api/oss/src/middlewares/auth.py
@@ -27,7 +27,7 @@
from oss.src.utils.common import is_ee
from oss.src.services import db_manager
from oss.src.services import api_key_service
-from oss.src.services.exceptions import (
+from oss.src.utils.exceptions import (
UnauthorizedException,
InternalServerErrorException,
GatewayTimeoutException,
@@ -127,7 +127,7 @@ def _log_bearer_auth_denied(
)
-async def authentication_middleware(request: Request, call_next):
+async def auth_middleware(request: Request, call_next):
"""
Middleware function for authentication.
@@ -438,7 +438,7 @@ def _deny(stage: str, reason: str, exc: Optional[Exception] = None):
log.error("Timeout: get_user_from_supertokens()")
raise GatewayTimeoutException(
- detail="Failed to reach auth provider. Please try again later.",
+ message="Failed to reach auth provider. Please try again later.",
) from e
if not user_info:
diff --git a/api/oss/src/models/api/workspace_models.py b/api/oss/src/models/api/workspace_models.py
index f5b8bf66e8..8200b01035 100644
--- a/api/oss/src/models/api/workspace_models.py
+++ b/api/oss/src/models/api/workspace_models.py
@@ -17,7 +17,7 @@ class InviteRequest(BaseModel):
email: str
# Role slugs are dynamic at runtime (env-overridable via AGENTA_ACCESS_ROLES);
# validation against the effective workspace catalog happens at the API
- # boundary via `ee.src.core.entitlements.controls.get_role`.
+ # boundary via `ee.src.core.access.controls.get_role`.
roles: Optional[List[str]] = None
diff --git a/api/oss/src/routers/api_key_router.py b/api/oss/src/routers/api_key_router.py
index 55e73d4246..0febd547fd 100644
--- a/api/oss/src/routers/api_key_router.py
+++ b/api/oss/src/routers/api_key_router.py
@@ -7,8 +7,8 @@
from oss.src.models.api.api_models import ListAPIKeysResponse
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import check_action_access
router = APIRouter()
diff --git a/api/oss/src/routers/health_router.py b/api/oss/src/routers/health_router.py
deleted file mode 100644
index 2288ef95ce..0000000000
--- a/api/oss/src/routers/health_router.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from fastapi import status
-from oss.src.utils.common import APIRouter
-
-router = APIRouter()
-
-
-@router.get("/", status_code=status.HTTP_200_OK, operation_id="health_check")
-def health_check():
- return {"status": "ok"}
diff --git a/api/oss/src/routers/organization_router.py b/api/oss/src/routers/organization_router.py
index 8cfde80121..1af04dfa5f 100644
--- a/api/oss/src/routers/organization_router.py
+++ b/api/oss/src/routers/organization_router.py
@@ -30,21 +30,21 @@ def _role_description(role: str) -> str:
"""
if not is_ee():
return ""
- from ee.src.core.entitlements.controls import get_role_description
+ from ee.src.core.access.controls import get_role_description
return get_role_description("workspace", role) or ""
if is_ee():
- from ee.src.utils.permissions import check_action_access
- from ee.src.models.shared_models import Permission
+ from ee.src.core.access.permissions.service import check_action_access
+ from ee.src.core.access.permissions.types import Permission
from ee.src.services import db_manager_ee, workspace_manager
- from ee.src.services.selectors import (
+ from ee.src.services.db_manager_ee import (
get_user_org_and_workspace_id,
)
from ee.src.services.organization_service import notify_org_admin_invitation
- from ee.src.utils.entitlements import (
+ from ee.src.core.access.entitlements.service import (
check_entitlements,
scope_from,
Tracker,
diff --git a/api/oss/src/routers/permissions_router.py b/api/oss/src/routers/permissions_router.py
deleted file mode 100644
index d2dbf40191..0000000000
--- a/api/oss/src/routers/permissions_router.py
+++ /dev/null
@@ -1,231 +0,0 @@
-from typing import Optional, Union
-from uuid import UUID
-
-from fastapi.responses import JSONResponse
-from fastapi import Query, HTTPException
-
-from oss.src.utils.logging import get_module_logger
-from oss.src.utils.caching import get_cache, set_cache
-from oss.src.utils.context import get_auth_context, get_auth_scope
-
-from oss.src.utils.common import is_ee, is_oss, APIRouter
-
-if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access
- from ee.src.utils.entitlements import check_entitlements, Counter
-
-
-router = APIRouter()
-
-log = get_module_logger(__name__)
-
-
-class Allow(JSONResponse):
- def __init__(
- self,
- credentials: Optional[str] = None,
- ) -> None:
- super().__init__(
- status_code=200,
- content={
- "effect": "allow",
- "credentials": credentials,
- },
- )
-
-
-class Deny(HTTPException):
- def __init__(self) -> None:
- super().__init__(
- status_code=403,
- detail="Forbidden",
- )
-
-
-@router.get(
- "/verify",
- operation_id="verify_permissions",
-)
-async def verify_permissions(
- action: Optional[str] = Query(None),
- scope_type: Optional[str] = Query(None),
- scope_id: Optional[UUID] = Query(None),
- resource_type: Optional[str] = Query(None),
- resource_id: Optional[UUID] = Query(None),
-):
- ctx = get_auth_context()
- project_id = str(ctx.scope.project_id)
- user_id = str(ctx.scope.user_id)
- credentials_header = ctx.credentials.header()[1]
-
- cache_key = {
- "action": action,
- "scope_type": scope_type,
- "scope_id": scope_id,
- "resource_type": resource_type,
- "resource_id": resource_id,
- }
-
- try:
- if is_oss():
- return Allow(credentials_header)
-
- if not action or not resource_type:
- log.warn("Missing required parameters: action, resource_type")
- raise Deny()
-
- allow = await get_cache(
- project_id=project_id,
- user_id=user_id,
- namespace="verify_permissions",
- key=cache_key,
- )
- # allow = None
-
- if allow == "allow":
- return Allow(credentials_header)
- if allow == "deny":
- log.warn("Permission denied")
- raise Deny()
-
- # CHECK PERMISSION 1/3: SCOPE
- allow_scope = await check_scope_access(
- scope_type=scope_type,
- scope_id=scope_id,
- )
-
- if not allow_scope:
- log.warn("Scope access denied")
- await set_cache(
- project_id=project_id,
- user_id=user_id,
- namespace="verify_permissions",
- key=cache_key,
- value="deny",
- )
- raise Deny()
-
- # CHECK PERMISSION 1/2: ACTION
- allow_action = await check_action_access(
- project_id=project_id,
- user_uid=user_id,
- permission=Permission(action),
- )
-
- if not allow_action:
- log.warn("Action access denied")
- await set_cache(
- project_id=project_id,
- user_id=user_id,
- namespace="verify_permissions",
- key=cache_key,
- value="deny",
- )
- raise Deny()
-
- # CHECK PERMISSION 3/3: RESOURCE
- allow_resource = await check_resource_access(
- resource_type=resource_type,
- )
-
- if isinstance(allow_resource, bool):
- if allow_resource is False:
- log.warn("Resource access denied")
- await set_cache(
- project_id=project_id,
- user_id=user_id,
- namespace="verify_permissions",
- key=cache_key,
- value="deny",
- )
- raise Deny()
-
- if allow_resource is True:
- await set_cache(
- project_id=project_id,
- user_id=user_id,
- namespace="verify_permissions",
- key=cache_key,
- value="allow",
- )
- return Allow(credentials_header)
-
- elif isinstance(allow_resource, int):
- if allow_resource <= 0:
- log.warn("Resource access denied")
- await set_cache(
- project_id=project_id,
- user_id=user_id,
- namespace="verify_permissions",
- key=cache_key,
- value="deny",
- )
- raise Deny()
- else:
- return Allow(credentials_header)
-
- # else:
- log.warn("Resource access denied")
- await set_cache(
- project_id=project_id,
- user_id=user_id,
- namespace="verify_permissions",
- key=cache_key,
- value="deny",
- )
- raise Deny()
-
- except Exception as exc: # pylint: disable=bare-except
- log.warn(exc)
- await set_cache(
- project_id=project_id,
- user_id=user_id,
- namespace="verify_permissions",
- key=cache_key,
- value="deny",
- )
- raise Deny() from exc
-
-
-async def check_scope_access(
- scope_type: Optional[str] = None,
- scope_id: Optional[UUID] = None,
-) -> bool:
- auth_scope = get_auth_scope()
-
- allow_scope = False
-
- if scope_type == "project":
- allow_scope = str(auth_scope.project_id) == str(scope_id)
- elif scope_type == "workspace":
- allow_scope = str(auth_scope.workspace_id) == str(scope_id)
- elif not scope_type and not scope_id:
- allow_scope = True
-
- return allow_scope
-
-
-async def check_resource_access(
- resource_type: Optional[str] = None,
-) -> Union[bool, int]:
- allow_resource = False
-
- if resource_type == "service":
- allow_resource = True
-
- if resource_type == "local_secrets":
- check, meter, _ = await check_entitlements( # type: ignore
- key=Counter.CREDITS_CONSUMED, # type: ignore
- delta=1,
- )
-
- if not check:
- return False
-
- if not meter or not meter.value:
- return False
-
- return meter.value
-
- return allow_resource
diff --git a/api/oss/src/routers/user_profile.py b/api/oss/src/routers/user_profile.py
index 13b7b96579..4b92dd232e 100644
--- a/api/oss/src/routers/user_profile.py
+++ b/api/oss/src/routers/user_profile.py
@@ -11,8 +11,8 @@
if is_ee():
- from ee.src.models.shared_models import Permission
- from ee.src.utils.permissions import check_action_access
+ from ee.src.core.access.permissions.types import Permission
+ from ee.src.core.access.permissions.service import check_action_access
router = APIRouter()
diff --git a/api/oss/src/routers/workspace_router.py b/api/oss/src/routers/workspace_router.py
index 64a574d315..546112b28f 100644
--- a/api/oss/src/routers/workspace_router.py
+++ b/api/oss/src/routers/workspace_router.py
@@ -9,13 +9,13 @@
from oss.src.models.api.workspace_models import Workspace
if is_ee():
- from ee.src.utils.permissions import check_rbac_permission
- from ee.src.models.shared_models import WorkspaceRole
- from ee.src.services.selectors import get_user_org_and_workspace_id
+ from ee.src.core.access.permissions.service import check_rbac_permission
+ from ee.src.core.access.permissions.types import RequiredRole
+ from ee.src.services.db_manager_ee import get_user_org_and_workspace_id
from ee.src.services import db_manager_ee, workspace_manager
- from ee.src.core.entitlements.controls import get_roles
+ from ee.src.core.access.controls import get_roles
- from ee.src.utils.entitlements import (
+ from ee.src.core.access.entitlements.service import (
check_entitlements,
scope_from,
Gauge,
@@ -64,7 +64,7 @@ async def get_all_workspace_roles(request: Request) -> List[Dict[str, str]]:
Returns a list of all available workspace roles.
Returns:
- List[WorkspaceRoleResponse]: A list of WorkspaceRole objects representing the available workspace roles.
+ List[WorkspaceRoleResponse]: A list of DefaultRole objects representing the available workspace roles.
Raises:
HTTPException: If an error occurs while retrieving the workspace roles.
@@ -117,7 +117,7 @@ async def remove_user_from_workspace(
has_permission = await check_rbac_permission(
user_org_workspace_data=user_org_workspace_data,
project_id=str(project.id),
- role=WorkspaceRole.ADMIN,
+ role=RequiredRole.ADMIN,
)
if not has_permission:
return JSONResponse(
diff --git a/api/oss/src/services/admin_manager.py b/api/oss/src/services/admin_manager.py
index c0354302ad..20084ca908 100644
--- a/api/oss/src/services/admin_manager.py
+++ b/api/oss/src/services/admin_manager.py
@@ -10,7 +10,7 @@
from oss.src.utils.logging import get_module_logger
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import get_transactions_engine
from oss.src.services import db_manager
from oss.src.models.db_models import UserDB
@@ -98,7 +98,7 @@ class ProjectRequest(BaseModel):
# Role slugs are dynamic at runtime (env-overridable via AGENTA_ACCESS_ROLES);
# validation against the effective per-scope catalog happens at the handler
-# boundary via `ee.src.core.entitlements.controls.get_role`.
+# boundary via `ee.src.core.access.controls.get_role`.
class OrganizationMembershipRequest(BaseModel):
role: str
is_demo: bool
@@ -132,7 +132,9 @@ async def legacy_create_organization(
return_org_wrk: bool = False,
return_org_wrk_prj: bool = False,
) -> Union[OrganizationDB, WorkspaceDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
create_org_data = payload.model_dump(exclude_unset=True)
create_org_data.pop("is_demo", None)
@@ -235,7 +237,9 @@ async def user_exists(user_email: str) -> bool:
async def check_user(
request: UserRequest,
) -> Optional[UserRequest]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(UserDB).filter_by(
email=request.email,
@@ -252,7 +256,9 @@ async def check_user(
async def create_user(
request: UserRequest,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
user_db = UserDB(
# id=uuid7() # use default
#
@@ -279,7 +285,9 @@ async def create_organization(
request: OrganizationRequest,
created_by_id: uuid.UUID,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
organization_db = OrganizationDB(
name=request.name,
description=request.description,
@@ -305,7 +313,9 @@ async def create_organization(
async def create_workspace(
request: WorkspaceRequest,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
workspace_db = WorkspaceDB(
# id=uuid7() # use default
#
@@ -334,7 +344,9 @@ async def create_workspace(
async def create_project(
request: ProjectRequest,
) -> Reference:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
project_db = ProjectDB(
# id=uuid7() # use default
#
diff --git a/api/oss/src/services/api_key_service.py b/api/oss/src/services/api_key_service.py
index f8d78af6c7..2398d8425e 100644
--- a/api/oss/src/services/api_key_service.py
+++ b/api/oss/src/services/api_key_service.py
@@ -13,9 +13,7 @@
from oss.src.utils.logging import get_module_logger
from oss.src.models.db_models import APIKeyDB, UserDB
-from oss.src.dbs.postgres.shared.engine import engine
-
-# from oss.src.utils.redis_utils import redis_connection
+from oss.src.dbs.postgres.shared.engine import get_transactions_engine
log = get_module_logger(__name__)
@@ -38,7 +36,9 @@ async def _generate_unique_prefix():
# Define the characters to use for the prefix
alphabet = string.ascii_letters + string.digits
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
while True:
# Generate a random 8-character prefix
prefix = "".join(secrets.choice(alphabet) for _ in range(8))
@@ -82,7 +82,9 @@ async def create_api_key(
# get rate limit from env
rate_limit = 0
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
# Create an APIKeyDB instance with the prefix, hashed API key, and user_id
api_key = APIKeyDB(
prefix=prefix,
@@ -115,7 +117,9 @@ async def is_valid_api_key(key: str):
- The API Key object if the API key is valid, False otherwise.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
# Check if the API key is valid (not blacklisted and not expired)
result = await session.execute(
select(APIKeyDB)
@@ -136,37 +140,6 @@ async def is_valid_api_key(key: str):
return api_key
-# async def check_rate_limit(api_key_obj: APIKeyDB, cache_key: str):
-# """
-# Checks if an API key has exceeded its rate limit.
-
-# Args:
-# - key: The API key to be checked.
-
-# Returns:
-# - True if the API key has exceeded its rate limit, False otherwise.
-# """
-
-# if api_key_obj.rate_limit > 0:
-# # Check rate limiting in Redis
-# r = redis_connection()
-# if r is not None:
-# api_requests_within_minute = r.get(cache_key)
-# if api_requests_within_minute is None:
-# # Initialize the count in Redis with an initial value of 1 and a one-minute TTL
-# r.setex(cache_key, 60, 1)
-# else:
-# # Check if requests made within the last minute exceed the rate limit
-# count_within_minute = int(api_requests_within_minute.decode("utf-8"))
-# if count_within_minute > api_key_obj.rate_limit:
-# return True
-
-# # increment the apikey usage count in redis
-# r.incr(cache_key)
-
-# return False
-
-
async def use_api_key(key: str) -> Union[APIKeyDB, bool]:
"""
Validates and checks the rate limit of an API key.
@@ -234,7 +207,9 @@ async def list_api_keys(user_id: str, project_id: str) -> List[APIKeyDB]:
List[APIKeyDB]: A list of APIKeyDB objects associated with the user, sorted by most recently created first.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(APIKeyDB)
.filter_by(
@@ -260,7 +235,9 @@ async def delete_api_key(user_id: str, key_prefix: str):
KeyError: If the API key does not exist or does not belong to the user.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(APIKeyDB).filter_by(
created_by_id=uuid.UUID(user_id), prefix=key_prefix
diff --git a/api/oss/src/services/db_manager.py b/api/oss/src/services/db_manager.py
index e4ba740a80..98f9661fd4 100644
--- a/api/oss/src/services/db_manager.py
+++ b/api/oss/src/services/db_manager.py
@@ -17,10 +17,13 @@
from supertokens_python.asyncio import delete_user as delete_user_from_supertokens
from oss.src.utils.logging import get_module_logger
-from oss.src.services import user_service, analytics_service
+from oss.src.services import user_service
+from oss.src.middlewares import analytics
from oss.src.utils.common import is_ee
from oss.src.utils.env import env
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import (
+ get_transactions_engine,
+)
from oss.src.utils.helpers import get_slug_from_name_and_id
from oss.src.dbs.postgres.blobs.dao import BlobsDAO
@@ -64,7 +67,8 @@
async def fetch_project_by_id(
project_id: str,
) -> Optional[ProjectDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+ async with engine.session() as session:
project = (
(
await session.execute(
@@ -91,7 +95,8 @@ async def fetch_projects_by_workspace(
List[ProjectDB]: Projects scoped to the workspace.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+ async with engine.session() as session:
result = await session.execute(
select(ProjectDB)
.filter(ProjectDB.workspace_id == uuid.UUID(workspace_id))
@@ -103,7 +108,8 @@ async def fetch_projects_by_workspace(
async def fetch_workspace_by_id(
workspace_id: str,
) -> Optional[WorkspaceDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+ async with engine.session() as session:
workspace = (
(
await session.execute(
@@ -122,7 +128,9 @@ async def fetch_workspace_by_id(
async def fetch_organization_by_id(
organization_id: str,
) -> Optional[OrganizationDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
organization = (
(
await session.execute(
@@ -311,7 +319,9 @@ async def get_user(user_uid: str) -> UserDB:
UserDB: instance of user
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
# NOTE: Backward Compatibility
# ---------------------------
# Previously, the user_id field in the api_keys collection in MongoDB used the
@@ -331,7 +341,9 @@ async def get_user(user_uid: str) -> UserDB:
async def is_first_user_signup() -> bool:
"""Check if this is the first user signing up (no users exist yet)."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
total_users = (
await session.scalar(select(func.count()).select_from(UserDB)) or 0
)
@@ -401,7 +413,9 @@ async def setup_oss_organization_for_first_user(
# org with SELECT ... FOR UPDATE inside a single transaction — the
# second caller blocks until the first commits, then sees the
# workspace and skips the insert. No schema change required.
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
await session.execute(
select(OrganizationDB.id).filter_by(id=organization_db.id).with_for_update()
)
@@ -451,7 +465,7 @@ async def setup_oss_organization_for_first_user(
user_id=user_id,
)
- analytics_service.capture_oss_deployment_created(
+ analytics.capture_oss_deployment_created(
user_email=user_email,
organization_id=str(organization_db.id),
)
@@ -462,7 +476,9 @@ async def setup_oss_organization_for_first_user(
async def check_if_user_invitation_exists(email: str, organization_id: str):
"""Check if a user invitation with the given email and organization_id exists."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB)
.join(ProjectDB, InvitationDB.project_id == ProjectDB.id)
@@ -593,7 +609,9 @@ async def get_default_workspace_id_oss() -> str:
orgs) cannot shadow the real singleton workspace and steer auth
scope resolution to the wrong tenant.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(WorkspaceDB)
.join(OrganizationDB, WorkspaceDB.organization_id == OrganizationDB.id)
@@ -635,7 +653,9 @@ async def create_organization(
EE keeps the previous behavior (one org per signup, slug left NULL).
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
# For bootstrap scenario, use a placeholder UUID if not provided
_owner_id = owner_id or uuid.uuid4()
_created_by_id = created_by_id or _owner_id
@@ -705,7 +725,9 @@ async def create_workspace(name: str, organization_id: str):
WorkspaceDB: instance of workspace
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
workspace_db = WorkspaceDB(
name=name,
organization_id=uuid.UUID(organization_id),
@@ -735,7 +757,9 @@ async def update_organization(organization_id: str, values_to_update: Dict[str,
values_to_update (Dict[str, Any]): The values to update in the organization
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(OrganizationDB).filter_by(id=uuid.UUID(organization_id))
)
@@ -773,7 +797,9 @@ async def create_or_update_default_project(values_to_update: Dict[str, Any]):
"create_or_update_default_project requires 'organization_id' in values_to_update"
)
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(ProjectDB).filter_by(
organization_id=organization_id,
@@ -803,7 +829,9 @@ async def get_organizations() -> List[OrganizationDB]:
List: A list of organizations.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(OrganizationDB))
organizations = result.scalars().all()
return organizations
@@ -820,7 +848,9 @@ async def get_organization_by_id(organization_id: str) -> OrganizationDB:
OrganizationDB: The organization object if found, None otherwise.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(OrganizationDB).filter_by(id=uuid.UUID(organization_id))
)
@@ -839,7 +869,9 @@ async def get_organization_by_slug(organization_slug: str) -> OrganizationDB:
OrganizationDB: The organization object if found, None otherwise.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(OrganizationDB).filter_by(slug=organization_slug)
)
@@ -858,7 +890,9 @@ async def get_organization_owner(organization_id: str):
UserDB: The owner of the organization if found, None otherwise.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(OrganizationDB).filter_by(id=uuid.UUID(organization_id))
)
@@ -883,7 +917,9 @@ async def get_user_organizations(user_id: str) -> List[OrganizationDB]:
if is_ee():
from ee.src.models.db_models import OrganizationMemberDB
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
# Query organizations through organization_members table
result = await session.execute(
select(OrganizationDB)
@@ -912,7 +948,9 @@ async def get_workspace(workspace_id: str) -> WorkspaceDB:
Workspace: The retrieved workspace.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
query = select(WorkspaceDB).filter_by(id=uuid.UUID(workspace_id))
result = await session.execute(query)
@@ -928,7 +966,9 @@ async def get_workspaces() -> List[WorkspaceDB]:
List: A list of workspaces.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(WorkspaceDB))
workspaces = result.scalars().all()
return workspaces
@@ -954,7 +994,9 @@ async def remove_user_from_workspace(project_id: str, email: str):
if not project:
raise NoResultFound(f"Project with ID {project_id} not found")
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
if user:
await session.delete(user)
@@ -1000,7 +1042,9 @@ async def get_user_with_id(user_id: str) -> UserDB:
Exception: If an error occurs while getting the user from the database.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(UserDB).filter_by(id=uuid.UUID(user_id)))
user = result.scalars().first()
if user is None:
@@ -1012,7 +1056,9 @@ async def get_user_with_id(user_id: str) -> UserDB:
async def update_user_username(user_id: str, username: str) -> UserDB:
"""Update a user's username."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(UserDB).filter_by(id=uuid.UUID(user_id)))
user = result.scalars().first()
if user is None:
@@ -1047,7 +1093,9 @@ async def get_user_with_email(email: str):
if "@" not in email:
raise Exception("Please provide a valid email address")
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(UserDB).filter_by(email=email))
user = result.scalars().first()
return user
@@ -1085,7 +1133,9 @@ async def create_user_invitation_to_organization(
if not project:
raise NoResultFound(f"Project with ID {project_id} not found")
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
invitation = InvitationDB(
token=token,
email=email,
@@ -1121,7 +1171,9 @@ async def get_project_by_id(project_id: str) -> ProjectDB:
str: The retrieve project or None
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
project_query = await session.execute(
select(ProjectDB)
.options(joinedload(ProjectDB.organization).load_only(OrganizationDB.name))
@@ -1145,7 +1197,9 @@ async def get_default_project_id_from_workspace(
Union[str, Exception]: The default project ID or an exception error message.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
project_query = await session.execute(
select(ProjectDB)
.where(
@@ -1243,7 +1297,8 @@ async def _create(
if session is not None:
return await _create(session)
- async with engine.core_session() as new_session:
+ engine = get_transactions_engine()
+ async with engine.session() as new_session:
return await _create(new_session)
@@ -1255,7 +1310,9 @@ async def delete_project(project_id: str) -> None:
project_id (str): Identifier of project to delete.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
project = await session.get(ProjectDB, uuid.UUID(project_id))
if project is None:
raise NoResultFound(f"Project with ID {project_id} not found")
@@ -1286,7 +1343,9 @@ async def set_default_project(project_id: str) -> ProjectDB:
ProjectDB: Updated project.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
project = await session.get(ProjectDB, uuid.UUID(project_id))
if project is None:
raise NoResultFound(f"Project with ID {project_id} not found")
@@ -1329,7 +1388,9 @@ async def update_project_name(project_id: str, *, project_name: str) -> ProjectD
if not project_name.strip():
raise ValueError("Project name cannot be empty")
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
project = await session.get(ProjectDB, uuid.UUID(project_id))
if project is None:
raise NoResultFound(f"Project with ID {project_id} not found")
@@ -1360,7 +1421,9 @@ async def get_project_invitation_by_email(project_id: str, email: str) -> Invita
InvitationDB: invitation object
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB).filter_by(
project_id=uuid.UUID(project_id), email=email
@@ -1376,7 +1439,9 @@ async def get_project_invitation_by_organization_and_email(
) -> Optional[InvitationDB]:
"""Get an invitation by organization and email, regardless of project."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB)
.join(ProjectDB, InvitationDB.project_id == ProjectDB.id)
@@ -1399,7 +1464,9 @@ async def get_project_invitations(project_id: str) -> InvitationDB:
List[InvitationDB]: invitation objects
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB).filter_by(project_id=uuid.UUID(project_id))
)
@@ -1419,7 +1486,9 @@ async def update_invitation(invitation_id: str, values_to_update: dict) -> bool:
bool: True if the invitation was successfully updated, False otherwise.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB).filter_by(id=uuid.UUID(invitation_id))
)
@@ -1460,7 +1529,9 @@ async def delete_invitation(invitation_id: str) -> bool:
bool: True if the invitation was successfully deleted, False otherwise.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB).filter_by(id=uuid.UUID(invitation_id))
)
@@ -1512,7 +1583,9 @@ async def get_project_by_organization_id(organization_id: str):
ProjectDB: project object
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(ProjectDB).filter_by(organization_id=uuid.UUID(organization_id))
)
@@ -1527,8 +1600,9 @@ async def get_default_project_by_organization_id(organization_id: str):
so callers that depend on the OSS singleton invariant don't accidentally
pick up an ephemeral per-account project.
"""
+ engine = get_transactions_engine()
- async with engine.core_session() as session:
+ async with engine.session() as session:
result = await session.execute(
select(ProjectDB).filter_by(
organization_id=uuid.UUID(organization_id),
@@ -1552,7 +1626,9 @@ async def get_project_invitation_by_token_and_email(
InvitationDB: invitation object
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB).filter_by(
project_id=uuid.UUID(project_id), token=token, email=email
@@ -1569,7 +1645,9 @@ async def get_project_invitation_by_organization_token_and_email(
) -> Optional[InvitationDB]:
"""Get an invitation by organization, token, and email, regardless of project."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(InvitationDB)
.join(ProjectDB, InvitationDB.project_id == ProjectDB.id)
@@ -1596,7 +1674,9 @@ async def get_user_api_key_by_prefix(
The user api key by prefix.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(APIKeyDB).filter_by(
prefix=api_key_prefix, created_by_id=uuid.UUID(user_id)
@@ -1612,56 +1692,74 @@ async def get_user_api_key_by_prefix(
async def admin_get_user_by_id(user_id: uuid.UUID) -> Optional[UserDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(UserDB).filter_by(id=user_id))
return result.scalars().first()
async def admin_get_user_by_email(email: str) -> Optional[UserDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(UserDB).filter_by(email=email))
return result.scalars().first()
async def admin_get_org_by_id(org_id: uuid.UUID) -> Optional[OrganizationDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(OrganizationDB).filter_by(id=org_id))
return result.scalars().first()
async def admin_get_org_by_slug(slug: str) -> Optional[OrganizationDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(OrganizationDB).filter_by(slug=slug))
return result.scalars().first()
async def admin_get_workspace_by_id(ws_id: uuid.UUID) -> Optional[WorkspaceDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(WorkspaceDB).filter_by(id=ws_id))
return result.scalars().first()
async def admin_get_project_by_id(proj_id: uuid.UUID) -> Optional[ProjectDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(ProjectDB).filter_by(id=proj_id))
return result.scalars().first()
async def admin_get_api_key_by_id(key_id: uuid.UUID) -> Optional[APIKeyDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(APIKeyDB).filter_by(id=key_id))
return result.scalars().first()
async def admin_get_api_key_by_prefix(prefix: str) -> Optional[APIKeyDB]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(APIKeyDB).filter_by(prefix=prefix))
return result.scalars().first()
async def admin_get_orgs_owned_by_user(user_id: uuid.UUID) -> List[OrganizationDB]:
"""Return orgs where user is owner OR creator (both carry RESTRICT FK)."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(OrganizationDB).where(
or_(
@@ -1676,7 +1774,9 @@ async def admin_get_orgs_owned_by_user(user_id: uuid.UUID) -> List[OrganizationD
async def admin_get_workspace_ids_for_orgs(
org_ids: List[uuid.UUID],
) -> List[uuid.UUID]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(WorkspaceDB.id).where(WorkspaceDB.organization_id.in_(org_ids))
)
@@ -1686,7 +1786,9 @@ async def admin_get_workspace_ids_for_orgs(
async def admin_get_project_ids_for_orgs(
org_ids: List[uuid.UUID],
) -> List[uuid.UUID]:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(
select(ProjectDB.id).where(ProjectDB.organization_id.in_(org_ids))
)
@@ -1700,7 +1802,9 @@ async def admin_get_or_create_user(
existing = await admin_get_user_by_email(email)
if existing:
return existing
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
user_db = UserDB(
uid=str(uuid.uuid4()),
username=username or email.split("@")[0],
@@ -1732,7 +1836,9 @@ async def admin_create_organization(
On EE behavior is unchanged: a new row is inserted with the supplied
``name``/``slug``.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
if not is_ee():
stmt = (
pg_insert(OrganizationDB)
@@ -1788,7 +1894,9 @@ async def admin_create_workspace(
On EE behavior is unchanged: a fresh workspace row is always inserted.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
if not is_ee():
await session.execute(
select(OrganizationDB.id).filter_by(id=org_id).with_for_update()
@@ -1834,7 +1942,9 @@ async def admin_create_project(
*,
is_default: bool = False,
) -> ProjectDB:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
proj_db = ProjectDB(
project_name=name,
is_default=is_default,
@@ -1849,31 +1959,41 @@ async def admin_create_project(
async def admin_delete_user(user_id: uuid.UUID) -> None:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
await session.execute(delete(UserDB).where(UserDB.id == user_id))
await session.commit()
async def admin_delete_organization(org_id: uuid.UUID) -> None:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
await session.execute(delete(OrganizationDB).where(OrganizationDB.id == org_id))
await session.commit()
async def admin_delete_workspace(ws_id: uuid.UUID) -> None:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
await session.execute(delete(WorkspaceDB).where(WorkspaceDB.id == ws_id))
await session.commit()
async def admin_delete_project(proj_id: uuid.UUID) -> None:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
await session.execute(delete(ProjectDB).where(ProjectDB.id == proj_id))
await session.commit()
async def admin_delete_api_key(key_id: uuid.UUID) -> None:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
await session.execute(delete(APIKeyDB).where(APIKeyDB.id == key_id))
await session.commit()
@@ -1886,7 +2006,9 @@ async def admin_delete_accounts_batch(
user_ids: List[uuid.UUID],
) -> None:
"""Delete a batch of entities atomically, in dependency order."""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
for proj_id in project_ids:
await session.execute(delete(ProjectDB).where(ProjectDB.id == proj_id))
for ws_id in workspace_ids:
@@ -1928,7 +2050,9 @@ async def admin_transfer_org_ownership_batch(
of that user does not destroy orgs now owned by the target.
"""
now = datetime.now(timezone.utc)
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
for org_id in org_ids:
await session.execute(
update(OrganizationDB)
diff --git a/api/oss/src/services/email_service.py b/api/oss/src/services/email_service.py
deleted file mode 100644
index 8ad0540996..0000000000
--- a/api/oss/src/services/email_service.py
+++ /dev/null
@@ -1,73 +0,0 @@
-import os
-
-import sendgrid
-from sendgrid.helpers.mail import Mail
-
-from fastapi import HTTPException
-
-from oss.src.utils.env import env
-from oss.src.utils.logging import get_logger
-
-log = get_logger(__name__)
-
-# Initialize SendGrid only if enabled
-if env.sendgrid.enabled:
- sg = sendgrid.SendGridAPIClient(api_key=env.sendgrid.api_key)
- log.info("✓ SendGrid enabled")
-else:
- sg = None
- if env.sendgrid.api_key and not env.sendgrid.from_address:
- log.warn("✗ SendGrid disabled: missing sender email address")
- else:
- log.warn("✗ SendGrid disabled")
-
-
-def read_email_template(template_file_path):
- """
- Function to read the HTML template from the file
- """
-
- # Get the absolute path to the template file
- script_directory = os.path.dirname(os.path.abspath(__file__))
- absolute_template_file_path = os.path.join(script_directory, template_file_path)
-
- with open(absolute_template_file_path, "r") as template_file:
- return template_file.read()
-
-
-async def send_email(
- to_email: str, subject: str, html_content: str, from_email: str
-) -> bool:
- """
- Send an email to a user.
-
- Args:
- to_email (str): The email address to send the email to.
- subject (str): The subject of the email.
- html_content (str): The HTML content of the email.
- from_email (str): The email address to send the email from.
-
- Returns:
- bool: True if the email was sent successfully, False otherwise.
-
- Raises:
- HTTPException: If there is an error sending the email.
- """
-
- # No-op if SendGrid is disabled
- if not env.sendgrid.enabled:
- log.info(f"[SENDGRID] Email disabled - would send '{subject}' to {to_email}")
- return True
-
- message = Mail(
- from_email=from_email,
- to_emails=to_email,
- subject=subject,
- html_content=html_content,
- )
-
- try:
- sg.send(message)
- return True
- except Exception as e:
- raise HTTPException(status_code=500, detail=str(e))
diff --git a/api/oss/src/services/exceptions.py b/api/oss/src/services/exceptions.py
deleted file mode 100644
index 37c62f1292..0000000000
--- a/api/oss/src/services/exceptions.py
+++ /dev/null
@@ -1,94 +0,0 @@
-from http import HTTPStatus
-
-from fastapi import HTTPException
-
-
-def code_to_phrase(status_code: int) -> str:
- try:
- return HTTPStatus(status_code).phrase
- except ValueError:
- return "Unknown Status Code"
-
-
-class BadRequestException(HTTPException):
- def __init__(
- self,
- code: int = 400,
- detail: str = "Bad Request",
- ):
- self.code = code
- self.detail = detail
-
- super().__init__(self.code, self.detail)
-
-
-class UnauthorizedException(HTTPException):
- def __init__(
- self,
- code: int = 401,
- detail: str = "Unauthorized",
- ):
- self.code = code
- self.detail = detail
-
- super().__init__(self.code, self.detail)
-
-
-class ForbiddenException(HTTPException):
- def __init__(
- self,
- code: int = 403,
- detail: str = "Fordidden",
- ):
- self.code = code
- self.detail = detail
-
- super().__init__(self.code, self.detail)
-
-
-class UnprocessableContentException(HTTPException):
- def __init__(
- self,
- code: int = 422,
- detail: str = "Unprocessable Content",
- ):
- self.code = code
- self.detail = detail
-
- super().__init__(self.code, self.detail)
-
-
-class TooManyRequestsException(HTTPException):
- def __init__(
- self,
- code: int = 429,
- detail: str = "Too Many Requests",
- ):
- self.code = code
- self.detail = detail
-
- super().__init__(self.code, self.detail)
-
-
-class InternalServerErrorException(HTTPException):
- def __init__(
- self,
- code: int = 500,
- detail: str = "Internal Server Error",
- ):
- self.code = code
- self.detail = detail
-
- super().__init__(self.code, self.detail)
-
-
-class GatewayTimeoutException(HTTPException):
- def __init__(
- self,
- code: int = 504,
- detail: str = "Gateway Timeout",
- ):
- self.code = code
- self.detail = detail
-
- super().__init__(self.code, self.detail)
diff --git a/api/oss/src/services/llm_apps_service.py b/api/oss/src/services/llm_apps_service.py
deleted file mode 100644
index f898ab3b4b..0000000000
--- a/api/oss/src/services/llm_apps_service.py
+++ /dev/null
@@ -1,905 +0,0 @@
-import json
-import asyncio
-import shlex
-import traceback
-import aiohttp
-from datetime import datetime
-from typing import Any, Dict, List, Optional
-
-from agenta.sdk.models.shared import Reference
-from oss.src.utils.logging import get_module_logger
-from oss.src.services.auth_service import sign_secret_token
-from oss.src.services.db_manager import get_project_by_id
-from oss.src.models.shared_models import InvokationResult, Result, Error
-
-log = get_module_logger(__name__)
-
-
-def get_nested_value(d: dict, keys: list, default=None):
- """
- Helper function to safely retrieve nested values.
- """
- try:
- for key in keys:
- if isinstance(d, dict):
- d = d.get(key, default)
- else:
- return default
- return d
- except Exception as e:
- log.error(f"Error accessing nested value: {e}")
- return default
-
-
-def extract_result_from_response(response: dict):
- # Initialize default values
- value = None
- latency = None
- cost = None
- tokens = None
-
- try:
- # Validate input
- if not isinstance(response, dict):
- raise ValueError("The response must be a dictionary.")
-
- # Handle version 3.0 response
- if response.get("version") == "3.0":
- value = response
- # Ensure 'data' is a dictionary or convert it to a string
- if not isinstance(value.get("data"), dict):
- value["data"] = str(value.get("data"))
-
- if "tree" in response:
- trace_tree = response.get("tree", {}).get("nodes", [])[0]
-
- duration_ms = get_nested_value(
- trace_tree, ["metrics", "acc", "duration", "total"]
- )
- if duration_ms:
- duration_seconds = duration_ms / 1000
- else:
- start_time = get_nested_value(trace_tree, ["time", "start"])
- end_time = get_nested_value(trace_tree, ["time", "end"])
-
- if start_time and end_time:
- duration_seconds = (
- datetime.fromisoformat(end_time)
- - datetime.fromisoformat(start_time)
- ).total_seconds()
- else:
- duration_seconds = None
-
- latency = duration_seconds
- cost = get_nested_value(
- trace_tree, ["metrics", "acc", "costs", "total"]
- )
- tokens = get_nested_value(
- trace_tree, ["metrics", "acc", "tokens", "total"]
- )
-
- # Handle version 2.0 response
- elif response.get("version") == "2.0":
- value = response
- if not isinstance(value.get("data"), dict):
- value["data"] = str(value.get("data"))
-
- if "trace" in response:
- latency = response["trace"].get("latency", None)
- cost = response["trace"].get("cost", None)
- tokens = response["trace"].get("tokens", None)
-
- # Handle generic response (neither 2.0 nor 3.0)
- else:
- value = {"data": str(response.get("message", ""))}
- latency = response.get("latency", None)
- cost = response.get("cost", None)
- tokens = response.get("tokens", None)
-
- # Determine the type of 'value' (either 'text' or 'object')
- kind = "text" if isinstance(value, str) else "object"
-
- except ValueError as ve:
- log.error(f"Input validation error: {ve}")
- value = {"error": str(ve)}
- kind = "error"
-
- except KeyError as ke:
- log.error(f"Missing key: {ke}")
- value = {"error": f"Missing key: {ke}"}
- kind = "error"
-
- except TypeError as te:
- log.error(f"Type error: {te}")
- value = {"error": f"Type error: {te}"}
- kind = "error"
-
- except Exception as e:
- log.error(f"Unexpected error: {e}")
- value = {"error": f"Unexpected error: {e}"}
- kind = "error"
-
- return value, kind, cost, tokens, latency
-
-
-def _parse_legacy_chat_messages(datapoint: Any) -> list[Any]:
- # Legacy rows may store chat history under either `messages` or `chat`.
- raw_messages = datapoint.get("messages") or datapoint.get("chat", "[]")
-
- if isinstance(raw_messages, list):
- return raw_messages
-
- if isinstance(raw_messages, str):
- try:
- return json.loads(raw_messages) if raw_messages else []
- except (json.JSONDecodeError, TypeError):
- log.warn(f"Failed to parse messages data, using empty list: {raw_messages}")
- return []
-
- log.warn(f"Unexpected format for messages data, using empty list: {raw_messages}")
- return []
-
-
-def _extract_input_keys(parameters: Any) -> List[str]:
- input_keys: List[str] = []
-
- def visit(value: Any) -> None:
- if isinstance(value, dict):
- for key, nested_value in value.items():
- if key == "input_keys" and isinstance(nested_value, list):
- for item in nested_value:
- if isinstance(item, str) and item not in input_keys:
- input_keys.append(item)
- continue
- visit(nested_value)
- return
-
- if isinstance(value, list):
- for item in value:
- visit(item)
-
- visit(parameters)
- return input_keys
-
-
-def _extract_input_names_from_schemas(schemas: Any) -> List[str]:
- if hasattr(schemas, "model_dump"):
- schemas = schemas.model_dump(mode="json", exclude_none=True)
-
- if not isinstance(schemas, dict):
- return []
-
- inputs_schema = schemas.get("inputs") or {}
- if not isinstance(inputs_schema, dict):
- return []
-
- properties = inputs_schema.get("properties") or {}
- if not isinstance(properties, dict):
- return []
-
- return [key for key in properties.keys() if key != "messages"]
-
-
-def parse_legacy_inputs(
- datapoint: Any,
- parameters: Any,
- schemas: Any = None,
- is_chat: Optional[bool] = None,
-) -> Dict:
- if not isinstance(datapoint, dict):
- return {}
-
- datapoint_keys = list(datapoint.keys())
- input_keys = _extract_input_keys(parameters)
- if input_keys:
- inputs = {key: datapoint.get(key, None) for key in input_keys}
- log.debug(
- "parse_legacy_inputs: filtered testcase row using parameter input_keys",
- input_keys=input_keys,
- datapoint_keys=datapoint_keys,
- )
- else:
- schema_input_names = _extract_input_names_from_schemas(schemas)
- if schema_input_names:
- inputs = {key: datapoint.get(key, None) for key in schema_input_names}
- log.debug(
- "parse_legacy_inputs: filtered testcase row using input schema properties",
- schema_input_names=schema_input_names,
- datapoint_keys=datapoint_keys,
- )
- else:
- inputs = dict(datapoint)
- log.warning(
- "parse_legacy_inputs: falling back to full testcase row because no input_keys or input schema properties were available",
- datapoint_keys=datapoint_keys,
- )
-
- if is_chat:
- inputs["messages"] = _parse_legacy_chat_messages(datapoint)
-
- return inputs
-
-
-def _format_curl_request(
- *,
- url: str,
- headers: Dict[str, str],
- json_body: Dict[str, Any],
-) -> str:
- # Keep any future debug curl output safe by redacting sensitive headers.
- redacted_headers = {
- key: "[REDACTED]"
- if key.lower() in {"authorization", "proxy-authorization", "cookie"}
- else value
- for key, value in headers.items()
- }
- parts = ["curl", "-X", "POST", shlex.quote(url)]
-
- for key, value in redacted_headers.items():
- parts.extend(["-H", shlex.quote(f"{key}: {value}")])
-
- parts.extend(
- [
- "--data-raw",
- shlex.quote(json.dumps(json_body, ensure_ascii=False)),
- ]
- )
-
- return " ".join(parts)
-
-
-def _deep_serialize(obj: Any) -> Any:
- """Recursively serialize objects to JSON-compatible types."""
- from uuid import UUID
-
- if isinstance(obj, UUID):
- return str(obj)
- elif isinstance(obj, dict):
- return {k: _deep_serialize(v) for k, v in obj.items()}
- elif isinstance(obj, (list, tuple)):
- return [_deep_serialize(item) for item in obj]
- elif isinstance(obj, Reference):
- return obj.model_dump(exclude_none=True)
- return obj
-
-
-def build_invoke_request(
- *,
- inputs: Dict[str, Any],
- parameters: Dict[str, Any],
- references: Optional[Dict[str, Any]] = None,
-) -> Dict[str, Any]:
- request = {
- "data": {
- "parameters": parameters,
- "inputs": inputs,
- }
- }
-
- if references:
- request["references"] = _deep_serialize(references)
-
- return request
-
-
-def _extract_error_details(
- app_response: Any,
- *,
- fallback_message: str,
- fallback_stacktrace: str,
-) -> tuple[str, str]:
- if isinstance(app_response, dict):
- detail = app_response.get("detail")
- if isinstance(detail, dict):
- return (
- detail.get("error", fallback_message),
- detail.get("message") or detail.get("traceback") or fallback_stacktrace,
- )
- if isinstance(detail, str):
- return detail, fallback_stacktrace
-
- status = app_response.get("status")
- if isinstance(status, dict):
- return (
- status.get("message", fallback_message),
- status.get("stacktrace") or fallback_stacktrace,
- )
-
- if isinstance(app_response, str) and app_response:
- return app_response, fallback_stacktrace
-
- return fallback_message, fallback_stacktrace
-
-
-async def invoke_app(
- uri: str,
- datapoint: Any,
- parameters: Dict,
- schemas: Optional[Dict[str, Any]],
- openapi_is_chat: Optional[bool],
- user_id: str,
- project_id: str,
- scenario_id: Optional[str] = None,
- **kwargs,
-) -> InvokationResult:
- """
- Invoke an application for one testcase row.
-
- Args:
- uri (str): The URI of the app to invoke.
- datapoint (Any): The testcase row data to send as `data.inputs`.
- parameters (Dict): The application parameters to send as `data.parameters`.
-
- Returns:
- InvokationResult: The output of the app.
-
- Raises:
- aiohttp.ClientError: If the POST request fails.
- """
-
- url = f"{uri}/invoke"
-
- inputs = parse_legacy_inputs(
- datapoint,
- parameters,
- schemas=schemas,
- is_chat=openapi_is_chat,
- )
- request_body = build_invoke_request(
- inputs=inputs,
- parameters=parameters,
- references=kwargs.get("references"),
- )
-
- project = await get_project_by_id(
- project_id=project_id,
- )
-
- secret_token = await sign_secret_token(
- user_id=str(user_id),
- project_id=str(project_id),
- workspace_id=str(project.workspace_id),
- organization_id=str(project.organization_id),
- )
-
- headers = {}
- if secret_token:
- headers = {"Authorization": f"Secret {secret_token}"}
- headers["ngrok-skip-browser-warning"] = "1"
-
- async with aiohttp.ClientSession() as client:
- app_response = {}
-
- try:
- log.info(
- "Invoking application...",
- scenario_id=scenario_id,
- testcase_id=(
- datapoint["testcase_id"] if "testcase_id" in datapoint else None
- ),
- url=url,
- )
- response = await client.post(
- url,
- json=request_body,
- headers=headers,
- timeout=900,
- )
- app_response = await response.json()
- response.raise_for_status()
-
- (
- value,
- kind,
- cost,
- tokens,
- latency,
- ) = extract_result_from_response(app_response)
-
- trace_id = app_response.get("trace_id", None)
- span_id = app_response.get("span_id", None)
-
- log.info(
- "Invoked application. ",
- scenario_id=scenario_id,
- trace_id=trace_id,
- )
-
- return InvokationResult(
- result=Result(
- type=kind,
- value=value,
- error=None,
- ),
- latency=latency,
- cost=cost,
- tokens=tokens,
- trace_id=trace_id,
- span_id=span_id,
- )
-
- except aiohttp.ClientResponseError as e:
- log.error(
- "Application request failed",
- scenario_id=scenario_id,
- testcase_id=(
- datapoint["testcase_id"] if "testcase_id" in datapoint else None
- ),
- url=url,
- status_code=e.status,
- )
- error_message, stacktrace = _extract_error_details(
- app_response,
- fallback_message=f"HTTP error {e.status}: {e.message}",
- fallback_stacktrace="".join(
- traceback.format_exception_only(type(e), e)
- ),
- )
- log.error(f"HTTP error occurred during request: {error_message}")
- except aiohttp.ServerTimeoutError as e:
- error_message = "Request timed out"
- stacktrace = "".join(traceback.format_exception_only(type(e), e))
- log.error(error_message)
- except aiohttp.ClientConnectionError as e:
- error_message = f"Connection error: {str(e)}"
- stacktrace = "".join(traceback.format_exception_only(type(e), e))
- log.error(error_message)
- except json.JSONDecodeError as e:
- error_message = "Failed to decode JSON from response"
- stacktrace = "".join(traceback.format_exception_only(type(e), e))
- log.error(error_message)
- except Exception as e:
- error_message = f"Unexpected error: {str(e)}"
- stacktrace = "".join(traceback.format_exception_only(type(e), e))
- log.error(error_message)
-
- return InvokationResult(
- result=Result(
- type="error",
- error=Error(
- message=error_message,
- stacktrace=stacktrace,
- ),
- )
- )
-
-
-async def run_with_retry(
- uri: str,
- input_data: Any,
- parameters: Dict,
- schemas: Optional[Dict[str, Any]],
- max_retry_count: int,
- retry_delay: int,
- openapi_is_chat: Optional[bool],
- user_id: str,
- project_id: str,
- scenario_id: Optional[str] = None,
- **kwargs,
-) -> InvokationResult:
- """
- Runs the specified app with retry mechanism.
-
- Args:
- uri (str): The URI of the app.
- input_data (Any): The input data for the app.
- parameters (Dict): The parameters for the app.
- max_retry_count (int): The maximum number of retries.
- retry_delay (int): The delay between retries in seconds.
- openapi_is_chat (Optional[bool]): Whether the app is chat, if detected.
-
- Returns:
- InvokationResult: The invokation result.
-
- """
-
- if "references" in kwargs and "testcase_id" in input_data:
- # Ensure references dict is fully serialized before modifying
- references = kwargs["references"]
- if isinstance(references, dict):
- references = {
- k: (v.model_dump(exclude_none=True) if isinstance(v, Reference) else v)
- for k, v in references.items()
- }
- testcase_id = input_data["testcase_id"]
- references["testcase"] = {"id": str(testcase_id) if testcase_id else None}
- kwargs["references"] = references
-
- # references = kwargs.get("references", None)
- # links = kwargs.get("links", None)
- # hash_id = make_hash_id(references=references, links=links)
-
- retries = 0
- last_exception = None
- while retries < max_retry_count:
- try:
- result = await invoke_app(
- uri,
- input_data,
- parameters,
- schemas,
- openapi_is_chat,
- user_id,
- project_id,
- scenario_id,
- **kwargs,
- )
- return result
- except aiohttp.ClientError as e:
- last_exception = e
- log.error(f"Error in evaluation. Retrying in {retry_delay} seconds:", e)
- await asyncio.sleep(retry_delay)
- retries += 1
- except Exception as e:
- last_exception = e
- log.warn(
- f"Error processing datapoint: {input_data}.",
- exc_info=True,
- )
- log.warn("".join(traceback.format_exception_only(type(e), e)))
- retries += 1
-
- # If max retries is reached or an exception that isn't in the second block,
- # update & return the last exception
- log.warn("Max retries reached")
- exception_message = (
- "Max retries reached"
- if retries == max_retry_count
- else f"Error processing {input_data} datapoint"
- )
-
- return InvokationResult(
- result=Result(
- type="error",
- value=None,
- error=Error(message=exception_message, stacktrace=str(last_exception)),
- )
- )
-
-
-async def batch_invoke(
- uri: str,
- testset_data: List[Dict],
- *,
- rate_limit_config: Dict,
- user_id: str,
- project_id: str,
- parameters: Optional[Dict] = None,
- scenarios: Optional[List[Dict]] = None,
- revision: Optional[Any] = None,
- schemas: Optional[Dict[str, Any]] = None,
- is_chat: Optional[bool] = None,
- **kwargs,
-) -> List[InvokationResult]:
- """
- Invokes the LLm apps in batches, processing the testset data.
-
- Args:
- uri (str): The URI of the LLm app.
- testset_data (List[Dict]): The testset data to be processed.
- parameters (Dict): The parameters for the LLm app.
- rate_limit_config (Dict): The rate limit configuration.
-
- Returns:
- List[InvokationResult]: The list of app outputs after running all batches.
- """
- (
- effective_parameters,
- effective_schemas,
- effective_is_chat,
- ) = _extract_batch_invoke_metadata(
- revision=revision,
- parameters=parameters,
- schemas=schemas,
- is_chat=is_chat,
- )
- log.debug(
- "batch_invoke: resolved invocation metadata",
- parameter_keys=(
- list(effective_parameters.keys())
- if isinstance(effective_parameters, dict)
- else None
- ),
- schema_input_keys=_extract_input_names_from_schemas(effective_schemas),
- is_chat=effective_is_chat,
- batch_size=len(testset_data),
- )
-
- batch_size = rate_limit_config[
- "batch_size"
- ] # Number of testset to make in each batch
- max_retries = rate_limit_config[
- "max_retries"
- ] # Maximum number of times to retry the failed llm call
- retry_delay = rate_limit_config[
- "retry_delay"
- ] # Delay before retrying the failed llm call (in seconds)
- delay_between_batches = rate_limit_config[
- "delay_between_batches"
- ] # Delay between batches (in seconds)
-
- list_of_app_outputs: List[
- InvokationResult
- ] = [] # Outputs after running all batches
-
- project = await get_project_by_id(
- project_id=project_id,
- )
-
- secret_token = await sign_secret_token(
- user_id=str(user_id),
- project_id=str(project_id),
- workspace_id=str(project.workspace_id),
- organization_id=str(project.organization_id),
- )
-
- headers = {}
- if secret_token:
- headers = {"Authorization": f"Secret {secret_token}"}
- headers["ngrok-skip-browser-warning"] = "1"
-
- schema_parameters, openapi_is_chat = get_parameters_from_schemas(
- schemas=effective_schemas,
- is_chat=effective_is_chat,
- )
-
- if not schema_parameters:
- max_recursive_depth = 5
- runtime_prefix = uri
- route_path = ""
-
- while max_recursive_depth > 0 and not schema_parameters:
- try:
- (
- schema_parameters,
- openapi_is_chat,
- ) = await get_parameters_from_inspect(
- runtime_prefix,
- route_path,
- headers,
- )
- except Exception: # pylint: disable=broad-exception-caught
- schema_parameters = None
- openapi_is_chat = None
-
- if not schema_parameters:
- max_recursive_depth -= 1
- if not runtime_prefix.endswith("/"):
- route_path = "/" + runtime_prefix.split("/")[-1] + route_path
- runtime_prefix = "/".join(runtime_prefix.split("/")[:-1])
- else:
- route_path = ""
- runtime_prefix = runtime_prefix[:-1]
-
- if not schema_parameters:
- schema_parameters, openapi_is_chat = await get_parameters_from_inspect(
- runtime_prefix,
- route_path,
- headers,
- )
-
- # 🆕 Rewritten loop instead of recursion
- for start_idx in range(0, len(testset_data), batch_size):
- tasks = []
-
- end_idx = min(start_idx + batch_size, len(testset_data))
- for index in range(start_idx, end_idx):
- task = asyncio.ensure_future(
- run_with_retry(
- uri,
- testset_data[index],
- effective_parameters,
- effective_schemas,
- max_retries,
- retry_delay,
- openapi_is_chat,
- user_id,
- project_id,
- scenarios[index].get("id") if scenarios else None,
- **kwargs,
- )
- )
- tasks.append(task)
-
- results = await asyncio.gather(*tasks)
-
- for result in results:
- list_of_app_outputs.append(result)
-
- # Delay between batches if more to come
- if end_idx < len(testset_data):
- await asyncio.sleep(delay_between_batches)
-
- return list_of_app_outputs
-
-
-def _to_json_dict(value: Any) -> Dict[str, Any]:
- if hasattr(value, "model_dump"):
- value = value.model_dump(mode="json", exclude_none=True)
-
- return value if isinstance(value, dict) else {}
-
-
-def _extract_batch_invoke_metadata(
- *,
- revision: Optional[Any],
- parameters: Optional[Dict[str, Any]],
- schemas: Optional[Dict[str, Any]],
- is_chat: Optional[bool],
-) -> tuple[Dict[str, Any], Optional[Dict[str, Any]], Optional[bool]]:
- revision_dict = _to_json_dict(revision)
- revision_data = _to_json_dict(revision_dict.get("data"))
- revision_flags = _to_json_dict(revision_dict.get("flags"))
-
- effective_parameters = parameters
- if effective_parameters is None:
- revision_parameters = revision_data.get("parameters")
- effective_parameters = (
- revision_parameters if isinstance(revision_parameters, dict) else {}
- )
-
- effective_schemas = schemas
- if effective_schemas is None:
- revision_schemas = revision_data.get("schemas")
- effective_schemas = (
- revision_schemas if isinstance(revision_schemas, dict) else None
- )
-
- effective_is_chat = is_chat
- if effective_is_chat is None and "is_chat" in revision_flags:
- effective_is_chat = bool(revision_flags["is_chat"])
-
- return effective_parameters or {}, effective_schemas, effective_is_chat
-
-
-def get_parameters_from_schemas(
- schemas: Optional[Dict[str, Any]],
- is_chat: Optional[bool] = None,
-) -> tuple[List[Dict[str, Any]], Optional[bool]]:
- if hasattr(schemas, "model_dump"):
- schemas = schemas.model_dump(mode="json", exclude_none=True)
-
- if not isinstance(schemas, dict) or not schemas:
- return [], is_chat
-
- parameters_schema = schemas.get("parameters") or {}
- inputs_schema = schemas.get("inputs") or {}
-
- parameter_properties = (
- parameters_schema.get("properties", {})
- if isinstance(parameters_schema, dict)
- else {}
- )
- input_properties = (
- inputs_schema.get("properties", {}) if isinstance(inputs_schema, dict) else {}
- )
-
- parameters: List[Dict[str, Any]] = []
-
- if isinstance(parameters_schema, dict):
- parameters.append(
- {
- "name": "ag_config",
- "type": "dict",
- "default": list(parameter_properties.keys()),
- }
- )
-
- input_names: List[str] = []
- has_messages = False
-
- for name, schema in input_properties.items():
- if not isinstance(schema, dict):
- continue
-
- is_messages_field = name == "messages" or schema.get("x-ag-type-ref") in {
- "messages",
- "message",
- }
-
- if is_messages_field:
- has_messages = True
- parameters.append(
- {
- "name": name,
- "type": "messages",
- "default": schema.get("default", []),
- }
- )
- continue
-
- if schema.get("x-ag-type") == "file_url":
- parameters.append(
- {
- "name": name,
- "type": "file_url",
- "default": schema.get("default", ""),
- }
- )
- continue
-
- input_names.append(name)
-
- inferred_is_chat = is_chat if is_chat is not None else has_messages
-
- parameters.append(
- {
- "name": "inputs",
- "type": "dict",
- "default": input_names,
- }
- )
-
- if inferred_is_chat and not has_messages:
- parameters.append(
- {
- "name": "messages",
- "type": "messages",
- "default": [],
- }
- )
-
- return parameters, inferred_is_chat
-
-
-async def get_parameters_from_inspect(
- runtime_prefix: str,
- route_path: str,
- headers: Optional[Dict[str, str]],
-) -> tuple[List[Dict], Optional[bool]]:
- """
- Read runtime inspect output for an LLM app and derive the UI parameter list.
- """
- inspect_url = _build_inspect_url(
- runtime_prefix=runtime_prefix,
- route_path=route_path,
- )
- payload = await _post_json_to_uri(
- uri=inspect_url,
- headers=headers,
- body={},
- )
-
- revision = (payload.get("data") or {}).get("revision") or {}
- revision_data = revision.get("data") or {}
- schemas = revision_data.get("schemas")
- flags = payload.get("flags")
-
- is_chat = None
- if isinstance(flags, dict) and "is_chat" in flags:
- is_chat = bool(flags["is_chat"])
-
- return get_parameters_from_schemas(
- schemas=schemas,
- is_chat=is_chat,
- )
-
-
-def _build_inspect_url(
- *,
- runtime_prefix: str,
- route_path: str,
-) -> str:
- runtime_prefix = runtime_prefix.rstrip("/")
- route_path = route_path.strip("/")
-
- if route_path:
- return f"{runtime_prefix}/{route_path}/inspect"
-
- return f"{runtime_prefix}/inspect"
-
-
-async def _post_json_to_uri(
- uri: str,
- headers: Optional[Dict[str, str]],
- body: Dict[str, Any],
-):
- if headers is None:
- headers = {}
- headers["ngrok-skip-browser-warning"] = "1"
-
- async with aiohttp.ClientSession() as client:
- resp = await client.post(uri, headers=headers, json=body, timeout=5)
- resp_text = await resp.text()
- json_data = json.loads(resp_text)
- return json_data
diff --git a/api/oss/src/services/organization_service.py b/api/oss/src/services/organization_service.py
index 18a1031949..f6d0fb9bf8 100644
--- a/api/oss/src/services/organization_service.py
+++ b/api/oss/src/services/organization_service.py
@@ -6,7 +6,8 @@
from oss.src.utils.env import env
from oss.src.models.db_models import UserDB
-from oss.src.services import db_manager, email_service
+from oss.src.services import db_manager
+from oss.src.utils import emailing
from oss.src.models.api.workspace_models import InviteRequest, ResendInviteRequest
@@ -158,26 +159,17 @@ async def send_invitation_email(
if not env.sendgrid.enabled:
return invite_link
- html_template = email_service.read_email_template("./templates/send_email.html")
- html_content = html_template.format(
- username_placeholder=user.username,
- action_placeholder="invited you to join",
- workspace_placeholder="their organization",
+ await emailing.send_email(
+ to_email=email,
+ subject=f"{user.username} invited you to join their organization",
+ username=user.username,
+ action="invited you to join",
+ workspace="their organization",
call_to_action=(
"Click the link below to accept the invitation: "
f'Accept Invitation '
),
)
-
- if not env.sendgrid.from_address:
- raise ValueError("Sendgrid requires a sender email address to work.")
-
- await email_service.send_email(
- from_email=env.sendgrid.from_address,
- to_email=email,
- subject=f"{user.username} invited you to join their organization",
- html_content=html_content,
- )
return True
diff --git a/api/oss/src/services/templates/send_email.html b/api/oss/src/services/templates/send_email.html
deleted file mode 100644
index 7d124ffd8a..0000000000
--- a/api/oss/src/services/templates/send_email.html
+++ /dev/null
@@ -1,7 +0,0 @@
-Hello,
-
- {username_placeholder} has {action_placeholder} {workspace_placeholder} on
- Agenta.
-
-{call_to_action}
-Thank you for using Agenta!
diff --git a/api/oss/src/services/user_service.py b/api/oss/src/services/user_service.py
index d254510e72..8255f4430a 100644
--- a/api/oss/src/services/user_service.py
+++ b/api/oss/src/services/user_service.py
@@ -5,9 +5,10 @@
from oss.src.utils.env import env
from oss.src.models.db_models import UserDB
from oss.src.utils.logging import get_module_logger
-from oss.src.dbs.postgres.shared.engine import engine
+from oss.src.dbs.postgres.shared.engine import get_transactions_engine
from oss.src.models.api.user_models import UserUpdate
-from oss.src.services import db_manager, email_service
+from oss.src.services import db_manager
+from oss.src.utils import emailing
log = get_module_logger(__name__)
@@ -36,7 +37,9 @@ async def delete_user(user_id: str) -> None:
Raises:
NoResultFound: If user with the given ID is not found.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(UserDB).filter_by(id=user_id))
user = result.scalars().first()
@@ -68,7 +71,9 @@ async def create_new_user(payload: dict) -> UserDB:
# Attempt to create new user
try:
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
user = UserDB(**payload)
session.add(user)
@@ -110,7 +115,9 @@ async def update_user(user_uid: str, payload: UserUpdate) -> UserDB:
NoResultFound: User with session id xxxx not found.
"""
- async with engine.core_session() as session:
+ engine = get_transactions_engine()
+
+ async with engine.session() as session:
result = await session.execute(select(UserDB).filter_by(uid=user_uid))
user = result.scalars().first()
@@ -151,20 +158,11 @@ async def generate_user_password_reset_link(user_id: str, admin_user_id: str):
if not env.sendgrid.api_key:
return password_reset_link
- html_template = email_service.read_email_template("./templates/send_email.html")
- html_content = html_template.format(
- username_placeholder=admin_user.username,
- action_placeholder="requested a password reset for you in their workspace",
- workspace_placeholder="",
- call_to_action=f"""Click the link below to reset your password:
Reset Password """,
- )
-
- if not env.sendgrid.from_address:
- raise ValueError("Sendgrid requires a sender email address to work.")
-
- await email_service.send_email(
- from_email=env.sendgrid.from_address,
+ await emailing.send_email(
to_email=user.email,
subject=f"{admin_user.username} requested a password reset for you in their workspace",
- html_content=html_content,
+ username=admin_user.username,
+ action="requested a password reset for you in their workspace",
+ workspace="",
+ call_to_action=f"""Click the link below to reset your password:
Reset Password """,
)
diff --git a/api/oss/src/tasks/asyncio/events/worker.py b/api/oss/src/tasks/asyncio/events/worker.py
index f21e71cd7b..598f43fd1a 100644
--- a/api/oss/src/tasks/asyncio/events/worker.py
+++ b/api/oss/src/tasks/asyncio/events/worker.py
@@ -14,8 +14,8 @@
log = get_module_logger(__name__)
if is_ee():
- from ee.src.utils.entitlements import check_entitlements, scope_from
- from ee.src.core.entitlements.types import Counter
+ from ee.src.core.access.entitlements.service import check_entitlements, scope_from
+ from ee.src.core.access.entitlements.types import Counter
if TYPE_CHECKING:
from oss.src.tasks.asyncio.webhooks.dispatcher import WebhooksDispatcher
@@ -267,10 +267,11 @@ async def process_batch(
if is_ee() and org_id and not org_allowed.get(org_id, True):
continue
- total_ingested += await self.service.ingest(
- project_id=project_batch["project_id"],
- events=[msg.to_event() for msg in project_batch["events"]],
- )
+ if is_ee():
+ total_ingested += await self.service.ingest(
+ project_id=project_batch["project_id"],
+ events=[msg.to_event() for msg in project_batch["events"]],
+ )
allowed_batches.append(project_batch)
return total_ingested, processed_ids, allowed_batches
diff --git a/api/oss/src/tasks/asyncio/tracing/worker.py b/api/oss/src/tasks/asyncio/tracing/worker.py
index 5a745bfa9f..b93a414262 100644
--- a/api/oss/src/tasks/asyncio/tracing/worker.py
+++ b/api/oss/src/tasks/asyncio/tracing/worker.py
@@ -21,7 +21,11 @@
log = get_module_logger(__name__)
if is_ee():
- from ee.src.utils.entitlements import check_entitlements, scope_from, Counter
+ from ee.src.core.access.entitlements.service import (
+ check_entitlements,
+ scope_from,
+ Counter,
+ )
class TracingWorker:
diff --git a/api/oss/src/tasks/asyncio/webhooks/dispatcher.py b/api/oss/src/tasks/asyncio/webhooks/dispatcher.py
index b217735756..c0ff2570fc 100644
--- a/api/oss/src/tasks/asyncio/webhooks/dispatcher.py
+++ b/api/oss/src/tasks/asyncio/webhooks/dispatcher.py
@@ -106,12 +106,6 @@ async def _get_subscriptions(
)
if cached is not None:
- log.info(
- "[WEBHOOKS DISPATCHER] Subscriptions cache hit",
- project_id=str(project_id),
- count=len(cached),
- )
-
decrypted = []
for sub in cached:
@@ -136,12 +130,6 @@ async def _get_subscriptions(
subscription=WebhookSubscriptionQuery(),
)
- log.info(
- "[WEBHOOKS DISPATCHER] Subscriptions loaded from DB",
- project_id=str(project_id),
- count=len(subscriptions),
- )
-
# Resolve secrets (vault reads happen only on cache miss)
result: List[WebhookSubscription] = []
@@ -211,10 +199,6 @@ async def dispatch(
continue
if not subscriptions:
- log.info(
- "[WEBHOOKS DISPATCHER] No subscriptions for project",
- project_id=str(project_id),
- )
continue
for msg in project_batch["events"]:
diff --git a/api/oss/src/tasks/taskiq/evaluations/worker.py b/api/oss/src/tasks/taskiq/evaluations/worker.py
index 4c70fa8d25..909eee2d0c 100644
--- a/api/oss/src/tasks/taskiq/evaluations/worker.py
+++ b/api/oss/src/tasks/taskiq/evaluations/worker.py
@@ -15,15 +15,13 @@
from oss.src.core.workflows.service import WorkflowsService
from oss.src.core.evaluations.service import EvaluationsService
-from oss.src.core.evaluations.tasks.legacy import (
- evaluate_batch_testset as evaluate_batch_testset_impl,
- evaluate_batch_invocation as evaluate_batch_invocation_impl,
- evaluate_batch_testcases as evaluate_batch_testcases_impl,
- evaluate_batch_traces as evaluate_batch_traces_impl,
-)
-from oss.src.core.evaluations.tasks.live import (
- evaluate_live_query as evaluate_live_query_impl,
+from oss.src.core.evaluations.tasks.run import (
+ EvaluationSliceSource,
+ run_from_source,
+ run_from_batch,
+ rerun,
)
+from oss.src.core.evaluations.runtime.models import SliceProcessMode
from oss.src.core.evaluations.runtime.locks import (
acquire_job_lock,
release_job_lock,
@@ -225,55 +223,12 @@ def _register_tasks(self):
"""Register all evaluation tasks with the broker."""
@self.broker.task(
- task_name="evaluations.legacy.annotate",
+ task_name="evaluations.run_from_source.process",
retry_on_error=False,
max_retries=0, # Never retry - handle errors in application logic
)
- async def evaluate_batch_testset(
+ async def process_run_from_source(
*,
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
- context: Context = TaskiqDepends(),
- ) -> Any:
- """Legacy annotation task - wraps the existing annotate function."""
- log.info(
- "[TASK] Starting evaluate_batch_testset",
- project_id=str(project_id),
- user_id=str(user_id),
- )
-
- result = await self._with_job_lock(
- run_id,
- job_id=context.message.task_id or str(uuid4()),
- job_type="api",
- allow_concurrency=False,
- runner=lambda: evaluate_batch_testset_impl(
- project_id=project_id,
- user_id=user_id,
- #
- run_id=run_id,
- #
- tracing_service=self.tracing_service,
- testsets_service=self.testsets_service,
- queries_service=self.queries_service,
- workflows_service=self.workflows_service,
- applications_service=self.applications_service,
- evaluations_service=self.evaluations_service,
- #
- simple_evaluators_service=self.simple_evaluators_service,
- ),
- )
- log.info("[TASK] Completed evaluate_batch_testset")
- return result
-
- @self.broker.task(
- task_name="evaluations.live.evaluate",
- retry_on_error=False,
- max_retries=0, # Never retry - handle errors in application logic
- )
- async def evaluate_live_query(
project_id: UUID,
user_id: UUID,
#
@@ -283,8 +238,8 @@ async def evaluate_live_query(
oldest: Optional[datetime] = None,
context: Context = TaskiqDepends(),
) -> Any:
- """Live evaluation task - evaluates traces against evaluators."""
- log.info("[TASK] Starting evaluate_live_query")
+ """Process one evaluation run using the unified topology dispatcher."""
+ log.info("[TASK] Starting process_run_from_source")
if newest is None:
newest = datetime.now(timezone.utc)
@@ -296,168 +251,107 @@ async def evaluate_live_query(
job_id=context.message.task_id or str(uuid4()),
job_type="api",
allow_concurrency=False,
- runner=lambda: evaluate_live_query_impl(
+ runner=lambda: run_from_source(
project_id=project_id,
user_id=user_id,
- #
run_id=run_id,
- #
newest=newest,
oldest=oldest,
- ),
- )
- log.info("[TASK] Completed evaluate_live_query")
- return result
-
- @self.broker.task(
- task_name="evaluations.queries.batch",
- retry_on_error=False,
- max_retries=0,
- )
- async def evaluate_batch_query(
- *,
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
- context: Context = TaskiqDepends(),
- ) -> Any:
- """One-shot query evaluation task for non-live runs."""
- log.info("[TASK] Starting evaluate_batch_query")
-
- result = await self._with_job_lock(
- run_id,
- job_id=context.message.task_id or str(uuid4()),
- job_type="api",
- allow_concurrency=False,
- runner=lambda: evaluate_live_query_impl(
- project_id=project_id,
- user_id=user_id,
- #
- run_id=run_id,
- #
- newest=None,
- oldest=None,
- #
- use_windowing=True,
- ),
- )
- log.info("[TASK] Completed evaluate_batch_query")
- return result
-
- @self.broker.task(
- task_name="evaluations.invocations.batch",
- retry_on_error=False,
- max_retries=0,
- )
- async def evaluate_batch_invocation(
- *,
- project_id: UUID,
- user_id: UUID,
- #
- run_id: UUID,
- context: Context = TaskiqDepends(),
- ) -> Any:
- log.info("[TASK] Starting evaluate_batch_invocation")
- result = await self._with_job_lock(
- run_id,
- job_id=context.message.task_id or str(uuid4()),
- job_type="api",
- allow_concurrency=False,
- runner=lambda: evaluate_batch_invocation_impl(
- project_id=project_id,
- user_id=user_id,
- #
- run_id=run_id,
- #
tracing_service=self.tracing_service,
testsets_service=self.testsets_service,
+ queries_service=self.queries_service,
+ workflows_service=self.workflows_service,
applications_service=self.applications_service,
evaluations_service=self.evaluations_service,
+ simple_evaluators_service=self.simple_evaluators_service,
),
)
- log.info("[TASK] Completed evaluate_batch_invocation")
+ log.info("[TASK] Completed process_run_from_source")
return result
@self.broker.task(
- task_name="evaluations.traces.batch",
+ task_name="evaluations.run_from_batch.process",
retry_on_error=False,
max_retries=0,
)
- async def evaluate_batch_traces(
+ async def process_run_from_batch(
*,
project_id: UUID,
user_id: UUID,
#
run_id: UUID,
- trace_ids: list[str],
+ source_kind: EvaluationSliceSource,
+ trace_ids: Optional[list[str]] = None,
+ testcase_ids: Optional[list[UUID]] = None,
input_step_key: Optional[str] = None,
context: Context = TaskiqDepends(),
) -> Any:
- log.info("[TASK] Starting evaluate_batch_traces")
+ log.info("[TASK] Starting process_run_from_batch", source_kind=source_kind)
result = await self._with_job_lock(
run_id,
job_id=context.message.task_id or str(uuid4()),
job_type="api",
allow_concurrency=True,
- runner=lambda: evaluate_batch_traces_impl(
+ runner=lambda: run_from_batch(
project_id=project_id,
user_id=user_id,
- #
run_id=run_id,
+ source_kind=source_kind,
trace_ids=trace_ids,
+ testcase_ids=testcase_ids,
input_step_key=input_step_key,
- #
tracing_service=self.tracing_service,
+ testcases_service=self.testcases_service,
workflows_service=self.workflows_service,
+ applications_service=self.applications_service,
evaluations_service=self.evaluations_service,
),
)
- log.info("[TASK] Completed evaluate_batch_traces")
+ log.info("[TASK] Completed process_run_from_batch", source_kind=source_kind)
return result
@self.broker.task(
- task_name="evaluations.testcases.batch",
+ task_name="evaluations.rerun.process",
retry_on_error=False,
max_retries=0,
)
- async def evaluate_batch_testcases(
+ async def process_rerun(
*,
project_id: UUID,
user_id: UUID,
#
run_id: UUID,
- testcase_ids: list[UUID],
- input_step_key: Optional[str] = None,
+ scenario_ids: Optional[list[UUID]] = None,
+ step_keys: Optional[list[str]] = None,
+ repeat_idxs: Optional[list[int]] = None,
+ process_mode: SliceProcessMode = "fill-missing",
context: Context = TaskiqDepends(),
) -> Any:
- log.info("[TASK] Starting evaluate_batch_testcases")
+ log.info("[TASK] Starting process_rerun", run_id=str(run_id))
result = await self._with_job_lock(
run_id,
job_id=context.message.task_id or str(uuid4()),
job_type="api",
allow_concurrency=True,
- runner=lambda: evaluate_batch_testcases_impl(
+ runner=lambda: rerun(
project_id=project_id,
user_id=user_id,
- #
run_id=run_id,
- testcase_ids=testcase_ids,
- input_step_key=input_step_key,
- #
+ scenario_ids=scenario_ids,
+ step_keys=step_keys,
+ repeat_idxs=repeat_idxs,
+ process_mode=process_mode,
tracing_service=self.tracing_service,
testcases_service=self.testcases_service,
workflows_service=self.workflows_service,
+ applications_service=self.applications_service,
evaluations_service=self.evaluations_service,
),
)
- log.info("[TASK] Completed evaluate_batch_testcases")
+ log.info("[TASK] Completed process_rerun", run_id=str(run_id))
return result
# Store task references for external access
- self.evaluate_batch_testset = evaluate_batch_testset
- self.evaluate_live_query = evaluate_live_query
- self.evaluate_batch_query = evaluate_batch_query
- self.evaluate_batch_invocation = evaluate_batch_invocation
- self.evaluate_batch_traces = evaluate_batch_traces
- self.evaluate_batch_testcases = evaluate_batch_testcases
+ self.process_run_from_source = process_run_from_source
+ self.process_run_from_batch = process_run_from_batch
+ self.process_rerun = process_rerun
diff --git a/api/oss/src/utils/caching.py b/api/oss/src/utils/caching.py
index 5b90815722..b2c6f97b62 100644
--- a/api/oss/src/utils/caching.py
+++ b/api/oss/src/utils/caching.py
@@ -1,20 +1,17 @@
from typing import Any, Type, Optional, Union
from random import random
from asyncio import sleep
-from uuid import uuid4
import orjson
-# from cachetools import TTLCache
-from redis.asyncio import Redis
from pydantic import BaseModel
from oss.src.utils.logging import get_module_logger
from oss.src.utils.env import env
+from oss.src.dbs.redis.shared.engine import get_cache_engine
log = get_module_logger(__name__)
-AGENTA_LOCK_TTL = 15 # 15 seconds
AGENTA_CACHE_TTL = 5 * 60 # 5 minutes (Layer 2) [L2]
AGENTA_CACHE_LOCAL_TTL = 15 # 15 seconds for local in-memory cache (Layer 1) [L1]
@@ -26,7 +23,6 @@
AGENTA_CACHE_SCAN_BATCH_SIZE = 500
AGENTA_CACHE_DELETE_BATCH_SIZE = 1000
-AGENTA_LOCK_SOCKET_TIMEOUT = 2.0 # Locks should be more reliable than cache lookups
CACHE_DEBUG = False
CACHE_DEBUG_VALUE = False
@@ -38,35 +34,7 @@
# Original L1 cache:
# local_cache: TTLCache = TTLCache(maxsize=4096, ttl=AGENTA_CACHE_LOCAL_TTL)
-# Use volatile Redis instance for caching (prefix-based separation)
-# decode_responses=False: orjson operates on bytes for 3x performance vs json
-r = Redis.from_url(
- url=env.redis.uri_volatile,
- decode_responses=False,
- socket_timeout=0.5, # read/write timeout
-)
-
-# Dedicated Redis client for distributed locks with a longer timeout.
-r_lock = Redis.from_url(
- url=env.redis.uri_volatile,
- decode_responses=False,
- socket_timeout=AGENTA_LOCK_SOCKET_TIMEOUT,
-)
-
-# Ownership-safe lock scripts. Owner token must match to renew/release.
-_LOCK_RENEW_IF_OWNER_SCRIPT = """
-if redis.call("GET", KEYS[1]) == ARGV[1] then
- return redis.call("EXPIRE", KEYS[1], tonumber(ARGV[2]))
-end
-return 0
-"""
-
-_LOCK_RELEASE_IF_OWNER_SCRIPT = """
-if redis.call("GET", KEYS[1]) == ARGV[1] then
- return redis.call("DEL", KEYS[1])
-end
-return 0
-"""
+_cache_engine = get_cache_engine()
# HELPERS ----------------------------------------------------------------------
@@ -129,7 +97,7 @@ async def _scan(pattern: str) -> list[str]:
keys: list[str] = []
while True: # TODO: Really ?
- cursor, batch = await r.scan(
+ cursor, batch = await _cache_engine.scan(
cursor=cursor,
match=pattern,
count=AGENTA_CACHE_SCAN_BATCH_SIZE,
@@ -219,7 +187,7 @@ async def _try_get_and_maybe_renew(
# return _deserialize(raw, model=model, is_list=is_list)
# Layer 2: Check Redis (distributed, 5min TTL, ~1ms latency)
- raw = await r.get(cache_name)
+ raw = await _cache_engine.get(cache_name)
if raw is not None:
if CACHE_DEBUG:
@@ -240,7 +208,7 @@ async def _try_get_and_maybe_renew(
name=cache_name,
)
- await r.expire(cache_name, ttl)
+ await _cache_engine.expire(cache_name, ttl)
else:
if CACHE_DEBUG:
log.debug(
@@ -306,7 +274,7 @@ async def _maybe_retry_get(
lock_name = f"lock::{cache_name}"
lock_ex = int(lock_ttl * 1000) # convert seconds to milliseconds
- got_lock = await r.set(lock_name, "1", nx=True, ex=lock_ex)
+ got_lock = await _cache_engine.set(lock_name, "1", nx=True, ex=lock_ex)
if got_lock:
if CACHE_DEBUG:
@@ -379,7 +347,7 @@ async def set_cache(
#
# Original L1 write path:
# local_cache[cache_name] = cache_value
- await r.set(cache_name, cache_value, px=cache_px)
+ await _cache_engine.set(cache_name, cache_value, px=cache_px)
if CACHE_DEBUG:
log.debug(
@@ -392,7 +360,7 @@ async def set_cache(
lock_name = f"lock::{cache_name}"
- check = await r.delete(lock_name)
+ check = await _cache_engine.delete(lock_name)
if check:
if CACHE_DEBUG:
@@ -513,7 +481,7 @@ async def invalidate_cache(
#
# Original L1 invalidation path:
# local_cache.pop(cache_name, None)
- await r.delete(cache_name)
+ await _cache_engine.delete(cache_name)
else:
cache_name = _pack(
@@ -560,7 +528,7 @@ async def invalidate_cache(
redis_keys_deleted = 0
for i in range(0, len(keys), AGENTA_CACHE_DELETE_BATCH_SIZE):
batch = keys[i : i + AGENTA_CACHE_DELETE_BATCH_SIZE]
- deleted_count = await r.delete(*batch)
+ deleted_count = await _cache_engine.delete(*batch)
redis_keys_deleted += deleted_count
if CACHE_DEBUG:
@@ -589,220 +557,3 @@ async def invalidate_cache(
log.warn(e)
return None
-
-
-async def acquire_lock(
- namespace: str,
- key: Optional[Union[str, dict]] = None,
- project_id: Optional[str] = None,
- user_id: Optional[str] = None,
- ttl: int = AGENTA_LOCK_TTL,
- strict: bool = False,
-) -> Optional[str]:
- """Acquire a distributed lock using Redis SET NX (atomic check-and-set).
-
- This prevents race conditions in distributed systems by ensuring only one
- process can acquire the lock at a time.
-
- Args:
- namespace: Lock namespace (e.g., "account-creation", "task-processing")
- key: Unique identifier for the lock (e.g., email, user_id, task_id)
- project_id: Optional project scope
- user_id: Optional user scope
- ttl: Lock expiration time in seconds (default: 10). Auto-releases after TTL.
- strict: If True, re-raise Redis errors instead of returning None.
-
- Returns:
- Lock owner token if lock was acquired, None if lock is already held by another process.
-
- Example:
- lock_owner = await acquire_lock(namespace="account-creation", key=email, ttl=10)
- if not lock_owner:
- # Another process has the lock
- return
-
- try:
- # Do work while holding the lock
- await create_account(email)
- finally:
- # Always release the lock
- await release_lock(
- namespace="account-creation",
- key=email,
- owner=lock_owner,
- )
- """
- try:
- lock_key = _pack(
- namespace=f"lock:{namespace}",
- key=key,
- project_id=project_id,
- user_id=user_id,
- )
- lock_owner = uuid4().hex
-
- # Atomic SET NX: Returns True if lock acquired, False if already held
- acquired = await r_lock.set(lock_key, lock_owner, nx=True, ex=ttl)
-
- if acquired:
- if CACHE_DEBUG:
- log.debug(
- "[lock] ACQUIRED",
- key=lock_key,
- ttl=ttl,
- )
- return lock_owner
- else:
- if CACHE_DEBUG:
- log.debug(
- "[lock] BLOCKED",
- key=lock_key,
- )
- return None
-
- except Exception as e:
- log.error(
- f"[lock] ACQUIRE ERROR: namespace={namespace} key={key} error={e}",
- exc_info=True,
- )
- if strict:
- raise
- return None
-
-
-async def renew_lock(
- namespace: str,
- key: Optional[Union[str, dict]] = None,
- project_id: Optional[str] = None,
- user_id: Optional[str] = None,
- ttl: int = AGENTA_LOCK_TTL,
- owner: Optional[str] = None,
-) -> bool:
- """Renew (extend) the TTL of an existing distributed lock.
-
- Use this to prevent lock expiration during long-running operations.
- Only succeeds if the lock key still exists in Redis. If an owner token is
- provided, renewal only succeeds when ownership matches.
-
- Args:
- namespace: Lock namespace (same as used in acquire_lock)
- key: Lock key (same as used in acquire_lock)
- project_id: Optional project ID (same as used in acquire_lock)
- user_id: Optional user ID (same as used in acquire_lock)
- ttl: New expiration time in seconds
- owner: Optional owner token returned by acquire_lock
-
- Returns:
- True if lock was renewed, False if lock has already expired or on error
- """
- try:
- lock_key = _pack(
- namespace=f"lock:{namespace}",
- key=key,
- project_id=project_id,
- user_id=user_id,
- )
-
- if owner:
- renewed = await r_lock.eval(
- _LOCK_RENEW_IF_OWNER_SCRIPT,
- 1,
- lock_key,
- owner,
- str(ttl),
- )
- else:
- renewed = await r_lock.expire(lock_key, ttl)
-
- if renewed:
- if CACHE_DEBUG:
- log.debug(
- "[lock] RENEWED",
- key=lock_key,
- ttl=ttl,
- )
- return True
- else:
- log.warn(
- f"[lock] RENEW FAILED (expired or lost ownership): namespace={namespace} key={key}"
- )
- return False
-
- except Exception as e:
- log.error(
- f"[lock] RENEW ERROR: namespace={namespace} key={key} error={e}",
- exc_info=True,
- )
- return False
-
-
-async def release_lock(
- namespace: str,
- key: Optional[Union[str, dict]] = None,
- project_id: Optional[str] = None,
- user_id: Optional[str] = None,
- owner: Optional[str] = None,
- strict: bool = False,
-) -> bool:
- """Release a distributed lock acquired with acquire_lock().
-
- Args:
- namespace: Lock namespace (same as used in acquire_lock)
- key: Lock key (same as used in acquire_lock)
- project_id: Optional project ID (same as used in acquire_lock)
- user_id: Optional user ID (same as used in acquire_lock)
- owner: Optional owner token returned by acquire_lock
- strict: If True, re-raise Redis errors instead of returning False.
-
- Returns:
- True if lock was released, False if already expired.
-
- Example:
- lock_acquired = await acquire_lock(namespace="account-creation", key=email)
- if lock_acquired:
- try:
- # ... critical section ...
- finally:
- await release_lock(namespace="account-creation", key=email)
- """
- try:
- lock_key = _pack(
- namespace=f"lock:{namespace}",
- key=key,
- project_id=project_id,
- user_id=user_id,
- )
-
- if owner:
- deleted = await r_lock.eval(
- _LOCK_RELEASE_IF_OWNER_SCRIPT,
- 1,
- lock_key,
- owner,
- )
- else:
- deleted = await r_lock.delete(lock_key)
-
- if deleted:
- if CACHE_DEBUG:
- log.debug(
- "[lock] RELEASED",
- key=lock_key,
- )
- return True
- else:
- if CACHE_DEBUG:
- log.debug(
- "[lock] ALREADY EXPIRED OR OWNED BY ANOTHER WORKER",
- key=lock_key,
- )
- return False
-
- except Exception as e:
- log.error(
- f"[lock] RELEASE ERROR: namespace={namespace} key={key} error={e}",
- exc_info=True,
- )
- if strict:
- raise
- return False
diff --git a/api/oss/src/utils/emailing.py b/api/oss/src/utils/emailing.py
new file mode 100644
index 0000000000..1195cb8680
--- /dev/null
+++ b/api/oss/src/utils/emailing.py
@@ -0,0 +1,136 @@
+import time
+
+import httpx
+
+from sendgrid.helpers.mail import Mail
+
+from oss.src.utils.env import env
+from oss.src.utils.lazy import _load_sendgrid
+from oss.src.utils.logging import get_module_logger
+
+log = get_module_logger(__name__)
+
+
+# Shared invitation/notification email template. Inlined (rather than a file)
+# since it is tiny and avoids per-send file I/O and path resolution.
+_EMAIL_TEMPLATE = (
+ "Hello,
\n"
+ "\n"
+ " {username_placeholder} has {action_placeholder} {workspace_placeholder} on\n"
+ " Agenta.\n"
+ "
\n"
+ "{call_to_action}
\n"
+ "Thank you for using Agenta!
\n"
+)
+
+
+def _render_email_template(
+ *,
+ username: str,
+ action: str,
+ workspace: str,
+ call_to_action: str,
+) -> str:
+ """Render the shared invitation/notification email template."""
+
+ return _EMAIL_TEMPLATE.format(
+ username_placeholder=username,
+ action_placeholder=action,
+ workspace_placeholder=workspace,
+ call_to_action=call_to_action,
+ )
+
+
+async def send_email(
+ *,
+ to_email: str,
+ subject: str,
+ #
+ username: str,
+ action: str,
+ workspace: str,
+ call_to_action: str,
+ #
+ from_email: str = None,
+) -> bool:
+ """
+ Render the shared email template and send it via SendGrid.
+
+ No-op (returns True) when SendGrid is unavailable (disabled or failed to
+ load). Callers that need to short-circuit on a disabled mailer before doing
+ other work should still gate on `env.sendgrid.enabled` themselves.
+
+ Returns True if the email was sent (or skipped because mailing is disabled),
+ raises on a send failure or missing sender address.
+ """
+
+ sendgrid = _load_sendgrid()
+ if sendgrid is None:
+ log.info(f"[SENDGRID] Email disabled - would send '{subject}' to {to_email}")
+ return True
+
+ sender = from_email or env.sendgrid.from_address
+ if not sender:
+ raise ValueError("Sendgrid requires a sender email address to work.")
+
+ html_content = _render_email_template(
+ username=username,
+ action=action,
+ workspace=workspace,
+ call_to_action=call_to_action,
+ )
+
+ message = Mail(
+ from_email=sender,
+ to_emails=to_email,
+ subject=subject,
+ html_content=html_content,
+ )
+
+ sendgrid.send(message)
+
+ return True
+
+
+def add_contact(email: str, max_retries: int = 5, initial_delay: int = 1):
+ """
+ Add a contact to the Loops audience, with retry and exponential backoff.
+
+ No-op (returns None) when Loops is disabled (no API key configured).
+
+ Args:
+ email (str): Email address of the contact to be added.
+ max_retries (int): Maximum number of retries in case of rate limiting.
+ initial_delay (int): Initial delay in seconds before retrying.
+
+ Raises:
+ ConnectionError: If max retries reached and unable to connect to Loops API.
+
+ Returns:
+ Optional[httpx.Response]: The Loops API response, or None when disabled.
+ """
+
+ if not env.loops.enabled:
+ log.info(f"[LOOPS] Disabled - would add contact {email}")
+ return None
+
+ url = "https://app.loops.so/api/v1/contacts/create"
+ headers = {"Authorization": f"Bearer {env.loops.api_key}"}
+ data = {"email": email}
+
+ retries = 0
+ delay = initial_delay
+
+ while retries < max_retries:
+ response = httpx.post(url, json=data, headers=headers, timeout=20)
+
+ # 429 indicates rate limiting; back off and retry.
+ if response.status_code == 429:
+ log.warning(f"[LOOPS] Rate limit hit. Retrying in {delay} seconds...")
+ time.sleep(delay)
+ retries += 1
+ delay *= 2
+ else:
+ return response
+
+ raise ConnectionError("Max retries reached. Unable to connect to Loops API.")
diff --git a/api/oss/src/utils/env.py b/api/oss/src/utils/env.py
index 89c6262bb2..88f6cb55b3 100644
--- a/api/oss/src/utils/env.py
+++ b/api/oss/src/utils/env.py
@@ -86,7 +86,7 @@ class AccessConfig(BaseModel):
"""Access controls (allow/block lists, plans + roles, default plan).
JSON env vars are parsed here at startup. Schema validation happens in
- ``ee.src.core.entitlements.controls``.
+ ``ee.src.core.access.controls``.
`default_plan` lives here (not under `agenta`) because it's part of the
access-controls surface: it selects which entry of the effective plan
diff --git a/api/oss/src/utils/lazy.py b/api/oss/src/utils/lazy.py
new file mode 100644
index 0000000000..15df32d5ad
--- /dev/null
+++ b/api/oss/src/utils/lazy.py
@@ -0,0 +1,117 @@
+from typing import Optional, TYPE_CHECKING
+
+if TYPE_CHECKING:
+ import stripe
+ import posthog
+ from sendgrid import SendGridAPIClient
+
+
+_stripe_module: Optional["stripe"] = None
+_stripe_checked = False
+
+_posthog_module: Optional["posthog"] = None
+_posthog_checked = False
+
+_sendgrid_client: Optional["SendGridAPIClient"] = None
+_sendgrid_checked = False
+
+
+def _load_stripe() -> Optional["stripe"]:
+ global _stripe_module, _stripe_checked
+
+ if _stripe_checked:
+ return _stripe_module
+
+ _stripe_checked = True
+ try:
+ from oss.src.utils.env import env
+ from oss.src.utils.logging import get_module_logger
+
+ log = get_module_logger(__name__)
+
+ # Gate on "enabled" here so the return value means "a usable, configured
+ # Stripe module": None signals "not available" (disabled OR import/config
+ # failure), and callers need a single `if stripe is None` check.
+ if not env.stripe.enabled:
+ log.warn("✗ Stripe disabled")
+ _stripe_module = None
+ return _stripe_module
+
+ import stripe as _stripe
+
+ _stripe.api_key = env.stripe.api_key
+ log.info("✓ Stripe enabled:", target=env.stripe.webhook_target)
+
+ _stripe_module = _stripe
+ except Exception:
+ _stripe_module = None
+
+ return _stripe_module
+
+
+def _load_posthog() -> Optional["posthog"]:
+ global _posthog_module, _posthog_checked
+
+ if _posthog_checked:
+ return _posthog_module
+
+ _posthog_checked = True
+ try:
+ from oss.src.utils.env import env
+ from oss.src.utils.logging import get_module_logger
+
+ log = get_module_logger(__name__)
+
+ # Gate on "enabled" here so the return value means "a usable, configured
+ # PostHog module": None signals "not available" (disabled OR import/config
+ # failure), and callers need a single `if posthog is None` check.
+ if not env.posthog.enabled:
+ log.warn("✗ PostHog disabled")
+ _posthog_module = None
+ return _posthog_module
+
+ import posthog as _posthog
+
+ _posthog.api_key = env.posthog.api_key
+ _posthog.host = env.posthog.api_url
+ log.info("✓ PostHog enabled")
+
+ _posthog_module = _posthog
+ except Exception:
+ _posthog_module = None
+
+ return _posthog_module
+
+
+def _load_sendgrid() -> Optional["SendGridAPIClient"]:
+ global _sendgrid_client, _sendgrid_checked
+
+ if _sendgrid_checked:
+ return _sendgrid_client
+
+ _sendgrid_checked = True
+ try:
+ from oss.src.utils.env import env
+ from oss.src.utils.logging import get_module_logger
+
+ log = get_module_logger(__name__)
+
+ # Gate on "enabled" here so the return value means "a usable, configured
+ # SendGrid client": None signals "not available" (disabled OR import/config
+ # failure), and callers need a single `if sg is None` check.
+ if not env.sendgrid.enabled:
+ if env.sendgrid.api_key and not env.sendgrid.from_address:
+ log.warn("✗ SendGrid disabled: missing sender email address")
+ else:
+ log.warn("✗ SendGrid disabled")
+ _sendgrid_client = None
+ return _sendgrid_client
+
+ import sendgrid
+
+ _sendgrid_client = sendgrid.SendGridAPIClient(api_key=env.sendgrid.api_key)
+ log.info("✓ SendGrid enabled")
+ except Exception:
+ _sendgrid_client = None
+
+ return _sendgrid_client
diff --git a/api/oss/src/utils/locking.py b/api/oss/src/utils/locking.py
new file mode 100644
index 0000000000..cf0f5c1460
--- /dev/null
+++ b/api/oss/src/utils/locking.py
@@ -0,0 +1,292 @@
+"""Distributed locks backed by Redis (volatile).
+
+Split out of `caching.py`: caching and locking share the same volatile Redis but
+use separate clients with different socket timeouts (locks may block, so they use
+the longer-timeout `LockEngine`). Lock keys are namespaced the same way as cache
+keys via `caching._pack`, so a lock and its related cache entries sort together.
+"""
+
+from typing import Optional, Union
+from uuid import uuid4
+
+from oss.src.utils.logging import get_module_logger
+from oss.src.utils.caching import _pack
+from oss.src.dbs.redis.shared.engine import get_lock_engine
+
+log = get_module_logger(__name__)
+
+AGENTA_LOCK_TTL = 15 # 15 seconds
+
+LOCK_DEBUG = False
+
+_lock_engine = get_lock_engine()
+
+
+# Ownership-safe lock scripts. Owner token must match to renew/release.
+_LOCK_RENEW_IF_OWNER_SCRIPT = """
+if redis.call("GET", KEYS[1]) == ARGV[1] then
+ return redis.call("EXPIRE", KEYS[1], tonumber(ARGV[2]))
+end
+return 0
+"""
+
+_LOCK_RELEASE_IF_OWNER_SCRIPT = """
+if redis.call("GET", KEYS[1]) == ARGV[1] then
+ return redis.call("DEL", KEYS[1])
+end
+return 0
+"""
+
+
+# LOCK-STORE PRIMITIVES --------------------------------------------------------
+#
+# Thin pass-throughs to the lock Redis client for callers that manage their own
+# lock-adjacent keys (e.g. lock metadata, worker heartbeats) and need direct
+# key/value access beyond acquire/renew/release. Keeping these here means such
+# callers depend only on `locking` and never hold a `LockEngine` themselves.
+
+
+async def set_key(key: str, value, *, ttl: Optional[int] = None) -> None:
+ """SET a lock-store key, optionally with a TTL (seconds)."""
+ await _lock_engine.set(key, value, ex=ttl)
+
+
+async def get_key(key: str):
+ """GET a lock-store key (raw bytes, or None)."""
+ return await _lock_engine.get(key)
+
+
+async def delete_key(key: str) -> None:
+ """DEL a lock-store key."""
+ await _lock_engine.delete(key)
+
+
+async def has_key(key: str) -> bool:
+ """EXISTS check for a lock-store key."""
+ return bool(await _lock_engine.exists(key))
+
+
+async def scan_keys(*, match: str):
+ """SCAN over lock-store keys matching `match` (async iterator).
+
+ Async generator — iterate with `async for`. Uses SCAN, never KEYS.
+ """
+ async for key in _lock_engine.scan_iter(match=match):
+ yield key
+
+
+async def acquire_lock(
+ namespace: str,
+ key: Optional[Union[str, dict]] = None,
+ project_id: Optional[str] = None,
+ user_id: Optional[str] = None,
+ ttl: int = AGENTA_LOCK_TTL,
+ strict: bool = False,
+) -> Optional[str]:
+ """Acquire a distributed lock using Redis SET NX (atomic check-and-set).
+
+ This prevents race conditions in distributed systems by ensuring only one
+ process can acquire the lock at a time.
+
+ Args:
+ namespace: Lock namespace (e.g., "account-creation", "task-processing")
+ key: Unique identifier for the lock (e.g., email, user_id, task_id)
+ project_id: Optional project scope
+ user_id: Optional user scope
+ ttl: Lock expiration time in seconds (default: 15). Auto-releases after TTL.
+ strict: If True, re-raise Redis errors instead of returning None.
+
+ Returns:
+ Lock owner token if lock was acquired, None if lock is already held by another process.
+
+ Example:
+ lock_owner = await acquire_lock(namespace="account-creation", key=email, ttl=10)
+ if not lock_owner:
+ # Another process has the lock
+ return
+
+ try:
+ # Do work while holding the lock
+ await create_account(email)
+ finally:
+ # Always release the lock
+ await release_lock(
+ namespace="account-creation",
+ key=email,
+ owner=lock_owner,
+ )
+ """
+ try:
+ lock_key = _pack(
+ namespace=f"lock:{namespace}",
+ key=key,
+ project_id=project_id,
+ user_id=user_id,
+ )
+ lock_owner = uuid4().hex
+
+ # Atomic SET NX: Returns True if lock acquired, False if already held
+ acquired = await _lock_engine.set(lock_key, lock_owner, nx=True, ex=ttl)
+
+ if acquired:
+ if LOCK_DEBUG:
+ log.debug(
+ "[lock] ACQUIRED",
+ key=lock_key,
+ ttl=ttl,
+ )
+ return lock_owner
+ else:
+ if LOCK_DEBUG:
+ log.debug(
+ "[lock] BLOCKED",
+ key=lock_key,
+ )
+ return None
+
+ except Exception as e:
+ log.error(
+ f"[lock] ACQUIRE ERROR: namespace={namespace} key={key} error={e}",
+ exc_info=True,
+ )
+ if strict:
+ raise
+ return None
+
+
+async def renew_lock(
+ namespace: str,
+ key: Optional[Union[str, dict]] = None,
+ project_id: Optional[str] = None,
+ user_id: Optional[str] = None,
+ ttl: int = AGENTA_LOCK_TTL,
+ owner: Optional[str] = None,
+) -> bool:
+ """Renew (extend) the TTL of an existing distributed lock.
+
+ Use this to prevent lock expiration during long-running operations.
+ Only succeeds if the lock key still exists in Redis. If an owner token is
+ provided, renewal only succeeds when ownership matches.
+
+ Args:
+ namespace: Lock namespace (same as used in acquire_lock)
+ key: Lock key (same as used in acquire_lock)
+ project_id: Optional project ID (same as used in acquire_lock)
+ user_id: Optional user ID (same as used in acquire_lock)
+ ttl: New expiration time in seconds
+ owner: Optional owner token returned by acquire_lock
+
+ Returns:
+ True if lock was renewed, False if lock has already expired or on error
+ """
+ try:
+ lock_key = _pack(
+ namespace=f"lock:{namespace}",
+ key=key,
+ project_id=project_id,
+ user_id=user_id,
+ )
+
+ if owner:
+ renewed = await _lock_engine.eval(
+ _LOCK_RENEW_IF_OWNER_SCRIPT,
+ 1,
+ lock_key,
+ owner,
+ str(ttl),
+ )
+ else:
+ renewed = await _lock_engine.expire(lock_key, ttl)
+
+ if renewed:
+ if LOCK_DEBUG:
+ log.debug(
+ "[lock] RENEWED",
+ key=lock_key,
+ ttl=ttl,
+ )
+ return True
+ else:
+ log.warn(
+ f"[lock] RENEW FAILED (expired or lost ownership): namespace={namespace} key={key}"
+ )
+ return False
+
+ except Exception as e:
+ log.error(
+ f"[lock] RENEW ERROR: namespace={namespace} key={key} error={e}",
+ exc_info=True,
+ )
+ return False
+
+
+async def release_lock(
+ namespace: str,
+ key: Optional[Union[str, dict]] = None,
+ project_id: Optional[str] = None,
+ user_id: Optional[str] = None,
+ owner: Optional[str] = None,
+ strict: bool = False,
+) -> bool:
+ """Release a distributed lock acquired with acquire_lock().
+
+ Args:
+ namespace: Lock namespace (same as used in acquire_lock)
+ key: Lock key (same as used in acquire_lock)
+ project_id: Optional project ID (same as used in acquire_lock)
+ user_id: Optional user ID (same as used in acquire_lock)
+ owner: Optional owner token returned by acquire_lock
+ strict: If True, re-raise Redis errors instead of returning False.
+
+ Returns:
+ True if lock was released, False if already expired.
+
+ Example:
+ lock_acquired = await acquire_lock(namespace="account-creation", key=email)
+ if lock_acquired:
+ try:
+ # ... critical section ...
+ finally:
+ await release_lock(namespace="account-creation", key=email)
+ """
+ try:
+ lock_key = _pack(
+ namespace=f"lock:{namespace}",
+ key=key,
+ project_id=project_id,
+ user_id=user_id,
+ )
+
+ if owner:
+ deleted = await _lock_engine.eval(
+ _LOCK_RELEASE_IF_OWNER_SCRIPT,
+ 1,
+ lock_key,
+ owner,
+ )
+ else:
+ deleted = await _lock_engine.delete(lock_key)
+
+ if deleted:
+ if LOCK_DEBUG:
+ log.debug(
+ "[lock] RELEASED",
+ key=lock_key,
+ )
+ return True
+ else:
+ if LOCK_DEBUG:
+ log.debug(
+ "[lock] ALREADY EXPIRED OR OWNED BY ANOTHER WORKER",
+ key=lock_key,
+ )
+ return False
+
+ except Exception as e:
+ log.error(
+ f"[lock] RELEASE ERROR: namespace={namespace} key={key} error={e}",
+ exc_info=True,
+ )
+ if strict:
+ raise
+ return False
diff --git a/api/oss/tests/legacy/old_tests/unit/test_llm_apps_service.py b/api/oss/tests/legacy/old_tests/unit/test_llm_apps_service.py
deleted file mode 100644
index 04d729ad0b..0000000000
--- a/api/oss/tests/legacy/old_tests/unit/test_llm_apps_service.py
+++ /dev/null
@@ -1,209 +0,0 @@
-import pytest
-from unittest.mock import patch, AsyncMock
-import aiohttp
-
-from oss.src.services.llm_apps_service import (
- batch_invoke,
- InvokationResult,
- Result,
-)
-
-
-@pytest.mark.asyncio
-async def test_batch_invoke_success():
- """
- Test the successful invocation of batch_invoke function.
-
- This test mocks the get_parameters_from_openapi and invoke_app functions
- to simulate successful invocations. It verifies that the batch_invoke
- function correctly returns the expected results for the given test data.
- """
- with (
- patch(
- "src.services.llm_apps_service.get_parameters_from_openapi",
- new_callable=AsyncMock,
- ) as mock_get_parameters_from_openapi,
- patch(
- "src.services.llm_apps_service.invoke_app", new_callable=AsyncMock
- ) as mock_invoke_app,
- patch("asyncio.sleep", new_callable=AsyncMock) as mock_sleep, # noqa: F841
- ):
- mock_get_parameters_from_openapi.return_value = [
- {"name": "param1", "type": "input"},
- {"name": "param2", "type": "input"},
- ]
-
- # Mock the response of invoke_app to always succeed
- def invoke_app_side_effect(
- uri,
- datapoint,
- parameters,
- openapi_parameters,
- user_id,
- project_id,
- ):
- return InvokationResult(
- result=Result(type="text", value="Success", error=None),
- latency=0.1,
- cost=0.01,
- tokens=1,
- )
-
- mock_invoke_app.side_effect = invoke_app_side_effect
-
- uri = "http://example.com"
- testset_data = [
- {"id": 1, "param1": "value1", "param2": "value2"},
- {"id": 2, "param1": "value1", "param2": "value2"},
- ]
- parameters = {}
- rate_limit_config = {
- "batch_size": 10,
- "max_retries": 3,
- "retry_delay": 3,
- "delay_between_batches": 5,
- }
-
- results = await batch_invoke(
- uri,
- testset_data,
- parameters=parameters,
- rate_limit_config=rate_limit_config,
- user_id="test_user",
- project_id="test_project",
- )
-
- assert len(results) == 2
- assert results[0].result.type == "text"
- assert results[0].result.value == "Success"
- assert results[1].result.type == "text"
- assert results[1].result.value == "Success"
-
-
-@pytest.mark.asyncio
-async def test_batch_invoke_retries_and_failure():
- """
- Test the batch_invoke function with retries and eventual failure.
-
- This test mocks the get_parameters_from_openapi and invoke_app functions
- to simulate failures that trigger retries. It verifies that the batch_invoke
- function correctly retries the specified number of times and returns an error
- result after reaching the maximum retries.
- """
- with (
- patch(
- "src.services.llm_apps_service.get_parameters_from_openapi",
- new_callable=AsyncMock,
- ) as mock_get_parameters_from_openapi,
- patch(
- "src.services.llm_apps_service.invoke_app", new_callable=AsyncMock
- ) as mock_invoke_app,
- patch("asyncio.sleep", new_callable=AsyncMock) as mock_sleep, # noqa: F841
- ):
- mock_get_parameters_from_openapi.return_value = [
- {"name": "param1", "type": "input"},
- {"name": "param2", "type": "input"},
- ]
-
- # Mock the response of invoke_app to always fail
- def invoke_app_side_effect(
- uri,
- datapoint,
- parameters,
- openapi_parameters,
- user_id,
- project_id,
- ):
- raise aiohttp.ClientError("Test Error")
-
- mock_invoke_app.side_effect = invoke_app_side_effect
-
- uri = "http://example.com"
- testset_data = [
- {"id": 1, "param1": "value1", "param2": "value2"},
- {"id": 2, "param1": "value1", "param2": "value2"},
- ]
- parameters = {}
- rate_limit_config = {
- "batch_size": 10,
- "max_retries": 3,
- "retry_delay": 3,
- "delay_between_batches": 5,
- }
-
- results = await batch_invoke(
- uri,
- testset_data,
- parameters=parameters,
- rate_limit_config=rate_limit_config,
- user_id="test_user",
- project_id="test_project",
- )
-
- assert len(results) == 2
- assert results[0].result.type == "error"
- assert results[0].result.error.message == "Max retries reached"
- assert results[1].result.type == "error"
- assert results[1].result.error.message == "Max retries reached"
-
-
-@pytest.mark.asyncio
-async def test_batch_invoke_generic_exception():
- """
- Test the batch_invoke function with a generic exception.
-
- This test mocks the get_parameters_from_openapi and invoke_app functions
- to simulate a generic exception during invocation. It verifies that the
- batch_invoke function correctly handles the exception and returns an error
- result with the appropriate error message.
- """
- with (
- patch(
- "src.m_apps_service.get_parameters_from_openapi",
- new_callable=AsyncMock,
- ) as mock_get_parameters_from_openapi,
- patch(
- "src.services.llm_apps_service.invoke_app", new_callable=AsyncMock
- ) as mock_invoke_app,
- patch("asyncio.sleep", new_callable=AsyncMock) as mock_sleep, # noqa: F841
- ):
- mock_get_parameters_from_openapi.return_value = [
- {"name": "param1", "type": "input"},
- {"name": "param2", "type": "input"},
- ]
-
- # Mock the response of invoke_app to raise a generic exception
- def invoke_app_side_effect(
- uri,
- datapoint,
- parameters,
- openapi_parameters,
- user_id,
- project_id,
- ):
- raise Exception("Generic Error")
-
- mock_invoke_app.side_effect = invoke_app_side_effect
-
- uri = "http://example.com"
- testset_data = [{"id": 1, "param1": "value1", "param2": "value2"}]
- parameters = {}
- rate_limit_config = {
- "batch_size": 1,
- "max_retries": 3,
- "retry_delay": 1,
- "delay_between_batches": 1,
- }
-
- results = await batch_invoke(
- uri,
- testset_data,
- parameters=parameters,
- rate_limit_config=rate_limit_config,
- user_id="test_user",
- project_id="test_project",
- )
-
- assert len(results) == 1
- assert results[0].result.type == "error"
- assert results[0].result.error.message == "Max retries reached"
diff --git a/api/oss/tests/legacy/vault_router/conftest.py b/api/oss/tests/legacy/vault_router/conftest.py
index aef2c39a57..ec4abb182f 100644
--- a/api/oss/tests/legacy/vault_router/conftest.py
+++ b/api/oss/tests/legacy/vault_router/conftest.py
@@ -6,7 +6,7 @@
AGENTA_HOST = os.environ.get("AGENTA_HOST", "http://localhost")
-API_BASE_URL = f"{AGENTA_HOST}/api/vault/v1/"
+API_BASE_URL = f"{AGENTA_HOST}/api/"
@pytest.fixture
diff --git a/api/oss/tests/pytest/acceptance/accounts/test_actions.py b/api/oss/tests/pytest/acceptance/accounts/test_actions.py
index c94d1ab81d..a3a7d24ec7 100644
--- a/api/oss/tests/pytest/acceptance/accounts/test_actions.py
+++ b/api/oss/tests/pytest/acceptance/accounts/test_actions.py
@@ -8,6 +8,8 @@
"""
from uuid import uuid4
+import os
+import pytest
# ---------------------------------------------------------------------------
@@ -58,6 +60,10 @@ def _delete_account_by_email(admin_api, *, email):
class TestResetPassword:
+ @pytest.mark.skipif(
+ not os.getenv("POSTHOG_API_KEY"),
+ reason="PostHog API key not configured",
+ )
def test_reset_password_for_existing_identity(self, admin_api):
uid = uuid4().hex[:12]
email = f"reset-{uid}@test.agenta.ai"
diff --git a/api/oss/tests/pytest/acceptance/evaluations/_flow_helpers.py b/api/oss/tests/pytest/acceptance/evaluations/_flow_helpers.py
new file mode 100644
index 0000000000..7dfde2067e
--- /dev/null
+++ b/api/oss/tests/pytest/acceptance/evaluations/_flow_helpers.py
@@ -0,0 +1,254 @@
+"""
+Shared helpers for end-to-end evaluation FLOW tests.
+
+These tests trigger a real evaluation run through the worker + services
+container and poll for completion. They run WITHOUT any LLM or code sandbox by
+using the `agenta:custom:mock:v0` workflow for both the application
+(invocation) and the evaluator (annotation). The mock workflow returns
+predefined results selected by `parameters = {"key": ..., "kwargs": {...}}`.
+
+See `sdks/python/agenta/sdk/engines/running/handlers.py::mock_v0` for the
+selector vocabulary (echo / static / pass / fail / score / error / delay).
+"""
+
+from uuid import uuid4
+
+from utils.polling import wait_for_response
+
+
+MOCK_URI = "agenta:custom:mock:v0"
+
+
+# - resource creation ---------------------------------------------------------
+
+
+def create_mock_application(authed_api, *, key="echo", kwargs=None) -> dict:
+ """Create a deterministic mock application (no LLM). Returns the application dict."""
+ slug = uuid4().hex
+ response = authed_api(
+ "POST",
+ "/simple/applications/",
+ json={
+ "application": {
+ "slug": f"application-{slug}",
+ "name": f"Mock Application {slug}",
+ "data": {
+ "uri": MOCK_URI,
+ "parameters": {"key": key, "kwargs": kwargs or {}},
+ },
+ }
+ },
+ )
+ assert response.status_code == 200, response.text
+ return response.json()["application"]
+
+
+def create_mock_evaluator(authed_api, *, key="pass", kwargs=None) -> dict:
+ """Create a deterministic mock evaluator (no LLM). Returns the evaluator dict."""
+ slug = uuid4().hex
+ response = authed_api(
+ "POST",
+ "/simple/evaluators/",
+ json={
+ "evaluator": {
+ "slug": f"evaluator-{slug}",
+ "name": f"Mock Evaluator {slug}",
+ "data": {
+ "uri": MOCK_URI,
+ "parameters": {"key": key, "kwargs": kwargs or {}},
+ },
+ }
+ },
+ )
+ assert response.status_code == 200, response.text
+ return response.json()["evaluator"]
+
+
+def create_query(authed_api, *, trace_type="invocation") -> dict:
+ """Create a simple query (filters over traces). Returns the query dict."""
+ slug = uuid4().hex
+ response = authed_api(
+ "POST",
+ "/simple/queries/",
+ json={
+ "query": {
+ "slug": f"query-{slug}",
+ "name": f"Query {slug}",
+ "data": {
+ "filtering": {
+ "operator": "and",
+ "conditions": [
+ {
+ "field": "trace_type",
+ "operator": "is",
+ "value": trace_type,
+ }
+ ],
+ }
+ },
+ }
+ },
+ )
+ assert response.status_code == 200, response.text
+ return response.json()["query"]
+
+
+def create_testset(authed_api, *, testcases=None) -> dict:
+ """Create a simple testset. Returns the testset dict (with revision_id)."""
+ slug = uuid4().hex
+ if testcases is None:
+ testcases = [
+ {"data": {"input": "hello", "expected": "world"}},
+ {"data": {"input": "hola", "expected": "mundo"}},
+ ]
+ response = authed_api(
+ "POST",
+ "/simple/testsets/",
+ json={
+ "testset": {
+ "slug": f"testset-{slug}",
+ "name": f"Testset {slug}",
+ "data": {"testcases": testcases},
+ }
+ },
+ )
+ assert response.status_code == 200, response.text
+ return response.json()["testset"]
+
+
+# - triggering and waiting -----------------------------------------------------
+
+# Terminal statuses for an evaluation run.
+TERMINAL_STATUSES = {"success", "failure", "errors", "cancelled"}
+
+
+def create_simple_evaluation(authed_api, *, name, data, flags=None) -> dict:
+ """Create (and auto-start) a simple evaluation. Returns the evaluation dict."""
+ payload = {"name": name, "data": data}
+ if flags is not None:
+ payload["flags"] = flags
+ response = authed_api(
+ "POST",
+ "/simple/evaluations/",
+ json={"evaluation": payload},
+ )
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert body["count"] == 1, body
+ return body["evaluation"]
+
+
+def wait_for_run_terminal(authed_api, run_id, *, max_retries=20):
+ """Poll the run until it reaches a terminal status. Returns the final response."""
+ return wait_for_response(
+ authed_api,
+ "GET",
+ f"/evaluations/runs/{run_id}",
+ condition_fn=lambda r: (
+ r.status_code == 200
+ and (r.json().get("run") or {}).get("status") in TERMINAL_STATUSES
+ ),
+ max_retries=max_retries,
+ )
+
+
+def fetch_run(authed_api, run_id) -> dict:
+ """Return the run dict."""
+ response = authed_api("GET", f"/evaluations/runs/{run_id}")
+ assert response.status_code == 200, response.text
+ return response.json().get("run") or {}
+
+
+def query_scenarios(authed_api, run_id):
+ """Return the list of scenarios for a run."""
+ response = authed_api(
+ "POST",
+ "/evaluations/scenarios/query",
+ json={"scenario": {"run_id": str(run_id)}},
+ )
+ assert response.status_code == 200, response.text
+ return response.json().get("scenarios", [])
+
+
+def query_metrics(authed_api, run_id):
+ """Return the list of metrics for a run."""
+ response = authed_api(
+ "POST",
+ "/evaluations/metrics/query",
+ json={"metrics": {"run_id": str(run_id)}},
+ )
+ assert response.status_code == 200, response.text
+ return response.json().get("metrics", [])
+
+
+def wait_for_metrics(
+ authed_api, run_id, *, expected_count=1, condition=None, max_retries=20
+):
+ """Poll metrics until they satisfy a condition, then return them.
+
+ A run can flip to a terminal status a beat before its metric rows are
+ written, and the worker writes them incrementally per scenario, so tests
+ poll here rather than reading once. By default waits for `expected_count`
+ rows; pass `condition` (a callable over the metrics list) to wait for a
+ settled shape (e.g. the global aggregate reaching its final count).
+ """
+ if condition is None:
+
+ def condition(metrics):
+ return len(metrics) >= expected_count
+
+ wait_for_response(
+ authed_api,
+ "POST",
+ "/evaluations/metrics/query",
+ json={"metrics": {"run_id": str(run_id)}},
+ condition_fn=lambda r: (
+ r.status_code == 200 and condition(r.json().get("metrics", []))
+ ),
+ max_retries=max_retries,
+ )
+ return query_metrics(authed_api, run_id)
+
+
+# - lifecycle mutations --------------------------------------------------------
+
+
+def start_evaluation(authed_api, evaluation_id):
+ """Re-start (re-dispatch) an existing simple evaluation."""
+ response = authed_api("POST", f"/simple/evaluations/{evaluation_id}/start")
+ assert response.status_code == 200, response.text
+ return response.json().get("evaluation") or {}
+
+
+def close_run(authed_api, run_id):
+ """Close (lock) a run."""
+ response = authed_api("POST", f"/evaluations/runs/{run_id}/close")
+ assert response.status_code == 200, response.text
+ return response.json()
+
+
+def open_run(authed_api, run_id):
+ """Open (unlock) a run."""
+ response = authed_api("POST", f"/evaluations/runs/{run_id}/open")
+ assert response.status_code == 200, response.text
+ return response.json()
+
+
+def fetch_default_queue(authed_api, run_id) -> dict:
+ """Return the run's default queue dict (or {} if none)."""
+ response = authed_api("GET", f"/evaluations/runs/{run_id}/queues/default")
+ assert response.status_code == 200, response.text
+ return response.json().get("queue") or {}
+
+
+def create_queue(authed_api, run_id, *, is_default=False, name=None) -> dict:
+ """Create a queue on a run. Defaults to a NON-default queue.
+
+ Returns the created queue dict.
+ """
+ queue = {"run_id": run_id, "flags": {"is_default": is_default}}
+ if name:
+ queue["name"] = name
+ response = authed_api("POST", "/evaluations/queues/", json={"queues": [queue]})
+ assert response.status_code == 200, response.text
+ return response.json()["queues"][0]
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_closed_run_guard.py b/api/oss/tests/pytest/acceptance/evaluations/test_closed_run_guard.py
new file mode 100644
index 0000000000..470ce334bf
--- /dev/null
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_closed_run_guard.py
@@ -0,0 +1,112 @@
+"""
+Closed-run mutation guard.
+
+Closing a run (`POST /runs/{id}/close`) locks it: subsequent content mutations
+(edit run, create scenario/result, create/refresh metrics) raise
+`EvaluationClosedConflict`, surfaced as HTTP 409. Opening the run again
+(`POST /runs/{id}/open`) lifts the lock.
+
+Queue archive/unarchive is intentionally NOT blocked on a closed run — that is a
+worklist action, covered by test_evaluation_flows_modify.py.
+"""
+
+from uuid import uuid4
+
+
+def _create_run(authed_api, steps=None) -> dict:
+ payload = {"name": f"closed-guard-{uuid4()}"}
+ if steps is not None:
+ payload["data"] = {"steps": steps}
+ response = authed_api("POST", "/evaluations/runs/", json={"runs": [payload]})
+ assert response.status_code == 200, response.text
+ return response.json()["runs"][0]
+
+
+def _create_scenario(authed_api, run_id) -> str:
+ response = authed_api(
+ "POST", "/evaluations/scenarios/", json={"scenarios": [{"run_id": run_id}]}
+ )
+ assert response.status_code == 200, response.text
+ return response.json()["scenarios"][0]["id"]
+
+
+def _close(authed_api, run_id):
+ response = authed_api("POST", f"/evaluations/runs/{run_id}/close")
+ assert response.status_code == 200, response.text
+
+
+def _open(authed_api, run_id):
+ response = authed_api("POST", f"/evaluations/runs/{run_id}/open")
+ assert response.status_code == 200, response.text
+
+
+class TestClosedRunGuard:
+ def test_close_sets_is_closed_then_open_clears_it(self, authed_api):
+ run = _create_run(authed_api)
+ run_id = run["id"]
+
+ _close(authed_api, run_id)
+ fetched = authed_api("GET", f"/evaluations/runs/{run_id}").json()["run"]
+ assert fetched["flags"]["is_closed"] is True
+
+ _open(authed_api, run_id)
+ fetched = authed_api("GET", f"/evaluations/runs/{run_id}").json()["run"]
+ assert fetched["flags"]["is_closed"] is False
+
+ def test_edit_closed_run_is_blocked(self, authed_api):
+ run = _create_run(authed_api)
+ run_id = run["id"]
+ _close(authed_api, run_id)
+
+ response = authed_api(
+ "PATCH",
+ f"/evaluations/runs/{run_id}",
+ json={"run": {"id": run_id, "name": "renamed-after-close"}},
+ )
+ assert response.status_code == 409, response.text
+
+ def test_create_scenario_in_closed_run_is_blocked(self, authed_api):
+ run = _create_run(authed_api)
+ run_id = run["id"]
+ _close(authed_api, run_id)
+
+ response = authed_api(
+ "POST", "/evaluations/scenarios/", json={"scenarios": [{"run_id": run_id}]}
+ )
+ assert response.status_code == 409, response.text
+
+ def test_create_result_in_closed_run_is_blocked(self, authed_api):
+ run = _create_run(authed_api)
+ run_id = run["id"]
+ scenario_id = _create_scenario(authed_api, run_id)
+ _close(authed_api, run_id)
+
+ response = authed_api(
+ "POST",
+ "/evaluations/results/",
+ json={
+ "results": [
+ {
+ "step_key": "input",
+ "repeat_idx": 0,
+ "scenario_id": scenario_id,
+ "run_id": run_id,
+ }
+ ]
+ },
+ )
+ assert response.status_code == 409, response.text
+
+ def test_edit_allowed_again_after_open(self, authed_api):
+ run = _create_run(authed_api)
+ run_id = run["id"]
+ _close(authed_api, run_id)
+ _open(authed_api, run_id)
+
+ response = authed_api(
+ "PATCH",
+ f"/evaluations/runs/{run_id}",
+ json={"run": {"id": run_id, "name": "renamed-after-open"}},
+ )
+ assert response.status_code == 200, response.text
+ assert response.json()["run"]["name"] == "renamed-after-open"
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_default_queue_lifecycle.py b/api/oss/tests/pytest/acceptance/evaluations/test_default_queue_lifecycle.py
new file mode 100644
index 0000000000..f6ff4b152f
--- /dev/null
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_default_queue_lifecycle.py
@@ -0,0 +1,160 @@
+"""
+Default-queue reconciliation state machine.
+
+`_reconcile_default_queue` runs after every create/edit of a run and brings the
+default queue + `run.flags.is_queue` in line with the run graph:
+
+ should_exist = EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS or has_human
+
+ required + missing -> create default queue
+ required + archived -> unarchive default queue
+ required + active -> no-op
+ not-required + active -> archive default queue
+
+`is_queue == has_human AND an active default queue exists`.
+
+Driven through `/evaluations/runs/` (create + PATCH steps) — no worker needed;
+reconciliation is synchronous in the create/edit path.
+"""
+
+from uuid import uuid4
+
+
+def _input_step():
+ return {
+ "key": "input",
+ "type": "input",
+ "origin": "custom",
+ "references": {"testset": {"id": str(uuid4())}},
+ }
+
+
+def _human_step():
+ return {
+ "key": "annotation-human",
+ "type": "annotation",
+ "origin": "human",
+ "references": {"evaluator_revision": {"id": str(uuid4())}},
+ "inputs": [{"key": "input"}],
+ }
+
+
+def _auto_step():
+ return {
+ "key": "annotation-auto",
+ "type": "annotation",
+ "origin": "auto",
+ "references": {"evaluator_revision": {"id": str(uuid4())}},
+ "inputs": [{"key": "input"}],
+ }
+
+
+def _create_run(authed_api, steps):
+ response = authed_api(
+ "POST",
+ "/evaluations/runs/",
+ json={"runs": [{"name": "dq-lifecycle", "data": {"steps": steps}}]},
+ )
+ assert response.status_code == 200, response.text
+ return response.json()["runs"][0]
+
+
+def _patch_steps(authed_api, run, steps):
+ response = authed_api(
+ "PATCH",
+ f"/evaluations/runs/{run['id']}",
+ json={"run": {"id": run["id"], "name": run["name"], "data": {"steps": steps}}},
+ )
+ assert response.status_code == 200, response.text
+ return response.json()["run"]
+
+
+def _default_queue(authed_api, run_id) -> dict:
+ response = authed_api("GET", f"/evaluations/runs/{run_id}/queues/default")
+ assert response.status_code == 200, response.text
+ return response.json().get("queue") or {}
+
+
+class TestDefaultQueueLifecycle:
+ def test_required_missing_creates_default_queue(self, authed_api):
+ # required + missing -> CREATE. A run with a human step gets a default
+ # queue and is_queue=True at creation.
+ run = _create_run(authed_api, steps=[_input_step(), _human_step()])
+ assert run["flags"]["has_human"] is True
+ assert run["flags"]["is_queue"] is True
+
+ dq = _default_queue(authed_api, run["id"])
+ assert dq.get("id"), dq
+ assert dq["flags"]["is_default"] is True
+
+ def test_not_required_active_archives_default_queue(self, authed_api):
+ # not-required + active -> ARCHIVE. Dropping the human step removes queue
+ # eligibility; the default queue is archived and is_queue flips False.
+ run = _create_run(authed_api, steps=[_input_step(), _human_step()])
+ assert _default_queue(authed_api, run["id"]).get("id")
+
+ edited = _patch_steps(authed_api, run, steps=[_input_step(), _auto_step()])
+ assert edited["flags"]["has_human"] is False
+ assert edited["flags"]["is_queue"] is False
+ # active default queue is gone (archived)
+ assert _default_queue(authed_api, run["id"]) == {}
+
+ def test_required_archived_unarchives_default_queue(self, authed_api):
+ # required + archived -> UNARCHIVE. Re-adding a human step after the
+ # default queue was archived brings it back and re-sets is_queue=True.
+ run = _create_run(authed_api, steps=[_input_step(), _human_step()])
+ # drop human -> archive
+ _patch_steps(authed_api, run, steps=[_input_step(), _auto_step()])
+ assert _default_queue(authed_api, run["id"]) == {}
+
+ # re-add human -> unarchive
+ re_added = _patch_steps(authed_api, run, steps=[_input_step(), _human_step()])
+ assert re_added["flags"]["has_human"] is True
+ assert re_added["flags"]["is_queue"] is True
+ dq = _default_queue(authed_api, run["id"])
+ assert dq.get("id"), dq
+
+ def test_required_active_is_noop(self, authed_api):
+ # required + active -> NO-OP. Editing a run that keeps its human step
+ # (changing an unrelated step) keeps the SAME default queue active.
+ run = _create_run(authed_api, steps=[_input_step(), _human_step()])
+ dq_before = _default_queue(authed_api, run["id"])
+ assert dq_before.get("id")
+
+ # edit graph but keep the human step (add an auto step alongside)
+ edited = _patch_steps(
+ authed_api, run, steps=[_input_step(), _human_step(), _auto_step()]
+ )
+ assert edited["flags"]["is_queue"] is True
+ dq_after = _default_queue(authed_api, run["id"])
+ assert dq_after.get("id") == dq_before["id"], (dq_before, dq_after)
+
+ def test_non_human_run_has_no_default_queue(self, authed_api):
+ # auto-only run: not a queue, no default queue created.
+ run = _create_run(authed_api, steps=[_input_step(), _auto_step()])
+ assert run["flags"]["has_human"] is False
+ assert run["flags"]["is_queue"] is False
+ assert _default_queue(authed_api, run["id"]) == {}
+
+ def test_planted_is_queue_flag_is_reconciled_back(self, authed_api):
+ # is_queue is service-derived: an edit that tries to PLANT is_queue=True
+ # on a run that is not queue-eligible (no human step) must be reconciled
+ # back to False rather than persisted as-is.
+ run = _create_run(authed_api, steps=[_input_step(), _auto_step()])
+ assert run["flags"]["is_queue"] is False
+
+ response = authed_api(
+ "PATCH",
+ f"/evaluations/runs/{run['id']}",
+ json={
+ "run": {
+ "id": run["id"],
+ "name": run["name"],
+ "flags": {"is_queue": True},
+ "data": {"steps": [_input_step(), _auto_step()]},
+ }
+ },
+ )
+ assert response.status_code == 200, response.text
+ assert response.json()["run"]["flags"]["is_queue"] is False
+ assert _default_queue(authed_api, run["id"]) == {}
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_default_queue_policy.py b/api/oss/tests/pytest/acceptance/evaluations/test_default_queue_policy.py
new file mode 100644
index 0000000000..c4d87bfa1e
--- /dev/null
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_default_queue_policy.py
@@ -0,0 +1,195 @@
+"""
+Default-queue policy + validation.
+
+A *default* queue (`flags.is_default=True`) is a system-managed worklist tied to
+a run's human evaluators. It must not carry per-user/scenario/step/batch filters,
+must not be demoted to a normal queue, and must not be hard-deleted (archive
+instead). These are enforced in the service layer with typed domain exceptions
+(`DefaultQueueDataInvalid` -> 422, `DefaultQueueDemotionForbidden` /
+`DefaultQueueDeletionForbidden` -> 409).
+
+These tests drive the `/evaluations/queues/` HTTP surface directly — no worker.
+"""
+
+from uuid import uuid4
+
+import pytest
+
+
+def _create_run(authed_api, name=None) -> str:
+ response = authed_api(
+ "POST",
+ "/evaluations/runs/",
+ json={"runs": [{"name": name or f"run-{uuid4()}"}]},
+ )
+ assert response.status_code == 200, response.text
+ return response.json()["runs"][0]["id"]
+
+
+def _create_queue(authed_api, run_id, *, flags=None, data=None, name=None):
+ queue = {"run_id": run_id}
+ if name:
+ queue["name"] = name
+ if flags is not None:
+ queue["flags"] = flags
+ if data is not None:
+ queue["data"] = data
+ return authed_api("POST", "/evaluations/queues/", json={"queues": [queue]})
+
+
+class TestDefaultQueueDataValidation:
+ # A default queue may not carry scenario/step/assignment/batch filters.
+
+ @pytest.mark.parametrize(
+ "field,value",
+ [
+ ("user_ids", [[str(uuid4())]]),
+ ("scenario_ids", [str(uuid4())]),
+ ("step_keys", ["annotation"]),
+ ("batch_size", 5),
+ ("batch_offset", 0),
+ ],
+ ids=["user_ids", "scenario_ids", "step_keys", "batch_size", "batch_offset"],
+ )
+ def test_default_queue_with_filter_field_is_rejected(
+ self, authed_api, field, value
+ ):
+ run_id = _create_run(authed_api)
+ response = _create_queue(
+ authed_api,
+ run_id,
+ flags={"is_default": True},
+ data={field: value},
+ )
+ # DefaultQueueDataInvalid -> 422
+ assert response.status_code == 422, response.text
+
+ def test_non_default_queue_may_carry_filter_fields(self, authed_api):
+ run_id = _create_run(authed_api)
+ response = _create_queue(
+ authed_api,
+ run_id,
+ flags={"is_default": False},
+ data={"step_keys": ["annotation"], "batch_size": 5},
+ )
+ assert response.status_code == 200, response.text
+ assert response.json()["count"] == 1
+
+ def test_default_queue_without_filters_is_accepted(self, authed_api):
+ run_id = _create_run(authed_api)
+ response = _create_queue(
+ authed_api,
+ run_id,
+ flags={"is_default": True},
+ data={},
+ )
+ assert response.status_code == 200, response.text
+ assert response.json()["count"] == 1
+
+
+class TestDefaultQueueDemotionForbidden:
+ def _create_default_queue(self, authed_api):
+ run_id = _create_run(authed_api)
+ resp = _create_queue(authed_api, run_id, flags={"is_default": True})
+ assert resp.status_code == 200, resp.text
+ return resp.json()["queues"][0]["id"]
+
+ def test_demoting_default_queue_is_forbidden(self, authed_api):
+ queue_id = self._create_default_queue(authed_api)
+ response = authed_api(
+ "PATCH",
+ f"/evaluations/queues/{queue_id}",
+ json={"queue": {"id": queue_id, "flags": {"is_default": False}}},
+ )
+ # DefaultQueueDemotionForbidden -> 409
+ assert response.status_code == 409, response.text
+
+ def test_keeping_default_flag_on_edit_is_allowed(self, authed_api):
+ queue_id = self._create_default_queue(authed_api)
+ response = authed_api(
+ "PATCH",
+ f"/evaluations/queues/{queue_id}",
+ json={
+ "queue": {
+ "id": queue_id,
+ "name": "renamed",
+ "flags": {"is_default": True},
+ }
+ },
+ )
+ assert response.status_code == 200, response.text
+ assert response.json()["queue"]["name"] == "renamed"
+
+ def test_promoting_normal_queue_to_default_is_allowed(self, authed_api):
+ run_id = _create_run(authed_api)
+ resp = _create_queue(authed_api, run_id, flags={"is_default": False})
+ assert resp.status_code == 200, resp.text
+ queue_id = resp.json()["queues"][0]["id"]
+ response = authed_api(
+ "PATCH",
+ f"/evaluations/queues/{queue_id}",
+ json={"queue": {"id": queue_id, "flags": {"is_default": True}}},
+ )
+ assert response.status_code == 200, response.text
+
+
+class TestDefaultQueueDeletionForbidden:
+ def test_hard_deleting_default_queue_is_forbidden(self, authed_api):
+ run_id = _create_run(authed_api)
+ resp = _create_queue(authed_api, run_id, flags={"is_default": True})
+ assert resp.status_code == 200, resp.text
+ queue_id = resp.json()["queues"][0]["id"]
+
+ response = authed_api("DELETE", f"/evaluations/queues/{queue_id}")
+ # DefaultQueueDeletionForbidden -> 409
+ assert response.status_code == 409, response.text
+
+ def test_hard_deleting_normal_queue_is_allowed(self, authed_api):
+ run_id = _create_run(authed_api)
+ resp = _create_queue(authed_api, run_id, flags={"is_default": False})
+ assert resp.status_code == 200, resp.text
+ queue_id = resp.json()["queues"][0]["id"]
+
+ response = authed_api("DELETE", f"/evaluations/queues/{queue_id}")
+ assert response.status_code == 200, response.text
+ assert response.json()["count"] == 1
+
+ def test_bulk_delete_including_default_queue_is_forbidden(self, authed_api):
+ run_id_1 = _create_run(authed_api)
+ run_id_2 = _create_run(authed_api)
+ normal = _create_queue(authed_api, run_id_1, flags={"is_default": False})
+ default = _create_queue(authed_api, run_id_2, flags={"is_default": True})
+ normal_id = normal.json()["queues"][0]["id"]
+ default_id = default.json()["queues"][0]["id"]
+
+ response = authed_api(
+ "DELETE",
+ "/evaluations/queues/",
+ json={"queue_ids": [normal_id, default_id]},
+ )
+ assert response.status_code == 409, response.text
+
+
+class TestDefaultQueueUniqueness:
+ # At most one default queue per run for the run's lifetime (active OR
+ # archived), enforced by the partial unique index
+ # ux_evaluation_queues_default_per_run; create_queue surfaces the unique
+ # violation as an EntityCreationConflict (409).
+
+ def test_second_default_queue_for_same_run_is_rejected(self, authed_api):
+ run_id = _create_run(authed_api)
+ first = _create_queue(authed_api, run_id, flags={"is_default": True})
+ assert first.status_code == 200, first.text
+ assert first.json()["count"] == 1
+
+ second = _create_queue(authed_api, run_id, flags={"is_default": True})
+ # The second default queue is rejected as a creation conflict.
+ assert second.json().get("count", 0) == 0, second.text
+
+ def test_default_queues_allowed_across_different_runs(self, authed_api):
+ run_id_1 = _create_run(authed_api)
+ run_id_2 = _create_run(authed_api)
+ first = _create_queue(authed_api, run_id_1, flags={"is_default": True})
+ second = _create_queue(authed_api, run_id_2, flags={"is_default": True})
+ assert first.json()["count"] == 1, first.text
+ assert second.json()["count"] == 1, second.text
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_flows_modify.py b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_flows_modify.py
new file mode 100644
index 0000000000..8ccad17a4a
--- /dev/null
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_flows_modify.py
@@ -0,0 +1,55 @@
+"""
+End-to-end evaluation FLOW tests for modify-after-run lifecycle:
+run to completion, then mutate, then re-verify.
+
+Uses the deterministic LLM-free `agenta:custom:mock:v0` workflow. See
+`_flow_helpers.py`.
+
+Covers:
+ - re-start a finished batch run -> it re-dispatches and finalizes again
+ (validates the finalization rule: a (re)dispatched run resets to running, then
+ the slice re-finalizes it).
+"""
+
+from ._flow_helpers import (
+ create_mock_application,
+ create_mock_evaluator,
+ create_testset,
+ create_simple_evaluation,
+ wait_for_run_terminal,
+ start_evaluation,
+)
+
+
+class TestEvaluationModifyFlows:
+ def test_restart_finished_batch_run_re_dispatches_and_finalizes_again(
+ self, authed_api
+ ):
+ # ARRANGE: run a batch eval to terminal success ------------------------
+ testset = create_testset(authed_api)
+ application = create_mock_application(authed_api, key="echo")
+ evaluator = create_mock_evaluator(authed_api, key="pass")
+ evaluation = create_simple_evaluation(
+ authed_api,
+ name="flow-restart-finished",
+ data={
+ "testset_steps": [testset["revision_id"]],
+ "application_steps": [application["revision_id"]],
+ "evaluator_steps": {evaluator["revision_id"]: "auto"},
+ },
+ )
+ run_id = evaluation["id"]
+ first = wait_for_run_terminal(authed_api, run_id)
+ assert first.json()["run"]["status"] == "success"
+ # ----------------------------------------------------------------------
+
+ # ACT: re-start the finished run ---------------------------------------
+ start_evaluation(authed_api, run_id)
+ # ----------------------------------------------------------------------
+
+ # ASSERT: it re-dispatches and reaches a terminal status again ---------
+ # (activation resets status=RUNNING, then the slice
+ # finalizes it. We assert the end state is terminal again.)
+ final = wait_for_run_terminal(authed_api, run_id)
+ assert final.json()["run"]["status"] == "success", final.json()["run"]
+ # ----------------------------------------------------------------------
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_flows_run.py b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_flows_run.py
new file mode 100644
index 0000000000..c56780976b
--- /dev/null
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_flows_run.py
@@ -0,0 +1,147 @@
+"""
+End-to-end evaluation FLOW tests: trigger a run, wait for the worker to finish,
+and verify the run reached a terminal state with scenarios/metrics.
+
+These run through the real worker + services container with NO LLM and NO code
+sandbox, using the deterministic `agenta:custom:mock:v0` workflow for both the
+application and the evaluator. See `_flow_helpers.py`.
+
+Coverage spans the worker dispatch topologies (see
+`api/oss/src/core/evaluations/runtime/topology.py`):
+ - batch_testset (testset -> mock app -> mock auto-evaluator) -> success
+ - batch_invocation (testset -> mock app) -> success
+ - live_query (live + query -> evaluator) -> stays running
+ - batch_query (query -> evaluator) -> xfail
+"""
+
+import time
+
+from ._flow_helpers import (
+ create_mock_application,
+ create_mock_evaluator,
+ create_query,
+ create_testset,
+ create_simple_evaluation,
+ wait_for_run_terminal,
+ fetch_run,
+ query_scenarios,
+)
+
+
+class TestEvaluationRunFlows:
+ def test_testset_to_mock_app_to_mock_evaluator_runs_to_success(self, authed_api):
+ # ARRANGE --------------------------------------------------------------
+ testset = create_testset(authed_api)
+ application = create_mock_application(authed_api, key="echo")
+ evaluator = create_mock_evaluator(authed_api, key="pass")
+ # ----------------------------------------------------------------------
+
+ # ACT ------------------------------------------------------------------
+ evaluation = create_simple_evaluation(
+ authed_api,
+ name="flow-testset-app-evaluator",
+ data={
+ "testset_steps": [testset["revision_id"]],
+ "application_steps": [application["revision_id"]],
+ "evaluator_steps": {evaluator["revision_id"]: "auto"},
+ },
+ )
+ run_id = evaluation["id"]
+ # ----------------------------------------------------------------------
+
+ # ASSERT ---------------------------------------------------------------
+ final = wait_for_run_terminal(authed_api, run_id)
+ run = final.json()["run"]
+ assert run["status"] == "success", run
+ # terminal run is no longer active
+ assert (run.get("flags") or {}).get("is_active") is False, run
+
+ scenarios = query_scenarios(authed_api, run_id)
+ # the default testset has 2 testcases -> 2 scenarios
+ assert len(scenarios) == 2, scenarios
+ # ----------------------------------------------------------------------
+
+ def test_testset_to_mock_app_batch_invocation_runs_to_success(self, authed_api):
+ # batch_invocation: testset -> application, no evaluator.
+ # ARRANGE --------------------------------------------------------------
+ testset = create_testset(authed_api)
+ application = create_mock_application(authed_api, key="echo")
+ # ----------------------------------------------------------------------
+
+ # ACT ------------------------------------------------------------------
+ evaluation = create_simple_evaluation(
+ authed_api,
+ name="flow-testset-app-only",
+ data={
+ "testset_steps": [testset["revision_id"]],
+ "application_steps": [application["revision_id"]],
+ },
+ )
+ run_id = evaluation["id"]
+ # ----------------------------------------------------------------------
+
+ # ASSERT ---------------------------------------------------------------
+ final = wait_for_run_terminal(authed_api, run_id)
+ run = final.json()["run"]
+ assert run["status"] == "success", run
+ assert (run.get("flags") or {}).get("is_active") is False, run
+ # ----------------------------------------------------------------------
+
+ def test_live_query_evaluation_stays_running_and_active(self, authed_api):
+ # live_query never finalizes via the slice (update_run_status=False); it
+ # stays running/active so the scheduler keeps polling. This guards that
+ # the finalization fix does NOT finalize live evals.
+ # ARRANGE --------------------------------------------------------------
+ query = create_query(authed_api, trace_type="invocation")
+ evaluator = create_mock_evaluator(authed_api, key="pass")
+ # ----------------------------------------------------------------------
+
+ # ACT ------------------------------------------------------------------
+ evaluation = create_simple_evaluation(
+ authed_api,
+ name="flow-live-query-evaluator",
+ data={
+ "query_steps": [query["revision_id"]],
+ "evaluator_steps": {evaluator["revision_id"]: "auto"},
+ },
+ flags={"is_live": True},
+ )
+ run_id = evaluation["id"]
+ # ----------------------------------------------------------------------
+
+ # ASSERT ---------------------------------------------------------------
+ # give the worker a moment, then assert it has NOT been finalized
+ time.sleep(5)
+ run = fetch_run(authed_api, run_id)
+ assert run.get("status") == "running", run
+ assert (run.get("flags") or {}).get("is_active") is True, run
+ # ----------------------------------------------------------------------
+
+ def test_batch_query_to_evaluator_runs_to_success(self, authed_api):
+ # batch_query: query -> evaluator (no app, not live). Resolves traces via
+ # the query filter; with no matching traces in the test env it resolves
+ # zero items and still finalizes to success (batch query
+ # runs finalize, unlike live query runs).
+ # ARRANGE --------------------------------------------------------------
+ query = create_query(authed_api, trace_type="invocation")
+ evaluator = create_mock_evaluator(authed_api, key="pass")
+ # ----------------------------------------------------------------------
+
+ # ACT ------------------------------------------------------------------
+ evaluation = create_simple_evaluation(
+ authed_api,
+ name="flow-batch-query-evaluator",
+ data={
+ "query_steps": [query["revision_id"]],
+ "evaluator_steps": {evaluator["revision_id"]: "auto"},
+ },
+ )
+ run_id = evaluation["id"]
+ # ----------------------------------------------------------------------
+
+ # ASSERT ---------------------------------------------------------------
+ final = wait_for_run_terminal(authed_api, run_id)
+ run = final.json()["run"]
+ assert run["status"] == "success", run
+ assert (run.get("flags") or {}).get("is_active") is False, run
+ # ----------------------------------------------------------------------
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_basics.py b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_basics.py
index 93a3684dc0..1d602b133c 100644
--- a/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_basics.py
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_basics.py
@@ -43,7 +43,7 @@ def test_create_evaluation_metrics(self, authed_api):
assert response["count"] == 1
# ----------------------------------------------------------------------
- def test_edit_evaluation_metrics(self, authed_api):
+ def test_upsert_evaluation_metrics(self, authed_api):
# ARRANGE --------------------------------------------------------------
runs = [
{"name": "test_edit_evaluation_metrics"},
@@ -89,7 +89,7 @@ def test_edit_evaluation_metrics(self, authed_api):
metrics[0]["data"]["boolean_metric"] = False
response = authed_api(
- "PATCH",
+ "POST",
"/evaluations/metrics/",
json={"metrics": metrics},
)
@@ -214,32 +214,25 @@ def test_fetch_evaluation_metric(self, authed_api):
# ----------------------------------------------------------------------
# ACT ------------------------------------------------------------------
- # NOTE: GET /metrics/{id} does not exist, use POST /metrics/query
response = authed_api(
- "POST",
- "/evaluations/metrics/query",
- json={
- "metrics": {
- "run_id": run_id,
- },
- },
+ "GET",
+ f"/evaluations/metrics/{metric['id']}",
)
# ----------------------------------------------------------------------
# ASSERT ---------------------------------------------------------------
assert response.status_code == 200
response = response.json()
- assert response["count"] >= 1
- metric_ids = [m["id"] for m in response["metrics"]]
- assert metric["id"] in metric_ids
- matched = [m for m in response["metrics"] if m["id"] == metric["id"]][0]
+ assert response["count"] == 1
+ matched = response["metrics"][0]
+ assert matched["id"] == metric["id"]
assert matched["data"]["integer_metric"] == 42
assert matched["data"]["float_metric"] == 3.14
assert matched["data"]["string_metric"] == "test"
assert matched["data"]["boolean_metric"] is True
# ----------------------------------------------------------------------
- def test_edit_evaluation_metric(self, authed_api):
+ def test_upsert_evaluation_metric(self, authed_api):
# ARRANGE --------------------------------------------------------------
runs = [
{"name": "test_edit_evaluation_metric"},
@@ -286,7 +279,7 @@ def test_edit_evaluation_metric(self, authed_api):
metric["data"]["boolean_metric"] = False
response = authed_api(
- "PATCH",
+ "POST",
"/evaluations/metrics/",
json={"metrics": [metric]},
)
@@ -345,8 +338,7 @@ def test_delete_evaluation_metric(self, authed_api):
# ACT ------------------------------------------------------------------
response = authed_api(
"DELETE",
- "/evaluations/metrics/",
- json={"metrics_ids": [metric["id"]]},
+ f"/evaluations/metrics/{metric['id']}",
)
# ----------------------------------------------------------------------
@@ -360,8 +352,7 @@ def test_delete_evaluation_metric(self, authed_api):
# ACT ------------------------------------------------------------------
response = authed_api(
"DELETE",
- "/evaluations/metrics/",
- json={"metrics_ids": [metric["id"]]},
+ f"/evaluations/metrics/{metric['id']}",
)
# ----------------------------------------------------------------------
@@ -370,3 +361,45 @@ def test_delete_evaluation_metric(self, authed_api):
response = response.json()
assert response["count"] == 0
# ----------------------------------------------------------------------
+
+ def test_invalid_metric_shape_is_rejected(self, authed_api):
+ # A metric with BOTH scenario_id and timestamp set matches none of the
+ # three partial unique indexes (global/variational/temporal). It must be
+ # rejected (422), not silently dropped.
+ # ARRANGE --------------------------------------------------------------
+ runs = [
+ {"name": "test_invalid_metric_shape"},
+ ]
+
+ response = authed_api(
+ "POST",
+ "/evaluations/runs/",
+ json={"runs": runs},
+ )
+
+ assert response.status_code == 200
+
+ run_id = response.json()["runs"][0]["id"]
+
+ metrics = [
+ {
+ "run_id": run_id,
+ "scenario_id": run_id, # any UUID; the shape check runs first
+ "timestamp": "2026-01-01T00:00:00+00:00",
+ "status": "success",
+ "data": {"integer_metric": 1},
+ },
+ ]
+ # ----------------------------------------------------------------------
+
+ # ACT ------------------------------------------------------------------
+ response = authed_api(
+ "POST",
+ "/evaluations/metrics/",
+ json={"metrics": metrics},
+ )
+ # ----------------------------------------------------------------------
+
+ # ASSERT ---------------------------------------------------------------
+ assert response.status_code == 422, response.text
+ # ----------------------------------------------------------------------
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_flow.py b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_flow.py
new file mode 100644
index 0000000000..bc9034c81f
--- /dev/null
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_flow.py
@@ -0,0 +1,230 @@
+"""
+End-to-end metric VALUE tests as part of the evaluation flow.
+
+The other metric suites cover plumbing — CRUD (`_basics`), refresh dispatch
+routing on bare runs (`_refresh`), and query filters (`_queries`). None of them
+assert that a REAL run produces correctly COMPUTED metrics. These tests close
+that gap: they run a deterministic flow (mock app + mock evaluator, no LLM),
+then assert the computed metric values and the three metric scopes.
+
+Metric model recap (see `simplified-interface.md` and
+`EvaluationsService._refresh_metrics`):
+ - metric `data` is keyed by step (`{step_key: {...aggregates...}}`)
+ - variational = per scenario (scenario_id set), across its repeats
+ - temporal = per interval (timestamp/interval set)
+ - global = whole run (scenario_id null) — used for batch evaluations
+
+Scope: BATCH path (variational + global). TEMPORAL metrics belong to LIVE evals,
+re-evaluated by a cron that POSTs `/admin/evaluations/runs/refresh` over a narrow
+(~1 min) window. Asserting them from a test depends on trace-ingestion timing vs.
+that window, which is too brittle to pin here — temporal is left to the live
+infrastructure; the live path's "stays running/active" is covered in
+`test_evaluation_flows_run.py`.
+"""
+
+from ._flow_helpers import (
+ create_mock_application,
+ create_mock_evaluator,
+ create_testset,
+ create_simple_evaluation,
+ wait_for_run_terminal,
+ query_scenarios,
+ wait_for_metrics,
+)
+
+
+def _metric_for(metrics, *, scenario_id):
+ """Return the single metric row matching scenario_id (None = global)."""
+ matches = [m for m in metrics if m.get("scenario_id") == scenario_id]
+ return matches[0] if matches else None
+
+
+# The evaluator score aggregate lives under the evaluator step, keyed by the
+# canonical output path. Computed metrics are numeric distributions with
+# count/mean/sum (see `_refresh_metrics` -> analytics buckets).
+SCORE_PATH = "attributes.ag.data.outputs.score"
+
+
+def _score_aggregate(metric):
+ """Return the evaluator score aggregate ({count, mean, sum, ...}) or None.
+
+ Walks the step-keyed metric `data` for the evaluator step that carries the
+ score path, without coupling to the evaluator step's generated slug.
+ """
+ for step_key, step_metrics in (metric.get("data") or {}).items():
+ if SCORE_PATH in (step_metrics or {}):
+ return step_metrics[SCORE_PATH]
+ return None
+
+
+def _refresh_global_score(authed_api, run_id, *, expect_count, attempts=8):
+ """Drive the whole-run metric refresh and return the global score aggregate.
+
+ The refresh is synchronous, but the run can report "terminal" a beat before
+ every scenario's result cell is durably persisted under parallel load, so the
+ first refresh may aggregate fewer cells. Re-refresh (short, ~15s total) until
+ the global score reaches `expect_count`, then return it; fail fast otherwise.
+ """
+ import time
+
+ last = None
+ for attempt in range(attempts):
+ response = authed_api(
+ "POST",
+ "/evaluations/metrics/refresh",
+ json={"metrics": {"run_id": str(run_id)}},
+ )
+ assert response.status_code == 200, response.text
+ global_metric = _metric_for(response.json()["metrics"], scenario_id=None)
+ last = _score_aggregate(global_metric) if global_metric else None
+ if last and last.get("count") == expect_count:
+ return last
+ time.sleep(min(0.5 * (2**attempt), 4.0))
+ raise AssertionError(
+ f"global score did not reach count={expect_count} (last={last})"
+ )
+
+
+class TestEvaluationMetricsFlow:
+ def test_batch_run_produces_global_and_variational_metrics(self, authed_api):
+ # A deterministic batch run: 2 testcases -> echo app -> score evaluator
+ # returning a fixed score. After the run finishes, the worker has
+ # computed metrics. Assert both the global (whole-run) metric and the
+ # per-scenario (variational) metrics exist, keyed by the evaluator step,
+ # carrying the score.
+ # ARRANGE --------------------------------------------------------------
+ testset = create_testset(authed_api) # 2 testcases
+ application = create_mock_application(authed_api, key="echo")
+ evaluator = create_mock_evaluator(
+ authed_api, key="score", kwargs={"score": 0.7, "threshold": 0.5}
+ )
+ # ----------------------------------------------------------------------
+
+ # ACT ------------------------------------------------------------------
+ evaluation = create_simple_evaluation(
+ authed_api,
+ name="flow-metrics-batch",
+ data={
+ "testset_steps": [testset["revision_id"]],
+ "application_steps": [application["revision_id"]],
+ "evaluator_steps": {evaluator["revision_id"]: "auto"},
+ },
+ )
+ run_id = evaluation["id"]
+ # ----------------------------------------------------------------------
+
+ # ASSERT ---------------------------------------------------------------
+ final = wait_for_run_terminal(authed_api, run_id)
+ assert final.json()["run"]["status"] == "success", final.json()
+
+ scenarios = query_scenarios(authed_api, run_id)
+ assert len(scenarios) == 2, scenarios
+ scenario_ids = {s["id"] for s in scenarios}
+
+ # global metric: drive the whole-run refresh ourselves (synchronous),
+ # but POLL it — the run can report "terminal" a beat before BOTH
+ # scenarios' result cells are durably persisted under parallel load, so a
+ # single refresh may aggregate count=1. Poll the refresh until it sees
+ # both (count=2), capped to ~15s so a stuck env fails fast.
+ global_score = _refresh_global_score(authed_api, run_id, expect_count=2)
+ # the score evaluator returns 0.7 for both testcases.
+ assert global_score["count"] == 2, global_score
+ assert global_score["mean"] == 0.7, global_score
+ assert global_score["min"] == 0.7 and global_score["max"] == 0.7, global_score
+
+ # variational metrics: one per scenario, written per-scenario during the
+ # run (so they are present once the run is terminal), scenario_id set,
+ # keyed by step. Each scenario has one repeat, so its score mean is 0.7.
+ metrics = wait_for_metrics(
+ authed_api,
+ run_id,
+ condition=lambda ms: (
+ len([m for m in ms if m.get("scenario_id") in scenario_ids]) == 2
+ ),
+ max_retries=6,
+ )
+ variational = [m for m in metrics if m.get("scenario_id") in scenario_ids]
+ assert len(variational) == 2, f"expected 2 variational metrics: {variational}"
+ for metric in variational:
+ score = _score_aggregate(metric)
+ assert score is not None, f"variational metric has no score: {metric}"
+ assert score["mean"] == 0.7, (metric.get("scenario_id"), score)
+ # ----------------------------------------------------------------------
+
+ def test_refresh_recomputes_metrics_for_a_finished_run(self, authed_api):
+ # `refresh` is the standalone metrics op (decoupled from process). After
+ # a run finishes, re-invoking refresh over the run scope must recompute
+ # and return the same metrics (idempotent over a stable tensor).
+ # ARRANGE --------------------------------------------------------------
+ testset = create_testset(authed_api)
+ application = create_mock_application(authed_api, key="echo")
+ evaluator = create_mock_evaluator(
+ authed_api, key="score", kwargs={"score": 1.0, "threshold": 0.5}
+ )
+ evaluation = create_simple_evaluation(
+ authed_api,
+ name="flow-metrics-refresh",
+ data={
+ "testset_steps": [testset["revision_id"]],
+ "application_steps": [application["revision_id"]],
+ "evaluator_steps": {evaluator["revision_id"]: "auto"},
+ },
+ )
+ run_id = evaluation["id"]
+ wait_for_run_terminal(authed_api, run_id)
+ # ----------------------------------------------------------------------
+
+ # ACT ------------------------------------------------------------------
+ response = authed_api(
+ "POST",
+ "/evaluations/metrics/refresh",
+ json={"metrics": {"run_id": str(run_id)}},
+ )
+ # ----------------------------------------------------------------------
+
+ # ASSERT ---------------------------------------------------------------
+ assert response.status_code == 200, response.text
+ body = response.json()
+ # refresh over a finished run returns the recomputed metric(s).
+ assert body["count"] >= 1, body
+ refreshed = body["metrics"]
+ # the recomputed global metric carries the evaluator score (mean 1.0).
+ global_metric = _metric_for(refreshed, scenario_id=None)
+ assert global_metric is not None, f"no global metric after refresh: {refreshed}"
+ score = _score_aggregate(global_metric)
+ assert score is not None and score["mean"] == 1.0, score
+ # ----------------------------------------------------------------------
+
+ def test_failing_evaluator_metrics_reflect_zero_score(self, authed_api):
+ # The computed metric must reflect the evaluator's actual output, not a
+ # constant. A `fail` evaluator scores 0.0 — the metric value must differ
+ # from the passing case, proving the value is computed, not hardcoded.
+ # ARRANGE --------------------------------------------------------------
+ testset = create_testset(authed_api)
+ application = create_mock_application(authed_api, key="echo")
+ evaluator = create_mock_evaluator(authed_api, key="fail")
+ evaluation = create_simple_evaluation(
+ authed_api,
+ name="flow-metrics-fail",
+ data={
+ "testset_steps": [testset["revision_id"]],
+ "application_steps": [application["revision_id"]],
+ "evaluator_steps": {evaluator["revision_id"]: "auto"},
+ },
+ )
+ run_id = evaluation["id"]
+ # ----------------------------------------------------------------------
+
+ # ACT ------------------------------------------------------------------
+ final = wait_for_run_terminal(authed_api, run_id)
+ # ----------------------------------------------------------------------
+
+ # ASSERT ---------------------------------------------------------------
+ assert final.json()["run"]["status"] == "success", final.json()
+ # drive + poll the global refresh (see batch test) until both scenarios
+ # are aggregated, rather than waiting for the worker's lagging refresh.
+ score = _refresh_global_score(authed_api, run_id, expect_count=2)
+ # the score aggregate is the failing value (mean 0.0), not 1 — proving
+ # the metric reflects the evaluator's real output, not a constant.
+ assert score["mean"] == 0.0 and score["max"] == 0.0, score
+ # ----------------------------------------------------------------------
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_refresh.py b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_refresh.py
new file mode 100644
index 0000000000..a6fcdccef2
--- /dev/null
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_refresh.py
@@ -0,0 +1,121 @@
+"""
+Metrics refresh dispatch (`POST /evaluations/metrics/refresh`).
+
+`EvaluationsService.refresh_metrics` is a dispatcher over the request body: it
+fans out to `_refresh_metrics` per run / scenario / timestamp depending on which
+of `run_ids` / `run_id` / `scenario_ids` / `timestamps` are present, and returns
+the union of the per-call metrics. These tests pin the dispatch contract and the
+early-return paths that do not require traces, evaluator schemas, or the worker:
+
+ - no `run_id`/`run_ids` -> [] (count 0)
+ - unknown `run_id` -> [] (run not found)
+ - unknown ids in `run_ids` -> [] (each run not found)
+ - run with no metrics-bearing steps -> [] (nothing to refresh)
+
+The trace-backed / schema-inference branches of `_refresh_metrics` are covered
+by the flow tests that exercise a full run; here we lock the routing shape and
+the "nothing to do" outcomes.
+"""
+
+from uuid import uuid4
+
+
+def _create_run(authed_api, name=None) -> str:
+ response = authed_api(
+ "POST",
+ "/evaluations/runs/",
+ json={"runs": [{"name": name or f"run-{uuid4()}"}]},
+ )
+ assert response.status_code == 200, response.text
+ return response.json()["runs"][0]["id"]
+
+
+def _refresh(authed_api, **metrics):
+ return authed_api(
+ "POST",
+ "/evaluations/metrics/refresh",
+ json={"metrics": metrics},
+ )
+
+
+class TestRefreshMetricsDispatch:
+ def test_refresh_with_empty_body_returns_no_metrics(self, authed_api):
+ # No run_id and no run_ids -> the dispatcher short-circuits to [].
+ response = _refresh(authed_api)
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert body["count"] == 0
+ assert body["metrics"] == []
+
+ def test_refresh_unknown_run_id_returns_no_metrics(self, authed_api):
+ # A syntactically valid but non-existent run resolves to no run, so
+ # _refresh_metrics returns [] rather than erroring.
+ response = _refresh(authed_api, run_id=str(uuid4()))
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert body["count"] == 0
+ assert body["metrics"] == []
+
+ def test_refresh_unknown_run_ids_returns_no_metrics(self, authed_api):
+ # The run_ids branch loops per id; each unknown id contributes nothing.
+ response = _refresh(authed_api, run_ids=[str(uuid4()), str(uuid4())])
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert body["count"] == 0
+ assert body["metrics"] == []
+
+ def test_refresh_run_without_steps_returns_no_metrics(self, authed_api):
+ # A bare run (created with just a name) has no metrics-bearing steps, so
+ # there is nothing to refresh.
+ run_id = _create_run(authed_api)
+ response = _refresh(authed_api, run_id=run_id)
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert body["count"] == 0
+ assert body["metrics"] == []
+
+ def test_refresh_scenario_ids_branch_returns_no_metrics(self, authed_api):
+ # With run_id set and scenario_ids present, the dispatcher loops the
+ # scenario_ids branch. Unknown scenarios on a bare run yield nothing.
+ run_id = _create_run(authed_api)
+ response = _refresh(
+ authed_api,
+ run_id=run_id,
+ scenario_ids=[str(uuid4()), str(uuid4())],
+ )
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert body["count"] == 0
+ assert body["metrics"] == []
+
+ def test_refresh_timestamps_branch_returns_no_metrics(self, authed_api):
+ # With run_id set and timestamps present (and no scenario_ids), the
+ # dispatcher loops the timestamps branch. A bare run yields nothing.
+ run_id = _create_run(authed_api)
+ response = _refresh(
+ authed_api,
+ run_id=run_id,
+ timestamps=["2026-01-01T00:00:00Z", "2026-01-02T00:00:00Z"],
+ interval=3600,
+ )
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert body["count"] == 0
+ assert body["metrics"] == []
+
+ def test_refresh_run_ids_takes_precedence_over_run_id(self, authed_api):
+ # When both run_ids and run_id are present, the dispatcher uses run_ids
+ # (the first branch). Two bare runs in run_ids both yield nothing, and a
+ # would-be conflicting run_id is ignored — count stays 0 either way, but
+ # this exercises the run_ids branch with real (empty) runs.
+ run_id_1 = _create_run(authed_api)
+ run_id_2 = _create_run(authed_api)
+ response = _refresh(
+ authed_api,
+ run_ids=[run_id_1, run_id_2],
+ run_id=str(uuid4()),
+ )
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert body["count"] == 0
+ assert body["metrics"] == []
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_step_removal.py b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_step_removal.py
new file mode 100644
index 0000000000..ad93e77f1c
--- /dev/null
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_step_removal.py
@@ -0,0 +1,179 @@
+from uuid import uuid4
+
+
+def _input_step():
+ return {
+ "key": "input",
+ "type": "input",
+ "origin": "custom",
+ "references": {"testset": {"id": str(uuid4())}},
+ }
+
+
+def _human_annotation_step():
+ return {
+ "key": "annotation",
+ "type": "annotation",
+ "origin": "human",
+ "references": {"evaluator_revision": {"id": str(uuid4())}},
+ "inputs": [{"key": "input"}],
+ }
+
+
+def _create_run(authed_api, steps):
+ response = authed_api(
+ "POST",
+ "/evaluations/runs/",
+ json={"runs": [{"name": "step removal run", "data": {"steps": steps}}]},
+ )
+ assert response.status_code == 200
+ return response.json()["runs"][0]
+
+
+def _create_scenario(authed_api, run_id):
+ response = authed_api(
+ "POST",
+ "/evaluations/scenarios/",
+ json={"scenarios": [{"run_id": run_id}]},
+ )
+ assert response.status_code == 200
+ return response.json()["scenarios"][0]
+
+
+def _create_result(authed_api, run_id, scenario_id, step_key):
+ response = authed_api(
+ "POST",
+ "/evaluations/results/",
+ json={
+ "results": [
+ {
+ "step_key": step_key,
+ "repeat_idx": 0,
+ "scenario_id": scenario_id,
+ "run_id": run_id,
+ }
+ ]
+ },
+ )
+ assert response.status_code == 200
+ return response.json()["results"][0]
+
+
+def _query_results(authed_api, **result):
+ response = authed_api(
+ "POST",
+ "/evaluations/results/query",
+ json={"result": result},
+ )
+ assert response.status_code == 200
+ return response.json()
+
+
+def _patch_steps(authed_api, run, steps):
+ response = authed_api(
+ "PATCH",
+ f"/evaluations/runs/{run['id']}",
+ json={
+ "run": {
+ "id": run["id"],
+ "name": run["name"],
+ "data": {"steps": steps},
+ }
+ },
+ )
+ assert response.status_code == 200
+ return response.json()
+
+
+class TestEvaluationStepRemoval:
+ def test_edit_dropping_a_non_input_step_prunes_only_its_cells(self, authed_api):
+ # ARRANGE --------------------------------------------------------------
+ run = _create_run(
+ authed_api,
+ steps=[_input_step(), _human_annotation_step()],
+ )
+ run_id = run["id"]
+ scenario = _create_scenario(authed_api, run_id)
+ scenario_id = scenario["id"]
+
+ # Cells on both the input step and the annotation step.
+ _create_result(authed_api, run_id, scenario_id, "input")
+ _create_result(authed_api, run_id, scenario_id, "annotation")
+
+ assert _query_results(authed_api, run_id=run_id)["count"] == 2
+ # ----------------------------------------------------------------------
+
+ # ACT — edit the run, dropping the annotation step from the graph.
+ response = _patch_steps(authed_api, run, steps=[_input_step()])
+ # ----------------------------------------------------------------------
+
+ # ASSERT ---------------------------------------------------------------
+ assert response["count"] == 1
+ edited = response["run"]
+ assert [s["key"] for s in edited["data"]["steps"]] == ["input"]
+ # has_human dropped, queue eligibility gone.
+ assert edited["flags"]["has_human"] is False
+ assert edited["flags"]["is_queue"] is False
+
+ # The annotation cell is pruned; the input cell survives.
+ remaining = _query_results(authed_api, run_id=run_id)
+ assert remaining["count"] == 1
+ assert remaining["results"][0]["step_key"] == "input"
+
+ # The scenario still has an input cell, so it is NOT orphaned.
+ scenarios = authed_api(
+ "POST",
+ "/evaluations/scenarios/query",
+ json={"scenario": {"run_id": run_id}},
+ ).json()
+ assert scenarios["count"] == 1
+ # ----------------------------------------------------------------------
+
+ def test_edit_dropping_the_input_step_prunes_orphan_scenarios(self, authed_api):
+ # ARRANGE --------------------------------------------------------------
+ run = _create_run(authed_api, steps=[_input_step()])
+ run_id = run["id"]
+ scenario = _create_scenario(authed_api, run_id)
+ scenario_id = scenario["id"]
+
+ # The scenario's only cell is on the input step.
+ _create_result(authed_api, run_id, scenario_id, "input")
+ assert _query_results(authed_api, run_id=run_id)["count"] == 1
+ # ----------------------------------------------------------------------
+
+ # ACT — drop the input step entirely (empty graph).
+ response = _patch_steps(authed_api, run, steps=[])
+ # ----------------------------------------------------------------------
+
+ # ASSERT ---------------------------------------------------------------
+ assert response["count"] == 1
+ assert response["run"]["data"]["steps"] in (None, [])
+
+ # Cells pruned.
+ assert _query_results(authed_api, run_id=run_id)["count"] == 0
+
+ # The scenario was sourced only from the removed input step -> orphaned
+ # and removed.
+ scenarios = authed_api(
+ "POST",
+ "/evaluations/scenarios/query",
+ json={"scenario": {"run_id": run_id}},
+ ).json()
+ assert scenarios["count"] == 0
+ # ----------------------------------------------------------------------
+
+ def test_create_run_does_not_prune(self, authed_api):
+ # Create is "edit from an empty graph": the shared reconcile path runs,
+ # but prior_step_keys is empty so nothing is pruned and the graph is
+ # preserved verbatim.
+ run = _create_run(
+ authed_api,
+ steps=[_input_step(), _human_annotation_step()],
+ )
+ assert [s["key"] for s in run["data"]["steps"]] == ["input", "annotation"]
+ assert run["flags"]["has_human"] is True
+
+ # A human run gets an active default queue on create.
+ response = authed_api("GET", f"/evaluations/runs/{run['id']}/queues/default")
+ assert response.status_code == 200
+ assert response.json()["count"] == 1
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_steps_basics.py b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_steps_basics.py
index b10691df1a..4b1979d614 100644
--- a/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_steps_basics.py
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_evaluation_steps_basics.py
@@ -140,7 +140,7 @@ def test_fetch_evaluation_results(self, authed_api, mock_data):
assert step_key_3 in step_keys
# ----------------------------------------------------------------------
- def test_edit_evaluation_results(self, authed_api, mock_data):
+ def test_upsert_evaluation_results(self, authed_api, mock_data):
# ARRANGE --------------------------------------------------------------
run_id = mock_data["runs"][0]["id"]
scenario_id = mock_data["scenarios"][0]["id"]
@@ -181,7 +181,6 @@ def test_edit_evaluation_results(self, authed_api, mock_data):
assert response["count"] == 3
results = response["results"]
- result_ids = [r["id"] for r in results]
# ----------------------------------------------------------------------
# ACT ------------------------------------------------------------------
@@ -190,7 +189,7 @@ def test_edit_evaluation_results(self, authed_api, mock_data):
results[2]["status"] = "cancelled"
response = authed_api(
- "PATCH",
+ "POST",
"/evaluations/results/",
json={"results": results},
)
@@ -200,10 +199,10 @@ def test_edit_evaluation_results(self, authed_api, mock_data):
assert response.status_code == 200
response = response.json()
assert response["count"] == 3
- patched = {r["id"]: r for r in response["results"]}
- assert patched[result_ids[0]]["status"] == "success"
- assert patched[result_ids[1]]["status"] == "failure"
- assert patched[result_ids[2]]["status"] == "cancelled"
+ patched = {r["step_key"]: r for r in response["results"]}
+ assert patched[step_key_1]["status"] == "success"
+ assert patched[step_key_2]["status"] == "failure"
+ assert patched[step_key_3]["status"] == "cancelled"
# ----------------------------------------------------------------------
def test_delete_evaluation_results(self, authed_api, mock_data):
@@ -310,7 +309,7 @@ def test_fetch_evaluation_result(self, authed_api, mock_data):
assert response["result"]["id"] == result_id
# ----------------------------------------------------------------------
- def test_edit_evaluation_result(self, authed_api, mock_data):
+ def test_upsert_single_evaluation_result(self, authed_api, mock_data):
# ARRANGE --------------------------------------------------------------
run_id = mock_data["runs"][0]["id"]
authed_api("POST", f"/evaluations/runs/{run_id}/open")
@@ -345,9 +344,9 @@ def test_edit_evaluation_result(self, authed_api, mock_data):
result["status"] = "success"
response = authed_api(
- "PATCH",
- f"/evaluations/results/{result_id}",
- json={"result": result},
+ "POST",
+ "/evaluations/results/",
+ json={"results": [result]},
)
# ----------------------------------------------------------------------
@@ -355,8 +354,8 @@ def test_edit_evaluation_result(self, authed_api, mock_data):
assert response.status_code == 200
response = response.json()
assert response["count"] == 1
- assert response["result"]["id"] == result_id
- assert response["result"]["status"] == "success"
+ assert response["results"][0]["id"] == result_id
+ assert response["results"][0]["status"] == "success"
# ----------------------------------------------------------------------
def test_delete_evaluation_result(self, authed_api, mock_data):
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_simple_evaluations_workflows.py b/api/oss/tests/pytest/acceptance/evaluations/test_simple_evaluations_workflows.py
index 8f994024b1..a932a26c21 100644
--- a/api/oss/tests/pytest/acceptance/evaluations/test_simple_evaluations_workflows.py
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_simple_evaluations_workflows.py
@@ -63,6 +63,44 @@ def _create_simple_evaluator(authed_api) -> dict:
return response.json()["evaluator"]
+def _create_simple_testset(authed_api) -> dict:
+ slug = uuid4().hex
+ response = authed_api(
+ "POST",
+ "/simple/testsets/",
+ json={
+ "testset": {
+ "slug": f"testset-{slug}",
+ "name": f"Testset {slug}",
+ "data": {
+ "testcases": [
+ {"data": {"input": "hello", "expected": "world"}},
+ {"data": {"input": "hola", "expected": "mundo"}},
+ ]
+ },
+ }
+ },
+ )
+ assert response.status_code == 200
+ return response.json()["testset"]
+
+
+def _create_simple_application(authed_api) -> dict:
+ slug = uuid4().hex
+ response = authed_api(
+ "POST",
+ "/simple/applications/",
+ json={
+ "application": {
+ "slug": f"application-{slug}",
+ "name": f"Application {slug}",
+ }
+ },
+ )
+ assert response.status_code == 200
+ return response.json()["application"]
+
+
class TestSimpleEvaluationsWorkflowReferences:
def test_create_live_simple_evaluation_accepts_query_and_evaluator_revision_ids(
self, authed_api
@@ -124,3 +162,146 @@ def test_create_live_simple_evaluation_rejects_non_invocation_query_revision(
body = response.json()
assert body["count"] == 0
assert body.get("evaluation") is None
+
+ def test_create_batch_inference_evaluation_preserves_flags_repeats_and_refs(
+ self, authed_api
+ ):
+ testset = _create_simple_testset(authed_api)
+ application = _create_simple_application(authed_api)
+
+ response = authed_api(
+ "POST",
+ "/simple/evaluations/",
+ json={
+ "evaluation": {
+ "name": "batch-inference-setup",
+ "flags": {
+ "is_cached": True,
+ "is_split": True,
+ },
+ "data": {
+ "testset_steps": [testset["revision_id"]],
+ "application_steps": [application["revision_id"]],
+ "repeats": 3,
+ },
+ }
+ },
+ )
+
+ assert response.status_code == 200
+ body = response.json()
+ assert body["count"] == 1
+
+ evaluation = body["evaluation"]
+ assert evaluation["flags"]["is_cached"] is True
+ assert evaluation["flags"]["is_split"] is True
+ assert evaluation["data"]["repeats"] == 3
+ assert set(evaluation["data"]["testset_steps"].keys()) == {
+ testset["revision_id"]
+ }
+ assert set(evaluation["data"]["application_steps"].keys()) == {
+ application["revision_id"]
+ }
+
+ def test_create_batch_evaluation_preserves_application_evaluator_matrix(
+ self, authed_api
+ ):
+ testset = _create_simple_testset(authed_api)
+ application = _create_simple_application(authed_api)
+ evaluator = _create_simple_evaluator(authed_api)
+
+ response = authed_api(
+ "POST",
+ "/simple/evaluations/",
+ json={
+ "evaluation": {
+ "name": "batch-application-evaluator-setup",
+ "flags": {
+ "is_cached": False,
+ "is_split": False,
+ },
+ "data": {
+ "testset_steps": {testset["revision_id"]: "custom"},
+ "application_steps": {application["revision_id"]: "custom"},
+ "evaluator_steps": {evaluator["revision_id"]: "auto"},
+ "repeats": 2,
+ },
+ }
+ },
+ )
+
+ assert response.status_code == 200
+ body = response.json()
+ assert body["count"] == 1
+
+ evaluation = body["evaluation"]
+ assert evaluation["flags"]["is_cached"] is False
+ assert evaluation["flags"]["is_split"] is False
+ assert evaluation["data"]["repeats"] == 2
+ assert evaluation["data"]["testset_steps"] == {testset["revision_id"]: "custom"}
+ assert evaluation["data"]["application_steps"] == {
+ application["revision_id"]: "custom"
+ }
+ assert evaluation["data"]["evaluator_steps"] == {
+ evaluator["revision_id"]: "auto"
+ }
+
+ def test_create_testset_to_evaluator_evaluation_does_not_fail_setup(
+ self, authed_api
+ ):
+ testset = _create_simple_testset(authed_api)
+ evaluator = _create_simple_evaluator(authed_api)
+
+ response = authed_api(
+ "POST",
+ "/simple/evaluations/",
+ json={
+ "evaluation": {
+ "name": "testset-to-evaluator-setup",
+ "data": {
+ "testset_steps": [testset["revision_id"]],
+ "evaluator_steps": [evaluator["revision_id"]],
+ },
+ }
+ },
+ )
+
+ assert response.status_code == 200
+ body = response.json()
+ assert body["count"] == 1
+ evaluation = body["evaluation"]
+ assert set(evaluation["data"]["testset_steps"].keys()) == {
+ testset["revision_id"]
+ }
+ assert set(evaluation["data"]["evaluator_steps"].keys()) == {
+ evaluator["revision_id"]
+ }
+
+ def test_create_query_to_application_evaluation_does_not_fail_setup(
+ self, authed_api
+ ):
+ query = _create_simple_query(authed_api)
+ application = _create_simple_application(authed_api)
+
+ response = authed_api(
+ "POST",
+ "/simple/evaluations/",
+ json={
+ "evaluation": {
+ "name": "query-to-application-setup",
+ "data": {
+ "query_steps": [query["revision_id"]],
+ "application_steps": [application["revision_id"]],
+ },
+ }
+ },
+ )
+
+ assert response.status_code == 200
+ body = response.json()
+ assert body["count"] == 1
+ evaluation = body["evaluation"]
+ assert set(evaluation["data"]["query_steps"].keys()) == {query["revision_id"]}
+ assert set(evaluation["data"]["application_steps"].keys()) == {
+ application["revision_id"]
+ }
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_simple_queues_basics.py b/api/oss/tests/pytest/acceptance/evaluations/test_simple_queues_basics.py
index b473190dd7..2e35212764 100644
--- a/api/oss/tests/pytest/acceptance/evaluations/test_simple_queues_basics.py
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_simple_queues_basics.py
@@ -169,7 +169,7 @@ def test_create_simple_queue_from_queries(self, authed_api):
data = response.json()
assert data["count"] == 1
queue = data["queue"]
- assert queue["data"]["kind"] == "traces"
+ assert queue["data"]["kind"] == "queries"
assert queue["data"]["queries"] == [query_revision_id]
def test_create_simple_queue_from_testsets(self, authed_api):
@@ -194,9 +194,162 @@ def test_create_simple_queue_from_testsets(self, authed_api):
data = response.json()
assert data["count"] == 1
queue = data["queue"]
- assert queue["data"]["kind"] == "testcases"
+ assert queue["data"]["kind"] == "testsets"
assert queue["data"]["testsets"] == [testset_revision_id]
+ def test_create_source_backed_queue_preserves_repeats_and_assignments(
+ self, authed_api
+ ):
+ evaluator_revision_id = _create_evaluator(authed_api)
+ testset_revision_id = _create_testset(authed_api)
+ user_id_1 = str(uuid4())
+ user_id_2 = str(uuid4())
+
+ response = authed_api(
+ "POST",
+ "/simple/queues/",
+ json={
+ "queue": {
+ "name": "testset-backed-queue-with-repeats",
+ "data": {
+ "testsets": [testset_revision_id],
+ "evaluators": {evaluator_revision_id: "human"},
+ "repeats": 2,
+ "assignments": [[user_id_1], [user_id_2]],
+ },
+ }
+ },
+ )
+
+ assert response.status_code == 200
+ data = response.json()
+ assert data["count"] == 1
+ queue = data["queue"]
+ assert queue["data"]["kind"] == "testsets"
+ assert queue["data"]["testsets"] == [testset_revision_id]
+ assert queue["data"]["repeats"] == 2
+ assert queue["data"]["assignments"] == [[user_id_1], [user_id_2]]
+
+ def test_source_backed_queue_with_bare_evaluator_list_is_human_queue(
+ self, authed_api
+ ):
+ # a source-backed queue created with a bare evaluator list (no
+ # explicit origin) must default the evaluator to origin="human", so the
+ # backing run becomes a real queue (has_human -> is_queue). Before the
+ # fix the source builder defaulted to "custom", leaving is_queue=False
+ # and the queue unparseable (empty response).
+ evaluator_revision_id = _create_evaluator(authed_api)
+ query_revision_id = _create_query(authed_api)
+
+ response = authed_api(
+ "POST",
+ "/simple/queues/",
+ json={
+ "queue": {
+ "name": "query-backed-human-queue",
+ "data": {
+ "queries": [query_revision_id],
+ "evaluators": [evaluator_revision_id],
+ },
+ }
+ },
+ )
+
+ assert response.status_code == 200
+ data = response.json()
+ assert data["count"] == 1
+ queue = data["queue"]
+ assert queue["data"]["kind"] == "queries"
+ run_id = queue["run_id"]
+
+ # The backing run must be a real human queue.
+ run_response = authed_api("GET", f"/evaluations/runs/{run_id}")
+ assert run_response.status_code == 200
+ run = run_response.json()["run"]
+ assert run["flags"]["has_human"] is True
+ assert run["flags"]["is_queue"] is True
+
+ def test_simple_queue_rejects_evaluator_dicts_with_no_human(self, authed_api):
+ # Simple-queue constraint: a queue CAN contain non-human evaluators but
+ # CANNOT resolve to ZERO human evaluators. A human evaluator is one that
+ # is origin-less (defaults to human) or explicitly "human". So an
+ # explicit dict whose values are all non-human is rejected, regardless
+ # of whether they are auto, custom, or a mix of the two. The underlying
+ # evaluation run has no such restriction.
+ eval_a = _create_evaluator(authed_api)
+ eval_b = _create_evaluator(authed_api)
+
+ non_human_evaluator_specs = [
+ {eval_a: "auto"}, # all auto
+ {eval_a: "custom"}, # all custom
+ {eval_a: "auto", eval_b: "custom"}, # mix of non-human origins
+ ]
+
+ for evaluators in non_human_evaluator_specs:
+ testset_revision_id = _create_testset(authed_api)
+ response = authed_api(
+ "POST",
+ "/simple/queues/",
+ json={
+ "queue": {
+ "name": "testset-backed-no-human",
+ "data": {
+ "testsets": [testset_revision_id],
+ "evaluators": evaluators,
+ },
+ }
+ },
+ )
+
+ assert response.status_code == 422, (
+ f"expected reject for evaluators={evaluators}, got {response.status_code}"
+ )
+ assert "at least one human evaluator" in response.text
+
+ def test_simple_queue_allows_human_mixed_with_non_human_evaluators(
+ self, authed_api
+ ):
+ # The "at least one human" rule allows a mix: a human alongside any
+ # non-human origin (auto or custom) is a valid human queue. The explicit
+ # non-human origin is honored on the underlying run.
+ for non_human_origin, expected_flag in (
+ ("auto", "has_auto"),
+ ("custom", "has_custom"),
+ ):
+ human_evaluator_id = _create_evaluator(authed_api)
+ other_evaluator_id = _create_evaluator(authed_api)
+ testset_revision_id = _create_testset(authed_api)
+
+ response = authed_api(
+ "POST",
+ "/simple/queues/",
+ json={
+ "queue": {
+ "name": f"testset-backed-human-plus-{non_human_origin}",
+ "data": {
+ "testsets": [testset_revision_id],
+ "evaluators": {
+ human_evaluator_id: "human",
+ other_evaluator_id: non_human_origin,
+ },
+ },
+ }
+ },
+ )
+
+ assert response.status_code == 200
+ data = response.json()
+ assert data["count"] == 1
+ run_id = data["queue"]["run_id"]
+
+ run_response = authed_api("GET", f"/evaluations/runs/{run_id}")
+ assert run_response.status_code == 200
+ run = run_response.json()["run"]
+ # Both origins honored; the human presence makes it a real queue.
+ assert run["flags"]["has_human"] is True
+ assert run["flags"][expected_flag] is True
+ assert run["flags"]["is_queue"] is True
+
def test_create_simple_queue_without_evaluators_returns_empty(self, authed_api):
# ACT ------------------------------------------------------------------
response = authed_api(
@@ -283,7 +436,7 @@ def test_add_testcases_rejects_testset_backed_source_queue(self, authed_api):
== "Cannot add testcases directly to a source-backed queue. Create a direct testcases queue instead."
)
- def test_create_simple_queue_rejects_kind_with_queries(self, authed_api):
+ def test_create_simple_queue_rejects_resolved_kind_with_queries(self, authed_api):
evaluator_revision_id = _create_evaluator(authed_api)
query_revision_id = _create_query(authed_api)
@@ -302,11 +455,32 @@ def test_create_simple_queue_rejects_kind_with_queries(self, authed_api):
)
assert response.status_code == 422
- assert (
- "simple queue source must not include kind alongside queries or testsets"
- in response.text
+ assert "query-backed queues must use kind='queries'" in response.text
+
+ def test_create_simple_queue_rejects_mixed_query_and_testset_sources(
+ self, authed_api
+ ):
+ evaluator_revision_id = _create_evaluator(authed_api)
+ query_revision_id = _create_query(authed_api)
+ testset_revision_id = _create_testset(authed_api)
+
+ response = authed_api(
+ "POST",
+ "/simple/queues/",
+ json={
+ "queue": {
+ "data": {
+ "queries": [query_revision_id],
+ "testsets": [testset_revision_id],
+ "evaluators": [evaluator_revision_id],
+ },
+ }
+ },
)
+ assert response.status_code == 422
+ assert "simple queue source must be either queries or testsets" in response.text
+
def test_create_simple_queue_with_assignments(self, authed_api):
# ARRANGE --------------------------------------------------------------
evaluator_revision_id = _create_evaluator(authed_api)
diff --git a/api/oss/tests/pytest/acceptance/evaluations/test_tensor_slice_endpoints.py b/api/oss/tests/pytest/acceptance/evaluations/test_tensor_slice_endpoints.py
new file mode 100644
index 0000000000..3c64e2f3bc
--- /dev/null
+++ b/api/oss/tests/pytest/acceptance/evaluations/test_tensor_slice_endpoints.py
@@ -0,0 +1,433 @@
+"""Acceptance tests for the tensor slice HTTP endpoints (PR: unify eval loops).
+
+Covers the coordinate-addressed ops over EXISTING scenarios exposed on the
+simple-evaluations router:
+
+ POST /simple/evaluations/{id}/process -> dispatch re-execution (async, 202-ish)
+ POST /simple/evaluations/{id}/probe -> read result cells in a slice
+ POST /simple/evaluations/{id}/populate -> bulk-write result cells
+
+These assert the HTTP contract (routes exist, accept the TensorSlice-shaped
+body, return the right envelope) without depending on live-LLM execution, which
+is covered elsewhere and is inherently flaky.
+"""
+
+from uuid import uuid4
+
+
+def _create_simple_evaluator(authed_api) -> dict:
+ slug = uuid4().hex
+ response = authed_api(
+ "POST",
+ "/simple/evaluators/",
+ json={
+ "evaluator": {
+ "slug": f"evaluator-{slug}",
+ "name": f"Evaluator {slug}",
+ "data": {
+ "schemas": {
+ "outputs": {
+ "type": "object",
+ "properties": {"score": {"type": "number"}},
+ "required": ["score"],
+ "additionalProperties": False,
+ }
+ }
+ },
+ }
+ },
+ )
+ assert response.status_code == 200
+ return response.json()["evaluator"]
+
+
+def _create_simple_testset(authed_api) -> dict:
+ slug = uuid4().hex
+ response = authed_api(
+ "POST",
+ "/simple/testsets/",
+ json={
+ "testset": {
+ "slug": f"testset-{slug}",
+ "name": f"Testset {slug}",
+ "data": {
+ "testcases": [
+ {"data": {"input": "hello", "expected": "world"}},
+ ]
+ },
+ }
+ },
+ )
+ assert response.status_code == 200
+ return response.json()["testset"]
+
+
+def _create_testset_evaluator_evaluation(authed_api) -> dict:
+ """A run with a testset input + auto evaluator (no application/LLM)."""
+ testset = _create_simple_testset(authed_api)
+ evaluator = _create_simple_evaluator(authed_api)
+ response = authed_api(
+ "POST",
+ "/simple/evaluations/",
+ json={
+ "evaluation": {
+ "name": f"tensor-slice-{uuid4().hex[:8]}",
+ "flags": {"is_cached": False, "is_split": False},
+ "data": {
+ "testset_steps": {testset["revision_id"]: "custom"},
+ "evaluator_steps": {evaluator["revision_id"]: "auto"},
+ "repeats": 1,
+ },
+ }
+ },
+ )
+ assert response.status_code == 200, response.text
+ return response.json()["evaluation"]
+
+
+def _input_step_key(authed_api, run_id) -> str:
+ """Read the run's actual input step key (e.g. 'testset-').
+
+ Step keys are derived from the revision slug at build time, so they can't be
+ hardcoded — fetch the run and read its graph.
+ """
+ response = authed_api("GET", f"/evaluations/runs/{run_id}")
+ assert response.status_code == 200, response.text
+ run = response.json().get("run") or {}
+ steps = (run.get("data") or {}).get("steps") or []
+ input_steps = [s for s in steps if s.get("type") == "input"]
+ assert input_steps, f"run {run_id} has no input step: {steps}"
+ return input_steps[0]["key"]
+
+
+class TestTensorSliceEndpoints:
+ def test_probe_returns_results_envelope_for_empty_slice(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ # Probe a coordinate that addresses nothing yet -> empty results envelope.
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/probe",
+ json={"scenario_ids": [str(uuid4())]},
+ )
+
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert "count" in body
+ assert "results" in body
+ assert body["results"] == []
+ assert body["count"] == 0
+
+ def test_probe_accepts_full_coordinate_body(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/probe",
+ json={
+ "scenario_ids": [str(uuid4())],
+ "step_keys": ["evaluator-step"],
+ "repeat_idxs": [0],
+ },
+ )
+
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert isinstance(body["results"], list)
+
+ def test_probe_accepts_empty_body(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/probe",
+ json={},
+ )
+
+ assert response.status_code == 200, response.text
+ assert "results" in response.json()
+
+ def test_populate_writes_input_result_cells(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+ scenario_id = str(uuid4())
+ step_key = _input_step_key(authed_api, run_id)
+
+ # Populate an input cell (the source identity) directly.
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/populate",
+ json={
+ "results": [
+ {
+ "run_id": run_id,
+ "scenario_id": scenario_id,
+ "step_key": step_key,
+ "repeat_idx": 0,
+ "status": "success",
+ }
+ ]
+ },
+ )
+
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert "count" in body
+ assert "results" in body
+ assert body["count"] == len(body["results"])
+
+ def test_populate_accepts_empty_results(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/populate",
+ json={"results": []},
+ )
+
+ assert response.status_code == 200, response.text
+ assert response.json()["results"] == []
+
+ def test_process_accepts_coordinate_slice_and_acknowledges(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ # Dispatch re-execution over a coordinate slice. Async dispatch -> the
+ # endpoint acknowledges acceptance with 202 and an empty body (it does
+ # not wait for execution).
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/process",
+ json={
+ "scenario_ids": [str(uuid4())],
+ "step_keys": ["evaluator-step"],
+ # overwrite omitted -> defaults to False (fill-missing)
+ },
+ )
+
+ assert response.status_code == 202, response.text
+
+ def test_process_accepts_overwrite(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/process",
+ json={"overwrite": True},
+ )
+
+ assert response.status_code == 202, response.text
+
+ def test_process_round_trips_populate_then_probe(self, authed_api):
+ """add a scenario, populate its input cell, then probe it by coordinate."""
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+ step_key = _input_step_key(authed_api, run_id)
+
+ # A result cell FKs to an existing scenario — you cannot populate into a
+ # scenario that does not exist. Add the scenario first via the height op
+ # (`/scenarios/add`), then populate its input cell.
+ created = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/scenarios/add",
+ json={"count": 1},
+ )
+ assert created.status_code == 200, created.text
+ scenario_id = created.json()["scenarios"][0]["id"]
+
+ populate = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/populate",
+ json={
+ "results": [
+ {
+ "run_id": run_id,
+ "scenario_id": scenario_id,
+ "step_key": step_key,
+ "repeat_idx": 0,
+ "status": "success",
+ }
+ ]
+ },
+ )
+ assert populate.status_code == 200, populate.text
+
+ probe = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/probe",
+ json={"scenario_ids": [scenario_id]},
+ )
+ assert probe.status_code == 200, probe.text
+ results = probe.json()["results"]
+ # the populated cell is now readable by coordinate
+ assert any(
+ str(r.get("scenario_id")) == scenario_id and r.get("step_key") == step_key
+ for r in results
+ )
+
+
+class TestGraphShapeEndpoints:
+ """The graph-shape ops: add/remove scenarios, add/remove steps, set repeats."""
+
+ def test_add_scenarios_returns_created_rows(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/scenarios/add",
+ json={"count": 3},
+ )
+
+ assert response.status_code == 200, response.text
+ body = response.json()
+ assert body["count"] == 3
+ assert len(body["scenarios"]) == 3
+
+ def test_add_scenarios_floors_timestamp_to_minute(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/scenarios/add",
+ json={"count": 1, "timestamp": "2026-06-02T14:23:47.500000Z"},
+ )
+
+ assert response.status_code == 200, response.text
+ scenario = response.json()["scenarios"][0]
+ # floored to the minute (interval fixed at 1 minute server-side)
+ assert scenario["timestamp"].startswith("2026-06-02T14:23:00")
+ assert scenario["interval"] == 1
+
+ def test_remove_scenarios_returns_204(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ created = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/scenarios/add",
+ json={"count": 1},
+ )
+ assert created.status_code == 200, created.text
+ scenario_id = created.json()["scenarios"][0]["id"]
+
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/scenarios/remove",
+ json={"scenario_ids": [scenario_id]},
+ )
+
+ assert response.status_code == 204, response.text
+
+ def test_prune_returns_204(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/prune",
+ json={"scenario_ids": [str(uuid4())]},
+ )
+
+ assert response.status_code == 204, response.text
+
+ def test_set_repeats_returns_run(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/repeats/set",
+ json={"repeats": 3},
+ )
+
+ assert response.status_code == 200, response.text
+ run = response.json()["run"]
+ assert (run.get("data") or {}).get("repeats") == 3
+
+
+class TestSliceScoping:
+ """Path evaluation_id is enforced so a slice cannot reach another run."""
+
+ def test_populate_rejects_result_for_a_different_run(self, authed_api):
+ """UEL-017: a result whose run_id != path evaluation_id is rejected 400."""
+ eval_a = _create_testset_evaluator_evaluation(authed_api)
+ eval_b = _create_testset_evaluator_evaluation(authed_api)
+ run_a, run_b = eval_a["id"], eval_b["id"]
+ step_key = _input_step_key(authed_api, run_b)
+
+ # POST to run_a's populate, but the result targets run_b.
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_a}/populate",
+ json={
+ "results": [
+ {
+ "run_id": run_b,
+ "scenario_id": str(uuid4()),
+ "step_key": step_key,
+ "repeat_idx": 0,
+ "status": "success",
+ }
+ ]
+ },
+ )
+
+ assert response.status_code == 400, response.text
+
+ def test_remove_scenarios_rejects_a_different_runs_scenario(self, authed_api):
+ """UEL-018: scenario_ids must belong to the path evaluation_id (else 400)."""
+ eval_a = _create_testset_evaluator_evaluation(authed_api)
+ eval_b = _create_testset_evaluator_evaluation(authed_api)
+ run_a, run_b = eval_a["id"], eval_b["id"]
+
+ # A real scenario in run_b.
+ created = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_b}/scenarios/add",
+ json={"count": 1},
+ )
+ assert created.status_code == 200, created.text
+ scenario_b = created.json()["scenarios"][0]["id"]
+
+ # Try to delete run_b's scenario through run_a's path.
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_a}/scenarios/remove",
+ json={"scenario_ids": [scenario_b]},
+ )
+
+ assert response.status_code == 400, response.text
+
+ # And the scenario still exists in run_b (was not deleted).
+ probe = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_b}/probe",
+ json={"scenario_ids": [scenario_b]},
+ )
+ assert probe.status_code == 200, probe.text
+
+
+class TestClosedRunReturns409:
+ """Write ops against a closed run return 409, not 500 (UEL-020)."""
+
+ def test_add_scenarios_on_closed_run_returns_409(self, authed_api):
+ evaluation = _create_testset_evaluator_evaluation(authed_api)
+ run_id = evaluation["id"]
+
+ closed = authed_api("POST", f"/evaluations/runs/{run_id}/close")
+ assert closed.status_code in (200, 204), closed.text
+
+ response = authed_api(
+ "POST",
+ f"/simple/evaluations/{run_id}/scenarios/add",
+ json={"count": 1},
+ )
+
+ assert response.status_code == 409, response.text
diff --git a/api/oss/tests/pytest/acceptance/events/test_events_basics.py b/api/oss/tests/pytest/acceptance/events/test_events_basics.py
deleted file mode 100644
index 3b3cfb81d6..0000000000
--- a/api/oss/tests/pytest/acceptance/events/test_events_basics.py
+++ /dev/null
@@ -1,134 +0,0 @@
-"""Acceptance tests for the events query endpoint.
-
-Requires a running API. These tests verify the API contract (shape, status
-codes, filtering) without making strong assumptions about how many events
-exist in the system at query time — the events worker is a separate process.
-
-These exercise the *ungated* OSS contract, where a basic account may query
-events freely. Under EE the same endpoint is gated on the AUDIT entitlement
-(Hobby plan lacks it) and the VIEW_EVENTS permission, so a basic account is
-correctly rejected with 403. That gated behaviour is covered by the EE suite
-(ee/tests/pytest/acceptance/events/test_events_basics.py) using a business-plan
-developer account, so this OSS suite is skipped on EE deployments.
-"""
-
-import os
-
-import pytest
-import requests
-
-from utils.constants import BASE_TIMEOUT
-
-
-@pytest.fixture(scope="class")
-def events_api(cls_account, ag_env):
- if os.getenv("AGENTA_LICENSE") == "ee":
- pytest.skip(
- "Endpoint is plan/role-gated under EE; covered by the EE events suite."
- )
-
- credentials = cls_account["credentials"]
-
- def _request(method: str, endpoint: str, **kwargs):
- headers = kwargs.pop("headers", {})
- headers.setdefault("Authorization", credentials)
- return requests.request(
- method=method,
- url=f"{ag_env['api_url']}{endpoint}",
- headers=headers,
- timeout=BASE_TIMEOUT,
- **kwargs,
- )
-
- yield _request
-
-
-class TestEventsBasics:
- def test_query_events_returns_valid_response(self, events_api):
- """POST /events/query with an empty body returns a valid response."""
- # ACT ------------------------------------------------------------------
- response = events_api("POST", "/events/query", json={})
- # ----------------------------------------------------------------------
-
- # ASSERT ---------------------------------------------------------------
- assert response.status_code == 200
- body = response.json()
- assert "count" in body
- assert "events" in body
- assert isinstance(body["events"], list)
- assert body["count"] == len(body["events"])
- # ----------------------------------------------------------------------
-
- def test_query_events_by_event_type(self, events_api):
- """Filtering by event_type returns only matching events."""
- # ACT ------------------------------------------------------------------
- response = events_api(
- "POST",
- "/events/query",
- json={
- "event": {"event_type": "environments.revisions.committed"},
- },
- )
- # ----------------------------------------------------------------------
-
- # ASSERT ---------------------------------------------------------------
- assert response.status_code == 200
- body = response.json()
- assert "count" in body
- assert "events" in body
- # Every returned event must match the requested type
- for event in body["events"]:
- assert event["event_type"] == "environments.revisions.committed"
- # ----------------------------------------------------------------------
-
- def test_query_events_by_unknown_event_type(self, events_api):
- """Filtering by UNKNOWN event_type returns only unknown events."""
- # ACT ------------------------------------------------------------------
- response = events_api(
- "POST",
- "/events/query",
- json={
- "event": {"event_type": "unknown"},
- },
- )
- # ----------------------------------------------------------------------
-
- # ASSERT ---------------------------------------------------------------
- assert response.status_code == 200
- body = response.json()
- for event in body["events"]:
- assert event["event_type"] == "unknown"
- # ----------------------------------------------------------------------
-
- def test_query_events_with_windowing_limit(self, events_api):
- """Windowing limit=1 returns at most 1 event."""
- # ACT ------------------------------------------------------------------
- response = events_api(
- "POST",
- "/events/query",
- json={"windowing": {"limit": 1}},
- )
- # ----------------------------------------------------------------------
-
- # ASSERT ---------------------------------------------------------------
- assert response.status_code == 200
- body = response.json()
- assert body["count"] <= 1
- assert len(body["events"]) <= 1
- # ----------------------------------------------------------------------
-
- def test_query_events_invalid_event_type_rejected(self, events_api):
- """Sending an unrecognised event_type value should be rejected (422)."""
- # ACT ------------------------------------------------------------------
- response = events_api(
- "POST",
- "/events/query",
- json={
- "event": {"event_type": "not.a.real.event.type"},
- },
- )
- # ----------------------------------------------------------------------
-
- # ASSERT ---------------------------------------------------------------
- assert response.status_code == 422
- # ----------------------------------------------------------------------
diff --git a/api/oss/tests/pytest/acceptance/loadables/test_loadable_strategies.py b/api/oss/tests/pytest/acceptance/loadables/test_loadable_strategies.py
index 45f9c4b290..878a7fcc50 100644
--- a/api/oss/tests/pytest/acceptance/loadables/test_loadable_strategies.py
+++ b/api/oss/tests/pytest/acceptance/loadables/test_loadable_strategies.py
@@ -127,8 +127,20 @@ def mock_data(authed_api):
# Ingestion is asynchronous; 202 Accepted
assert response.status_code == 202, response.text
- # Allow a moment for async ingestion to settle
- time.sleep(1)
+ # Ingestion is asynchronous and its latency varies (especially under the
+ # parallel test run). Poll the trace store until all three ingested traces
+ # are queryable instead of relying on a fixed sleep, which is racy under
+ # load. Fast on the happy path; tolerant when ingestion is slow.
+ ids_param = ",".join(trace_ids)
+ deadline = time.time() + 15
+ while True:
+ poll = authed_api("GET", f"/traces/?trace_ids={ids_param}")
+ visible = poll.json().get("traces") or poll.json().get("spans") or []
+ if poll.status_code == 200 and len(visible) >= 3:
+ break
+ if time.time() >= deadline:
+ break
+ time.sleep(0.25)
# -- Query revision (stores filtering + windowing) ----------------------
diff --git a/api/oss/tests/pytest/acceptance/workflows/test_workflow_revisions_basics.py b/api/oss/tests/pytest/acceptance/workflows/test_workflow_revisions_basics.py
index 3cc70bb7f9..c911c42133 100644
--- a/api/oss/tests/pytest/acceptance/workflows/test_workflow_revisions_basics.py
+++ b/api/oss/tests/pytest/acceptance/workflows/test_workflow_revisions_basics.py
@@ -3,6 +3,36 @@
import pytest
+def _commit_workflow_revision(
+ authed_api,
+ *,
+ workflow_id,
+ workflow_variant_id,
+ slug,
+ name,
+ description,
+ flags,
+ tags,
+ meta,
+):
+ return authed_api(
+ "POST",
+ "/workflows/revisions/commit",
+ json={
+ "workflow_revision": {
+ "slug": slug,
+ "name": name,
+ "description": description,
+ "flags": flags,
+ "tags": tags,
+ "meta": meta,
+ "workflow_id": workflow_id,
+ "workflow_variant_id": workflow_variant_id,
+ }
+ },
+ )
+
+
@pytest.fixture(scope="class")
def mock_data(authed_api):
# ARRANGE --------------------------------------------------------------
@@ -139,33 +169,27 @@ def test_fetch_workflow_revision(
# ARRANGE --------------------------------------------------------------
workflow_revision_slug = uuid4()
- response = authed_api(
- "POST",
- "/workflows/revisions/commit",
- json={
- "workflow_revision": {
- "slug": f"workflow-revision-{workflow_revision_slug}",
- "name": f"Workflow Revision {workflow_revision_slug}",
- "description": "Workflow Revision Description",
- "flags": {
- "is_custom": False,
- "is_evaluator": False,
- "is_feedback": False,
- },
- "tags": {
- "tag1": "value1",
- "tag2": "value2",
- "tag3": "value3",
- },
- "meta": {
- "meta1": "value1",
- "meta2": "value2",
- "meta3": "value3",
- },
- "data": {"parameters": {"key1": "value1"}},
- "workflow_id": mock_data["workflows"][0]["id"],
- "workflow_variant_id": mock_data["workflow_variants"][0]["id"],
- }
+ response = _commit_workflow_revision(
+ authed_api,
+ workflow_id=mock_data["workflows"][0]["id"],
+ workflow_variant_id=mock_data["workflow_variants"][0]["id"],
+ slug=f"workflow-revision-{workflow_revision_slug}",
+ name=f"Workflow Revision {workflow_revision_slug}",
+ description="Workflow Revision Description",
+ flags={
+ "is_custom": False,
+ "is_evaluator": False,
+ "is_feedback": False,
+ },
+ tags={
+ "tag1": "value1",
+ "tag2": "value2",
+ "tag3": "value3",
+ },
+ meta={
+ "meta1": "value1",
+ "meta2": "value2",
+ "meta3": "value3",
},
)
@@ -197,33 +221,27 @@ def test_edit_workflow_revision(
# ARRANGE --------------------------------------------------------------
workflow_revision_slug = uuid4()
- response = authed_api(
- "POST",
- "/workflows/revisions/commit",
- json={
- "workflow_revision": {
- "slug": f"workflow-revision-{workflow_revision_slug}",
- "name": f"Workflow revision {workflow_revision_slug}",
- "description": "Workflow revision Description",
- "flags": {
- "is_custom": False,
- "is_evaluator": False,
- "is_feedback": False,
- },
- "tags": {
- "tag1": "value1",
- "tag2": "value2",
- "tag3": "value3",
- },
- "meta": {
- "meta1": "value1",
- "meta2": "value2",
- "meta3": "value3",
- },
- "data": {"parameters": {"key1": "value1"}},
- "workflow_id": mock_data["workflows"][0]["id"],
- "workflow_variant_id": mock_data["workflow_variants"][0]["id"],
- }
+ response = _commit_workflow_revision(
+ authed_api,
+ workflow_id=mock_data["workflows"][0]["id"],
+ workflow_variant_id=mock_data["workflow_variants"][0]["id"],
+ slug=f"workflow-revision-{workflow_revision_slug}",
+ name=f"Workflow revision {workflow_revision_slug}",
+ description="Workflow revision Description",
+ flags={
+ "is_custom": False,
+ "is_evaluator": False,
+ "is_feedback": False,
+ },
+ tags={
+ "tag1": "value1",
+ "tag2": "value2",
+ "tag3": "value3",
+ },
+ meta={
+ "meta1": "value1",
+ "meta2": "value2",
+ "meta3": "value3",
},
)
@@ -278,33 +296,27 @@ def test_archive_workflow_revision(
# ARRANGE --------------------------------------------------------------
workflow_revision_slug = uuid4()
- response = authed_api(
- "POST",
- "/workflows/revisions/commit",
- json={
- "workflow_revision": {
- "slug": f"workflow-revision-{workflow_revision_slug}",
- "name": f"Workflow revision {workflow_revision_slug}",
- "description": "Workflow revision Description",
- "flags": {
- "is_custom": False,
- "is_evaluator": False,
- "is_feedback": False,
- },
- "tags": {
- "tag1": "value1",
- "tag2": "value2",
- "tag3": "value3",
- },
- "meta": {
- "meta1": "value1",
- "meta2": "value2",
- "meta3": "value3",
- },
- "data": {"parameters": {"key1": "value1"}},
- "workflow_id": mock_data["workflows"][0]["id"],
- "workflow_variant_id": mock_data["workflow_variants"][0]["id"],
- }
+ response = _commit_workflow_revision(
+ authed_api,
+ workflow_id=mock_data["workflows"][0]["id"],
+ workflow_variant_id=mock_data["workflow_variants"][0]["id"],
+ slug=f"workflow-revision-{workflow_revision_slug}",
+ name=f"Workflow revision {workflow_revision_slug}",
+ description="Workflow revision Description",
+ flags={
+ "is_custom": False,
+ "is_evaluator": False,
+ "is_feedback": False,
+ },
+ tags={
+ "tag1": "value1",
+ "tag2": "value2",
+ "tag3": "value3",
+ },
+ meta={
+ "meta1": "value1",
+ "meta2": "value2",
+ "meta3": "value3",
},
)
@@ -338,33 +350,27 @@ def test_unarchive_workflow_revision(
# ARRANGE --------------------------------------------------------------
workflow_revision_slug = uuid4()
- response = authed_api(
- "POST",
- "/workflows/revisions/commit",
- json={
- "workflow_revision": {
- "slug": f"workflow-revision-{workflow_revision_slug}",
- "name": f"Workflow revision {workflow_revision_slug}",
- "description": "Workflow revision Description",
- "flags": {
- "is_custom": False,
- "is_evaluator": False,
- "is_feedback": False,
- },
- "tags": {
- "tag1": "value1",
- "tag2": "value2",
- "tag3": "value3",
- },
- "meta": {
- "meta1": "value1",
- "meta2": "value2",
- "meta3": "value3",
- },
- "data": {"parameters": {"key1": "value1"}},
- "workflow_id": mock_data["workflows"][0]["id"],
- "workflow_variant_id": mock_data["workflow_variants"][0]["id"],
- }
+ response = _commit_workflow_revision(
+ authed_api,
+ workflow_id=mock_data["workflows"][0]["id"],
+ workflow_variant_id=mock_data["workflow_variants"][0]["id"],
+ slug=f"workflow-revision-{workflow_revision_slug}",
+ name=f"Workflow revision {workflow_revision_slug}",
+ description="Workflow revision Description",
+ flags={
+ "is_custom": False,
+ "is_evaluator": False,
+ "is_feedback": False,
+ },
+ tags={
+ "tag1": "value1",
+ "tag2": "value2",
+ "tag3": "value3",
+ },
+ meta={
+ "meta1": "value1",
+ "meta2": "value2",
+ "meta3": "value3",
},
)
@@ -408,33 +414,27 @@ def test_commit_workflow_revision(
# ARRANGE --------------------------------------------------------------
workflow_revision_slug = uuid4()
- response = authed_api(
- "POST",
- "/workflows/revisions/commit",
- json={
- "workflow_revision": {
- "slug": f"workflow-revision-{workflow_revision_slug}",
- "name": f"Workflow revision {workflow_revision_slug}",
- "description": "Workflow revision Description",
- "flags": {
- "is_custom": False,
- "is_evaluator": False,
- "is_feedback": False,
- },
- "tags": {
- "tag1": "value1",
- "tag2": "value2",
- "tag3": "value3",
- },
- "meta": {
- "meta1": "value1",
- "meta2": "value2",
- "meta3": "value3",
- },
- "data": {"parameters": {"key1": "value1"}},
- "workflow_id": mock_data["workflows"][0]["id"],
- "workflow_variant_id": mock_data["workflow_variants"][0]["id"],
- }
+ response = _commit_workflow_revision(
+ authed_api,
+ workflow_id=mock_data["workflows"][0]["id"],
+ workflow_variant_id=mock_data["workflow_variants"][0]["id"],
+ slug=f"workflow-revision-{workflow_revision_slug}",
+ name=f"Workflow revision {workflow_revision_slug}",
+ description="Workflow revision Description",
+ flags={
+ "is_custom": False,
+ "is_evaluator": False,
+ "is_feedback": False,
+ },
+ tags={
+ "tag1": "value1",
+ "tag2": "value2",
+ "tag3": "value3",
+ },
+ meta={
+ "meta1": "value1",
+ "meta2": "value2",
+ "meta3": "value3",
},
)
diff --git a/api/oss/tests/pytest/unit/auth/test_helper.py b/api/oss/tests/pytest/unit/auth/test_helper.py
index f6b1cfb676..81b2eba7f8 100644
--- a/api/oss/tests/pytest/unit/auth/test_helper.py
+++ b/api/oss/tests/pytest/unit/auth/test_helper.py
@@ -5,7 +5,7 @@
from oss.src.core.auth import helper as auth_helper
from oss.src.core.auth.supertokens import overrides
-from oss.src.services.exceptions import UnauthorizedException
+from oss.src.utils.exceptions import UnauthorizedException
from supertokens_python.recipe.thirdparty.interfaces import SignInUpNotAllowed
@@ -74,7 +74,7 @@ async def test_get_blocked_domains_accepts_string_posthog_payload(monkeypatch):
allowed_domains=set(),
),
),
- posthog=SimpleNamespace(enabled=True),
+ posthog=SimpleNamespace(enabled=True, api_key="posthog-key"),
),
)
monkeypatch.setattr(
@@ -88,9 +88,11 @@ async def test_get_blocked_domains_accepts_string_posthog_payload(monkeypatch):
AsyncMock(),
)
monkeypatch.setattr(
- auth_helper.posthog,
- "get_feature_flag_payload",
- lambda feature_flag, distinct_id: "agenta.dev",
+ auth_helper,
+ "_load_posthog",
+ lambda: SimpleNamespace(
+ get_feature_flag_payload=lambda feature_flag, distinct_id: "agenta.dev",
+ ),
)
blocked_domains = await auth_helper.get_blocked_domains()
@@ -111,7 +113,7 @@ async def test_get_blocked_domains_splits_comma_separated_posthog_payload(monkey
allowed_domains=set(),
),
),
- posthog=SimpleNamespace(enabled=True),
+ posthog=SimpleNamespace(enabled=True, api_key="posthog-key"),
),
)
monkeypatch.setattr(
@@ -125,9 +127,13 @@ async def test_get_blocked_domains_splits_comma_separated_posthog_payload(monkey
AsyncMock(),
)
monkeypatch.setattr(
- auth_helper.posthog,
- "get_feature_flag_payload",
- lambda feature_flag, distinct_id: "spica.asia, agenta.ai , yopmail.com",
+ auth_helper,
+ "_load_posthog",
+ lambda: SimpleNamespace(
+ get_feature_flag_payload=(
+ lambda feature_flag, distinct_id: "spica.asia, agenta.ai , yopmail.com"
+ ),
+ ),
)
blocked_domains = await auth_helper.get_blocked_domains()
@@ -135,6 +141,40 @@ async def test_get_blocked_domains_splits_comma_separated_posthog_payload(monkey
assert blocked_domains == {"spica.asia", "agenta.ai", "yopmail.com"}
+@pytest.mark.asyncio
+async def test_get_blocked_emails_treats_posthog_errors_as_empty(monkeypatch):
+ monkeypatch.setattr(
+ auth_helper,
+ "env",
+ SimpleNamespace(
+ agenta=SimpleNamespace(
+ access=SimpleNamespace(
+ blocked_domains=set(),
+ blocked_emails=set(),
+ allowed_domains=set(),
+ ),
+ ),
+ posthog=SimpleNamespace(enabled=True),
+ ),
+ )
+ monkeypatch.setattr(
+ auth_helper,
+ "get_cache",
+ AsyncMock(return_value=None),
+ )
+ monkeypatch.setattr(
+ auth_helper,
+ "_load_posthog",
+ lambda: SimpleNamespace(
+ get_feature_flag_payload=lambda feature_flag, distinct_id: (
+ _ for _ in ()
+ ).throw(ValueError("API key is required")),
+ ),
+ )
+
+ assert await auth_helper.get_blocked_emails() == set()
+
+
@pytest.mark.asyncio
async def test_thirdparty_sign_in_up_checks_blocking_before_auth(monkeypatch):
called = False
diff --git a/api/oss/tests/pytest/unit/evaluations/test_cache_split_utils.py b/api/oss/tests/pytest/unit/evaluations/test_cache_split_utils.py
index 7c0cef9d24..06ae1026e9 100644
--- a/api/oss/tests/pytest/unit/evaluations/test_cache_split_utils.py
+++ b/api/oss/tests/pytest/unit/evaluations/test_cache_split_utils.py
@@ -110,7 +110,7 @@ def test_repeat_and_fanout_planning_helpers_follow_split_rules():
assert (
effective_is_split(
is_split=True,
- is_queue=True,
+ has_traces=True,
has_application_steps=True,
has_evaluator_steps=True,
)
diff --git a/api/oss/tests/pytest/unit/evaluations/test_live_evaluation_guards.py b/api/oss/tests/pytest/unit/evaluations/test_live_evaluation_guards.py
index 2c4b8f032f..f6a3d2a703 100644
--- a/api/oss/tests/pytest/unit/evaluations/test_live_evaluation_guards.py
+++ b/api/oss/tests/pytest/unit/evaluations/test_live_evaluation_guards.py
@@ -8,129 +8,129 @@
import pytest
-# Stub genson so importing oss.src.core.evaluations.tasks.live (which transitively
-# pulls in services depending on it) does not require genson during unit tests.
sys.modules.setdefault("genson", types.SimpleNamespace(SchemaBuilder=object))
-from oss.src.core.evaluators.dtos import EvaluatorRevision, EvaluatorRevisionData
+from oss.src.core.evaluators.dtos import EvaluatorRevision
+from oss.src.core.evaluations.runtime.sources import QueryRevisionTraceResolver
+from oss.src.core.evaluations.service import SimpleEvaluationsService
+from oss.src.core.evaluations.types import EvaluationRunDataStep
from oss.src.core.queries.dtos import QueryRevision, QueryRevisionData
from oss.src.core.shared.dtos import Reference
@pytest.mark.asyncio
-async def test_resolve_query_revisions_skips_revision_with_null_data():
- """A live evaluation must not run when the referenced query revision has no data.
-
- If the revision row exists but `data` is null, running it would issue an
- unfiltered tracing query and silently evaluate every trace in the project.
- """
- from oss.src.core.evaluations.tasks.live import _resolve_query_revisions
-
+async def test_query_revision_trace_resolver_skips_revision_with_null_data():
revision_id = uuid4()
- revision_ref = Reference(id=revision_id)
-
- revision_without_data = QueryRevision(
- id=revision_id,
- slug="my-query",
- data=None,
- )
-
- queries_service = SimpleNamespace(
- fetch_query_revision=AsyncMock(return_value=revision_without_data),
+ resolver = QueryRevisionTraceResolver(
+ queries_service=SimpleNamespace(
+ fetch_query_revision=AsyncMock(
+ return_value=QueryRevision(
+ id=revision_id,
+ slug="my-query",
+ data=None,
+ )
+ )
+ )
)
- resolved = await _resolve_query_revisions(
- queries_service=queries_service,
+ batch = await resolver.resolve(
project_id=uuid4(),
- query_revision_refs={"query-step": revision_ref},
+ step=EvaluationRunDataStep(
+ key="query-step",
+ type="input",
+ origin="custom",
+ references={"query_revision": Reference(id=revision_id)},
+ ),
)
- assert resolved == {}, (
- "Revisions with null `data` must be skipped, not fabricated with empty data."
- )
+ assert batch is None
@pytest.mark.asyncio
-async def test_resolve_query_revisions_keeps_revision_with_real_data():
- from oss.src.core.evaluations.tasks.live import _resolve_query_revisions
-
+async def test_query_revision_trace_resolver_keeps_revision_with_trace_ids():
revision_id = uuid4()
- revision_ref = Reference(id=revision_id)
-
- revision_with_data = QueryRevision(
- id=revision_id,
- slug="my-query",
- data=QueryRevisionData(trace_ids=["00000000000000000000000000000001"]),
- )
-
- queries_service = SimpleNamespace(
- fetch_query_revision=AsyncMock(return_value=revision_with_data),
+ resolver = QueryRevisionTraceResolver(
+ queries_service=SimpleNamespace(
+ fetch_query_revision=AsyncMock(
+ return_value=QueryRevision(
+ id=revision_id,
+ slug="my-query",
+ data=QueryRevisionData(
+ trace_ids=["00000000000000000000000000000001"]
+ ),
+ )
+ )
+ )
)
- resolved = await _resolve_query_revisions(
- queries_service=queries_service,
+ batch = await resolver.resolve(
project_id=uuid4(),
- query_revision_refs={"query-step": revision_ref},
+ step=EvaluationRunDataStep(
+ key="query-step",
+ type="input",
+ origin="custom",
+ references={"query_revision": Reference(id=revision_id)},
+ ),
)
- assert set(resolved.keys()) == {"query-step"}
+ assert batch is not None
+ assert batch.step_key == "query-step"
+ assert batch.trace_ids == ["00000000000000000000000000000001"]
@pytest.mark.asyncio
-async def test_resolve_evaluator_revisions_skips_revision_with_null_data():
- """A live evaluation must not invoke an evaluator workflow with no config.
-
- If the evaluator revision row exists but `data` is null, downstream code
- would build a `WorkflowServiceRequest` with empty uri/url/script and call
- `workflows_service.invoke_workflow` against a non-functional target.
- """
- from oss.src.core.evaluations.tasks.live import _resolve_evaluator_revisions
-
+async def test_make_evaluation_run_data_rejects_live_query_revision_with_null_data():
revision_id = uuid4()
- revision_ref = Reference(id=revision_id)
-
- revision_without_data = EvaluatorRevision(
- id=revision_id,
- slug="my-evaluator",
- data=None,
- )
-
- evaluators_service = SimpleNamespace(
- fetch_evaluator_revision=AsyncMock(return_value=revision_without_data),
+ service = SimpleNamespace(
+ queries_service=SimpleNamespace(
+ fetch_query_revision=AsyncMock(
+ return_value=QueryRevision(
+ id=revision_id,
+ slug="my-query",
+ data=None,
+ )
+ )
+ ),
+ testsets_service=SimpleNamespace(),
+ applications_service=SimpleNamespace(),
+ evaluators_service=SimpleNamespace(),
)
- resolved = await _resolve_evaluator_revisions(
- evaluators_service=evaluators_service,
+ run_data = await SimpleEvaluationsService._make_evaluation_run_data(
+ service,
project_id=uuid4(),
- evaluator_revision_refs={"evaluator-step": revision_ref},
+ user_id=uuid4(),
+ query_steps=[revision_id],
+ is_live=True,
)
- assert resolved == {}, (
- "Evaluator revisions with null `data` must be skipped, not fabricated with empty data."
- )
+ assert run_data is None
@pytest.mark.asyncio
-async def test_resolve_evaluator_revisions_keeps_revision_with_real_data():
- from oss.src.core.evaluations.tasks.live import _resolve_evaluator_revisions
-
+async def test_make_evaluation_run_data_rejects_evaluator_revision_with_null_data():
revision_id = uuid4()
- revision_ref = Reference(id=revision_id)
-
- revision_with_data = EvaluatorRevision(
- id=revision_id,
- slug="my-evaluator",
- data=EvaluatorRevisionData(uri="http://evaluator.local/invoke"),
- )
-
- evaluators_service = SimpleNamespace(
- fetch_evaluator_revision=AsyncMock(return_value=revision_with_data),
+ service = SimpleNamespace(
+ queries_service=SimpleNamespace(),
+ testsets_service=SimpleNamespace(),
+ applications_service=SimpleNamespace(),
+ evaluators_service=SimpleNamespace(
+ fetch_evaluator_revision=AsyncMock(
+ return_value=EvaluatorRevision(
+ id=revision_id,
+ slug="my-evaluator",
+ data=None,
+ )
+ )
+ ),
)
- resolved = await _resolve_evaluator_revisions(
- evaluators_service=evaluators_service,
+ run_data = await SimpleEvaluationsService._make_evaluation_run_data(
+ service,
project_id=uuid4(),
- evaluator_revision_refs={"evaluator-step": revision_ref},
+ user_id=uuid4(),
+ evaluator_steps=[revision_id],
+ is_live=False,
)
- assert set(resolved.keys()) == {"evaluator-step"}
+ assert run_data is None
diff --git a/api/oss/tests/pytest/unit/evaluations/test_query_eval_loops.py b/api/oss/tests/pytest/unit/evaluations/test_query_eval_loops.py
index 4f88be8851..5ca3f411b4 100644
--- a/api/oss/tests/pytest/unit/evaluations/test_query_eval_loops.py
+++ b/api/oss/tests/pytest/unit/evaluations/test_query_eval_loops.py
@@ -24,7 +24,7 @@
SimpleQueueData,
)
from oss.src.core.evaluations.service import SimpleQueuesService
-from oss.src.core.evaluations.tasks import live as live_module
+from oss.src.core.evaluations.tasks import run as run_module
@pytest.mark.asyncio
@@ -92,8 +92,8 @@ async def test_simple_queue_create_dispatches_each_query_source_with_step_key():
)
),
testsets_service=SimpleNamespace(fetch_testset_revision=AsyncMock()),
- evaluate_batch_traces=AsyncMock(return_value=True),
- evaluate_batch_testcases=AsyncMock(return_value=True),
+ dispatch_trace_slice=AsyncMock(return_value=True),
+ dispatch_testcase_slice=AsyncMock(return_value=True),
)
service = SimpleQueuesService(
@@ -116,9 +116,9 @@ async def test_simple_queue_create_dispatches_each_query_source_with_step_key():
assert created_queue is not None
assert created_queue.data is not None
- assert created_queue.data.kind == "traces"
+ assert created_queue.data.kind == "queries"
assert created_queue.data.queries == [query_revision_id_1, query_revision_id_2]
- assert simple_evaluations_service.evaluate_batch_traces.await_args_list == [
+ assert simple_evaluations_service.dispatch_trace_slice.await_args_list == [
call(
project_id=project_id,
user_id=user_id,
@@ -137,7 +137,7 @@ async def test_simple_queue_create_dispatches_each_query_source_with_step_key():
@pytest.mark.asyncio
-async def test_evaluate_live_query_marks_human_steps_pending(monkeypatch):
+async def test_run_query_source_marks_human_steps_pending(monkeypatch):
project_id = uuid4()
user_id = uuid4()
run_id = uuid4()
@@ -189,7 +189,7 @@ async def test_evaluate_live_query_marks_human_steps_pending(monkeypatch):
create_scenarios = AsyncMock(
return_value=[SimpleNamespace(id=scenario_id, tags=None, meta=None)]
)
- create_results = AsyncMock(return_value=[SimpleNamespace(id=uuid4())])
+ set_results = AsyncMock(return_value=[SimpleNamespace(id=uuid4())])
edit_scenario = AsyncMock(
side_effect=lambda **kwargs: SimpleNamespace(
id=kwargs["scenario"].id,
@@ -197,74 +197,253 @@ async def test_evaluate_live_query_marks_human_steps_pending(monkeypatch):
meta=kwargs["scenario"].meta,
)
)
+ edit_run = AsyncMock()
refresh_metrics = AsyncMock()
+ query_results = AsyncMock(return_value=[])
+ evaluations_service = SimpleNamespace(
+ fetch_run=fetch_run,
+ create_scenarios=create_scenarios,
+ set_results=set_results,
+ edit_scenario=edit_scenario,
+ edit_run=edit_run,
+ refresh_metrics=refresh_metrics,
+ query_results=query_results,
+ )
+ queries_service = SimpleNamespace(
+ fetch_query_revision=AsyncMock(
+ return_value=SimpleNamespace(
+ id=query_revision_id,
+ slug="query-live",
+ data=SimpleNamespace(filtering=None, windowing=None),
+ )
+ )
+ )
+ workflows_service = SimpleNamespace(invoke_workflow=AsyncMock())
+
+ # The query resolver hands the unified flow an already-hydrated trace; no
+ # re-fetch happens downstream (Option A seed path).
monkeypatch.setattr(
- live_module,
- "evaluations_service",
- SimpleNamespace(
- fetch_run=fetch_run,
- create_scenarios=create_scenarios,
- create_results=create_results,
- edit_scenario=edit_scenario,
- refresh_metrics=refresh_metrics,
+ run_module,
+ "resolve_query_source_items",
+ AsyncMock(
+ return_value={
+ "query-live": [
+ run_module.ResolvedSourceItem(
+ kind="trace",
+ step_key="query-live",
+ trace_id="trace-live",
+ trace=trace,
+ )
+ ]
+ }
),
)
- monkeypatch.setattr(
- live_module,
- "queries_service",
- SimpleNamespace(
- fetch_query_revision=AsyncMock(
- return_value=SimpleNamespace(
- id=query_revision_id,
- slug="query-live",
- data=SimpleNamespace(filtering=None, windowing=None),
- )
- )
+
+ # Live run (use_windowing=False) routes through the query seam directly.
+ await run_module._run_query_source(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ newest=None,
+ oldest=None,
+ use_windowing=False,
+ tracing_service=SimpleNamespace(),
+ queries_service=queries_service,
+ workflows_service=workflows_service,
+ applications_service=SimpleNamespace(),
+ evaluations_service=evaluations_service,
+ )
+
+ # The input cell is written under the query step key. The unified flow
+ # populates it once (mint+populate) and the SDK plan logs the input step
+ # again on execute — same as the direct-slice ingest path. We assert the
+ # query step key is present and the human step is logged PENDING, rather
+ # than pinning the exact call count.
+ logged_step_keys = {
+ result.step_key
+ for call_args in set_results.await_args_list
+ for result in call_args.kwargs["results"]
+ }
+ assert "query-live" in logged_step_keys
+
+ # The human annotation step is PENDING (the backend never executes it).
+ scenario_statuses = {
+ call_args.kwargs["scenario"].status
+ for call_args in edit_scenario.await_args_list
+ }
+ assert all(
+ isinstance(call_args.kwargs["scenario"], EvaluationScenarioEdit)
+ for call_args in edit_scenario.await_args_list
+ )
+ assert EvaluationStatus.PENDING in scenario_statuses
+ # Human-only live tick produced no auto results -> no metric refresh, and a
+ # live run is never finalized.
+ refresh_metrics.assert_not_awaited()
+ edit_run.assert_not_awaited()
+
+
+@pytest.mark.asyncio
+async def test_run_query_source_skips_empty_query_results(monkeypatch):
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ query_revision_id = uuid4()
+ evaluator_revision_id = uuid4()
+ run = EvaluationRun(
+ id=run_id,
+ flags=EvaluationRunFlags(has_queries=True, has_evaluators=True),
+ status=EvaluationStatus.RUNNING,
+ data=EvaluationRunData(
+ steps=[
+ EvaluationRunDataStep(
+ key="query-main",
+ type="input",
+ origin="custom",
+ references={"query_revision": Reference(id=query_revision_id)},
+ ),
+ EvaluationRunDataStep(
+ key="evaluator-auto",
+ type="annotation",
+ origin="auto",
+ references={
+ "evaluator_revision": Reference(id=evaluator_revision_id)
+ },
+ ),
+ ]
),
)
+ execute_bindings = AsyncMock()
monkeypatch.setattr(
- live_module,
- "evaluators_service",
- SimpleNamespace(
- fetch_evaluator_revision=AsyncMock(
- return_value=SimpleNamespace(
- id=evaluator_revision_id,
- slug="evaluator-human",
- data=SimpleNamespace(),
- )
- )
+ run_module,
+ "resolve_query_source_items",
+ AsyncMock(return_value={"query-main": []}),
+ )
+ monkeypatch.setattr(run_module, "_execute_bindings", execute_bindings)
+
+ # Live run (use_windowing=False): an empty tick must not mint or execute.
+ await run_module._run_query_source(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ newest=None,
+ oldest=None,
+ use_windowing=False,
+ tracing_service=SimpleNamespace(),
+ queries_service=SimpleNamespace(),
+ workflows_service=SimpleNamespace(),
+ applications_service=SimpleNamespace(),
+ evaluations_service=SimpleNamespace(fetch_run=AsyncMock(return_value=run)),
+ )
+
+ execute_bindings.assert_not_awaited()
+
+
+@pytest.mark.asyncio
+async def test_run_query_source_finalizes_batch_run_on_pre_slice_error(
+ monkeypatch,
+):
+ """A pre-slice error in a batch run must finalize it to FAILURE (UEL-024).
+
+ An exception raised before the slice processor runs (here, during source
+ resolution) never reaches the slice's own finalize, so the outer handler must
+ flip a batch (use_windowing=True) run to FAILURE + inactive instead of
+ leaving it stuck RUNNING.
+ """
+ project_id, user_id, run_id = uuid4(), uuid4(), uuid4()
+ run = EvaluationRun(
+ id=run_id,
+ flags=EvaluationRunFlags(has_queries=True, has_evaluators=True, is_active=True),
+ status=EvaluationStatus.RUNNING,
+ data=EvaluationRunData(
+ steps=[
+ EvaluationRunDataStep(
+ key="query-main",
+ type="input",
+ origin="custom",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ ]
),
)
- monkeypatch.setattr(
- live_module,
- "tracing_service",
- SimpleNamespace(query_traces=AsyncMock(return_value=[trace])),
+ edit_run = AsyncMock()
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ edit_run=edit_run,
)
monkeypatch.setattr(
- live_module,
- "workflows_service",
- SimpleNamespace(invoke_workflow=AsyncMock()),
+ run_module,
+ "resolve_query_source_items",
+ AsyncMock(side_effect=RuntimeError("boom: trace fetch failed")),
+ )
+
+ # Must not raise — the error is handled and the run finalized.
+ await run_module._run_query_source(
+ project_id=project_id,
+ user_id=user_id,
+ run=run,
+ newest=None,
+ oldest=None,
+ use_windowing=True,
+ tracing_service=SimpleNamespace(),
+ queries_service=SimpleNamespace(),
+ workflows_service=SimpleNamespace(),
+ applications_service=SimpleNamespace(),
+ evaluations_service=evaluations_service,
+ )
+
+ edit_run.assert_awaited_once()
+ _, kwargs = edit_run.await_args
+ edited = kwargs["run"]
+ assert edited.status == EvaluationStatus.FAILURE
+ assert edited.flags.is_active is False
+
+
+@pytest.mark.asyncio
+async def test_run_query_source_live_run_not_finalized_on_error(monkeypatch):
+ """A LIVE run (use_windowing=False) keeps ticking — it is NOT finalized."""
+ project_id, user_id, run_id = uuid4(), uuid4(), uuid4()
+ run = EvaluationRun(
+ id=run_id,
+ flags=EvaluationRunFlags(
+ has_queries=True, has_evaluators=True, is_live=True, is_active=True
+ ),
+ status=EvaluationStatus.RUNNING,
+ data=EvaluationRunData(
+ steps=[
+ EvaluationRunDataStep(
+ key="query-main",
+ type="input",
+ origin="custom",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ ]
+ ),
+ )
+ edit_run = AsyncMock()
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ edit_run=edit_run,
)
monkeypatch.setattr(
- live_module,
- "fetch_traces_by_hash",
- AsyncMock(return_value=[]),
+ run_module,
+ "resolve_query_source_items",
+ AsyncMock(side_effect=RuntimeError("boom")),
)
- await live_module.evaluate_live_query(
+ await run_module._run_query_source(
project_id=project_id,
user_id=user_id,
- run_id=run_id,
+ run=run,
+ newest=None,
+ oldest=None,
+ use_windowing=False,
+ tracing_service=SimpleNamespace(),
+ queries_service=SimpleNamespace(),
+ workflows_service=SimpleNamespace(),
+ applications_service=SimpleNamespace(),
+ evaluations_service=evaluations_service,
)
- assert create_results.await_count == 1
- result_step_keys = [
- result.step_key for result in create_results.await_args.kwargs["results"]
- ]
- assert result_step_keys == ["query-live"]
-
- scenario_edit = edit_scenario.await_args.kwargs["scenario"]
- assert isinstance(scenario_edit, EvaluationScenarioEdit)
- assert scenario_edit.status == EvaluationStatus.PENDING
- refresh_metrics.assert_not_awaited()
+ # live runs are never finalized on error — the scheduler keeps polling.
+ edit_run.assert_not_awaited()
diff --git a/api/oss/tests/pytest/unit/evaluations/test_queue_dao_serialization.py b/api/oss/tests/pytest/unit/evaluations/test_queue_dao_serialization.py
index cad44f6ee8..c7444a2b71 100644
--- a/api/oss/tests/pytest/unit/evaluations/test_queue_dao_serialization.py
+++ b/api/oss/tests/pytest/unit/evaluations/test_queue_dao_serialization.py
@@ -51,10 +51,14 @@ async def test_create_queue_serializes_queue_data_without_uuid_warnings(monkeypa
"_get_run_flags",
AsyncMock(return_value={}),
)
+ # Mock get_transactions_engine to return an engine with session method
+ mock_engine = type(
+ "MockEngine", (), {"session": lambda self: _DummySessionContext(session)}
+ )()
monkeypatch.setattr(
- dao_module.engine,
- "core_session",
- lambda: _DummySessionContext(session),
+ dao_module,
+ "get_transactions_engine",
+ lambda: mock_engine,
)
def fake_create_dto_from_dbe(*, DTO, dbe):
diff --git a/api/oss/tests/pytest/unit/evaluations/test_run_flag_matrix.py b/api/oss/tests/pytest/unit/evaluations/test_run_flag_matrix.py
new file mode 100644
index 0000000000..84f7c8bfb7
--- /dev/null
+++ b/api/oss/tests/pytest/unit/evaluations/test_run_flag_matrix.py
@@ -0,0 +1,180 @@
+"""
+Representative matrix for run-flag derivation (`create_run_flags`) and simple-queue
+validation (`SimpleQueueData.validate_sources`).
+
+One row per equivalence class rather than the full cartesian product: each source
+family once, each evaluator-origin class once, each independent flag toggled once.
+Pure unit tests — no DB, no worker.
+
+Companion to `test_run_flags.py` (which covers cache/split preservation and the
+direct-vs-backed source distinction); this file focuses on the broader has_*/origin
+matrix and the queue "at least one human evaluator" rule.
+"""
+
+from uuid import uuid4
+
+import pytest
+from pydantic import ValidationError
+
+from oss.src.core.evaluations.types import (
+ EvaluationRun,
+ EvaluationRunData,
+ EvaluationRunDataStep,
+ EvaluationRunFlags,
+ SimpleQueueData,
+ SimpleQueueKind,
+)
+from oss.src.dbs.postgres.evaluations.utils import create_run_flags
+
+
+# - helpers -------------------------------------------------------------------
+
+
+def _input_step(key, references=None, origin="custom"):
+ return EvaluationRunDataStep(
+ key=key, type="input", origin=origin, references=references or {}
+ )
+
+
+def _annotation_step(origin, key=None):
+ return EvaluationRunDataStep(
+ key=key or f"annotation-{origin}",
+ type="annotation",
+ origin=origin,
+ references={"evaluator_revision": {"id": str(uuid4())}},
+ )
+
+
+def _run(steps, flags=None):
+ return EvaluationRun(
+ flags=flags or EvaluationRunFlags(),
+ data=EvaluationRunData(steps=steps),
+ )
+
+
+# - source family matrix ------------------------------------------------------
+# Each row: (label, input steps, expected source has_* flags)
+
+_QUERY_REF = {"query_revision": {"id": str(uuid4())}}
+_TESTSET_REF = {"testset_revision": {"id": str(uuid4())}}
+
+SOURCE_ROWS = [
+ # label steps expected (queries, testsets, traces, testcases)
+ ("queries", [_input_step("q", _QUERY_REF)], (True, False, False, False)),
+ ("testsets", [_input_step("t", _TESTSET_REF)], (False, True, False, False)),
+ ("traces-direct", [_input_step("traces", {})], (False, False, True, False)),
+ ("testcases-direct", [_input_step("testcases", {})], (False, False, False, True)),
+ (
+ "multi-input-query+testset",
+ [_input_step("q", _QUERY_REF), _input_step("t", _TESTSET_REF)],
+ (True, True, False, False),
+ ),
+ ("none", [], (False, False, False, False)),
+]
+
+
+@pytest.mark.parametrize(
+ "label,steps,expected",
+ SOURCE_ROWS,
+ ids=[r[0] for r in SOURCE_ROWS],
+)
+def test_source_family_flag_derivation(label, steps, expected):
+ flags = create_run_flags(_run(steps))
+ assert flags is not None
+ want_q, want_t, want_tr, want_tc = expected
+ assert flags.has_queries is want_q
+ assert flags.has_testsets is want_t
+ assert flags.has_traces is want_tr
+ assert flags.has_testcases is want_tc
+
+
+# - evaluator origin matrix ---------------------------------------------------
+# Each row: (label, annotation origins, expected (has_evaluators, has_human, has_auto, has_custom))
+
+ORIGIN_ROWS = [
+ ("none", [], (False, False, False, False)),
+ ("human", ["human"], (True, True, False, False)),
+ ("auto", ["auto"], (True, False, True, False)),
+ ("custom", ["custom"], (True, False, False, True)),
+ ("human+auto", ["human", "auto"], (True, True, True, False)),
+ ("human+custom", ["human", "custom"], (True, True, False, True)),
+ ("auto+custom", ["auto", "custom"], (True, False, True, True)),
+ ("all", ["human", "auto", "custom"], (True, True, True, True)),
+]
+
+
+@pytest.mark.parametrize(
+ "label,origins,expected",
+ ORIGIN_ROWS,
+ ids=[r[0] for r in ORIGIN_ROWS],
+)
+def test_evaluator_origin_flag_derivation(label, origins, expected):
+ steps = [_input_step("t", _TESTSET_REF)] + [
+ _annotation_step(o, key=f"annotation-{i}") for i, o in enumerate(origins)
+ ]
+ flags = create_run_flags(_run(steps))
+ assert flags is not None
+ want_eval, want_human, want_auto, want_custom = expected
+ assert flags.has_evaluators is want_eval
+ assert flags.has_human is want_human
+ assert flags.has_auto is want_auto
+ assert flags.has_custom is want_custom
+
+
+# - independent flag preservation ---------------------------------------------
+# is_live / is_cached / is_split are explicit flags, preserved across derivation.
+
+
+@pytest.mark.parametrize("flag_name", ["is_live", "is_cached", "is_split"])
+def test_explicit_flags_preserved_through_derivation(flag_name):
+ flags_in = EvaluationRunFlags(**{flag_name: True})
+ steps = [_input_step("t", _TESTSET_REF), _annotation_step("auto")]
+ flags = create_run_flags(_run(steps, flags=flags_in))
+ assert flags is not None
+ assert getattr(flags, flag_name) is True
+
+
+# - simple-queue evaluator validation -----------------------------------------
+# Rule: a simple queue must resolve to >=1 human evaluator. A bare list is
+# origin-less (defaults to human) -> always valid. An explicit dict is valid only
+# if at least one value is "human"; a dict of only non-human origins is rejected.
+
+_E1 = uuid4()
+_E2 = uuid4()
+
+
+def _queue_data(evaluators):
+ return SimpleQueueData(kind=SimpleQueueKind.TESTCASES, evaluators=evaluators)
+
+
+def test_bare_evaluator_list_is_valid():
+ data = _queue_data([_E1, _E2])
+ assert data.evaluators == [_E1, _E2]
+
+
+@pytest.mark.parametrize(
+ "evaluators,ok",
+ [
+ ({_E1: "human"}, True),
+ ({_E1: "human", _E2: "auto"}, True),
+ ({_E1: "human", _E2: "custom"}, True),
+ ({_E1: "auto"}, False),
+ ({_E1: "custom"}, False),
+ ({_E1: "auto", _E2: "custom"}, False),
+ ],
+ ids=[
+ "human",
+ "human+auto",
+ "human+custom",
+ "all-auto",
+ "all-custom",
+ "auto+custom",
+ ],
+)
+def test_simple_queue_human_evaluator_rule(evaluators, ok):
+ if ok:
+ data = _queue_data(evaluators)
+ assert data.evaluators == evaluators
+ else:
+ with pytest.raises(ValidationError):
+ _queue_data(evaluators)
diff --git a/api/oss/tests/pytest/unit/evaluations/test_run_flags.py b/api/oss/tests/pytest/unit/evaluations/test_run_flags.py
index 03bb40cb1a..1c16b4d1a1 100644
--- a/api/oss/tests/pytest/unit/evaluations/test_run_flags.py
+++ b/api/oss/tests/pytest/unit/evaluations/test_run_flags.py
@@ -56,3 +56,110 @@ def test_evaluation_run_query_flags_include_cache_and_split_when_explicit():
"is_cached": False,
"is_split": False,
}
+
+
+def test_create_run_flags_keeps_direct_source_families_distinct_from_backed_sources():
+ direct_run = EvaluationRun(
+ data=EvaluationRunData(
+ steps=[
+ EvaluationRunDataStep(
+ key="traces",
+ type="input",
+ origin="custom",
+ references={},
+ ),
+ EvaluationRunDataStep(
+ key="testcases",
+ type="input",
+ origin="custom",
+ references={},
+ ),
+ ]
+ )
+ )
+ backed_run = EvaluationRun(
+ data=EvaluationRunData(
+ steps=[
+ EvaluationRunDataStep(
+ key="query-main",
+ type="input",
+ origin="custom",
+ references={"query_revision": {"id": str(uuid4())}},
+ ),
+ EvaluationRunDataStep(
+ key="testset-main",
+ type="input",
+ origin="custom",
+ references={"testset_revision": {"id": str(uuid4())}},
+ ),
+ ]
+ )
+ )
+
+ direct_flags = create_run_flags(direct_run)
+ backed_flags = create_run_flags(backed_run)
+
+ assert direct_flags is not None
+ assert direct_flags.has_traces is True
+ assert direct_flags.has_testcases is True
+ assert direct_flags.has_queries is False
+ assert direct_flags.has_testsets is False
+ assert backed_flags is not None
+ assert backed_flags.has_queries is True
+ assert backed_flags.has_testsets is True
+ assert backed_flags.has_traces is False
+ assert backed_flags.has_testcases is False
+
+
+def test_create_run_flags_uses_exact_reference_keys_not_substring():
+ # Source-family detection keys on the exact reference key
+ # (`query_revision` / `testset_revision`). Keys that merely contain "query"
+ # or "testset" as a substring must NOT flip the family flags.
+ run = EvaluationRun(
+ data=EvaluationRunData(
+ steps=[
+ EvaluationRunDataStep(
+ key="input-misc",
+ type="input",
+ origin="custom",
+ references={
+ "query_anchor": {"id": str(uuid4())},
+ "testset_metadata": {"id": str(uuid4())},
+ "subquery_ref": {"id": str(uuid4())},
+ },
+ ),
+ ]
+ )
+ )
+
+ flags = create_run_flags(run)
+
+ assert flags is not None
+ assert flags.has_queries is False
+ assert flags.has_testsets is False
+
+
+def test_create_run_flags_detects_exact_reference_keys_among_other_refs():
+ # The exact key still triggers even when other (non-source) references are
+ # present on the same step.
+ run = EvaluationRun(
+ data=EvaluationRunData(
+ steps=[
+ EvaluationRunDataStep(
+ key="input-query",
+ type="input",
+ origin="custom",
+ references={
+ "query_revision": {"id": str(uuid4())},
+ "query_anchor": {"id": str(uuid4())},
+ },
+ ),
+ ]
+ )
+ )
+
+ flags = create_run_flags(run)
+
+ assert flags is not None
+ assert flags.has_queries is True
+ assert flags.has_testsets is False
diff --git a/api/oss/tests/pytest/unit/evaluations/test_runtime_topology_planner.py b/api/oss/tests/pytest/unit/evaluations/test_runtime_topology_planner.py
new file mode 100644
index 0000000000..a3e0428dd4
--- /dev/null
+++ b/api/oss/tests/pytest/unit/evaluations/test_runtime_topology_planner.py
@@ -0,0 +1,2311 @@
+from types import SimpleNamespace
+from unittest.mock import AsyncMock, call
+from uuid import uuid4
+
+import pytest
+
+from oss.src.core.evaluations.runtime.adapters import (
+ APICachedRunner,
+ APIEvaluatorRunner,
+ APIWorkflowRunner,
+ APIWorkflowServiceRunner,
+)
+from oss.src.core.evaluations.runtime.cache import RunnableCacheResolver
+from oss.src.core.evaluations.runtime.models import (
+ ProcessSummary,
+ ResolvedSourceItem,
+ TensorSlice,
+ TensorProbeSummary,
+)
+from oss.src.core.evaluations.runtime.planner import (
+ EvaluationPlanner,
+ make_scenario_bindings,
+ plan_source_input_result_creates,
+ planned_cells_to_result_creates,
+)
+from oss.src.core.evaluations.runtime.sources import (
+ SourceResolutionError,
+ resolve_direct_source_items,
+ resolve_live_query_traces,
+ resolve_queue_source_batches,
+ resolve_testset_input_specs,
+)
+from oss.src.core.evaluations.runtime.tensor import TensorSliceOperations
+from oss.src.core.evaluations.runtime.runner import TaskiqEvaluationTaskRunner
+from oss.src.core.evaluations.runtime.topology import classify_run_topology
+from agenta.sdk.evaluations.runtime.models import (
+ EvaluationStep as SdkEvaluationStep,
+ PlannedCell as SdkPlannedCell,
+ ResolvedSourceItem as SdkResolvedSourceItem,
+ WorkflowExecutionRequest,
+ WorkflowExecutionResult,
+)
+from agenta.sdk.evaluations.runtime.processor import (
+ ProcessedScenario as SdkProcessedScenario,
+)
+from agenta.sdk.models.evaluations import EvaluationStatus as SdkEvaluationStatus
+from oss.src.core.evaluations.types import (
+ EvaluationResult,
+ EvaluationResultCreate,
+ EvaluationRun,
+ EvaluationRunData,
+ EvaluationRunDataStep,
+ EvaluationRunFlags,
+ EvaluationStatus,
+ SimpleEvaluation,
+ SimpleEvaluationData,
+ SimpleEvaluationFlags,
+)
+from oss.src.core.shared.dtos import Reference
+from oss.src.core.tracing.dtos import Windowing
+from oss.src.core.evaluations.service import SimpleEvaluationsService
+from oss.src.core.evaluations.tasks import processor as source_slice_tasks
+from oss.src.core.evaluations.tasks import run as run_tasks
+
+
+def _run(*, steps, flags=None, repeats=1):
+ return EvaluationRun(
+ id=uuid4(),
+ flags=flags or EvaluationRunFlags(),
+ data=EvaluationRunData(steps=list(steps), repeats=repeats),
+ )
+
+
+def _step(key, type_, origin="custom", references=None):
+ return EvaluationRunDataStep(
+ key=key,
+ type=type_,
+ origin=origin,
+ references=references or {},
+ )
+
+
+def test_topology_classifier_preserves_current_batch_dispatch_shapes():
+ query_eval = _run(
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "evaluator-auto",
+ "annotation",
+ origin="auto",
+ references={"evaluator_revision": Reference(id=uuid4())},
+ ),
+ ]
+ )
+ testset_eval = _run(
+ steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "application-main",
+ "invocation",
+ references={"application_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "evaluator-auto",
+ "annotation",
+ origin="auto",
+ references={"evaluator_revision": Reference(id=uuid4())},
+ ),
+ ]
+ )
+ batch_inference = _run(
+ steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "application-main",
+ "invocation",
+ references={"application_revision": Reference(id=uuid4())},
+ ),
+ ]
+ )
+
+ assert classify_run_topology(query_eval).dispatch == "batch_query"
+ assert classify_run_topology(testset_eval).dispatch == "batch_testset"
+ assert classify_run_topology(batch_inference).dispatch == "batch_invocation"
+
+
+def test_topology_classifier_names_deferred_shapes():
+ query_to_app = _run(
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "application-main",
+ "invocation",
+ references={"application_revision": Reference(id=uuid4())},
+ ),
+ ]
+ )
+ testset_to_eval = _run(
+ steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "evaluator-auto",
+ "annotation",
+ origin="auto",
+ references={"evaluator_revision": Reference(id=uuid4())},
+ ),
+ ]
+ )
+ multi_app = _run(
+ steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step("application-a", "invocation"),
+ _step("application-b", "invocation"),
+ ]
+ )
+
+ assert classify_run_topology(query_to_app).status == "potential"
+ assert classify_run_topology(testset_to_eval).status == "potential"
+ assert classify_run_topology(multi_app).status == "not_planned"
+
+
+def test_topology_classifier_names_not_planned_source_shapes():
+ mixed_sources = _run(
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step("evaluator-auto", "annotation", origin="auto"),
+ ]
+ )
+ live_testset = _run(
+ flags=EvaluationRunFlags(is_live=True),
+ steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step("evaluator-auto", "annotation", origin="auto"),
+ ],
+ )
+
+ assert classify_run_topology(mixed_sources).status == "not_planned"
+ assert classify_run_topology(live_testset).status == "not_planned"
+
+
+def test_planner_creates_repeat_aware_slots_and_keeps_manual_annotations_pending():
+ run = _run(
+ repeats=3,
+ flags=EvaluationRunFlags(is_split=False),
+ steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "application-main",
+ "invocation",
+ references={"application_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "evaluator-auto",
+ "annotation",
+ origin="auto",
+ references={"evaluator_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "evaluator-human",
+ "annotation",
+ origin="human",
+ references={"evaluator_revision": Reference(id=uuid4())},
+ ),
+ ],
+ )
+ scenario_id = uuid4()
+ bindings = make_scenario_bindings(
+ scenario_ids=[scenario_id],
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ )
+ ],
+ )
+
+ plan = EvaluationPlanner().plan(run=run, bindings=bindings)
+ cells_by_step = {}
+ for cell in plan.cells:
+ cells_by_step.setdefault(cell.step_key, []).append(cell)
+
+ assert [cell.repeat_idx for cell in cells_by_step["testset-main"]] == [0, 1, 2]
+ assert [cell.repeat_idx for cell in cells_by_step["application-main"]] == [0]
+ assert [cell.repeat_idx for cell in cells_by_step["evaluator-auto"]] == [0, 1, 2]
+ assert [cell.status for cell in cells_by_step["evaluator-human"]] == [
+ EvaluationStatus.PENDING,
+ EvaluationStatus.PENDING,
+ EvaluationStatus.PENDING,
+ ]
+ assert {(cell.step_key, cell.repeat_idx) for cell in plan.executable_cells} == {
+ ("application-main", 0),
+ ("evaluator-auto", 0),
+ ("evaluator-auto", 1),
+ ("evaluator-auto", 2),
+ }
+
+
+def test_planner_fans_out_application_for_batch_inference_without_evaluators():
+ run = _run(
+ repeats=2,
+ steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "application-main",
+ "invocation",
+ references={"application_revision": Reference(id=uuid4())},
+ ),
+ ],
+ )
+ bindings = make_scenario_bindings(
+ scenario_ids=[uuid4()],
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ )
+ ],
+ )
+
+ plan = EvaluationPlanner().plan(run=run, bindings=bindings)
+
+ assert [
+ cell.repeat_idx for cell in plan.cells if cell.step_key == "application-main"
+ ] == [0, 1]
+
+
+def test_planner_fans_out_application_when_split_is_enabled():
+ run = _run(
+ repeats=3,
+ flags=EvaluationRunFlags(is_split=True),
+ steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "application-main",
+ "invocation",
+ references={"application_revision": Reference(id=uuid4())},
+ ),
+ _step("evaluator-auto", "annotation", origin="auto"),
+ ],
+ )
+ plan = EvaluationPlanner().plan(
+ run=run,
+ bindings=make_scenario_bindings(
+ scenario_ids=[uuid4()],
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ )
+ ],
+ ),
+ )
+
+ assert [
+ cell.repeat_idx for cell in plan.cells if cell.step_key == "application-main"
+ ] == [0, 1, 2]
+
+
+def test_planned_cells_convert_to_result_create_payloads():
+ run = _run(
+ repeats=1,
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "evaluator-human",
+ "annotation",
+ origin="human",
+ references={"evaluator_revision": Reference(id=uuid4())},
+ ),
+ ],
+ )
+ trace_id = "trace-1"
+ scenario_id = uuid4()
+ plan = EvaluationPlanner().plan(
+ run=run,
+ bindings=make_scenario_bindings(
+ scenario_ids=[scenario_id],
+ source_items=[
+ ResolvedSourceItem(
+ kind="trace",
+ step_key="query-main",
+ trace_id=trace_id,
+ )
+ ],
+ ),
+ )
+
+ result_creates = planned_cells_to_result_creates(plan.cells)
+
+ assert [(result.step_key, result.status) for result in result_creates] == [
+ ("query-main", EvaluationStatus.SUCCESS),
+ ("evaluator-human", EvaluationStatus.PENDING),
+ ]
+ assert result_creates[0].trace_id == trace_id
+ assert result_creates[1].trace_id is None
+
+
+def test_plan_source_input_result_creates_filters_to_source_step():
+ run = _run(
+ repeats=2,
+ steps=[
+ _step("query-other", "input"),
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step("evaluator-auto", "annotation", origin="auto"),
+ ],
+ )
+ scenario_id = uuid4()
+
+ result_creates = plan_source_input_result_creates(
+ run=run,
+ scenario_id=scenario_id,
+ source_item=ResolvedSourceItem(
+ kind="trace",
+ step_key="query-main",
+ trace_id="trace-main",
+ ),
+ )
+
+ assert [result.step_key for result in result_creates] == [
+ "query-main",
+ "query-main",
+ ]
+ assert [result.repeat_idx for result in result_creates] == [0, 1]
+ assert [result.trace_id for result in result_creates] == [
+ "trace-main",
+ "trace-main",
+ ]
+
+
+@pytest.mark.asyncio
+async def test_cache_resolver_skips_lookup_when_disabled_and_fetches_when_enabled():
+ project_id = uuid4()
+
+ class DummyTracingService:
+ async def query_traces(self, *, project_id, query):
+ return [SimpleNamespace(trace_id="trace-1"), SimpleNamespace(trace_id=None)]
+
+ disabled = await RunnableCacheResolver().resolve(
+ tracing_service=DummyTracingService(),
+ project_id=project_id,
+ enabled=False,
+ references={"evaluator_revision": Reference(id=uuid4())},
+ required_count=2,
+ )
+ enabled = await RunnableCacheResolver().resolve(
+ tracing_service=DummyTracingService(),
+ project_id=project_id,
+ enabled=True,
+ references={"evaluator_revision": Reference(id=uuid4())},
+ required_count=2,
+ )
+
+ assert disabled.reusable_traces == []
+ assert disabled.missing_count == 2
+ assert [trace.trace_id for trace in enabled.reusable_traces] == ["trace-1"]
+ assert enabled.missing_count == 1
+
+
+@pytest.mark.asyncio
+async def test_cache_resolver_zero_required_count_does_not_query_traces():
+ tracing_service = SimpleNamespace(query_traces=AsyncMock())
+
+ resolution = await RunnableCacheResolver().resolve(
+ tracing_service=tracing_service,
+ project_id=uuid4(),
+ enabled=True,
+ references={"evaluator_revision": Reference(id=uuid4())},
+ required_count=0,
+ )
+
+ assert resolution.reusable_traces == []
+ assert resolution.missing_count == 0
+ tracing_service.query_traces.assert_not_awaited()
+
+
+@pytest.mark.asyncio
+async def test_queue_source_resolver_resolves_query_and_testset_batches():
+ project_id = uuid4()
+ query_revision_id = uuid4()
+ testset_revision_id = uuid4()
+ testcase_id_1 = uuid4()
+ testcase_id_2 = uuid4()
+ run = _run(
+ steps=[
+ _step(
+ "query-source",
+ "input",
+ references={"query_revision": Reference(id=query_revision_id)},
+ ),
+ _step(
+ "testset-source",
+ "input",
+ references={"testset_revision": Reference(id=testset_revision_id)},
+ ),
+ _step("evaluator-human", "annotation", origin="human"),
+ ],
+ )
+ queries_service = SimpleNamespace(
+ fetch_query_revision=AsyncMock(
+ return_value=SimpleNamespace(
+ data=SimpleNamespace(trace_ids=["trace-1", "trace-2"])
+ )
+ )
+ )
+ testsets_service = SimpleNamespace(
+ fetch_testset_revision=AsyncMock(
+ return_value=SimpleNamespace(
+ data=SimpleNamespace(testcase_ids=[testcase_id_1, testcase_id_2])
+ )
+ )
+ )
+
+ batches = await resolve_queue_source_batches(
+ project_id=project_id,
+ run=run,
+ queries_service=queries_service,
+ testsets_service=testsets_service,
+ )
+
+ assert [batch.kind for batch in batches] == ["traces", "testcases"]
+ assert batches[0].step_key == "query-source"
+ assert batches[0].trace_ids == ["trace-1", "trace-2"]
+ assert batches[1].step_key == "testset-source"
+ assert batches[1].testcase_ids == [testcase_id_1, testcase_id_2]
+ queries_service.fetch_query_revision.assert_awaited_once()
+ testsets_service.fetch_testset_revision.assert_awaited_once()
+
+
+@pytest.mark.asyncio
+async def test_queue_source_resolver_skips_empty_sources():
+ run = _run(
+ steps=[
+ _step(
+ "query-source",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "testset-source",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ ],
+ )
+
+ batches = await resolve_queue_source_batches(
+ project_id=uuid4(),
+ run=run,
+ queries_service=SimpleNamespace(
+ fetch_query_revision=AsyncMock(
+ return_value=SimpleNamespace(data=SimpleNamespace(trace_ids=[]))
+ )
+ ),
+ testsets_service=SimpleNamespace(
+ fetch_testset_revision=AsyncMock(
+ return_value=SimpleNamespace(data=SimpleNamespace(testcase_ids=[]))
+ )
+ ),
+ )
+
+ assert batches == []
+
+
+@pytest.mark.asyncio
+async def test_queue_source_resolver_empty_query_does_not_fall_through_to_testset():
+ # A query step whose query revision resolves to zero traces is a real empty
+ # batch — it must not fall through to the testset resolver, which should
+ # never be asked about a query-only step.
+ run = _run(
+ steps=[
+ _step(
+ "query-source",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ ],
+ )
+ fetch_testset_revision = AsyncMock(
+ return_value=SimpleNamespace(data=SimpleNamespace(testcase_ids=[uuid4()]))
+ )
+
+ batches = await resolve_queue_source_batches(
+ project_id=uuid4(),
+ run=run,
+ queries_service=SimpleNamespace(
+ fetch_query_revision=AsyncMock(
+ return_value=SimpleNamespace(data=SimpleNamespace(trace_ids=[]))
+ )
+ ),
+ testsets_service=SimpleNamespace(fetch_testset_revision=fetch_testset_revision),
+ )
+
+ assert batches == []
+ fetch_testset_revision.assert_not_awaited()
+
+
+@pytest.mark.asyncio
+async def test_queue_source_resolver_rejects_step_with_multiple_source_refs():
+ # An input step must carry exactly one recognized source reference.
+ run = _run(
+ steps=[
+ _step(
+ "ambiguous-source",
+ "input",
+ references={
+ "query_revision": Reference(id=uuid4()),
+ "testset_revision": Reference(id=uuid4()),
+ },
+ ),
+ ],
+ )
+
+ with pytest.raises(SourceResolutionError):
+ await resolve_queue_source_batches(
+ project_id=uuid4(),
+ run=run,
+ queries_service=SimpleNamespace(fetch_query_revision=AsyncMock()),
+ testsets_service=SimpleNamespace(fetch_testset_revision=AsyncMock()),
+ )
+
+
+@pytest.mark.asyncio
+async def test_testset_payload_source_resolver_preserves_testcase_payloads():
+ project_id = uuid4()
+ testset_id = uuid4()
+ testset_variant_id = uuid4()
+ testset_revision_id = uuid4()
+ testcase_id = uuid4()
+ testcase = SimpleNamespace(id=testcase_id, data={"prompt": "hello"})
+ testsets_service = SimpleNamespace(
+ fetch_testset_revision=AsyncMock(
+ return_value=SimpleNamespace(
+ id=testset_revision_id,
+ variant_id=testset_variant_id,
+ data=SimpleNamespace(testcases=[testcase]),
+ )
+ ),
+ fetch_testset_variant=AsyncMock(
+ return_value=SimpleNamespace(
+ id=testset_variant_id,
+ testset_id=testset_id,
+ )
+ ),
+ fetch_testset=AsyncMock(
+ return_value=SimpleNamespace(
+ id=testset_id,
+ slug="testset-main",
+ )
+ ),
+ )
+
+ specs = await resolve_testset_input_specs(
+ project_id=project_id,
+ input_steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=testset_revision_id)},
+ )
+ ],
+ testsets_service=testsets_service,
+ )
+
+ assert len(specs) == 1
+ assert specs[0].step_key == "testset-main"
+ assert specs[0].testcases == [testcase]
+ assert specs[0].testcases_data == [
+ {"prompt": "hello", "testcase_id": str(testcase_id)}
+ ]
+
+
+@pytest.mark.asyncio
+async def test_direct_source_resolver_preserves_order_and_missing_testcases():
+ project_id = uuid4()
+ testcase_id_1 = uuid4()
+ testcase_id_2 = uuid4()
+ testcase = SimpleNamespace(id=testcase_id_1, data={"input": "a"})
+ testcases_service = SimpleNamespace(
+ fetch_testcases=AsyncMock(return_value=[testcase])
+ )
+
+ source_items = await resolve_direct_source_items(
+ project_id=project_id,
+ testcase_ids=[testcase_id_1, testcase_id_2],
+ trace_ids=["trace-1"],
+ testcases_service=testcases_service,
+ )
+
+ assert [source_item.kind for source_item in source_items] == [
+ "testcase",
+ "testcase",
+ "trace",
+ ]
+ assert source_items[0].testcase == testcase
+ assert source_items[1].testcase is None
+ assert source_items[2].trace_id == "trace-1"
+
+
+@pytest.mark.asyncio
+async def test_direct_source_resolver_loads_trace_context():
+ project_id = uuid4()
+ trace_id = "trace-1"
+ span_id = "span-1"
+ trace_payload = {
+ "trace_id": trace_id,
+ "spans": {
+ span_id: {
+ "trace_id": trace_id,
+ "span_id": span_id,
+ "attributes": {
+ "ag": {
+ "data": {
+ "inputs": {"prompt": "hello"},
+ "outputs": {"answer": "world"},
+ }
+ }
+ },
+ }
+ },
+ }
+ trace = SimpleNamespace(
+ trace_id=trace_id,
+ spans={
+ span_id: SimpleNamespace(
+ trace_id=trace_id,
+ span_id=span_id,
+ attributes=trace_payload["spans"][span_id]["attributes"],
+ )
+ },
+ model_dump=lambda **_: trace_payload,
+ )
+ tracing_service = SimpleNamespace(fetch_trace=AsyncMock(return_value=trace))
+
+ source_items = await resolve_direct_source_items(
+ project_id=project_id,
+ trace_ids=[trace_id],
+ tracing_service=tracing_service,
+ )
+
+ assert len(source_items) == 1
+ assert source_items[0].kind == "trace"
+ assert source_items[0].trace_id == trace_id
+ assert source_items[0].span_id == span_id
+ assert source_items[0].trace is not None
+ assert source_items[0].inputs == {"prompt": "hello"}
+ assert source_items[0].outputs == {"answer": "world"}
+
+
+@pytest.mark.asyncio
+async def test_live_query_trace_resolver_applies_default_windowing():
+ project_id = uuid4()
+ traces = [SimpleNamespace(trace_id="trace-1")]
+
+ class DummyTracingService:
+ def __init__(self):
+ self.query = None
+
+ async def query_traces(self, *, project_id, query):
+ self.query = query
+ return traces
+
+ tracing_service = DummyTracingService()
+
+ resolved = await resolve_live_query_traces(
+ project_id=project_id,
+ query_revisions={
+ "query-main": SimpleNamespace(data=SimpleNamespace()),
+ },
+ tracing_service=tracing_service,
+ )
+
+ assert resolved == {"query-main": traces}
+ assert tracing_service.query.windowing.order == "ascending"
+ assert tracing_service.query.windowing.limit is None
+
+
+@pytest.mark.asyncio
+async def test_live_query_trace_resolver_uses_revision_windowing_when_requested():
+ class DummyTracingService:
+ def __init__(self):
+ self.query = None
+
+ async def query_traces(self, *, project_id, query):
+ self.query = query
+ return []
+
+ tracing_service = DummyTracingService()
+ revision_windowing = Windowing(
+ oldest=None,
+ newest=None,
+ limit=25,
+ order="descending",
+ rate=0.5,
+ )
+
+ await resolve_live_query_traces(
+ project_id=uuid4(),
+ query_revisions={
+ "query-main": SimpleNamespace(
+ data=SimpleNamespace(filtering=None, windowing=revision_windowing)
+ ),
+ },
+ tracing_service=tracing_service,
+ use_windowing=True,
+ )
+
+ assert tracing_service.query.windowing.limit == 25
+ assert tracing_service.query.windowing.order == "descending"
+ assert tracing_service.query.windowing.rate == 0.5
+
+
+@pytest.mark.asyncio
+async def test_tensor_slice_operations_probe_populate_prune_and_process():
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ scenario_id = uuid4()
+ result_id = uuid4()
+ result = EvaluationResult(
+ id=result_id,
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="evaluator-auto",
+ repeat_idx=0,
+ status=EvaluationStatus.SUCCESS,
+ )
+ evaluations_service = SimpleNamespace(
+ query_results=AsyncMock(return_value=[result]),
+ # prune deletes by id, so it uses the ID-only query (UEL-029).
+ query_result_ids=AsyncMock(return_value=[result_id]),
+ set_results=AsyncMock(return_value=[result]),
+ delete_results=AsyncMock(return_value=[result_id]),
+ refresh_metrics=AsyncMock(return_value=[]),
+ # refresh() reads run kind + scenarios for the aggregate boundary.
+ fetch_run=AsyncMock(
+ return_value=SimpleNamespace(flags=SimpleNamespace(is_live=False))
+ ),
+ query_scenarios=AsyncMock(return_value=[]),
+ )
+ operations = TensorSliceOperations(evaluations_service=evaluations_service)
+ tensor_slice = TensorSlice(
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ repeat_idxs=[0],
+ )
+
+ probed = await operations.probe(
+ project_id=project_id,
+ tensor_slice=tensor_slice,
+ )
+ populated = await operations.populate(
+ project_id=project_id,
+ user_id=user_id,
+ results=[
+ EvaluationResultCreate(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="evaluator-auto",
+ repeat_idx=0,
+ status=EvaluationStatus.SUCCESS,
+ )
+ ],
+ )
+ pruned = await operations.prune(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=tensor_slice,
+ )
+
+ assert probed == [result]
+ assert populated == [result]
+ assert pruned == [result_id]
+ # probe() is the only full-DTO query here (prune now uses query_result_ids).
+ assert evaluations_service.query_results.await_count == 1
+ assert evaluations_service.query_result_ids.await_count == 1
+ assert evaluations_service.set_results.await_count == 1
+ assert evaluations_service.delete_results.await_count == 1
+ # prune is a tensor-write op: after removing result cells it re-triggers a
+ # metrics refresh over the affected scope (like populate/process), so
+ # aggregates recompute over the now-smaller cell set. refresh() does both the
+ # variational and the aggregate (global, here) pass — so prune drives >= 1
+ # refresh_metrics call. probe/populate do not refresh on their own here.
+ after_prune = evaluations_service.refresh_metrics.await_count
+ assert after_prune >= 1
+
+ # an explicit refresh() recomputes the slice's scope again (another batch of
+ # variational + aggregate refresh_metrics calls).
+ await operations.refresh(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=tensor_slice,
+ )
+ assert evaluations_service.refresh_metrics.await_count > after_prune
+
+ # process() with no wired slice_processor must fail loudly rather than
+ # masquerade as execution by silently refreshing metrics (UEL-015).
+ with pytest.raises(NotImplementedError):
+ await operations.process(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=tensor_slice,
+ )
+
+
+@pytest.mark.asyncio
+async def test_tensor_slice_process_delegates_to_injected_processor():
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ expected = ProcessSummary(created=2, pending=1)
+ slice_processor = SimpleNamespace(process=AsyncMock(return_value=expected))
+ operations = TensorSliceOperations(
+ evaluations_service=SimpleNamespace(),
+ slice_processor=slice_processor,
+ )
+ tensor_slice = TensorSlice(
+ run_id=run_id,
+ scenario_ids=[uuid4()],
+ step_keys=["evaluator-auto"],
+ repeat_idxs=[0],
+ )
+
+ summary = await operations.process(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=tensor_slice,
+ )
+
+ assert summary == expected
+ slice_processor.process.assert_awaited_once_with(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=tensor_slice,
+ )
+
+
+@pytest.mark.asyncio
+async def test_tensor_slice_probe_summary_counts_statuses_and_missing_cells():
+ project_id = uuid4()
+ run_id = uuid4()
+ scenario_id = uuid4()
+ evaluations_service = SimpleNamespace(
+ query_results=AsyncMock(
+ return_value=[
+ EvaluationResult(
+ id=uuid4(),
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="step-success",
+ repeat_idx=0,
+ status=EvaluationStatus.SUCCESS,
+ ),
+ EvaluationResult(
+ id=uuid4(),
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="step-failure",
+ repeat_idx=0,
+ status=EvaluationStatus.FAILURE,
+ ),
+ EvaluationResult(
+ id=uuid4(),
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="step-pending",
+ repeat_idx=0,
+ status=EvaluationStatus.PENDING,
+ ),
+ ]
+ )
+ )
+
+ summary = await TensorSliceOperations(
+ evaluations_service=evaluations_service
+ ).probe_summary(
+ project_id=project_id,
+ tensor_slice=TensorSlice(run_id=run_id),
+ expected_count=5,
+ )
+
+ assert summary == TensorProbeSummary(
+ existing_count=3,
+ missing_count=2,
+ success_count=1,
+ failure_count=1,
+ pending_count=1,
+ any_count=3,
+ )
+
+
+@pytest.mark.asyncio
+async def test_tensor_slice_empty_dimension_short_circuits_probe_and_process():
+ project_id = uuid4()
+ user_id = uuid4()
+ operations = TensorSliceOperations(
+ evaluations_service=SimpleNamespace(
+ query_results=AsyncMock(),
+ refresh_metrics=AsyncMock(),
+ )
+ )
+ tensor_slice = TensorSlice(run_id=uuid4(), scenario_ids=[])
+
+ assert (
+ await operations.probe(
+ project_id=project_id,
+ tensor_slice=tensor_slice,
+ )
+ == []
+ )
+ assert (
+ await operations.process(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=tensor_slice,
+ )
+ == ProcessSummary()
+ )
+ operations.evaluations_service.query_results.assert_not_awaited()
+ operations.evaluations_service.refresh_metrics.assert_not_awaited()
+
+
+@pytest.mark.asyncio
+async def test_backend_workflow_service_runner_adapts_sdk_runtime_request():
+ workflows_service = SimpleNamespace(
+ invoke_workflow=AsyncMock(
+ return_value=SimpleNamespace(
+ status=SimpleNamespace(code=200),
+ trace_id="trace-success",
+ span_id="span-success",
+ outputs={"score": 1},
+ )
+ )
+ )
+ runner = APIWorkflowServiceRunner(
+ workflows_service=workflows_service,
+ request_builder=lambda request: {
+ "project_id": "project",
+ "step_key": request.step.key,
+ },
+ )
+ request = WorkflowExecutionRequest(
+ step=SdkEvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ cell=SdkPlannedCell(
+ run_id=uuid4(),
+ scenario_id=uuid4(),
+ step_key="evaluator-auto",
+ step_type="annotation",
+ origin="auto",
+ repeat_idx=0,
+ status=SdkEvaluationStatus.QUEUED,
+ ),
+ source=SdkResolvedSourceItem(kind="trace", step_key="query-main"),
+ revision={"slug": "evaluator-auto"},
+ )
+
+ result = await runner.execute(request)
+
+ assert result.status == SdkEvaluationStatus.SUCCESS
+ assert result.trace_id == "trace-success"
+ assert result.span_id == "span-success"
+ workflows_service.invoke_workflow.assert_awaited_once_with(
+ project_id="project",
+ step_key="evaluator-auto",
+ )
+
+
+@pytest.mark.asyncio
+async def test_taskiq_evaluation_task_runner_omits_empty_optional_kwargs():
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ worker = SimpleNamespace(
+ process_run_from_source=SimpleNamespace(kiq=AsyncMock(return_value="run-task")),
+ process_run_from_batch=SimpleNamespace(
+ kiq=AsyncMock(return_value="slice-task")
+ ),
+ )
+ runner = TaskiqEvaluationTaskRunner(worker=worker)
+
+ assert (
+ await runner.process_run_from_source(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ )
+ == "run-task"
+ )
+ assert (
+ await runner.process_run_from_batch(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ source_kind="traces",
+ trace_ids=["trace-1"],
+ )
+ == "slice-task"
+ )
+
+ worker.process_run_from_source.kiq.assert_awaited_once_with(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ )
+ worker.process_run_from_batch.kiq.assert_awaited_once_with(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ source_kind="traces",
+ trace_ids=["trace-1"],
+ )
+
+
+@pytest.mark.asyncio
+async def test_backend_workflow_runner_invokes_application_through_workflow_service():
+ project_id = uuid4()
+ user_id = uuid4()
+ application_revision_id = uuid4()
+ workflows_service = SimpleNamespace(
+ invoke_workflow=AsyncMock(
+ return_value=SimpleNamespace(
+ status=SimpleNamespace(code=200),
+ trace_id="app-trace",
+ span_id="app-span",
+ outputs={"answer": "world"},
+ )
+ )
+ )
+ runner = APIWorkflowRunner(
+ project_id=project_id,
+ user_id=user_id,
+ workflows_service=workflows_service,
+ )
+ revision = {
+ "id": str(application_revision_id),
+ "data": {
+ "uri": "http://application",
+ "schemas": {
+ "inputs": {
+ "type": "object",
+ "properties": {"input": {"type": "string"}},
+ }
+ },
+ "parameters": {"temperature": 0.1},
+ },
+ "flags": {"is_chat": True},
+ }
+ request = WorkflowExecutionRequest(
+ step=SdkEvaluationStep(key="application-main", type="invocation"),
+ cell=SdkPlannedCell(
+ run_id=uuid4(),
+ scenario_id=uuid4(),
+ step_key="application-main",
+ step_type="invocation",
+ origin="custom",
+ repeat_idx=0,
+ status=SdkEvaluationStatus.QUEUED,
+ ),
+ source=SdkResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ inputs={
+ "input": "hello",
+ "correct_answer": "world",
+ "testcase_id": "testcase-id",
+ "testcase_dedup_id": "dedup-id",
+ },
+ ),
+ revision=revision,
+ references={"application_revision": {"id": str(application_revision_id)}},
+ )
+
+ result = await runner.execute(request)
+
+ assert result.status == SdkEvaluationStatus.SUCCESS
+ assert result.trace_id == "app-trace"
+ workflows_service.invoke_workflow.assert_awaited_once()
+ kwargs = workflows_service.invoke_workflow.await_args.kwargs
+ assert kwargs["project_id"] == project_id
+ assert kwargs["user_id"] == user_id
+ assert "annotate" not in kwargs
+ workflow_request = kwargs["request"]
+ assert workflow_request.flags == {"is_chat": True}
+ assert workflow_request.data.revision == revision
+ assert workflow_request.data.revision["data"]["uri"] == "http://application"
+ assert workflow_request.data.revision["data"]["schemas"] == {
+ "inputs": {
+ "type": "object",
+ "properties": {"input": {"type": "string"}},
+ }
+ }
+ assert workflow_request.data.parameters == {"temperature": 0.1}
+ assert workflow_request.data.inputs == {"input": "hello"}
+ assert (
+ workflow_request.references["application_revision"].id
+ == application_revision_id
+ )
+
+
+@pytest.mark.asyncio
+async def test_backend_evaluator_runner_sends_normalized_workflow_request():
+ project_id = uuid4()
+ user_id = uuid4()
+ workflow_revision_id = uuid4()
+ workflows_service = SimpleNamespace(
+ invoke_workflow=AsyncMock(
+ return_value=SimpleNamespace(
+ status=SimpleNamespace(code=200),
+ trace_id="eval-trace",
+ span_id="eval-span",
+ outputs={"score": 1},
+ )
+ )
+ )
+ runner = APIEvaluatorRunner(
+ project_id=project_id,
+ user_id=user_id,
+ workflows_service=workflows_service,
+ )
+ revision = SimpleNamespace(
+ id=workflow_revision_id,
+ data=SimpleNamespace(
+ uri="http://evaluator",
+ url=None,
+ headers={"authorization": "secret"},
+ schemas={"outputs": {"type": "object"}},
+ script="return score",
+ parameters={"threshold": 0.5},
+ ),
+ flags=SimpleNamespace(model_dump=lambda **kwargs: {"is_custom": True}),
+ model_dump=lambda **kwargs: {"id": str(workflow_revision_id)},
+ )
+ request = WorkflowExecutionRequest(
+ step=SdkEvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ cell=SdkPlannedCell(
+ run_id=uuid4(),
+ scenario_id=uuid4(),
+ step_key="evaluator-auto",
+ step_type="annotation",
+ origin="auto",
+ repeat_idx=0,
+ status=SdkEvaluationStatus.QUEUED,
+ ),
+ source=SdkResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ inputs={"input": "hello"},
+ outputs={"answer": "world"},
+ ),
+ revision=revision,
+ references={"evaluator_revision": {"id": str(workflow_revision_id)}},
+ links={"invocation": {"trace_id": "app-trace", "span_id": "app-span"}},
+ upstream_trace={"trace_id": "app-trace"},
+ upstream_outputs={"answer": "world"},
+ )
+
+ result = await runner.execute(request)
+
+ assert result.status == SdkEvaluationStatus.SUCCESS
+ assert result.trace_id == "eval-trace"
+ workflows_service.invoke_workflow.assert_awaited_once()
+ kwargs = workflows_service.invoke_workflow.await_args.kwargs
+ assert kwargs["project_id"] == project_id
+ assert kwargs["user_id"] == user_id
+ assert "annotate" not in kwargs
+ workflow_request = kwargs["request"]
+ assert workflow_request.flags == {"is_custom": True}
+ assert workflow_request.data.revision == {"id": str(workflow_revision_id)}
+ assert workflow_request.data.parameters == {"threshold": 0.5}
+ assert workflow_request.data.inputs == {"input": "hello"}
+ assert workflow_request.data.outputs == {"answer": "world"}
+ assert workflow_request.links["invocation"].trace_id == "app-trace"
+ assert workflow_request.links["invocation"].span_id == "app-span"
+
+
+@pytest.mark.asyncio
+async def test_backend_evaluator_runner_preserves_dict_revision_data():
+ project_id = uuid4()
+ user_id = uuid4()
+ workflow_revision_id = uuid4()
+ workflows_service = SimpleNamespace(
+ invoke_workflow=AsyncMock(
+ return_value=SimpleNamespace(
+ status=SimpleNamespace(code=200),
+ trace_id="eval-trace",
+ span_id="eval-span",
+ outputs={"score": 1},
+ )
+ )
+ )
+ runner = APIEvaluatorRunner(
+ project_id=project_id,
+ user_id=user_id,
+ workflows_service=workflows_service,
+ )
+ revision = {
+ "id": str(workflow_revision_id),
+ "data": {
+ "uri": "http://evaluator",
+ "url": None,
+ "headers": {"authorization": "secret"},
+ "schemas": {"outputs": {"type": "object"}},
+ "script": "return score",
+ "parameters": {"threshold": 0.5},
+ },
+ "flags": {"is_custom": True},
+ }
+ request = WorkflowExecutionRequest(
+ step=SdkEvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ cell=SdkPlannedCell(
+ run_id=uuid4(),
+ scenario_id=uuid4(),
+ step_key="evaluator-auto",
+ step_type="annotation",
+ origin="auto",
+ repeat_idx=0,
+ status=SdkEvaluationStatus.QUEUED,
+ ),
+ source=SdkResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ inputs={"input": "hello"},
+ ),
+ revision=revision,
+ )
+
+ result = await runner.execute(request)
+
+ assert result.status == SdkEvaluationStatus.SUCCESS
+ workflows_service.invoke_workflow.assert_awaited_once()
+ workflow_request = workflows_service.invoke_workflow.await_args.kwargs["request"]
+ assert workflow_request.flags == {"is_custom": True}
+ assert workflow_request.data.revision["data"]["uri"] == "http://evaluator"
+ assert workflow_request.data.revision["data"]["headers"] == {
+ "authorization": "secret"
+ }
+ assert workflow_request.data.revision["data"]["schemas"] == {
+ "outputs": {"type": "object"}
+ }
+ assert workflow_request.data.revision["data"]["script"] == "return score"
+ assert workflow_request.data.revision["data"]["parameters"] == {"threshold": 0.5}
+ assert workflow_request.data.parameters == {"threshold": 0.5}
+
+
+@pytest.mark.asyncio
+async def test_backend_cached_runner_preserves_partial_hit_order():
+ project_id = uuid4()
+ cached_trace = SimpleNamespace(trace_id="cached-trace")
+ tracing_service = SimpleNamespace(
+ query_traces=AsyncMock(side_effect=[[cached_trace], []])
+ )
+
+ class BatchRunner:
+ def __init__(self):
+ self.requests = []
+
+ async def execute_batch(self, requests, semaphore=None):
+ self.requests.append(requests)
+ return [
+ WorkflowExecutionResult(
+ status=SdkEvaluationStatus.SUCCESS,
+ trace_id="fresh-trace",
+ )
+ ]
+
+ batch_runner = BatchRunner()
+ runner = APICachedRunner(
+ runner=batch_runner,
+ tracing_service=tracing_service,
+ project_id=project_id,
+ enabled=True,
+ )
+ requests = [
+ WorkflowExecutionRequest(
+ step=SdkEvaluationStep(key="evaluator-auto", type="annotation"),
+ cell=SdkPlannedCell(
+ run_id=uuid4(),
+ scenario_id=uuid4(),
+ step_key="evaluator-auto",
+ step_type="annotation",
+ origin="auto",
+ repeat_idx=idx,
+ status=SdkEvaluationStatus.QUEUED,
+ ),
+ source=SdkResolvedSourceItem(kind="trace", step_key="query-main"),
+ revision={"id": "evaluator-revision"},
+ references={"evaluator_revision": {"id": f"revision-{idx}"}},
+ )
+ for idx in range(2)
+ ]
+
+ results = await runner.execute_batch(requests)
+
+ assert [result.trace_id for result in results] == ["cached-trace", "fresh-trace"]
+ assert len(batch_runner.requests) == 1
+ assert [request.cell.repeat_idx for request in batch_runner.requests[0]] == [1]
+
+
+@pytest.mark.asyncio
+async def test_simple_evaluation_start_dispatches_batch_invocation_by_topology():
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ run = _run(
+ steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "application-main",
+ "invocation",
+ references={"application_revision": Reference(id=uuid4())},
+ ),
+ ],
+ )
+ run.id = run_id
+ worker = SimpleNamespace(
+ process_run_from_source=SimpleNamespace(kiq=AsyncMock()),
+ )
+ service = SimpleEvaluationsService(
+ testsets_service=None, # type: ignore[arg-type]
+ queries_service=None, # type: ignore[arg-type]
+ applications_service=None, # type: ignore[arg-type]
+ evaluators_service=None, # type: ignore[arg-type]
+ evaluations_service=None, # type: ignore[arg-type]
+ evaluations_worker=worker,
+ )
+ service.fetch = AsyncMock(
+ return_value=SimpleEvaluation(
+ id=run_id,
+ flags=SimpleEvaluationFlags(is_live=False),
+ data=SimpleEvaluationData(
+ status=None,
+ testset_steps={uuid4(): "custom"},
+ application_steps={uuid4(): "custom"},
+ ),
+ )
+ )
+ service._activate_evaluation_run = AsyncMock(return_value=run)
+
+ await service.start(
+ project_id=project_id,
+ user_id=user_id,
+ evaluation_id=run_id,
+ )
+
+ worker.process_run_from_source.kiq.assert_awaited_once_with(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ )
+
+
+@pytest.mark.asyncio
+async def test_simple_evaluation_start_does_not_dispatch_potential_topology():
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ run = _run(
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "application-main",
+ "invocation",
+ references={"application_revision": Reference(id=uuid4())},
+ ),
+ ],
+ )
+ run.id = run_id
+ worker = SimpleNamespace(
+ process_run_from_source=SimpleNamespace(kiq=AsyncMock()),
+ )
+ service = SimpleEvaluationsService(
+ testsets_service=None, # type: ignore[arg-type]
+ queries_service=None, # type: ignore[arg-type]
+ applications_service=None, # type: ignore[arg-type]
+ evaluators_service=None, # type: ignore[arg-type]
+ evaluations_service=None, # type: ignore[arg-type]
+ evaluations_worker=worker,
+ )
+ service.fetch = AsyncMock(
+ return_value=SimpleEvaluation(
+ id=run_id,
+ flags=SimpleEvaluationFlags(is_live=False),
+ data=SimpleEvaluationData(
+ status=None,
+ query_steps={uuid4(): "custom"},
+ application_steps={uuid4(): "custom"},
+ ),
+ )
+ )
+ service._activate_evaluation_run = AsyncMock(return_value=run)
+
+ await service.start(
+ project_id=project_id,
+ user_id=user_id,
+ evaluation_id=run_id,
+ )
+
+ worker.process_run_from_source.kiq.assert_not_awaited()
+
+
+@pytest.mark.asyncio
+async def test_simple_evaluation_queue_batches_dispatch_through_slice_processor():
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ testcase_id = uuid4()
+ run = _run(
+ flags=EvaluationRunFlags(
+ is_queue=True,
+ has_queries=True,
+ has_testsets=True,
+ ),
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step("evaluator-human", "annotation", origin="human"),
+ ],
+ )
+ run.id = run_id
+ worker = SimpleNamespace(
+ process_run_from_batch=SimpleNamespace(kiq=AsyncMock()),
+ )
+ evaluations_service = SimpleNamespace(fetch_run=AsyncMock(return_value=run))
+ service = SimpleEvaluationsService(
+ testsets_service=None, # type: ignore[arg-type]
+ queries_service=None, # type: ignore[arg-type]
+ applications_service=None, # type: ignore[arg-type]
+ evaluators_service=None, # type: ignore[arg-type]
+ evaluations_service=evaluations_service, # type: ignore[arg-type]
+ evaluations_worker=worker,
+ )
+ service._ensure_human_annotation_queue = AsyncMock()
+
+ traces_ok = await service.dispatch_trace_slice(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ trace_ids=["trace-1"],
+ input_step_key="query-main",
+ )
+ testcases_ok = await service.dispatch_testcase_slice(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ testcase_ids=[testcase_id],
+ input_step_key="testset-main",
+ )
+
+ assert traces_ok is True
+ assert testcases_ok is True
+ assert worker.process_run_from_batch.kiq.await_args_list == [
+ call(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ source_kind="traces",
+ trace_ids=["trace-1"],
+ input_step_key="query-main",
+ ),
+ call(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ source_kind="testcases",
+ testcase_ids=[testcase_id],
+ input_step_key="testset-main",
+ ),
+ ]
+
+
+@pytest.mark.asyncio
+async def test_direct_id_ingest_adds_scenarios_populates_then_processes(monkeypatch):
+ # Direct-id ingest is add_scenarios -> populate -> process: it creates one
+ # skeleton scenario per id, writes each scenario's input cell carrying the
+ # id, then re-executes (force) over the new scenarios. `process` itself never
+ # creates scenarios.
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ testcase_id = uuid4()
+ scenario_a = uuid4()
+ scenario_b = uuid4()
+
+ run = _run(
+ flags=EvaluationRunFlags(has_traces=True),
+ steps=[_step("query-main", "input")],
+ )
+ run.id = run_id
+
+ created_scenarios = [SimpleNamespace(id=scenario_a), SimpleNamespace(id=scenario_b)]
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ create_scenarios=AsyncMock(return_value=created_scenarios),
+ set_results=AsyncMock(return_value=[]),
+ )
+
+ # The direct ids are hydrated once by the resolver; the unified flow seeds
+ # those items into the executor (no downstream re-fetch).
+ monkeypatch.setattr(
+ run_tasks,
+ "resolve_direct_source_items",
+ AsyncMock(
+ side_effect=lambda **kwargs: (
+ [
+ run_tasks.ResolvedSourceItem(
+ kind="trace", step_key="", trace_id=tid
+ )
+ for tid in (kwargs.get("trace_ids") or [])
+ ]
+ + [
+ run_tasks.ResolvedSourceItem(
+ kind="testcase", step_key="", testcase_id=tcid
+ )
+ for tcid in (kwargs.get("testcase_ids") or [])
+ ]
+ )
+ ),
+ )
+
+ process_calls = []
+ seed_calls = []
+
+ class _FakeSliceProcessor:
+ def __init__(self, **kwargs):
+ pass
+
+ async def process(
+ self,
+ *,
+ project_id,
+ user_id,
+ tensor_slice,
+ seed_bindings=None,
+ refresh_metrics_without_auto_results=True,
+ finalize_run_status=True,
+ ):
+ process_calls.append(tensor_slice)
+ seed_calls.append(seed_bindings)
+ return ProcessSummary(created=len(tensor_slice.scenario_ids or []))
+
+ monkeypatch.setattr(run_tasks, "APISliceProcessor", _FakeSliceProcessor)
+
+ ok = await run_tasks.run_from_batch(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ source_kind="traces",
+ trace_ids=["trace-1", "trace-2"],
+ input_step_key="query-main",
+ tracing_service=object(), # type: ignore[arg-type]
+ testcases_service=object(), # type: ignore[arg-type]
+ workflows_service=object(), # type: ignore[arg-type]
+ applications_service=object(), # type: ignore[arg-type]
+ evaluations_service=evaluations_service, # type: ignore[arg-type]
+ )
+
+ assert ok is True
+ # add_scenarios: one skeleton scenario per id
+ evaluations_service.create_scenarios.assert_awaited_once()
+ _, create_kwargs = evaluations_service.create_scenarios.await_args
+ assert len(create_kwargs["scenarios"]) == 2
+ assert all(s.run_id == run_id for s in create_kwargs["scenarios"])
+
+ # bind: no input cell is pre-written (the SDK slice loop logs it on execute,
+ # avoiding a redundant per-scenario write). The hydrated source rides on the
+ # binding instead.
+ evaluations_service.set_results.assert_not_awaited()
+
+ # process: re-execute (force) over exactly the new scenarios
+ assert len(process_calls) == 1
+ tensor_slice = process_calls[0]
+ assert tensor_slice.run_id == run_id
+ assert set(tensor_slice.scenario_ids) == {scenario_a, scenario_b}
+ assert tensor_slice.process_mode == "force"
+
+ # seed bindings carry the hydrated source for each minted scenario (Option A:
+ # the executor reuses them instead of re-reading the input cell). Each binds
+ # its trace id at the input step key, with no testcase id.
+ bindings = seed_calls[0]
+ assert set(bindings.keys()) == {scenario_a, scenario_b}
+ assert {b.source.trace_id for b in bindings.values()} == {"trace-1", "trace-2"}
+ assert all(b.source.step_key == "query-main" for b in bindings.values())
+ assert all(b.source.testcase_id is None for b in bindings.values())
+
+ # testcase ingest binds testcase_id (not trace_id) on the seeded source
+ evaluations_service.create_scenarios.reset_mock()
+ evaluations_service.create_scenarios.return_value = [SimpleNamespace(id=scenario_a)]
+ process_calls.clear()
+ seed_calls.clear()
+
+ ok = await run_tasks.run_from_batch(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ source_kind="testcases",
+ testcase_ids=[testcase_id],
+ input_step_key="query-main",
+ tracing_service=object(), # type: ignore[arg-type]
+ testcases_service=object(), # type: ignore[arg-type]
+ workflows_service=object(), # type: ignore[arg-type]
+ applications_service=object(), # type: ignore[arg-type]
+ evaluations_service=evaluations_service, # type: ignore[arg-type]
+ )
+ assert ok is True
+ binding = seed_calls[0][scenario_a]
+ assert binding.source.testcase_id == testcase_id
+ assert binding.source.trace_id is None
+
+
+@pytest.mark.asyncio
+async def test_run_processor_routes_batch_inference_through_testset_application_loop(
+ monkeypatch,
+):
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ run = _run(
+ steps=[
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "application-main",
+ "invocation",
+ references={"application_revision": Reference(id=uuid4())},
+ ),
+ ],
+ )
+ run.id = run_id
+ run_testset_source = AsyncMock()
+ monkeypatch.setattr(
+ run_tasks,
+ "_run_testset_source",
+ run_testset_source,
+ )
+
+ processed = await run_tasks.run_from_source(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ tracing_service=object(), # type: ignore[arg-type]
+ testsets_service=object(), # type: ignore[arg-type]
+ queries_service=object(), # type: ignore[arg-type]
+ workflows_service=object(), # type: ignore[arg-type]
+ applications_service=object(), # type: ignore[arg-type]
+ evaluations_service=SimpleNamespace(fetch_run=AsyncMock(return_value=run)),
+ simple_evaluators_service=object(), # type: ignore[arg-type]
+ )
+
+ assert processed is True
+ run_testset_source.assert_awaited_once()
+
+
+@pytest.mark.asyncio
+async def test_run_processor_routes_query_topologies_with_windowing(monkeypatch):
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ query_revision_id = uuid4()
+ evaluator_revision_id = uuid4()
+ newest = object()
+ oldest = object()
+ run_query_source = AsyncMock()
+ monkeypatch.setattr(
+ run_tasks,
+ "_run_query_source",
+ run_query_source,
+ )
+ live_run = _run(
+ flags=EvaluationRunFlags(is_live=True),
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=query_revision_id)},
+ ),
+ _step(
+ "evaluator-auto",
+ "annotation",
+ origin="auto",
+ references={"evaluator_revision": Reference(id=evaluator_revision_id)},
+ ),
+ ],
+ )
+ live_run.id = run_id
+ batch_run = live_run.model_copy(update={"flags": EvaluationRunFlags(is_live=False)})
+
+ for run, expected_use_windowing in [(live_run, False), (batch_run, True)]:
+ run_query_source.reset_mock()
+
+ processed = await run_tasks.run_from_source(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ newest=newest, # type: ignore[arg-type]
+ oldest=oldest, # type: ignore[arg-type]
+ tracing_service=object(), # type: ignore[arg-type]
+ testsets_service=object(), # type: ignore[arg-type]
+ queries_service=object(), # type: ignore[arg-type]
+ workflows_service=object(), # type: ignore[arg-type]
+ applications_service=object(), # type: ignore[arg-type]
+ evaluations_service=SimpleNamespace(fetch_run=AsyncMock(return_value=run)),
+ simple_evaluators_service=object(), # type: ignore[arg-type]
+ )
+
+ assert processed is True
+ kwargs = run_query_source.await_args.kwargs
+ assert kwargs["use_windowing"] is expected_use_windowing
+ # Batch query runs drop the scheduler tick's range; live runs keep it.
+ if expected_use_windowing:
+ assert kwargs["newest"] is None
+ assert kwargs["oldest"] is None
+ else:
+ assert kwargs["newest"] is newest
+ assert kwargs["oldest"] is oldest
+
+
+@pytest.mark.asyncio
+async def test_run_processor_returns_false_for_missing_or_unsupported_run():
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ unsupported_run = _run(
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "testset-main",
+ "input",
+ references={"testset_revision": Reference(id=uuid4())},
+ ),
+ ],
+ )
+ unsupported_run.id = run_id
+
+ common_kwargs = dict(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ tracing_service=object(),
+ testsets_service=object(),
+ queries_service=object(),
+ workflows_service=object(),
+ applications_service=object(),
+ simple_evaluators_service=object(),
+ )
+
+ assert (
+ await run_tasks.run_from_source(
+ **common_kwargs, # type: ignore[arg-type]
+ evaluations_service=SimpleNamespace(fetch_run=AsyncMock(return_value=None)),
+ )
+ is False
+ )
+ assert (
+ await run_tasks.run_from_source(
+ **common_kwargs, # type: ignore[arg-type]
+ evaluations_service=SimpleNamespace(
+ fetch_run=AsyncMock(return_value=unsupported_run)
+ ),
+ )
+ is False
+ )
+
+
+@pytest.mark.asyncio
+async def test_backend_slice_processor_reexecutes_existing_scenario(monkeypatch):
+ # A TensorSlice addresses an EXISTING scenario. The backend slice processor
+ # must rebuild that scenario's source binding from its stored input cell,
+ # re-hydrate trace context, and re-run the SDK loop AGAINST THE EXISTING
+ # scenario (not a freshly created one), returning a populated ProcessSummary.
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ scenario_id = uuid4()
+ evaluator_revision_id = uuid4()
+ trace_id = "trace-existing"
+
+ run = _run(
+ flags=EvaluationRunFlags(has_traces=True),
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "evaluator-auto",
+ "annotation",
+ origin="auto",
+ references={"evaluator_revision": Reference(id=evaluator_revision_id)},
+ ),
+ ],
+ )
+ run.id = run_id
+
+ # The slice probe returns the evaluator cell; the per-scenario probe returns
+ # the input cell carrying the bound trace_id.
+ input_cell = EvaluationResult(
+ id=uuid4(),
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="query-main",
+ repeat_idx=0,
+ status=EvaluationStatus.SUCCESS,
+ trace_id=trace_id,
+ )
+ evaluator_cell = EvaluationResult(
+ id=uuid4(),
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="evaluator-auto",
+ repeat_idx=0,
+ status=EvaluationStatus.FAILURE,
+ )
+
+ async def _query_results(*, project_id, result=None, windowing=None):
+ if result is not None and result.scenario_id == scenario_id:
+ return [input_cell, evaluator_cell]
+ return [evaluator_cell]
+
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ query_results=AsyncMock(side_effect=_query_results),
+ # process now owns "done": per-scenario status writes + run finalize +
+ # incremental metrics refresh.
+ edit_scenario=AsyncMock(),
+ edit_run=AsyncMock(),
+ refresh_metrics=AsyncMock(return_value=[]),
+ )
+ workflows_service = SimpleNamespace(
+ fetch_workflow_revision=AsyncMock(
+ return_value=SimpleNamespace(id=evaluator_revision_id)
+ )
+ )
+
+ monkeypatch.setattr(
+ source_slice_tasks,
+ "resolve_direct_source_items",
+ AsyncMock(
+ return_value=[
+ ResolvedSourceItem(
+ kind="trace",
+ step_key="query-main",
+ trace_id=trace_id,
+ inputs={"prompt": "hi"},
+ )
+ ]
+ ),
+ )
+ sdk_loop = AsyncMock(
+ return_value=[
+ SdkProcessedScenario(
+ scenario=SimpleNamespace(id=scenario_id),
+ results={"evaluator-auto": object()},
+ auto_results_created=True,
+ )
+ ]
+ )
+ monkeypatch.setattr(
+ source_slice_tasks,
+ "sdk_process_evaluation_source_slice",
+ sdk_loop,
+ )
+
+ processor = source_slice_tasks.APISliceProcessor(
+ evaluations_service=evaluations_service,
+ tracing_service=None,
+ testcases_service=None,
+ workflows_service=workflows_service,
+ applications_service=None,
+ )
+ summary = await processor.process(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=TensorSlice(
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ repeat_idxs=[0],
+ process_mode="force",
+ ),
+ )
+
+ # The auto evaluator re-ran for the existing scenario.
+ assert summary.created == 1
+ sdk_loop.assert_awaited_once()
+ kwargs = sdk_loop.await_args.kwargs
+ # Source rebuilt from the input cell's trace_id.
+ assert kwargs["source_items"][0].trace_id == trace_id
+ # The loop reuses the EXISTING scenario rather than creating a new one.
+ created_scenario = await kwargs["create_scenario"](run_id)
+ assert created_scenario.id == scenario_id
+ # The auto evaluator runner was wired from the run's current revision.
+ assert "evaluator-auto" in kwargs["runners"]
+ assert "evaluator-auto" in kwargs["revisions"]
+
+
+@pytest.mark.asyncio
+async def test_backend_slice_processor_uses_requested_scenarios_for_missing_cells(
+ monkeypatch,
+):
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ scenario_id = uuid4()
+ evaluator_revision_id = uuid4()
+ trace_id = "trace-existing"
+
+ run = _run(
+ flags=EvaluationRunFlags(has_traces=True),
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "app-main",
+ "invocation",
+ references={"application_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "evaluator-auto",
+ "annotation",
+ origin="auto",
+ references={"evaluator_revision": Reference(id=evaluator_revision_id)},
+ ),
+ ],
+ repeats=2,
+ )
+ run.id = run_id
+
+ input_cell = EvaluationResult(
+ id=uuid4(),
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="query-main",
+ repeat_idx=1,
+ status=EvaluationStatus.SUCCESS,
+ trace_id=trace_id,
+ )
+ invocation_cell = EvaluationResult(
+ id=uuid4(),
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="app-main",
+ repeat_idx=1,
+ status=EvaluationStatus.SUCCESS,
+ trace_id=trace_id,
+ )
+
+ async def _query_results(*, project_id, result=None, windowing=None):
+ if result is not None and result.scenario_id == scenario_id:
+ return [input_cell, invocation_cell]
+ return []
+
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ query_results=AsyncMock(side_effect=_query_results),
+ edit_scenario=AsyncMock(),
+ edit_run=AsyncMock(),
+ refresh_metrics=AsyncMock(return_value=[]),
+ )
+ workflows_service = SimpleNamespace(
+ fetch_workflow_revision=AsyncMock(
+ return_value=SimpleNamespace(id=evaluator_revision_id)
+ ),
+ fetch_application_revision=AsyncMock(return_value=SimpleNamespace(id=uuid4())),
+ )
+ applications_service = SimpleNamespace(
+ fetch_application_revision=AsyncMock(return_value=SimpleNamespace(id=uuid4()))
+ )
+
+ monkeypatch.setattr(
+ source_slice_tasks,
+ "resolve_direct_source_items",
+ AsyncMock(
+ side_effect=[
+ [
+ ResolvedSourceItem(
+ kind="trace",
+ step_key="query-main",
+ trace_id=trace_id,
+ inputs={"prompt": "hi"},
+ )
+ ],
+ [
+ ResolvedSourceItem(
+ kind="trace",
+ step_key="",
+ trace_id=trace_id,
+ span_id="span-1",
+ outputs={"answer": "ok"},
+ )
+ ],
+ ]
+ ),
+ )
+ sdk_loop = AsyncMock(
+ return_value=[
+ SdkProcessedScenario(
+ scenario=SimpleNamespace(id=scenario_id),
+ results={"evaluator-auto": object()},
+ auto_results_created=True,
+ )
+ ]
+ )
+ monkeypatch.setattr(
+ source_slice_tasks, "sdk_process_evaluation_source_slice", sdk_loop
+ )
+
+ processor = source_slice_tasks.APISliceProcessor(
+ evaluations_service=evaluations_service,
+ tracing_service=None,
+ testcases_service=None,
+ workflows_service=workflows_service,
+ applications_service=applications_service,
+ )
+ summary = await processor.process(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=TensorSlice(
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ repeat_idxs=[1],
+ ),
+ )
+
+ assert summary.created == 1
+ sdk_loop.assert_awaited_once()
+ kwargs = sdk_loop.await_args.kwargs
+ # initial_context_by_repeat is now a per-scenario async callable (batched
+ # slice): resolve it for this scenario to get its {repeat: ctx} dict.
+ scenario_context = await kwargs["initial_context_by_repeat"](scenario_id)
+ assert scenario_context[1]["trace_id"] == trace_id
+ assert scenario_context[1]["outputs"] == {"answer": "ok"}
+ assert kwargs["plan_cell_filter"](
+ SdkPlannedCell(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="evaluator-auto",
+ step_type="annotation",
+ origin="auto",
+ repeat_idx=1,
+ status=EvaluationStatus.QUEUED,
+ should_execute=True,
+ )
+ )
+ assert not kwargs["plan_cell_filter"](
+ SdkPlannedCell(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="evaluator-auto",
+ step_type="annotation",
+ origin="auto",
+ repeat_idx=0,
+ status=EvaluationStatus.QUEUED,
+ should_execute=True,
+ )
+ )
+
+
+@pytest.mark.asyncio
+async def test_backend_slice_processor_distinguishes_fill_missing_and_force(
+ monkeypatch,
+):
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ scenario_id = uuid4()
+ evaluator_revision_id = uuid4()
+ trace_id = "trace-existing"
+
+ run = _run(
+ flags=EvaluationRunFlags(has_traces=True),
+ steps=[
+ _step(
+ "query-main",
+ "input",
+ references={"query_revision": Reference(id=uuid4())},
+ ),
+ _step(
+ "evaluator-auto",
+ "annotation",
+ origin="auto",
+ references={"evaluator_revision": Reference(id=evaluator_revision_id)},
+ ),
+ ],
+ )
+ run.id = run_id
+
+ input_cell = EvaluationResult(
+ id=uuid4(),
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="query-main",
+ repeat_idx=0,
+ status=EvaluationStatus.SUCCESS,
+ trace_id=trace_id,
+ )
+ evaluator_cell = EvaluationResult(
+ id=uuid4(),
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="evaluator-auto",
+ repeat_idx=0,
+ status=EvaluationStatus.SUCCESS,
+ )
+
+ async def _query_results(*, project_id, result=None, windowing=None):
+ if result is not None and result.scenario_id == scenario_id:
+ return [input_cell, evaluator_cell]
+ return [evaluator_cell]
+
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ query_results=AsyncMock(side_effect=_query_results),
+ edit_scenario=AsyncMock(),
+ edit_run=AsyncMock(),
+ refresh_metrics=AsyncMock(return_value=[]),
+ )
+ workflows_service = SimpleNamespace(
+ fetch_workflow_revision=AsyncMock(
+ return_value=SimpleNamespace(id=evaluator_revision_id)
+ )
+ )
+ monkeypatch.setattr(
+ source_slice_tasks,
+ "resolve_direct_source_items",
+ AsyncMock(
+ return_value=[
+ ResolvedSourceItem(
+ kind="trace",
+ step_key="query-main",
+ trace_id=trace_id,
+ inputs={"prompt": "hi"},
+ )
+ ]
+ ),
+ )
+ sdk_loop = AsyncMock(
+ return_value=[
+ SdkProcessedScenario(
+ scenario=SimpleNamespace(id=scenario_id),
+ results={"evaluator-auto": object()},
+ auto_results_created=True,
+ )
+ ]
+ )
+ monkeypatch.setattr(
+ source_slice_tasks, "sdk_process_evaluation_source_slice", sdk_loop
+ )
+
+ processor = source_slice_tasks.APISliceProcessor(
+ evaluations_service=evaluations_service,
+ tracing_service=None,
+ testcases_service=None,
+ workflows_service=workflows_service,
+ applications_service=None,
+ )
+
+ fill_missing = await processor.process(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=TensorSlice(
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ repeat_idxs=[0],
+ ),
+ )
+ assert fill_missing.created == 0
+ assert fill_missing.reused == 1
+ sdk_loop.assert_not_awaited()
+
+ force = await processor.process(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=TensorSlice(
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ repeat_idxs=[0],
+ process_mode="force",
+ ),
+ )
+ assert force.created == 1
+ sdk_loop.assert_awaited_once()
diff --git a/api/oss/tests/pytest/unit/evaluations/test_tensor_slice_ops.py b/api/oss/tests/pytest/unit/evaluations/test_tensor_slice_ops.py
new file mode 100644
index 0000000000..1dfddc07d4
--- /dev/null
+++ b/api/oss/tests/pytest/unit/evaluations/test_tensor_slice_ops.py
@@ -0,0 +1,825 @@
+"""Unit tests for the tensor slice operations surface (PR: unify eval loops).
+
+Covers the coordinate-addressed ops over EXISTING scenarios — distinct from the
+source-keyed dispatch_*_slice path (which ingests NEW source items):
+
+ - TaskiqEvaluationTaskRunner.process_rerun (dispatch, omits empty kwargs)
+ - SimpleEvaluationsService.dispatch_tensor_slice / probe_slice / populate_slice
+ - EvaluationsService self-builds TensorSliceOperations from its sub-services
+ - rerun entry fn runs process() then refresh()
+"""
+
+from datetime import datetime
+from types import SimpleNamespace
+from unittest.mock import AsyncMock, MagicMock
+from uuid import uuid4
+
+import pytest
+
+from oss.src.core.evaluations.service import (
+ EvaluationsService,
+ SimpleEvaluationsService,
+)
+from oss.src.core.evaluations.runtime.runner import TaskiqEvaluationTaskRunner
+from oss.src.core.evaluations.runtime.tensor import TensorSliceOperations
+from oss.src.core.evaluations.runtime.models import TensorSlice
+from oss.src.core.evaluations.tasks import run as run_module
+from oss.src.core.evaluations.tasks.run import (
+ run_from_source,
+ rerun,
+)
+from oss.src.core.evaluations.runtime.models import TopologyDecision
+from oss.src.core.evaluations.types import (
+ EvaluationResult,
+ EvaluationResultCreate,
+ EvaluationRun,
+ EvaluationRunData,
+ EvaluationRunDataStep,
+ EvaluationStatus,
+)
+
+
+# --- runner dispatch ----------------------------------------------------------
+
+
+@pytest.mark.asyncio
+async def test_runner_process_rerun_dispatches_and_omits_empty_kwargs():
+ project_id = uuid4()
+ user_id = uuid4()
+ run_id = uuid4()
+ scenario_id = uuid4()
+ worker = SimpleNamespace(
+ process_rerun=SimpleNamespace(kiq=AsyncMock(return_value="tensor-task")),
+ )
+ runner = TaskiqEvaluationTaskRunner(worker=worker)
+
+ result = await runner.process_rerun(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ # repeat_idxs / process_mode left None -> must be omitted from the call
+ )
+
+ assert result == "tensor-task"
+ worker.process_rerun.kiq.assert_awaited_once_with(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ )
+
+
+@pytest.mark.asyncio
+async def test_runner_process_rerun_forwards_all_kwargs_when_present():
+ worker = SimpleNamespace(
+ process_rerun=SimpleNamespace(kiq=AsyncMock()),
+ )
+ runner = TaskiqEvaluationTaskRunner(worker=worker)
+ project_id, user_id, run_id, scenario_id = uuid4(), uuid4(), uuid4(), uuid4()
+
+ await runner.process_rerun(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ repeat_idxs=[0, 1],
+ process_mode="force",
+ )
+
+ worker.process_rerun.kiq.assert_awaited_once_with(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ repeat_idxs=[0, 1],
+ process_mode="force",
+ )
+
+
+# --- SimpleEvaluationsService.dispatch_tensor_slice ---------------------------
+
+
+def _simple_service(*, worker=None, evaluations_service=None):
+ return SimpleEvaluationsService(
+ testsets_service=None, # type: ignore[arg-type]
+ queries_service=None, # type: ignore[arg-type]
+ applications_service=None, # type: ignore[arg-type]
+ evaluators_service=None, # type: ignore[arg-type]
+ evaluations_service=evaluations_service, # type: ignore[arg-type]
+ evaluations_worker=worker,
+ )
+
+
+@pytest.mark.asyncio
+async def test_dispatch_tensor_slice_dispatches_to_runner():
+ project_id, user_id, run_id, scenario_id = uuid4(), uuid4(), uuid4(), uuid4()
+ run = SimpleNamespace(id=run_id, flags=SimpleNamespace())
+ worker = SimpleNamespace(
+ process_rerun=SimpleNamespace(kiq=AsyncMock()),
+ )
+ evaluations_service = SimpleNamespace(fetch_run=AsyncMock(return_value=run))
+ service = _simple_service(worker=worker, evaluations_service=evaluations_service)
+
+ ok = await service.dispatch_tensor_slice(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ process_mode="force",
+ )
+
+ assert ok is True
+ worker.process_rerun.kiq.assert_awaited_once_with(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ process_mode="force",
+ )
+
+
+@pytest.mark.asyncio
+async def test_dispatch_tensor_slice_returns_false_without_runner():
+ run_id = uuid4()
+ service = _simple_service(worker=None, evaluations_service=SimpleNamespace())
+
+ ok = await service.dispatch_tensor_slice(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=run_id,
+ )
+
+ assert ok is False
+
+
+@pytest.mark.asyncio
+async def test_dispatch_tensor_slice_returns_false_when_run_missing():
+ worker = SimpleNamespace(
+ process_rerun=SimpleNamespace(kiq=AsyncMock()),
+ )
+ evaluations_service = SimpleNamespace(fetch_run=AsyncMock(return_value=None))
+ service = _simple_service(worker=worker, evaluations_service=evaluations_service)
+
+ ok = await service.dispatch_tensor_slice(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=uuid4(),
+ )
+
+ assert ok is False
+ worker.process_rerun.kiq.assert_not_awaited()
+
+
+# --- SimpleEvaluationsService.probe_slice / populate_slice --------------------
+
+
+@pytest.mark.asyncio
+async def test_probe_slice_delegates_to_tensor_ops_with_built_slice():
+ project_id, run_id, scenario_id = uuid4(), uuid4(), uuid4()
+ result = MagicMock(spec=EvaluationResult)
+ tensor_ops = SimpleNamespace(probe=AsyncMock(return_value=[result]))
+ evaluations_service = SimpleNamespace(tensor_slice_operations=tensor_ops)
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ results = await service.probe_slice(
+ project_id=project_id,
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ repeat_idxs=[0],
+ )
+
+ assert results == [result]
+ tensor_ops.probe.assert_awaited_once()
+ _, kwargs = tensor_ops.probe.await_args
+ assert kwargs["project_id"] == project_id
+ built: TensorSlice = kwargs["tensor_slice"]
+ assert built.run_id == run_id
+ assert built.scenario_ids == [scenario_id]
+ assert built.step_keys == ["evaluator-auto"]
+ assert built.repeat_idxs == [0]
+
+
+@pytest.mark.asyncio
+async def test_probe_slice_returns_empty_when_tensor_ops_unwired():
+ evaluations_service = SimpleNamespace(tensor_slice_operations=None)
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ results = await service.probe_slice(project_id=uuid4(), run_id=uuid4())
+
+ assert results == []
+
+
+@pytest.mark.asyncio
+async def test_populate_slice_delegates_results_to_tensor_ops():
+ project_id, user_id = uuid4(), uuid4()
+ result = MagicMock(spec=EvaluationResult)
+ tensor_ops = SimpleNamespace(populate=AsyncMock(return_value=[result]))
+ evaluations_service = SimpleNamespace(tensor_slice_operations=tensor_ops)
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ create = EvaluationResultCreate(
+ run_id=uuid4(),
+ scenario_id=uuid4(),
+ step_key="evaluator-auto",
+ status=EvaluationStatus.SUCCESS,
+ )
+ results = await service.populate_slice(
+ project_id=project_id,
+ user_id=user_id,
+ results=[create],
+ )
+
+ assert results == [result]
+ tensor_ops.populate.assert_awaited_once_with(
+ project_id=project_id,
+ user_id=user_id,
+ results=[create],
+ )
+
+
+@pytest.mark.asyncio
+async def test_populate_slice_returns_empty_when_tensor_ops_unwired():
+ evaluations_service = SimpleNamespace(tensor_slice_operations=None)
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ results = await service.populate_slice(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ results=[],
+ )
+
+ assert results == []
+
+
+# --- EvaluationsService self-builds TensorSliceOperations ---------------------
+
+
+def _evaluations_service(*, with_sub_services: bool) -> EvaluationsService:
+ extra = {}
+ if with_sub_services:
+ extra = dict(
+ testcases_service=MagicMock(),
+ workflows_service=MagicMock(),
+ applications_service=MagicMock(),
+ )
+ return EvaluationsService(
+ evaluations_dao=MagicMock(),
+ tracing_service=MagicMock(),
+ queries_service=MagicMock(),
+ testsets_service=MagicMock(),
+ evaluators_service=MagicMock(),
+ **extra,
+ )
+
+
+def test_service_builds_tensor_ops_when_sub_services_present():
+ service = _evaluations_service(with_sub_services=True)
+
+ ops = service.tensor_slice_operations
+ assert isinstance(ops, TensorSliceOperations)
+ assert ops.slice_processor is not None
+ # the ops reference the owning service (probe/populate go through it)
+ assert ops.evaluations_service is service
+
+
+def test_service_leaves_tensor_ops_none_without_sub_services():
+ service = _evaluations_service(with_sub_services=False)
+
+ assert service.tensor_slice_operations is None
+
+
+# --- rerun entry fn --------------------------------
+
+
+@pytest.mark.asyncio
+async def test_rerun_runs_process_then_refresh(monkeypatch):
+ """rerun orchestrates process(slice) then refresh(slice) over the same scope.
+
+ The refresh DETAIL (variational + global/temporal aggregate) lives in
+ TensorSliceOperations.refresh and is covered by
+ test_tensor_operations_refresh_* — here we only assert rerun delegates both
+ steps, in order, against the same coordinate slice.
+ """
+ project_id, user_id, run_id, scenario_id = uuid4(), uuid4(), uuid4(), uuid4()
+
+ calls = []
+ captured = {}
+
+ class _FakeTensorOps:
+ def __init__(self, *, evaluations_service, slice_processor):
+ captured["slice_processor"] = slice_processor
+
+ async def process(self, *, project_id, user_id, tensor_slice):
+ calls.append("process")
+ captured["process_slice"] = tensor_slice
+
+ async def refresh(self, *, project_id, user_id, tensor_slice):
+ calls.append("refresh")
+ captured["refresh_slice"] = tensor_slice
+
+ monkeypatch.setattr(
+ "oss.src.core.evaluations.tasks.run.TensorSliceOperations",
+ _FakeTensorOps,
+ )
+
+ ok = await rerun(
+ project_id=project_id,
+ user_id=user_id,
+ run_id=run_id,
+ scenario_ids=[scenario_id],
+ step_keys=["evaluator-auto"],
+ process_mode="force",
+ tracing_service=MagicMock(),
+ testcases_service=MagicMock(),
+ workflows_service=MagicMock(),
+ applications_service=MagicMock(),
+ evaluations_service=SimpleNamespace(),
+ )
+
+ assert ok is True
+ # process THEN refresh, both over the same coordinate slice.
+ assert calls == ["process", "refresh"]
+ assert captured["process_slice"].run_id == run_id
+ assert captured["process_slice"].scenario_ids == [scenario_id]
+ assert captured["process_slice"].step_keys == ["evaluator-auto"]
+ assert captured["process_slice"].process_mode == "force"
+ assert captured["refresh_slice"].scenario_ids == [scenario_id]
+
+
+@pytest.mark.asyncio
+async def test_tensor_operations_refresh_global_for_non_live():
+ """Non-live run -> refresh does variational + the GLOBAL aggregate row."""
+ project_id, user_id, run_id, scenario_id = uuid4(), uuid4(), uuid4(), uuid4()
+
+ refresh_mock = AsyncMock(return_value=[])
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(
+ return_value=SimpleNamespace(flags=SimpleNamespace(is_live=False))
+ ),
+ query_scenarios=AsyncMock(return_value=[]),
+ refresh_metrics=refresh_mock,
+ )
+ operations = TensorSliceOperations(evaluations_service=evaluations_service)
+
+ await operations.refresh(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=TensorSlice(run_id=run_id, scenario_ids=[scenario_id]),
+ )
+
+ kinds = [c.kwargs["metrics"] for c in refresh_mock.await_args_list]
+ # variational: scenario_ids set, no timestamp.
+ assert any(m.scenario_ids == [scenario_id] and not m.timestamps for m in kinds)
+ # global: run_id only, no scenario, no timestamp.
+ assert any(
+ m.run_id == run_id
+ and m.scenario_ids is None
+ and m.scenario_id is None
+ and not m.timestamps
+ for m in kinds
+ )
+
+
+@pytest.mark.asyncio
+async def test_tensor_operations_refresh_temporal_for_live():
+ """Live run -> refresh does variational + a TEMPORAL aggregate per interval."""
+ project_id, user_id, run_id = uuid4(), uuid4(), uuid4()
+ s1, s2 = uuid4(), uuid4()
+ ts = datetime(2026, 6, 2, 14, 0, 0)
+
+ refresh_mock = AsyncMock(return_value=[])
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(
+ return_value=SimpleNamespace(flags=SimpleNamespace(is_live=True))
+ ),
+ query_scenarios=AsyncMock(
+ return_value=[
+ SimpleNamespace(id=s1, timestamp=ts, interval=1),
+ SimpleNamespace(id=s2, timestamp=ts, interval=1),
+ ]
+ ),
+ refresh_metrics=refresh_mock,
+ )
+ operations = TensorSliceOperations(evaluations_service=evaluations_service)
+
+ await operations.refresh(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=TensorSlice(run_id=run_id, scenario_ids=[s1, s2]),
+ )
+
+ kinds = [c.kwargs["metrics"] for c in refresh_mock.await_args_list]
+ # one temporal refresh for the single affected interval, carrying its bucket.
+ assert any(
+ m.run_id == run_id and m.interval == 1 and m.timestamps == [ts] for m in kinds
+ )
+
+
+# --- graph-shape ops: add/remove_scenarios (height), add/remove_steps (width),
+# set_repeats (depth) ---------------------------------------------------
+
+
+@pytest.mark.asyncio
+async def test_add_scenarios_creates_n_skeleton_rows():
+ run_id = uuid4()
+ created = [SimpleNamespace(id=uuid4()), SimpleNamespace(id=uuid4())]
+ evaluations_service = SimpleNamespace(
+ create_scenarios=AsyncMock(return_value=created)
+ )
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ result = await service.add_scenarios(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=run_id,
+ count=2,
+ )
+
+ assert result == created
+ evaluations_service.create_scenarios.assert_awaited_once()
+ _, kwargs = evaluations_service.create_scenarios.await_args
+ scenarios = kwargs["scenarios"]
+ assert len(scenarios) == 2
+ # skeleton only: run-scoped, no input cells / results, no temporal bucket
+ assert all(s.run_id == run_id for s in scenarios)
+ assert all(s.timestamp is None and s.interval is None for s in scenarios)
+
+
+@pytest.mark.asyncio
+async def test_add_scenarios_floors_timestamp_and_sets_interval():
+ run_id = uuid4()
+ evaluations_service = SimpleNamespace(
+ create_scenarios=AsyncMock(return_value=[SimpleNamespace(id=uuid4())])
+ )
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ await service.add_scenarios(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=run_id,
+ count=1,
+ timestamp=datetime(2026, 6, 2, 14, 23, 47, 500000),
+ )
+
+ _, kwargs = evaluations_service.create_scenarios.await_args
+ scenario = kwargs["scenarios"][0]
+ # floored to the minute; interval fixed at 1 (DEFAULT_REFRESH_INTERVAL)
+ assert scenario.timestamp == datetime(2026, 6, 2, 14, 23, 0, 0)
+ assert scenario.interval == 1
+
+
+@pytest.mark.asyncio
+async def test_add_scenarios_zero_count_is_noop():
+ evaluations_service = SimpleNamespace(create_scenarios=AsyncMock())
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ result = await service.add_scenarios(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=uuid4(),
+ count=0,
+ )
+
+ assert result == []
+ evaluations_service.create_scenarios.assert_not_awaited()
+
+
+@pytest.mark.asyncio
+async def test_remove_scenarios_deletes_rows():
+ scenario_ids = [uuid4(), uuid4()]
+ evaluations_service = SimpleNamespace(
+ delete_scenarios=AsyncMock(return_value=scenario_ids)
+ )
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ result = await service.remove_scenarios(
+ project_id=uuid4(),
+ scenario_ids=scenario_ids,
+ )
+
+ assert result == scenario_ids
+ evaluations_service.delete_scenarios.assert_awaited_once()
+ _, kwargs = evaluations_service.delete_scenarios.await_args
+ assert kwargs["scenario_ids"] == scenario_ids
+
+
+@pytest.mark.asyncio
+async def test_remove_scenarios_empty_is_noop():
+ evaluations_service = SimpleNamespace(delete_scenarios=AsyncMock())
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ result = await service.remove_scenarios(project_id=uuid4(), scenario_ids=[])
+
+ assert result == []
+ evaluations_service.delete_scenarios.assert_not_awaited()
+
+
+def _step(key: str) -> EvaluationRunDataStep:
+ return EvaluationRunDataStep(
+ key=key,
+ type="input",
+ origin="custom",
+ references={},
+ )
+
+
+@pytest.mark.asyncio
+async def test_add_steps_appends_new_columns():
+ run_id = uuid4()
+ run = EvaluationRun(
+ id=run_id,
+ status=EvaluationStatus.RUNNING,
+ data=EvaluationRunData(steps=[_step("input")], repeats=1),
+ )
+ edited = SimpleNamespace(id=run_id)
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ edit_run=AsyncMock(return_value=edited),
+ )
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ result = await service.add_steps(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=run_id,
+ steps=[_step("evaluator")],
+ )
+
+ assert result == edited
+ _, kwargs = evaluations_service.edit_run.await_args
+ assert [s.key for s in kwargs["run"].data.steps] == ["input", "evaluator"]
+
+
+@pytest.mark.asyncio
+async def test_add_steps_skips_existing_key():
+ run_id = uuid4()
+ run = EvaluationRun(
+ id=run_id,
+ status=EvaluationStatus.RUNNING,
+ data=EvaluationRunData(steps=[_step("input")], repeats=1),
+ )
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ edit_run=AsyncMock(),
+ )
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ result = await service.add_steps(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=run_id,
+ steps=[_step("input")],
+ )
+
+ # all keys already present -> no edit, run returned unchanged
+ assert result is run
+ evaluations_service.edit_run.assert_not_awaited()
+
+
+@pytest.mark.asyncio
+async def test_remove_steps_drops_named_columns():
+ run_id = uuid4()
+ run = EvaluationRun(
+ id=run_id,
+ status=EvaluationStatus.RUNNING,
+ data=EvaluationRunData(steps=[_step("input"), _step("evaluator")], repeats=1),
+ )
+ edited = SimpleNamespace(id=run_id)
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ edit_run=AsyncMock(return_value=edited),
+ )
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ result = await service.remove_steps(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=run_id,
+ step_keys=["evaluator"],
+ )
+
+ assert result == edited
+ _, kwargs = evaluations_service.edit_run.await_args
+ assert [s.key for s in kwargs["run"].data.steps] == ["input"]
+
+
+@pytest.mark.asyncio
+async def test_remove_steps_unknown_key_is_noop():
+ run_id = uuid4()
+ run = EvaluationRun(
+ id=run_id,
+ status=EvaluationStatus.RUNNING,
+ data=EvaluationRunData(steps=[_step("input")], repeats=1),
+ )
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ edit_run=AsyncMock(),
+ )
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ result = await service.remove_steps(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=run_id,
+ step_keys=["missing"],
+ )
+
+ assert result is run
+ evaluations_service.edit_run.assert_not_awaited()
+
+
+@pytest.mark.asyncio
+async def test_set_repeats_sets_run_data_repeats():
+ run_id = uuid4()
+ # set_repeats builds a real EvaluationRunEdit, so the run/data must be the
+ # real DTOs (model_copy + validation run for real).
+ run = EvaluationRun(
+ id=run_id,
+ status=EvaluationStatus.RUNNING,
+ data=EvaluationRunData(repeats=1),
+ )
+ edited = SimpleNamespace(id=run_id)
+ evaluations_service = SimpleNamespace(
+ fetch_run=AsyncMock(return_value=run),
+ edit_run=AsyncMock(return_value=edited),
+ )
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ result = await service.set_repeats(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=run_id,
+ repeats=3,
+ )
+
+ assert result == edited
+ evaluations_service.edit_run.assert_awaited_once()
+ _, kwargs = evaluations_service.edit_run.await_args
+ assert kwargs["run"].data.repeats == 3
+
+
+@pytest.mark.asyncio
+async def test_set_repeats_returns_none_when_run_missing():
+ evaluations_service = SimpleNamespace(fetch_run=AsyncMock(return_value=None))
+ service = _simple_service(evaluations_service=evaluations_service)
+
+ result = await service.set_repeats(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=uuid4(),
+ repeats=3,
+ )
+
+ assert result is None
+
+
+# --- prune uses the ID-only query (UEL-029) ----------------------------------
+
+
+@pytest.mark.asyncio
+async def test_prune_uses_query_result_ids_not_full_probe():
+ """prune deletes by id, so it must use the ID-only query (no full DTO hydrate)."""
+ project_id, user_id, run_id = uuid4(), uuid4(), uuid4()
+ result_ids = [uuid4(), uuid4()]
+
+ evaluations_service = SimpleNamespace(
+ query_result_ids=AsyncMock(return_value=result_ids),
+ # query_results is the full-DTO path; prune must NOT call it.
+ query_results=AsyncMock(return_value=["should-not-be-used"]),
+ delete_results=AsyncMock(return_value=result_ids),
+ refresh_metrics=AsyncMock(return_value=[]),
+ # prune -> refresh() reads run kind + scenarios for the aggregate pass.
+ fetch_run=AsyncMock(
+ return_value=SimpleNamespace(flags=SimpleNamespace(is_live=False))
+ ),
+ query_scenarios=AsyncMock(return_value=[]),
+ )
+ tensor_ops = TensorSliceOperations(evaluations_service=evaluations_service)
+
+ deleted = await tensor_ops.prune(
+ project_id=project_id,
+ user_id=user_id,
+ tensor_slice=TensorSlice(run_id=run_id, scenario_ids=[uuid4()]),
+ )
+
+ assert deleted == result_ids
+ evaluations_service.query_result_ids.assert_awaited_once()
+ evaluations_service.query_results.assert_not_awaited()
+ evaluations_service.delete_results.assert_awaited_once_with(
+ project_id=project_id,
+ result_ids=result_ids,
+ )
+
+
+@pytest.mark.asyncio
+async def test_prune_empty_slice_is_noop():
+ """An empty slice dimension ([]) addresses nothing — no query, no delete."""
+ evaluations_service = SimpleNamespace(
+ query_result_ids=AsyncMock(return_value=[]),
+ delete_results=AsyncMock(),
+ refresh_metrics=AsyncMock(),
+ )
+ tensor_ops = TensorSliceOperations(evaluations_service=evaluations_service)
+
+ deleted = await tensor_ops.prune(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ tensor_slice=TensorSlice(run_id=uuid4(), scenario_ids=[]),
+ )
+
+ assert deleted == []
+ evaluations_service.query_result_ids.assert_not_awaited()
+ evaluations_service.delete_results.assert_not_awaited()
+
+
+# --- run dispatch routes queue_* topologies (UEL-019) ------------------------
+
+
+@pytest.mark.parametrize("dispatch", ["queue_traces", "queue_testcases"])
+@pytest.mark.asyncio
+async def test_run_from_source_routes_queue_topologies(monkeypatch, dispatch):
+ """queue_traces/queue_testcases must be handled (returns True), not dropped.
+
+ Before UEL-019 these truthy-dispatch topologies fell through to the
+ "unsupported topology" branch and returned False at run-start, silently
+ doing nothing. They are now routed to a clean "open queue awaiting batches"
+ finalize.
+ """
+ run_id = uuid4()
+ run = EvaluationRun(
+ id=run_id,
+ status=EvaluationStatus.RUNNING,
+ data=EvaluationRunData(steps=[_step("input")], repeats=1),
+ )
+ monkeypatch.setattr(
+ run_module,
+ "classify_run_topology",
+ lambda _run: TopologyDecision(
+ status="supported",
+ label="direct -> evaluator",
+ reason="worker-dispatched",
+ dispatch=dispatch,
+ ),
+ )
+ evaluations_service = SimpleNamespace(fetch_run=AsyncMock(return_value=run))
+
+ ok = await run_from_source(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=run_id,
+ tracing_service=MagicMock(),
+ testsets_service=MagicMock(),
+ queries_service=MagicMock(),
+ workflows_service=MagicMock(),
+ applications_service=MagicMock(),
+ evaluations_service=evaluations_service,
+ simple_evaluators_service=MagicMock(),
+ )
+
+ # Handled (not the unsupported-topology False).
+ assert ok is True
+
+
+@pytest.mark.asyncio
+async def test_run_from_source_unsupported_topology_returns_false(monkeypatch):
+ """A genuinely unsupported topology (no dispatch) still returns False."""
+ run_id = uuid4()
+ run = EvaluationRun(
+ id=run_id,
+ status=EvaluationStatus.RUNNING,
+ data=EvaluationRunData(steps=[_step("input")], repeats=1),
+ )
+ monkeypatch.setattr(
+ run_module,
+ "classify_run_topology",
+ lambda _run: TopologyDecision(
+ status="unsupported",
+ label="unsupported",
+ reason="no path",
+ dispatch=None,
+ ),
+ )
+ evaluations_service = SimpleNamespace(fetch_run=AsyncMock(return_value=run))
+
+ ok = await run_from_source(
+ project_id=uuid4(),
+ user_id=uuid4(),
+ run_id=run_id,
+ tracing_service=MagicMock(),
+ testsets_service=MagicMock(),
+ queries_service=MagicMock(),
+ workflows_service=MagicMock(),
+ applications_service=MagicMock(),
+ evaluations_service=evaluations_service,
+ simple_evaluators_service=MagicMock(),
+ )
+
+ assert ok is False
diff --git a/api/oss/tests/pytest/unit/events/test_events_utils.py b/api/oss/tests/pytest/unit/events/test_events_utils.py
index 2f5acf0ca8..476fd30fdc 100644
--- a/api/oss/tests/pytest/unit/events/test_events_utils.py
+++ b/api/oss/tests/pytest/unit/events/test_events_utils.py
@@ -772,9 +772,15 @@ async def _fake_check(**kwargs):
),
patch("oss.src.core.events.utils.is_ee", return_value=True),
patch(
- "ee.src.utils.entitlements.check_entitlements", new=_fake_check, create=True
+ "ee.src.core.access.entitlements.service.check_entitlements",
+ new=_fake_check,
+ create=True,
+ ),
+ patch(
+ "ee.src.core.access.entitlements.service.scope_from",
+ new=lambda **kw: kw,
+ create=True,
),
- patch("ee.src.utils.entitlements.scope_from", new=lambda **kw: kw, create=True),
):
await publish_trace_fetched(
request=_make_request(),
@@ -799,9 +805,15 @@ async def _fake_check(**kwargs):
),
patch("oss.src.core.events.utils.is_ee", return_value=True),
patch(
- "ee.src.utils.entitlements.check_entitlements", new=_fake_check, create=True
+ "ee.src.core.access.entitlements.service.check_entitlements",
+ new=_fake_check,
+ create=True,
+ ),
+ patch(
+ "ee.src.core.access.entitlements.service.scope_from",
+ new=lambda **kw: kw,
+ create=True,
),
- patch("ee.src.utils.entitlements.scope_from", new=lambda **kw: kw, create=True),
):
await publish_trace_fetched(
request=_make_request(),
@@ -826,9 +838,15 @@ async def _fake_check(**kwargs):
),
patch("oss.src.core.events.utils.is_ee", return_value=True),
patch(
- "ee.src.utils.entitlements.check_entitlements", new=_fake_check, create=True
+ "ee.src.core.access.entitlements.service.check_entitlements",
+ new=_fake_check,
+ create=True,
+ ),
+ patch(
+ "ee.src.core.access.entitlements.service.scope_from",
+ new=lambda **kw: kw,
+ create=True,
),
- patch("ee.src.utils.entitlements.scope_from", new=lambda **kw: kw, create=True),
):
await publish_trace_fetched(
request=_make_request(),
@@ -856,9 +874,15 @@ async def _fake_check(**kwargs):
),
patch("oss.src.core.events.utils.is_ee", return_value=True),
patch(
- "ee.src.utils.entitlements.check_entitlements", new=_fake_check, create=True
+ "ee.src.core.access.entitlements.service.check_entitlements",
+ new=_fake_check,
+ create=True,
+ ),
+ patch(
+ "ee.src.core.access.entitlements.service.scope_from",
+ new=lambda **kw: kw,
+ create=True,
),
- patch("ee.src.utils.entitlements.scope_from", new=lambda **kw: kw, create=True),
):
await publish_trace_fetched(
request=request,
@@ -886,9 +910,15 @@ async def _fake_check(**kwargs):
),
patch("oss.src.core.events.utils.is_ee", return_value=False),
patch(
- "ee.src.utils.entitlements.check_entitlements", new=_fake_check, create=True
+ "ee.src.core.access.entitlements.service.check_entitlements",
+ new=_fake_check,
+ create=True,
+ ),
+ patch(
+ "ee.src.core.access.entitlements.service.scope_from",
+ new=lambda **kw: kw,
+ create=True,
),
- patch("ee.src.utils.entitlements.scope_from", new=lambda **kw: kw, create=True),
):
await publish_trace_fetched(
request=_make_request(),
diff --git a/api/oss/tests/pytest/unit/events/test_events_worker_l2.py b/api/oss/tests/pytest/unit/events/test_events_worker_l2.py
index c93f6af0b4..6bd6a525a5 100644
--- a/api/oss/tests/pytest/unit/events/test_events_worker_l2.py
+++ b/api/oss/tests/pytest/unit/events/test_events_worker_l2.py
@@ -7,9 +7,10 @@
called directly with synthetic Redis-stream payloads, and the
entitlements helpers are patched.
-Note: feature-gating (audit-log access) is intentionally NOT enforced
-at ingest; only the counter quota is. The audit flag lives at the
-query side (`POST /events/query`).
+Note: persisting events (the audit log) is EE-only — OSS runs this worker
+for webhook dispatch but does not write to the `events` table. Under EE,
+ingest is gated by the `Counter.EVENTS_INGESTED` quota here; the audit
+*query* flag (`Flag.AUDIT`) is enforced separately at `POST /events/query`.
"""
import zlib
@@ -236,8 +237,13 @@ async def _fake_check(**kwargs):
@pytest.mark.asyncio
-async def test_l2_skipped_on_oss():
- """OSS (is_ee=False) → no Counter check, ingest proceeds."""
+async def test_l2_skipped_on_oss_and_not_persisted():
+ """OSS (is_ee=False) → no Counter check AND no ingest.
+
+ Persisting the `events` table is the (EE-gated) audit log, so OSS must not
+ write events. The batch is still returned in `allowed` so webhooks dispatch
+ normally — OSS gets webhooks without an audit trail.
+ """
org_id = uuid4()
proj_id = uuid4()
payload = _make_event_message(organization_id=org_id, project_id=proj_id)
@@ -248,9 +254,13 @@ async def test_l2_skipped_on_oss():
with patch("oss.src.tasks.asyncio.events.worker.is_ee", return_value=False):
total, processed_ids, allowed = await worker.process_batch(batch)
- assert total == 1
+ # Nothing persisted in OSS...
+ assert total == 0
+ worker.service.ingest.assert_not_called()
+ # ...but the batch is still allowed through for webhook dispatch, and the
+ # message is ACKed so it doesn't linger in the PEL.
assert len(allowed) == 1
- worker.service.ingest.assert_awaited_once()
+ assert len(processed_ids) == 1
@pytest.mark.asyncio
diff --git a/api/oss/tests/pytest/unit/test_evaluation_runtime_locks.py b/api/oss/tests/pytest/unit/test_evaluation_runtime_locks.py
index 8e739cc170..4cbc3b79f9 100644
--- a/api/oss/tests/pytest/unit/test_evaluation_runtime_locks.py
+++ b/api/oss/tests/pytest/unit/test_evaluation_runtime_locks.py
@@ -37,6 +37,7 @@ async def fake_redis():
fakeredis = pytest.importorskip("fakeredis")
aioredis = pytest.importorskip("fakeredis.aioredis")
from oss.src.utils import caching
+ from oss.src.utils import locking
server = fakeredis.FakeServer()
client = aioredis.FakeRedis(server=server, decode_responses=False)
@@ -47,7 +48,7 @@ async def _renew_lock_for_tests(
key=None,
project_id=None,
user_id=None,
- ttl: int = caching.AGENTA_LOCK_TTL,
+ ttl: int = locking.AGENTA_LOCK_TTL,
owner=None,
) -> bool:
lock_key = caching.pack(
@@ -85,14 +86,19 @@ async def _release_lock_for_tests(
return False
return bool(await client.delete(lock_key))
+ engine = pytest.importorskip("oss.src.dbs.redis.shared.engine")
+ lock_engine = engine.get_lock_engine()
+
with (
- patch("oss.src.utils.caching.r_lock", client),
+ # The lock engine delegates redis ops to `_client()`; point it at the
+ # fakeredis instance so locking goes through the in-memory server.
+ patch.object(lock_engine, "_client", return_value=client),
patch(
- "oss.src.utils.caching.renew_lock",
+ "oss.src.utils.locking.renew_lock",
_renew_lock_for_tests,
),
patch(
- "oss.src.utils.caching.release_lock",
+ "oss.src.utils.locking.release_lock",
_release_lock_for_tests,
),
):
@@ -116,22 +122,16 @@ def _job_id() -> str:
def _genson_patch():
module = types.ModuleType("genson")
- live_module = types.ModuleType("oss.src.core.evaluations.tasks.live")
class SchemaBuilder: ...
- async def evaluate_live_query(*args, **kwargs):
- return None
-
module.SchemaBuilder = SchemaBuilder
- live_module.evaluate_live_query = evaluate_live_query
stack = ExitStack()
stack.enter_context(
patch.dict(
sys.modules,
{
"genson": module,
- "oss.src.core.evaluations.tasks.live": live_module,
},
)
)
@@ -473,7 +473,7 @@ async def _failing_coro():
@pytest.mark.asyncio
async def test_refresh_worker_heartbeat_preserves_created_at_without_fakeredis():
- from oss.src.core.evaluations.runtime import locks
+ import oss.src.core.evaluations.runtime.locks as locks
class DummyRedis:
def __init__(self):
@@ -487,9 +487,11 @@ async def set(self, key, value, ex=None):
return True
dummy = DummyRedis()
+ engine = pytest.importorskip("oss.src.dbs.redis.shared.engine")
+ lock_engine = engine.get_lock_engine()
with (
- patch("oss.src.utils.caching.r_lock", dummy),
+ patch.object(lock_engine, "_client", return_value=dummy),
patch(
"oss.src.core.evaluations.runtime.locks._now_iso",
side_effect=["2026-03-25T10:00:00Z", "2026-03-25T10:01:00Z"],
@@ -506,7 +508,7 @@ async def set(self, key, value, ex=None):
@pytest.mark.asyncio
async def test_run_job_heartbeat_fails_after_missing_renew_deadline():
- from oss.src.core.evaluations.runtime import locks
+ import oss.src.core.evaluations.runtime.locks as locks
clock = {"now": 0.0}
diff --git a/api/oss/tests/pytest/unit/test_llm_apps_service.py b/api/oss/tests/pytest/unit/test_llm_apps_service.py
deleted file mode 100644
index ee1079ba7f..0000000000
--- a/api/oss/tests/pytest/unit/test_llm_apps_service.py
+++ /dev/null
@@ -1,314 +0,0 @@
-from oss.src.services.llm_apps_service import (
- _build_inspect_url,
- _extract_batch_invoke_metadata,
- parse_legacy_inputs,
- build_invoke_request,
- get_parameters_from_inspect,
- get_parameters_from_schemas,
-)
-import pytest
-
-
-def test_get_parameters_from_schemas_prefers_revision_schemas_for_completion():
- parameters, is_chat = get_parameters_from_schemas(
- schemas={
- "parameters": {
- "type": "object",
- "properties": {
- "prompt": {
- "type": "object",
- }
- },
- },
- "inputs": {
- "type": "object",
- "properties": {
- "country": {
- "type": "string",
- }
- },
- },
- }
- )
-
- assert is_chat is False
- assert parameters == [
- {
- "name": "ag_config",
- "type": "dict",
- "default": ["prompt"],
- },
- {
- "name": "inputs",
- "type": "dict",
- "default": ["country"],
- },
- ]
-
-
-def test_get_parameters_from_schemas_detects_chat_messages():
- parameters, is_chat = get_parameters_from_schemas(
- schemas={
- "parameters": {
- "type": "object",
- "properties": {
- "prompt": {
- "type": "object",
- }
- },
- },
- "inputs": {
- "type": "object",
- "properties": {
- "messages": {
- "type": "array",
- "x-ag-type-ref": "messages",
- },
- "context": {
- "type": "string",
- },
- },
- },
- }
- )
-
- assert is_chat is True
- assert parameters == [
- {
- "name": "ag_config",
- "type": "dict",
- "default": ["prompt"],
- },
- {
- "name": "messages",
- "type": "messages",
- "default": [],
- },
- {
- "name": "inputs",
- "type": "dict",
- "default": ["context"],
- },
- ]
-
-
-def test_build_invoke_request_wraps_inputs_for_invoke_endpoint():
- request = build_invoke_request(
- inputs={
- "country": "France",
- "messages": [
- {
- "role": "user",
- "content": "What is the capital?",
- }
- ],
- },
- parameters={
- "prompt": {
- "messages": [
- {
- "role": "system",
- "content": "You are an expert in geography.",
- }
- ]
- }
- },
- references={
- "application": {"id": "app-id"},
- "application_variant": {"id": "variant-id"},
- "application_revision": {"id": "revision-id"},
- },
- )
-
- assert request == {
- "references": {
- "application": {"id": "app-id"},
- "application_variant": {"id": "variant-id"},
- "application_revision": {"id": "revision-id"},
- },
- "data": {
- "parameters": {
- "prompt": {
- "messages": [
- {
- "role": "system",
- "content": "You are an expert in geography.",
- }
- ]
- }
- },
- "inputs": {
- "country": "France",
- "messages": [
- {
- "role": "user",
- "content": "What is the capital?",
- }
- ],
- },
- },
- }
-
-
-def test_build_inspect_url_for_root_route():
- assert (
- _build_inspect_url(
- runtime_prefix="http://localhost:8080",
- route_path="",
- )
- == "http://localhost:8080/inspect"
- )
-
-
-def test_build_inspect_url_for_nested_route():
- assert (
- _build_inspect_url(
- runtime_prefix="http://localhost:8080/service/",
- route_path="/summarize",
- )
- == "http://localhost:8080/service/summarize/inspect"
- )
-
-
-def test_extract_batch_invoke_metadata_prefers_revision_values():
- parameters, schemas, is_chat = _extract_batch_invoke_metadata(
- revision={
- "data": {
- "parameters": {"prompt": {"messages": [{"role": "system"}]}},
- "schemas": {
- "inputs": {
- "type": "object",
- "properties": {"messages": {"x-ag-type-ref": "messages"}},
- }
- },
- },
- "flags": {"is_chat": True},
- },
- parameters=None,
- schemas=None,
- is_chat=None,
- )
-
- assert parameters == {"prompt": {"messages": [{"role": "system"}]}}
- assert schemas == {
- "inputs": {
- "type": "object",
- "properties": {"messages": {"x-ag-type-ref": "messages"}},
- }
- }
- assert is_chat is True
-
-
-def test_extract_batch_invoke_metadata_prefers_explicit_overrides():
- parameters, schemas, is_chat = _extract_batch_invoke_metadata(
- revision={
- "data": {
- "parameters": {"prompt": {"temperature": 0.1}},
- "schemas": {"inputs": {"type": "object", "properties": {}}},
- },
- "flags": {"is_chat": False},
- },
- parameters={"prompt": {"temperature": 0.7}},
- schemas={"inputs": {"type": "object", "properties": {"country": {}}}},
- is_chat=True,
- )
-
- assert parameters == {"prompt": {"temperature": 0.7}}
- assert schemas == {"inputs": {"type": "object", "properties": {"country": {}}}}
- assert is_chat is True
-
-
-def test_parse_legacy_inputs_prefers_input_keys_over_full_datapoint():
- inputs = parse_legacy_inputs(
- datapoint={
- "country": "Spain",
- "correct_answer": "Madrid",
- "testcase_id": "tc-1",
- "testcase_dedup_id": "dedup-1",
- },
- parameters={
- "prompt": {
- "input_keys": ["country"],
- }
- },
- )
-
- assert inputs == {"country": "Spain"}
-
-
-def test_parse_legacy_inputs_falls_back_to_schema_inputs_when_input_keys_missing():
- inputs = parse_legacy_inputs(
- datapoint={
- "country": "Germany",
- "correct_answer": "Berlin",
- "testcase_id": "tc-2",
- "testcase_dedup_id": "dedup-2",
- },
- parameters={},
- schemas={
- "inputs": {
- "type": "object",
- "properties": {
- "country": {"type": "string"},
- },
- }
- },
- )
-
- assert inputs == {"country": "Germany"}
-
-
-@pytest.mark.asyncio
-async def test_get_parameters_from_inspect_prefers_revision_schemas(monkeypatch):
- async def fake_post_json_to_uri(uri, headers, body):
- assert uri == "http://localhost:8080/inspect"
- assert headers == {"Authorization": "Secret test"}
- assert body == {}
- return {
- "flags": {"is_chat": False},
- "data": {
- "revision": {
- "data": {
- "schemas": {
- "parameters": {
- "type": "object",
- "properties": {
- "prompt": {"type": "object"},
- },
- },
- "inputs": {
- "type": "object",
- "properties": {
- "country": {"type": "string"},
- },
- },
- }
- }
- }
- },
- }
-
- monkeypatch.setattr(
- "oss.src.services.llm_apps_service._post_json_to_uri",
- fake_post_json_to_uri,
- )
-
- parameters, is_chat = await get_parameters_from_inspect(
- runtime_prefix="http://localhost:8080",
- route_path="",
- headers={"Authorization": "Secret test"},
- )
-
- assert is_chat is False
- assert parameters == [
- {
- "name": "ag_config",
- "type": "dict",
- "default": ["prompt"],
- },
- {
- "name": "inputs",
- "type": "dict",
- "default": ["country"],
- },
- ]
diff --git a/api/oss/tests/pytest/unit/tracing/utils/test_parsing.py b/api/oss/tests/pytest/unit/tracing/utils/test_parsing.py
index 24aec405ac..61b2d1797e 100644
--- a/api/oss/tests/pytest/unit/tracing/utils/test_parsing.py
+++ b/api/oss/tests/pytest/unit/tracing/utils/test_parsing.py
@@ -1,6 +1,5 @@
from copy import deepcopy
from datetime import datetime
-from uuid import UUID
import pytest
@@ -116,12 +115,10 @@ def test_parse_id_helpers_raise_on_invalid_values(fn, value):
def test_parse_uuid_to_wire_ids():
- trace_uuid = UUID(TRACE_UUID)
- span_uuid = UUID(SPAN_UUID)
-
- assert parse_trace_id_from_uuid(trace_uuid) == TRACE_HEX
+ # The DTO/domain layer holds trace/span ids as canonical hex strings, so
+ # these parsers take a str. UUID-style (dashed) input is accepted too,
+ # since str(UUID(...)) normalizes it.
assert parse_trace_id_from_uuid(TRACE_UUID) == TRACE_HEX
- assert parse_span_id_from_uuid(span_uuid) == SPAN_HEX
assert parse_span_id_from_uuid(SPAN_UUID) == SPAN_HEX
diff --git a/api/pyproject.toml b/api/pyproject.toml
index 87c13c060b..b8061f33f0 100644
--- a/api/pyproject.toml
+++ b/api/pyproject.toml
@@ -52,6 +52,10 @@ dev = [
"pytest-mock>=3,<4",
"pytest-html>=4,<5",
"fakeredis>=2.34.1,<3",
+ # Starlette 1.2's TestClient prefers httpx2 and warns when only httpx is
+ # present. Runtime code stays on httpx (0.28); this test-only dep silences
+ # the deprecation without touching the runtime HTTP stack.
+ "httpx2>=2.3,<3",
]
[tool.uv]
diff --git a/api/uv.lock b/api/uv.lock
index 737df876bb..bbf258a44b 100644
--- a/api/uv.lock
+++ b/api/uv.lock
@@ -33,7 +33,7 @@ dependencies = [
[package.metadata]
requires-dist = [
{ name = "agenta-client", editable = "../clients/python" },
- { name = "daytona", specifier = ">=0.183,<0.184" },
+ { name = "daytona", specifier = ">=0.184,<0.185" },
{ name = "fastapi", specifier = ">=0.136,<0.137" },
{ name = "httpx", specifier = ">=0.28,<0.29" },
{ name = "jinja2", specifier = ">=3,<4" },
@@ -300,6 +300,7 @@ dependencies = [
dev = [
{ name = "click" },
{ name = "fakeredis" },
+ { name = "httpx2" },
{ name = "pytest" },
{ name = "pytest-asyncio" },
{ name = "pytest-html" },
@@ -348,6 +349,7 @@ requires-dist = [
dev = [
{ name = "click", specifier = ">=8,<9" },
{ name = "fakeredis", specifier = ">=2.34.1,<3" },
+ { name = "httpx2", specifier = ">=2.3,<3" },
{ name = "pytest", specifier = ">=9,<10" },
{ name = "pytest-asyncio", specifier = ">=1,<2" },
{ name = "pytest-html", specifier = ">=4,<5" },
@@ -615,7 +617,7 @@ wheels = [
[[package]]
name = "daytona"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiofiles" },
@@ -639,14 +641,14 @@ dependencies = [
{ name = "urllib3" },
{ name = "wsproto" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c8/dd/3914a2ae3dc4ecf3fd861eff221f4222e48ba4e5530ff7e585d4c4aa7965/daytona-0.183.0.tar.gz", hash = "sha256:2f0020537712ae67693fd2341d3008d464ada06dcd8e89baa6183846271e2f76", size = 141636, upload-time = "2026-05-29T10:59:50.565Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ac/6d/482ed38e868e5d6904961bf8c0317a94981bdd2b165f2611acb4f7094357/daytona-0.184.0.tar.gz", hash = "sha256:38a8de4a2daf34cb5940590db4d0f816ee8354d9919ca8ab1051df4a38f2107c", size = 141946, upload-time = "2026-06-03T14:46:56.231Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c8/ae/b23f7e5381ca5d66f2be0f802ebef0110b5e21022946fa7b9d6e873ec6ad/daytona-0.183.0-py3-none-any.whl", hash = "sha256:89af1bcfc9b37c580329fcad01167bcfab786330e2d0ae74ad3fae8cb40397d2", size = 172192, upload-time = "2026-05-29T10:59:48.838Z" },
+ { url = "https://files.pythonhosted.org/packages/10/da/5ff417bbf0ca7d480ee88c310372fec3ab039a66878c27ecab97203d00c0/daytona-0.184.0-py3-none-any.whl", hash = "sha256:630df33c62aebae2ae34679eff79198806014567850c98dcd8d45accdcc5437a", size = 172586, upload-time = "2026-06-03T14:46:54.467Z" },
]
[[package]]
name = "daytona-api-client"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic" },
@@ -654,14 +656,14 @@ dependencies = [
{ name = "typing-extensions" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/1c/40/a5090268e734f804489b8ca3dcdbd4de7c392b1b4d4b02a60c5d85c7198f/daytona_api_client-0.183.0.tar.gz", hash = "sha256:659fff84a6461d1f51986fb814bf6e3fbc51ac203e6502eb6ae6f26029d69814", size = 147714, upload-time = "2026-05-29T10:59:01.709Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/73/63/cdb3ea6dd35fd2091a7e1f988ce1d3194d9bec1accfa6dbbf63ad424e671/daytona_api_client-0.184.0.tar.gz", hash = "sha256:3cdb111cf2a21be13cc648e444162c094d45f80d1eeb638b671fc854be307c23", size = 148346, upload-time = "2026-06-03T14:46:09.888Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/70/6a/8890e773ecf1cd9c1b70ddb0fda57e4941f5a8a44ced1c91574253797f63/daytona_api_client-0.183.0-py3-none-any.whl", hash = "sha256:c319ae3b4666ec15402cacb8ec3aaffbf55802c0dbc33f6826ef07afceae5085", size = 406274, upload-time = "2026-05-29T10:59:00.427Z" },
+ { url = "https://files.pythonhosted.org/packages/88/65/44993d1bb3cb1f5f294ac97bb3246346c14bf7ba3e79cdd4e92c7df0c6df/daytona_api_client-0.184.0-py3-none-any.whl", hash = "sha256:8fec5062d757fb533e82e9bf295fc1625ae294b4a154c24081bbd2bf30bcb5dd", size = 407600, upload-time = "2026-06-03T14:46:08.086Z" },
]
[[package]]
name = "daytona-api-client-async"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohttp" },
@@ -670,14 +672,14 @@ dependencies = [
{ name = "python-dateutil" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/90/aa/c9de46d48ee45228566a53bb699bc4bdab693dc8ce300516ce334bfec82f/daytona_api_client_async-0.183.0.tar.gz", hash = "sha256:4f5b397e375635fe3614c342cf34faa236d5a0918c53588d7059b5061d881407", size = 148190, upload-time = "2026-05-29T10:59:14.315Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/df/2f/caba484cbac693d269b417df73237f117882e2e28d1af4c3878e568bf148/daytona_api_client_async-0.184.0.tar.gz", hash = "sha256:a3cb0ebe5eec2c824b7848d4189a035a13cd84de1e0083c3f0c033f5445f3b71", size = 149131, upload-time = "2026-06-03T14:46:19.64Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/71/db/dde2e2478faf010b048af24227e5ff8b4c635d8104ace26c66ed1f29dd49/daytona_api_client_async-0.183.0-py3-none-any.whl", hash = "sha256:8be2b0bac344893294a8ffd8df7a4703427ec48376f6948975aca85f09dba541", size = 409552, upload-time = "2026-05-29T10:59:12.964Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/fc/c6e304db0bb382a0842cda913474ba42060acbf4f6cc91d8708f7997e337/daytona_api_client_async-0.184.0-py3-none-any.whl", hash = "sha256:19f268e6fb4d4190e7a4ea2ad3f4600bf14c25ab8f4997390d8d07d4a281de61", size = 410889, upload-time = "2026-06-03T14:46:18.051Z" },
]
[[package]]
name = "daytona-toolbox-api-client"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic" },
@@ -685,14 +687,14 @@ dependencies = [
{ name = "typing-extensions" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/ac/ee/1c8b9785c4028a0932f655e131e44417380a1e3d6ff4eb58b4e10b9aac18/daytona_toolbox_api_client-0.183.0.tar.gz", hash = "sha256:7cf4eb8ab36ec488f436695822b0e4c06e82d12d8fb2fe28e3239151dd43c4b7", size = 77732, upload-time = "2026-05-29T10:58:40.866Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/26/8f/78b0c06e91065e573ce1f2f4c6b7941066be939de46128a7e97a30b2e4a7/daytona_toolbox_api_client-0.184.0.tar.gz", hash = "sha256:c325a050ca45e7832c7d05127260634ed0742d8bc75b2d9de65847153fba70e6", size = 77893, upload-time = "2026-06-03T14:45:52.776Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/5e/3a/904bbf95eac89036775051410dbaf55414a73a1e6d074e1486ca29ee3dbb/daytona_toolbox_api_client-0.183.0-py3-none-any.whl", hash = "sha256:bc0c2fb986f50cad23791afa181c04f27d975b59301d7ce59ce519c1f518483c", size = 205626, upload-time = "2026-05-29T10:58:39.381Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/f9/311c8a6d8fdbb48793c1d5504fa212b0325047887e1c8c8dc2560687cff6/daytona_toolbox_api_client-0.184.0-py3-none-any.whl", hash = "sha256:05b6b179018247bf3e7de667b049b0d7bc0e5e83f58b498e0371988e61b3041e", size = 205757, upload-time = "2026-06-03T14:45:51.343Z" },
]
[[package]]
name = "daytona-toolbox-api-client-async"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohttp" },
@@ -701,9 +703,9 @@ dependencies = [
{ name = "python-dateutil" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c5/0f/85e2ad6511ae228e1c423944d6d90ba3ace2153685ba8aa3b4035c5ccc6f/daytona_toolbox_api_client_async-0.183.0.tar.gz", hash = "sha256:31984e9fc5c440efbb5d23426f187046fa419c075c42d8691b127304692c4e6b", size = 71347, upload-time = "2026-05-29T10:59:03.772Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/6b/cc/d10617b9bf1eae7f61870d0f98d5f22e6a56b0777ee9643427be5d8ec488/daytona_toolbox_api_client_async-0.184.0.tar.gz", hash = "sha256:495526bbd8de1d1ce2d86ecdb561efd5c4e7e86007abf4bc550ecc0c5efaf2e9", size = 71490, upload-time = "2026-06-03T14:46:20.57Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/23/66/af01390a47ba626454fd2ba44766282ffb7174ecc60c1742ab4859bd074f/daytona_toolbox_api_client_async-0.183.0-py3-none-any.whl", hash = "sha256:54a25297cfaf68568d85cecfd5c07da2e7fd862c8ab445df97b76a360951f757", size = 203902, upload-time = "2026-05-29T10:59:02.046Z" },
+ { url = "https://files.pythonhosted.org/packages/db/71/d6e98539e8a855bc63a55ce60f554f0b0063e9275424fea0476eb46f3a2a/daytona_toolbox_api_client_async-0.184.0-py3-none-any.whl", hash = "sha256:b971bc3475c0f658c38a86de40a5d4d31394bf60ad4b4c7f8b7693a5a56647b1", size = 204036, upload-time = "2026-06-03T14:46:18.771Z" },
]
[[package]]
@@ -1030,6 +1032,19 @@ 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 = "httpcore2"
+version = "2.3.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "h11" },
+ { name = "truststore" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e6/34/18f1c596e677962f040284246f393b10a1f8ce440b3a7e69c637d0f1c7ad/httpcore2-2.3.0.tar.gz", hash = "sha256:07327e251560960eea8e969d92d4c6a325feb13cca39e25340731336c3baf924", size = 64300, upload-time = "2026-06-01T13:15:02.998Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c2/dd/3357218c69360d1cecc196c230c9a1d5c9afd5dba362056e23e60a5e64e5/httpcore2-2.3.0-py3-none-any.whl", hash = "sha256:477e9e334f74e5240dcac002e890580f36a57d40ff0fb14cc9655731d23b8415", size = 80024, upload-time = "2026-06-01T13:15:00.001Z" },
+]
+
[[package]]
name = "httptools"
version = "0.8.0"
@@ -1089,6 +1104,21 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/98/f8/a6bc80313a9e93c888fa10534dfce2ad76ff86911b6f485777ce6de6a073/httpx_ws-0.9.0-py3-none-any.whl", hash = "sha256:71640d2fb1bf9a225775015b33cd755cfd4c5f7e21c885192fe3adc4c387b248", size = 15759, upload-time = "2026-03-28T14:11:11.887Z" },
]
+[[package]]
+name = "httpx2"
+version = "2.3.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "anyio" },
+ { name = "httpcore2" },
+ { name = "idna" },
+ { name = "truststore" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9f/9a/cca0b9145f13d8ae34b885ae28d403a1469a433abc78e0f94f4ce94e650b/httpx2-2.3.0.tar.gz", hash = "sha256:227e7c41d95a76d4077a52640564132777215fc3394e07b66a3116c33d668fa9", size = 81115, upload-time = "2026-06-01T13:15:04.324Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/87/ce/ae2911859847f9ba1d6b23027e53481cbeb50b93234f355a968d300ca2cb/httpx2-2.3.0-py3-none-any.whl", hash = "sha256:6f393663bdf6dbe7fe90118e3eb5b2bd024a675cae0390ac08cec9198812d8b7", size = 74538, upload-time = "2026-06-01T13:15:01.566Z" },
+]
+
[[package]]
name = "huggingface-hub"
version = "1.17.0"
@@ -1112,11 +1142,11 @@ wheels = [
[[package]]
name = "idna"
-version = "3.17"
+version = "3.18"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/b9/28/99c51f664567218d824af024c0251650fb27e4ca066df188dab0769c5b91/idna-3.17.tar.gz", hash = "sha256:5eb0cb53bc467c12eadcf6de83163ad8527cec9416f44b9b61b19caedad2b87f", size = 196048, upload-time = "2026-05-28T14:32:38.55Z" }
+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/de/a7/f76514cc40ad6234098ecdebda08732d75964776c51a42845b7da10649e2/idna-3.17-py3-none-any.whl", hash = "sha256:466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c", size = 65316, upload-time = "2026-05-28T14:32:37.035Z" },
+ { 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]]
@@ -1762,7 +1792,7 @@ wheels = [
[[package]]
name = "posthog"
-version = "7.16.3"
+version = "7.16.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "backoff" },
@@ -1770,9 +1800,9 @@ dependencies = [
{ name = "requests" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/20/d4/6e1c24823c515683cb6f74bd1dcc3fbe55f60a27743c1694bdc61c5db5d0/posthog-7.16.3.tar.gz", hash = "sha256:ff8972813c836ae4fcb634b499cf06d643bc3c4f49931218fe142e7aa8a39810", size = 226535, upload-time = "2026-06-01T13:24:07.781Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/fe/af/10ba67866a1246e608fccf0d186c63b55054feb66c0fc9d77be458aac9c0/posthog-7.16.4.tar.gz", hash = "sha256:a2baa6595c7089865350826932867ed31355e27307ae4774bc88d42536678848", size = 228616, upload-time = "2026-06-03T13:12:16.006Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f9/0b/562afe6f037ab3dde06d2bbe33f1de9f8516ac22f882ad263e4e0bfb665b/posthog-7.16.3-py3-none-any.whl", hash = "sha256:f0cbaf25ac06211b87c0a43500673fa2d8de86eb1edb75b8bf688f1b884878ce", size = 264300, upload-time = "2026-06-01T13:24:06.074Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/b2/4c9659e06074b473216dc69360fcf7ddba9134e622d16ef10bb45da5cc91/posthog-7.16.4-py3-none-any.whl", hash = "sha256:92ede0237aafb7b90cdb730dacf828cf915676366a69522a76d300fa580f0da0", size = 267073, upload-time = "2026-06-03T13:12:14.415Z" },
]
[[package]]
@@ -2721,6 +2751,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" },
]
+[[package]]
+name = "truststore"
+version = "0.10.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e8102c22482f6060c7a6ea0322b63e026372e6dcefcfd6/truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301", size = 26169, upload-time = "2025-08-12T18:49:02.73Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" },
+]
+
[[package]]
name = "twilio"
version = "9.10.9"
diff --git a/clients/python/agenta_client/__init__.py b/clients/python/agenta_client/__init__.py
index 546e96673c..9500a326f9 100644
--- a/clients/python/agenta_client/__init__.py
+++ b/clients/python/agenta_client/__init__.py
@@ -5,7 +5,7 @@
import typing
from importlib import import_module
if typing.TYPE_CHECKING:
- from .types import AdminAccountCreateOptions, AdminAccountRead, AdminAccountsCreate, AdminAccountsDelete, AdminAccountsDeleteTarget, AdminAccountsResponse, AdminApiKeyCreate, AdminApiKeyResponse, AdminDeleteResponse, AdminDeletedEntities, AdminDeletedEntity, AdminOrganizationCreate, AdminOrganizationMembershipCreate, AdminOrganizationMembershipRead, AdminOrganizationRead, AdminProjectCreate, AdminProjectMembershipCreate, AdminProjectMembershipRead, AdminProjectRead, AdminSimpleAccountCreate, AdminSimpleAccountDeleteEntry, AdminSimpleAccountRead, AdminSimpleAccountsApiKeysCreate, AdminSimpleAccountsCreate, AdminSimpleAccountsDelete, AdminSimpleAccountsOrganizationsCreate, AdminSimpleAccountsOrganizationsMembershipsCreate, AdminSimpleAccountsOrganizationsTransferOwnership, AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjects, AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjectsZero, AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspaces, AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspacesZero, AdminSimpleAccountsOrganizationsTransferOwnershipResponse, AdminSimpleAccountsProjectsCreate, AdminSimpleAccountsProjectsMembershipsCreate, AdminSimpleAccountsResponse, AdminSimpleAccountsUsersCreate, AdminSimpleAccountsUsersIdentitiesCreate, AdminSimpleAccountsUsersResetPassword, AdminSimpleAccountsWorkspacesCreate, AdminSimpleAccountsWorkspacesMembershipsCreate, AdminStructuredError, AdminSubscriptionCreate, AdminSubscriptionRead, AdminUserCreate, AdminUserIdentityCreate, AdminUserIdentityRead, AdminUserIdentityReadStatus, AdminUserRead, AdminWorkspaceCreate, AdminWorkspaceMembershipCreate, AdminWorkspaceMembershipRead, AdminWorkspaceRead, Analytics, AnalyticsResponse, Annotation, AnnotationCreate, AnnotationCreateLinks, AnnotationEdit, AnnotationEditLinks, AnnotationLinkResponse, AnnotationLinks, AnnotationQuery, AnnotationQueryLinks, AnnotationResponse, AnnotationsResponse, Application, ApplicationArtifactFlags, ApplicationArtifactQueryFlags, ApplicationCatalogPreset, ApplicationCatalogPresetResponse, ApplicationCatalogPresetsResponse, ApplicationCatalogTemplate, ApplicationCatalogTemplateResponse, ApplicationCatalogTemplatesResponse, ApplicationCatalogType, ApplicationCatalogTypesResponse, ApplicationCreate, ApplicationEdit, ApplicationFlags, ApplicationFork, ApplicationQuery, ApplicationResponse, ApplicationRevision, ApplicationRevisionCommit, ApplicationRevisionCreate, ApplicationRevisionDataInput, ApplicationRevisionDataInputHeadersValue, ApplicationRevisionDataInputRuntime, ApplicationRevisionDataOutput, ApplicationRevisionDataOutputHeadersValue, ApplicationRevisionDataOutputRuntime, ApplicationRevisionEdit, ApplicationRevisionFlags, ApplicationRevisionFork, ApplicationRevisionQuery, ApplicationRevisionQueryFlags, ApplicationRevisionResolveResponse, ApplicationRevisionResponse, ApplicationRevisionsLog, ApplicationRevisionsResponse, ApplicationVariant, ApplicationVariantCreate, ApplicationVariantEdit, ApplicationVariantFlags, ApplicationVariantFork, ApplicationVariantResponse, ApplicationVariantsResponse, ApplicationsResponse, BodyConfigsFetchVariantsConfigsFetchPost, Bucket, CollectStatusResponse, ComparisonOperator, Condition, ConditionOperator, ConditionOptions, ConditionValue, ConfigResponseModel, CustomModelSettingsDto, CustomProviderDto, CustomProviderKind, CustomProviderSettingsDto, DictOperator, DiscoverResponse, DiscoverResponseMethodsValue, EeSrcModelsApiOrganizationModelsOrganization, EntityRef, Environment, EnvironmentCreate, EnvironmentEdit, EnvironmentFlags, EnvironmentQueryFlags, EnvironmentResponse, EnvironmentRevision, EnvironmentRevisionCommit, EnvironmentRevisionCreate, EnvironmentRevisionData, EnvironmentRevisionDelta, EnvironmentRevisionEdit, EnvironmentRevisionResolveResponse, EnvironmentRevisionResponse, EnvironmentRevisionsLog, EnvironmentRevisionsResponse, EnvironmentVariant, EnvironmentVariantCreate, EnvironmentVariantEdit, EnvironmentVariantResponse, EnvironmentVariantsResponse, EnvironmentsResponse, ErrorPolicy, EvaluationMetrics, EvaluationMetricsCreate, EvaluationMetricsEdit, EvaluationMetricsIdsResponse, EvaluationMetricsQuery, EvaluationMetricsQueryScenarioIds, EvaluationMetricsQueryTimestamps, EvaluationMetricsRefresh, EvaluationMetricsResponse, EvaluationQueue, EvaluationQueueCreate, EvaluationQueueData, EvaluationQueueEdit, EvaluationQueueFlags, EvaluationQueueIdResponse, EvaluationQueueIdsResponse, EvaluationQueueQuery, EvaluationQueueQueryFlags, EvaluationQueueResponse, EvaluationQueueScenariosQuery, EvaluationQueuesResponse, EvaluationResult, EvaluationResultCreate, EvaluationResultEdit, EvaluationResultIdResponse, EvaluationResultIdsResponse, EvaluationResultQuery, EvaluationResultResponse, EvaluationResultsResponse, EvaluationRun, EvaluationRunCreate, EvaluationRunData, EvaluationRunDataMapping, EvaluationRunDataMappingColumn, EvaluationRunDataMappingStep, EvaluationRunDataStep, EvaluationRunDataStepInput, EvaluationRunDataStepOrigin, EvaluationRunDataStepType, EvaluationRunEdit, EvaluationRunFlags, EvaluationRunIdResponse, EvaluationRunIdsRequest, EvaluationRunIdsResponse, EvaluationRunQuery, EvaluationRunQueryFlags, EvaluationRunResponse, EvaluationRunsResponse, EvaluationScenario, EvaluationScenarioCreate, EvaluationScenarioEdit, EvaluationScenarioIdResponse, EvaluationScenarioIdsResponse, EvaluationScenarioQuery, EvaluationScenarioResponse, EvaluationScenariosResponse, EvaluationStatus, Evaluator, EvaluatorArtifactFlags, EvaluatorArtifactQueryFlags, EvaluatorCatalogPreset, EvaluatorCatalogPresetResponse, EvaluatorCatalogPresetsResponse, EvaluatorCatalogTemplate, EvaluatorCatalogTemplateResponse, EvaluatorCatalogTemplatesResponse, EvaluatorCatalogType, EvaluatorCatalogTypesResponse, EvaluatorCreate, EvaluatorEdit, EvaluatorFlags, EvaluatorFork, EvaluatorQuery, EvaluatorResponse, EvaluatorRevision, EvaluatorRevisionCommit, EvaluatorRevisionCreate, EvaluatorRevisionDataInput, EvaluatorRevisionDataInputHeadersValue, EvaluatorRevisionDataInputRuntime, EvaluatorRevisionDataOutput, EvaluatorRevisionDataOutputHeadersValue, EvaluatorRevisionDataOutputRuntime, EvaluatorRevisionEdit, EvaluatorRevisionFlags, EvaluatorRevisionFork, EvaluatorRevisionQuery, EvaluatorRevisionQueryFlags, EvaluatorRevisionResolveResponse, EvaluatorRevisionResponse, EvaluatorRevisionsLog, EvaluatorRevisionsResponse, EvaluatorTemplate, EvaluatorTemplatesResponse, EvaluatorVariant, EvaluatorVariantCreate, EvaluatorVariantEdit, EvaluatorVariantFlags, EvaluatorVariantFork, EvaluatorVariantResponse, EvaluatorVariantsResponse, EvaluatorsResponse, Event, EventQuery, EventType, EventsQueryResponse, ExistenceOperator, FilteringInput, FilteringInputConditionsItem, FilteringOutput, FilteringOutputConditionsItem, Focus, Folder, FolderCreate, FolderEdit, FolderIdResponse, FolderKind, FolderQuery, FolderQueryKinds, FolderResponse, FoldersResponse, Format, Formatting, FullJsonInput, FullJsonOutput, Header, HttpValidationError, InviteRequest, Invocation, InvocationCreate, InvocationCreateLinks, InvocationEdit, InvocationEditLinks, InvocationLinkResponse, InvocationLinks, InvocationQuery, InvocationQueryLinks, InvocationResponse, InvocationsResponse, JsonSchemasInput, JsonSchemasOutput, LabelJsonInput, LabelJsonOutput, LegacyLifecycleDto, ListApiKeysResponse, ListOperator, ListOptions, LogicalOperator, MetricSpec, MetricType, MetricsBucket, NumericOperator, OTelEventInput, OTelEventInputTimestamp, OTelEventOutput, OTelEventOutputTimestamp, OTelHashInput, OTelHashOutput, OTelLinkInput, OTelLinkOutput, OTelLinksResponse, OTelReferenceInput, OTelReferenceOutput, OTelSpanKind, OTelStatusCode, OTelTracingRequest, OTelTracingResponse, OldAnalyticsResponse, OrganizationDetails, OrganizationDomainResponse, OrganizationProviderResponse, OrganizationUpdate, OssSrcModelsApiOrganizationModelsOrganization, Permission, ProjectsResponse, QueriesResponse, Query, QueryCreate, QueryEdit, QueryFlags, QueryQueryFlags, QueryResponse, QueryRevision, QueryRevisionCommit, QueryRevisionCreate, QueryRevisionDataInput, QueryRevisionDataOutput, QueryRevisionEdit, QueryRevisionQuery, QueryRevisionResponse, QueryRevisionsLog, QueryRevisionsResponse, QueryVariant, QueryVariantCreate, QueryVariantEdit, QueryVariantQuery, QueryVariantResponse, QueryVariantsResponse, Reference, ReferenceRequestModelInput, ReferenceRequestModelOutput, RequestType, ResolutionInfo, RetrievalInfo, RevisionFork, SecretDto, SecretDtoData, SecretKind, SecretResponseDto, SecretResponseDtoData, SessionIdsResponse, SimpleApplication, SimpleApplicationCreate, SimpleApplicationDataInput, SimpleApplicationDataInputHeadersValue, SimpleApplicationDataInputRuntime, SimpleApplicationDataOutput, SimpleApplicationDataOutputHeadersValue, SimpleApplicationDataOutputRuntime, SimpleApplicationEdit, SimpleApplicationFlags, SimpleApplicationQuery, SimpleApplicationQueryFlags, SimpleApplicationResponse, SimpleApplicationsResponse, SimpleEnvironment, SimpleEnvironmentCreate, SimpleEnvironmentEdit, SimpleEnvironmentQuery, SimpleEnvironmentResponse, SimpleEnvironmentsResponse, SimpleEvaluation, SimpleEvaluationCreate, SimpleEvaluationData, SimpleEvaluationDataApplicationSteps, SimpleEvaluationDataApplicationStepsOneValue, SimpleEvaluationDataEvaluatorSteps, SimpleEvaluationDataEvaluatorStepsOneValue, SimpleEvaluationDataQuerySteps, SimpleEvaluationDataQueryStepsOneValue, SimpleEvaluationDataTestsetSteps, SimpleEvaluationDataTestsetStepsOneValue, SimpleEvaluationEdit, SimpleEvaluationIdResponse, SimpleEvaluationQuery, SimpleEvaluationResponse, SimpleEvaluationsResponse, SimpleEvaluator, SimpleEvaluatorCreate, SimpleEvaluatorDataInput, SimpleEvaluatorDataInputHeadersValue, SimpleEvaluatorDataInputRuntime, SimpleEvaluatorDataOutput, SimpleEvaluatorDataOutputHeadersValue, SimpleEvaluatorDataOutputRuntime, SimpleEvaluatorEdit, SimpleEvaluatorFlags, SimpleEvaluatorQuery, SimpleEvaluatorQueryFlags, SimpleEvaluatorResponse, SimpleEvaluatorsResponse, SimpleQueriesResponse, SimpleQuery, SimpleQueryCreate, SimpleQueryEdit, SimpleQueryQuery, SimpleQueryResponse, SimpleQueue, SimpleQueueCreate, SimpleQueueData, SimpleQueueDataEvaluators, SimpleQueueDataEvaluatorsOneValue, SimpleQueueIdResponse, SimpleQueueKind, SimpleQueueQuery, SimpleQueueResponse, SimpleQueueScenariosQuery, SimpleQueueScenariosResponse, SimpleQueueSettings, SimpleQueuesResponse, SimpleTestset, SimpleTestsetCreate, SimpleTestsetEdit, SimpleTestsetQuery, SimpleTestsetResponse, SimpleTestsetsResponse, SimpleTrace, SimpleTraceChannel, SimpleTraceCreate, SimpleTraceCreateLinks, SimpleTraceEdit, SimpleTraceEditLinks, SimpleTraceKind, SimpleTraceLinkResponse, SimpleTraceLinks, SimpleTraceOrigin, SimpleTraceQuery, SimpleTraceQueryLinks, SimpleTraceReferences, SimpleTraceResponse, SimpleTracesResponse, SimpleWorkflow, SimpleWorkflowCreate, SimpleWorkflowDataInput, SimpleWorkflowDataInputHeadersValue, SimpleWorkflowDataInputRuntime, SimpleWorkflowDataOutput, SimpleWorkflowDataOutputHeadersValue, SimpleWorkflowDataOutputRuntime, SimpleWorkflowEdit, SimpleWorkflowFlags, SimpleWorkflowQuery, SimpleWorkflowQueryFlags, SimpleWorkflowResponse, SimpleWorkflowsResponse, SpanInput, SpanInputEndTime, SpanInputStartTime, SpanOutput, SpanOutputEndTime, SpanOutputStartTime, SpanResponse, SpanType, SpansNodeInput, SpansNodeInputEndTime, SpansNodeInputSpansValue, SpansNodeInputStartTime, SpansNodeOutput, SpansNodeOutputEndTime, SpansNodeOutputSpansValue, SpansNodeOutputStartTime, SpansResponse, SpansTreeInput, SpansTreeInputSpansValue, SpansTreeOutput, SpansTreeOutputSpansValue, SsoProviderDto, SsoProviderInfo, SsoProviderSettingsDto, SsoProviders, StandardProviderDto, StandardProviderKind, StandardProviderSettingsDto, Status, StringOperator, TestcaseInput, TestcaseOutput, TestcaseResponse, TestcasesResponse, Testset, TestsetCreate, TestsetEdit, TestsetFlags, TestsetQuery, TestsetResponse, TestsetRevision, TestsetRevisionCommit, TestsetRevisionCreate, TestsetRevisionDataInput, TestsetRevisionDataOutput, TestsetRevisionDelta, TestsetRevisionDeltaColumns, TestsetRevisionDeltaRows, TestsetRevisionEdit, TestsetRevisionQuery, TestsetRevisionResponse, TestsetRevisionsLog, TestsetRevisionsResponse, TestsetVariant, TestsetVariantCreate, TestsetVariantEdit, TestsetVariantQuery, TestsetVariantResponse, TestsetVariantsResponse, TestsetsResponse, TextOptions, ToolAuthScheme, ToolCallData, ToolCallFunction, ToolCallResponse, ToolCatalogAction, ToolCatalogActionDetails, ToolCatalogActionResponse, ToolCatalogActionResponseAction, ToolCatalogActionsResponse, ToolCatalogActionsResponseActionsItem, ToolCatalogIntegration, ToolCatalogIntegrationDetails, ToolCatalogIntegrationResponse, ToolCatalogIntegrationResponseIntegration, ToolCatalogIntegrationsResponse, ToolCatalogIntegrationsResponseIntegrationsItem, ToolCatalogProvider, ToolCatalogProviderDetails, ToolCatalogProviderResponse, ToolCatalogProviderResponseProvider, ToolCatalogProvidersResponse, ToolCatalogProvidersResponseProvidersItem, ToolConnection, ToolConnectionCreate, ToolConnectionCreateData, ToolConnectionResponse, ToolConnectionStatus, ToolConnectionsResponse, ToolProviderKind, ToolResult, ToolResultData, TraceIdResponse, TraceIdsResponse, TraceInput, TraceInputSpansValue, TraceOutput, TraceOutputSpansValue, TraceRequest, TraceResponse, TraceType, TracesRequest, TracesResponse, TracingQuery, UserIdsResponse, ValidationError, ValidationErrorLocItem, VariantFork, WebhookDeliveriesResponse, WebhookDelivery, WebhookDeliveryCreate, WebhookDeliveryData, WebhookDeliveryQuery, WebhookDeliveryResponse, WebhookDeliveryResponseInfo, WebhookEventType, WebhookProviderDto, WebhookProviderSettingsDto, WebhookSubscription, WebhookSubscriptionCreate, WebhookSubscriptionData, WebhookSubscriptionDataAuthMode, WebhookSubscriptionEdit, WebhookSubscriptionQuery, WebhookSubscriptionResponse, WebhookSubscriptionsResponse, Windowing, WindowingOrder, Workflow, WorkflowArtifactFlags, WorkflowCatalogFlags, WorkflowCatalogPreset, WorkflowCatalogPresetResponse, WorkflowCatalogPresetsResponse, WorkflowCatalogTemplate, WorkflowCatalogTemplateResponse, WorkflowCatalogTemplatesResponse, WorkflowCatalogType, WorkflowCatalogTypeResponse, WorkflowCatalogTypesResponse, WorkflowCreate, WorkflowEdit, WorkflowFlags, WorkflowFork, WorkflowResponse, WorkflowRevisionCommit, WorkflowRevisionCreate, WorkflowRevisionDataInput, WorkflowRevisionDataInputHeadersValue, WorkflowRevisionDataInputRuntime, WorkflowRevisionDataOutput, WorkflowRevisionDataOutputHeadersValue, WorkflowRevisionDataOutputRuntime, WorkflowRevisionEdit, WorkflowRevisionFlags, WorkflowRevisionFork, WorkflowRevisionInput, WorkflowRevisionOutput, WorkflowRevisionResolveResponse, WorkflowRevisionResponse, WorkflowRevisionsLog, WorkflowRevisionsResponse, WorkflowVariant, WorkflowVariantCreate, WorkflowVariantEdit, WorkflowVariantFlags, WorkflowVariantFork, WorkflowVariantResponse, WorkflowVariantsResponse, WorkflowsResponse, Workspace, WorkspaceMemberResponse, WorkspacePermission, WorkspaceResponse
+ from .types import AdminAccountCreateOptions, AdminAccountRead, AdminAccountsCreate, AdminAccountsDelete, AdminAccountsDeleteTarget, AdminAccountsResponse, AdminApiKeyCreate, AdminApiKeyResponse, AdminDeleteResponse, AdminDeletedEntities, AdminDeletedEntity, AdminOrganizationCreate, AdminOrganizationMembershipCreate, AdminOrganizationMembershipRead, AdminOrganizationRead, AdminProjectCreate, AdminProjectMembershipCreate, AdminProjectMembershipRead, AdminProjectRead, AdminSimpleAccountCreate, AdminSimpleAccountDeleteEntry, AdminSimpleAccountRead, AdminSimpleAccountsApiKeysCreate, AdminSimpleAccountsCreate, AdminSimpleAccountsDelete, AdminSimpleAccountsOrganizationsCreate, AdminSimpleAccountsOrganizationsMembershipsCreate, AdminSimpleAccountsOrganizationsTransferOwnership, AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjects, AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjectsZero, AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspaces, AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspacesZero, AdminSimpleAccountsOrganizationsTransferOwnershipResponse, AdminSimpleAccountsProjectsCreate, AdminSimpleAccountsProjectsMembershipsCreate, AdminSimpleAccountsResponse, AdminSimpleAccountsUsersCreate, AdminSimpleAccountsUsersIdentitiesCreate, AdminSimpleAccountsUsersResetPassword, AdminSimpleAccountsWorkspacesCreate, AdminSimpleAccountsWorkspacesMembershipsCreate, AdminStructuredError, AdminSubscriptionCreate, AdminSubscriptionRead, AdminUserCreate, AdminUserIdentityCreate, AdminUserIdentityRead, AdminUserIdentityReadStatus, AdminUserRead, AdminWorkspaceCreate, AdminWorkspaceMembershipCreate, AdminWorkspaceMembershipRead, AdminWorkspaceRead, Analytics, AnalyticsResponse, Annotation, AnnotationCreate, AnnotationCreateLinks, AnnotationEdit, AnnotationEditLinks, AnnotationLinkResponse, AnnotationLinks, AnnotationQuery, AnnotationQueryLinks, AnnotationResponse, AnnotationsResponse, Application, ApplicationArtifactFlags, ApplicationArtifactQueryFlags, ApplicationCatalogPreset, ApplicationCatalogPresetResponse, ApplicationCatalogPresetsResponse, ApplicationCatalogTemplate, ApplicationCatalogTemplateResponse, ApplicationCatalogTemplatesResponse, ApplicationCatalogType, ApplicationCatalogTypesResponse, ApplicationCreate, ApplicationEdit, ApplicationFlags, ApplicationFork, ApplicationQuery, ApplicationResponse, ApplicationRevision, ApplicationRevisionCommit, ApplicationRevisionCreate, ApplicationRevisionDataInput, ApplicationRevisionDataInputHeadersValue, ApplicationRevisionDataInputRuntime, ApplicationRevisionDataOutput, ApplicationRevisionDataOutputHeadersValue, ApplicationRevisionDataOutputRuntime, ApplicationRevisionEdit, ApplicationRevisionFlags, ApplicationRevisionFork, ApplicationRevisionQuery, ApplicationRevisionQueryFlags, ApplicationRevisionResolveResponse, ApplicationRevisionResponse, ApplicationRevisionsLog, ApplicationRevisionsResponse, ApplicationVariant, ApplicationVariantCreate, ApplicationVariantEdit, ApplicationVariantFlags, ApplicationVariantFork, ApplicationVariantResponse, ApplicationVariantsResponse, ApplicationsResponse, BodyConfigsFetchVariantsConfigsFetchPost, Bucket, CollectStatusResponse, ComparisonOperator, Condition, ConditionOperator, ConditionOptions, ConditionValue, ConfigResponseModel, CustomModelSettingsDto, CustomProviderDto, CustomProviderKind, CustomProviderSettingsDto, DictOperator, DiscoverResponse, DiscoverResponseMethodsValue, EeSrcModelsApiOrganizationModelsOrganization, EntityRef, Environment, EnvironmentCreate, EnvironmentEdit, EnvironmentFlags, EnvironmentQueryFlags, EnvironmentResponse, EnvironmentRevision, EnvironmentRevisionCommit, EnvironmentRevisionCreate, EnvironmentRevisionData, EnvironmentRevisionDelta, EnvironmentRevisionEdit, EnvironmentRevisionResolveResponse, EnvironmentRevisionResponse, EnvironmentRevisionsLog, EnvironmentRevisionsResponse, EnvironmentVariant, EnvironmentVariantCreate, EnvironmentVariantEdit, EnvironmentVariantResponse, EnvironmentVariantsResponse, EnvironmentsResponse, ErrorPolicy, EvaluationMetrics, EvaluationMetricsCreate, EvaluationMetricsIdsResponse, EvaluationMetricsQuery, EvaluationMetricsQueryScenarioIds, EvaluationMetricsQueryTimestamps, EvaluationMetricsRefresh, EvaluationMetricsResponse, EvaluationQueue, EvaluationQueueCreate, EvaluationQueueData, EvaluationQueueEdit, EvaluationQueueFlags, EvaluationQueueIdResponse, EvaluationQueueIdsResponse, EvaluationQueueQuery, EvaluationQueueQueryFlags, EvaluationQueueResponse, EvaluationQueueScenariosQuery, EvaluationQueuesResponse, EvaluationResult, EvaluationResultCreate, EvaluationResultIdResponse, EvaluationResultIdsResponse, EvaluationResultQuery, EvaluationResultResponse, EvaluationResultsResponse, EvaluationRun, EvaluationRunCreate, EvaluationRunData, EvaluationRunDataConcurrency, EvaluationRunDataMapping, EvaluationRunDataMappingColumn, EvaluationRunDataMappingStep, EvaluationRunDataStep, EvaluationRunDataStepInput, EvaluationRunDataStepOrigin, EvaluationRunDataStepType, EvaluationRunEdit, EvaluationRunFlags, EvaluationRunIdResponse, EvaluationRunIdsRequest, EvaluationRunIdsResponse, EvaluationRunQuery, EvaluationRunQueryFlags, EvaluationRunResponse, EvaluationRunsResponse, EvaluationScenario, EvaluationScenarioCreate, EvaluationScenarioEdit, EvaluationScenarioIdResponse, EvaluationScenarioIdsResponse, EvaluationScenarioQuery, EvaluationScenarioResponse, EvaluationScenariosResponse, EvaluationStatus, Evaluator, EvaluatorArtifactFlags, EvaluatorArtifactQueryFlags, EvaluatorCatalogPreset, EvaluatorCatalogPresetResponse, EvaluatorCatalogPresetsResponse, EvaluatorCatalogTemplate, EvaluatorCatalogTemplateResponse, EvaluatorCatalogTemplatesResponse, EvaluatorCatalogType, EvaluatorCatalogTypesResponse, EvaluatorCreate, EvaluatorEdit, EvaluatorFlags, EvaluatorFork, EvaluatorQuery, EvaluatorResponse, EvaluatorRevision, EvaluatorRevisionCommit, EvaluatorRevisionCreate, EvaluatorRevisionDataInput, EvaluatorRevisionDataInputHeadersValue, EvaluatorRevisionDataInputRuntime, EvaluatorRevisionDataOutput, EvaluatorRevisionDataOutputHeadersValue, EvaluatorRevisionDataOutputRuntime, EvaluatorRevisionEdit, EvaluatorRevisionFlags, EvaluatorRevisionFork, EvaluatorRevisionQuery, EvaluatorRevisionQueryFlags, EvaluatorRevisionResolveResponse, EvaluatorRevisionResponse, EvaluatorRevisionsLog, EvaluatorRevisionsResponse, EvaluatorTemplate, EvaluatorTemplatesResponse, EvaluatorVariant, EvaluatorVariantCreate, EvaluatorVariantEdit, EvaluatorVariantFlags, EvaluatorVariantFork, EvaluatorVariantResponse, EvaluatorVariantsResponse, EvaluatorsResponse, Event, EventQuery, EventType, EventsQueryResponse, ExistenceOperator, FilteringInput, FilteringInputConditionsItem, FilteringOutput, FilteringOutputConditionsItem, Focus, Folder, FolderCreate, FolderEdit, FolderIdResponse, FolderKind, FolderQuery, FolderQueryKinds, FolderResponse, FoldersResponse, Format, Formatting, FullJsonInput, FullJsonOutput, Header, HttpValidationError, InviteRequest, Invocation, InvocationCreate, InvocationCreateLinks, InvocationEdit, InvocationEditLinks, InvocationLinkResponse, InvocationLinks, InvocationQuery, InvocationQueryLinks, InvocationResponse, InvocationsResponse, JsonSchemasInput, JsonSchemasOutput, LabelJsonInput, LabelJsonOutput, LegacyLifecycleDto, ListApiKeysResponse, ListOperator, ListOptions, LogicalOperator, MetricSpec, MetricType, MetricsBucket, NumericOperator, OTelEventInput, OTelEventInputTimestamp, OTelEventOutput, OTelEventOutputTimestamp, OTelHashInput, OTelHashOutput, OTelLinkInput, OTelLinkOutput, OTelLinksResponse, OTelReferenceInput, OTelReferenceOutput, OTelSpanKind, OTelStatusCode, OTelTracingRequest, OTelTracingResponse, OldAnalyticsResponse, OrganizationDetails, OrganizationDomainResponse, OrganizationProviderResponse, OrganizationUpdate, OssSrcModelsApiOrganizationModelsOrganization, Permission, ProjectsResponse, QueriesResponse, Query, QueryCreate, QueryEdit, QueryFlags, QueryQueryFlags, QueryResponse, QueryRevision, QueryRevisionCommit, QueryRevisionCreate, QueryRevisionDataInput, QueryRevisionDataOutput, QueryRevisionEdit, QueryRevisionQuery, QueryRevisionResponse, QueryRevisionsLog, QueryRevisionsResponse, QueryVariant, QueryVariantCreate, QueryVariantEdit, QueryVariantQuery, QueryVariantResponse, QueryVariantsResponse, Reference, ReferenceRequestModelInput, ReferenceRequestModelOutput, RequestType, ResolutionInfo, RetrievalInfo, RevisionFork, SecretDto, SecretDtoData, SecretKind, SecretResponseDto, SecretResponseDtoData, SessionIdsResponse, SimpleApplication, SimpleApplicationCreate, SimpleApplicationDataInput, SimpleApplicationDataInputHeadersValue, SimpleApplicationDataInputRuntime, SimpleApplicationDataOutput, SimpleApplicationDataOutputHeadersValue, SimpleApplicationDataOutputRuntime, SimpleApplicationEdit, SimpleApplicationFlags, SimpleApplicationQuery, SimpleApplicationQueryFlags, SimpleApplicationResponse, SimpleApplicationsResponse, SimpleEnvironment, SimpleEnvironmentCreate, SimpleEnvironmentEdit, SimpleEnvironmentQuery, SimpleEnvironmentResponse, SimpleEnvironmentsResponse, SimpleEvaluation, SimpleEvaluationCreate, SimpleEvaluationData, SimpleEvaluationDataApplicationSteps, SimpleEvaluationDataApplicationStepsOneValue, SimpleEvaluationDataEvaluatorSteps, SimpleEvaluationDataEvaluatorStepsOneValue, SimpleEvaluationDataQuerySteps, SimpleEvaluationDataQueryStepsOneValue, SimpleEvaluationDataTestsetSteps, SimpleEvaluationDataTestsetStepsOneValue, SimpleEvaluationEdit, SimpleEvaluationIdResponse, SimpleEvaluationQuery, SimpleEvaluationResponse, SimpleEvaluationsResponse, SimpleEvaluator, SimpleEvaluatorCreate, SimpleEvaluatorDataInput, SimpleEvaluatorDataInputHeadersValue, SimpleEvaluatorDataInputRuntime, SimpleEvaluatorDataOutput, SimpleEvaluatorDataOutputHeadersValue, SimpleEvaluatorDataOutputRuntime, SimpleEvaluatorEdit, SimpleEvaluatorFlags, SimpleEvaluatorQuery, SimpleEvaluatorQueryFlags, SimpleEvaluatorResponse, SimpleEvaluatorsResponse, SimpleQueriesResponse, SimpleQuery, SimpleQueryCreate, SimpleQueryEdit, SimpleQueryQuery, SimpleQueryResponse, SimpleQueue, SimpleQueueCreate, SimpleQueueData, SimpleQueueDataEvaluators, SimpleQueueDataEvaluatorsOneValue, SimpleQueueIdResponse, SimpleQueueKind, SimpleQueueQuery, SimpleQueueResponse, SimpleQueueScenariosQuery, SimpleQueueScenariosResponse, SimpleQueueSettings, SimpleQueuesResponse, SimpleTestset, SimpleTestsetCreate, SimpleTestsetEdit, SimpleTestsetQuery, SimpleTestsetResponse, SimpleTestsetsResponse, SimpleTrace, SimpleTraceChannel, SimpleTraceCreate, SimpleTraceCreateLinks, SimpleTraceEdit, SimpleTraceEditLinks, SimpleTraceKind, SimpleTraceLinkResponse, SimpleTraceLinks, SimpleTraceOrigin, SimpleTraceQuery, SimpleTraceQueryLinks, SimpleTraceReferences, SimpleTraceResponse, SimpleTracesResponse, SimpleWorkflow, SimpleWorkflowCreate, SimpleWorkflowDataInput, SimpleWorkflowDataInputHeadersValue, SimpleWorkflowDataInputRuntime, SimpleWorkflowDataOutput, SimpleWorkflowDataOutputHeadersValue, SimpleWorkflowDataOutputRuntime, SimpleWorkflowEdit, SimpleWorkflowFlags, SimpleWorkflowQuery, SimpleWorkflowQueryFlags, SimpleWorkflowResponse, SimpleWorkflowsResponse, SpanInput, SpanInputEndTime, SpanInputStartTime, SpanOutput, SpanOutputEndTime, SpanOutputStartTime, SpanResponse, SpanType, SpansNodeInput, SpansNodeInputEndTime, SpansNodeInputSpansValue, SpansNodeInputStartTime, SpansNodeOutput, SpansNodeOutputEndTime, SpansNodeOutputSpansValue, SpansNodeOutputStartTime, SpansResponse, SpansTreeInput, SpansTreeInputSpansValue, SpansTreeOutput, SpansTreeOutputSpansValue, SsoProviderDto, SsoProviderInfo, SsoProviderSettingsDto, SsoProviders, StandardProviderDto, StandardProviderKind, StandardProviderSettingsDto, Status, StringOperator, TestcaseInput, TestcaseOutput, TestcaseResponse, TestcasesResponse, Testset, TestsetCreate, TestsetEdit, TestsetFlags, TestsetQuery, TestsetResponse, TestsetRevision, TestsetRevisionCommit, TestsetRevisionCreate, TestsetRevisionDataInput, TestsetRevisionDataOutput, TestsetRevisionDelta, TestsetRevisionDeltaColumns, TestsetRevisionDeltaRows, TestsetRevisionEdit, TestsetRevisionQuery, TestsetRevisionResponse, TestsetRevisionsLog, TestsetRevisionsResponse, TestsetVariant, TestsetVariantCreate, TestsetVariantEdit, TestsetVariantQuery, TestsetVariantResponse, TestsetVariantsResponse, TestsetsResponse, TextOptions, ToolAuthScheme, ToolCallData, ToolCallFunction, ToolCallResponse, ToolCatalogAction, ToolCatalogActionDetails, ToolCatalogActionResponse, ToolCatalogActionResponseAction, ToolCatalogActionsResponse, ToolCatalogActionsResponseActionsItem, ToolCatalogIntegration, ToolCatalogIntegrationDetails, ToolCatalogIntegrationResponse, ToolCatalogIntegrationResponseIntegration, ToolCatalogIntegrationsResponse, ToolCatalogIntegrationsResponseIntegrationsItem, ToolCatalogProvider, ToolCatalogProviderDetails, ToolCatalogProviderResponse, ToolCatalogProviderResponseProvider, ToolCatalogProvidersResponse, ToolCatalogProvidersResponseProvidersItem, ToolConnection, ToolConnectionCreate, ToolConnectionCreateData, ToolConnectionResponse, ToolConnectionStatus, ToolConnectionsResponse, ToolProviderKind, ToolResult, ToolResultData, TraceIdResponse, TraceIdsResponse, TraceInput, TraceInputSpansValue, TraceOutput, TraceOutputSpansValue, TraceRequest, TraceResponse, TraceType, TracesRequest, TracesResponse, TracingQuery, UserIdsResponse, ValidationError, ValidationErrorLocItem, VariantFork, WebhookDeliveriesResponse, WebhookDelivery, WebhookDeliveryCreate, WebhookDeliveryData, WebhookDeliveryQuery, WebhookDeliveryResponse, WebhookDeliveryResponseInfo, WebhookEventType, WebhookProviderDto, WebhookProviderSettingsDto, WebhookSubscription, WebhookSubscriptionCreate, WebhookSubscriptionData, WebhookSubscriptionDataAuthMode, WebhookSubscriptionEdit, WebhookSubscriptionQuery, WebhookSubscriptionResponse, WebhookSubscriptionsResponse, Windowing, WindowingOrder, Workflow, WorkflowArtifactFlags, WorkflowCatalogFlags, WorkflowCatalogPreset, WorkflowCatalogPresetResponse, WorkflowCatalogPresetsResponse, WorkflowCatalogTemplate, WorkflowCatalogTemplateResponse, WorkflowCatalogTemplatesResponse, WorkflowCatalogType, WorkflowCatalogTypeResponse, WorkflowCatalogTypesResponse, WorkflowCreate, WorkflowEdit, WorkflowFlags, WorkflowFork, WorkflowResponse, WorkflowRevisionCommit, WorkflowRevisionCreate, WorkflowRevisionDataInput, WorkflowRevisionDataInputHeadersValue, WorkflowRevisionDataInputRuntime, WorkflowRevisionDataOutput, WorkflowRevisionDataOutputHeadersValue, WorkflowRevisionDataOutputRuntime, WorkflowRevisionEdit, WorkflowRevisionFlags, WorkflowRevisionFork, WorkflowRevisionInput, WorkflowRevisionOutput, WorkflowRevisionResolveResponse, WorkflowRevisionResponse, WorkflowRevisionsLog, WorkflowRevisionsResponse, WorkflowVariant, WorkflowVariantCreate, WorkflowVariantEdit, WorkflowVariantFlags, WorkflowVariantFork, WorkflowVariantResponse, WorkflowVariantsResponse, WorkflowsResponse, Workspace, WorkspaceMemberResponse, WorkspacePermission, WorkspaceResponse
from .errors import UnprocessableEntityError
from . import access, annotations, applications, billing, environments, evaluations, evaluators, events, folders, invocations, keys, legacy, organizations, projects, queries, secrets, status, testcases, testsets, tools, traces, users, webhooks, workflows, workspaces
from .applications import QueryApplicationVariantsRequestOrder
@@ -19,7 +19,7 @@
from .traces import QuerySpansAnalyticsRequestNewest, QuerySpansAnalyticsRequestOldest
from .webhooks import WebhookSubscriptionTestRequestSubscription
from .workflows import QueryWorkflowRevisionsRequestOrder, QueryWorkflowVariantsRequestOrder, QueryWorkflowsRequestOrder
-_dynamic_imports: typing.Dict[str, str] = {"AdminAccountCreateOptions": ".types", "AdminAccountRead": ".types", "AdminAccountsCreate": ".types", "AdminAccountsDelete": ".types", "AdminAccountsDeleteTarget": ".types", "AdminAccountsResponse": ".types", "AdminApiKeyCreate": ".types", "AdminApiKeyResponse": ".types", "AdminDeleteResponse": ".types", "AdminDeletedEntities": ".types", "AdminDeletedEntity": ".types", "AdminOrganizationCreate": ".types", "AdminOrganizationMembershipCreate": ".types", "AdminOrganizationMembershipRead": ".types", "AdminOrganizationRead": ".types", "AdminProjectCreate": ".types", "AdminProjectMembershipCreate": ".types", "AdminProjectMembershipRead": ".types", "AdminProjectRead": ".types", "AdminSimpleAccountCreate": ".types", "AdminSimpleAccountDeleteEntry": ".types", "AdminSimpleAccountRead": ".types", "AdminSimpleAccountsApiKeysCreate": ".types", "AdminSimpleAccountsCreate": ".types", "AdminSimpleAccountsDelete": ".types", "AdminSimpleAccountsOrganizationsCreate": ".types", "AdminSimpleAccountsOrganizationsMembershipsCreate": ".types", "AdminSimpleAccountsOrganizationsTransferOwnership": ".types", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjects": ".types", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjectsZero": ".types", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspaces": ".types", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspacesZero": ".types", "AdminSimpleAccountsOrganizationsTransferOwnershipResponse": ".types", "AdminSimpleAccountsProjectsCreate": ".types", "AdminSimpleAccountsProjectsMembershipsCreate": ".types", "AdminSimpleAccountsResponse": ".types", "AdminSimpleAccountsUsersCreate": ".types", "AdminSimpleAccountsUsersIdentitiesCreate": ".types", "AdminSimpleAccountsUsersResetPassword": ".types", "AdminSimpleAccountsWorkspacesCreate": ".types", "AdminSimpleAccountsWorkspacesMembershipsCreate": ".types", "AdminStructuredError": ".types", "AdminSubscriptionCreate": ".types", "AdminSubscriptionRead": ".types", "AdminUserCreate": ".types", "AdminUserIdentityCreate": ".types", "AdminUserIdentityRead": ".types", "AdminUserIdentityReadStatus": ".types", "AdminUserRead": ".types", "AdminWorkspaceCreate": ".types", "AdminWorkspaceMembershipCreate": ".types", "AdminWorkspaceMembershipRead": ".types", "AdminWorkspaceRead": ".types", "AgentaApi": ".client", "AgentaApiEnvironment": ".environment", "Analytics": ".types", "AnalyticsResponse": ".types", "Annotation": ".types", "AnnotationCreate": ".types", "AnnotationCreateLinks": ".types", "AnnotationEdit": ".types", "AnnotationEditLinks": ".types", "AnnotationLinkResponse": ".types", "AnnotationLinks": ".types", "AnnotationQuery": ".types", "AnnotationQueryLinks": ".types", "AnnotationResponse": ".types", "AnnotationsResponse": ".types", "Application": ".types", "ApplicationArtifactFlags": ".types", "ApplicationArtifactQueryFlags": ".types", "ApplicationCatalogPreset": ".types", "ApplicationCatalogPresetResponse": ".types", "ApplicationCatalogPresetsResponse": ".types", "ApplicationCatalogTemplate": ".types", "ApplicationCatalogTemplateResponse": ".types", "ApplicationCatalogTemplatesResponse": ".types", "ApplicationCatalogType": ".types", "ApplicationCatalogTypesResponse": ".types", "ApplicationCreate": ".types", "ApplicationEdit": ".types", "ApplicationFlags": ".types", "ApplicationFork": ".types", "ApplicationQuery": ".types", "ApplicationResponse": ".types", "ApplicationRevision": ".types", "ApplicationRevisionCommit": ".types", "ApplicationRevisionCreate": ".types", "ApplicationRevisionDataInput": ".types", "ApplicationRevisionDataInputHeadersValue": ".types", "ApplicationRevisionDataInputRuntime": ".types", "ApplicationRevisionDataOutput": ".types", "ApplicationRevisionDataOutputHeadersValue": ".types", "ApplicationRevisionDataOutputRuntime": ".types", "ApplicationRevisionEdit": ".types", "ApplicationRevisionFlags": ".types", "ApplicationRevisionFork": ".types", "ApplicationRevisionQuery": ".types", "ApplicationRevisionQueryFlags": ".types", "ApplicationRevisionResolveResponse": ".types", "ApplicationRevisionResponse": ".types", "ApplicationRevisionsLog": ".types", "ApplicationRevisionsResponse": ".types", "ApplicationVariant": ".types", "ApplicationVariantCreate": ".types", "ApplicationVariantEdit": ".types", "ApplicationVariantFlags": ".types", "ApplicationVariantFork": ".types", "ApplicationVariantResponse": ".types", "ApplicationVariantsResponse": ".types", "ApplicationsResponse": ".types", "AsyncAgentaApi": ".client", "BodyConfigsFetchVariantsConfigsFetchPost": ".types", "Bucket": ".types", "CollectStatusResponse": ".types", "ComparisonOperator": ".types", "Condition": ".types", "ConditionOperator": ".types", "ConditionOptions": ".types", "ConditionValue": ".types", "ConfigResponseModel": ".types", "CreateSimpleTestsetFromFileRequestFileType": ".testsets", "CreateTestsetRevisionFromFileRequestFileType": ".testsets", "CustomModelSettingsDto": ".types", "CustomProviderDto": ".types", "CustomProviderKind": ".types", "CustomProviderSettingsDto": ".types", "DictOperator": ".types", "DiscoverResponse": ".types", "DiscoverResponseMethodsValue": ".types", "EditSimpleTestsetFromFileRequestFileType": ".testsets", "EeSrcModelsApiOrganizationModelsOrganization": ".types", "EntityRef": ".types", "Environment": ".types", "EnvironmentCreate": ".types", "EnvironmentEdit": ".types", "EnvironmentFlags": ".types", "EnvironmentQueryFlags": ".types", "EnvironmentResponse": ".types", "EnvironmentRevision": ".types", "EnvironmentRevisionCommit": ".types", "EnvironmentRevisionCreate": ".types", "EnvironmentRevisionData": ".types", "EnvironmentRevisionDelta": ".types", "EnvironmentRevisionEdit": ".types", "EnvironmentRevisionResolveResponse": ".types", "EnvironmentRevisionResponse": ".types", "EnvironmentRevisionsLog": ".types", "EnvironmentRevisionsResponse": ".types", "EnvironmentVariant": ".types", "EnvironmentVariantCreate": ".types", "EnvironmentVariantEdit": ".types", "EnvironmentVariantResponse": ".types", "EnvironmentVariantsResponse": ".types", "EnvironmentsResponse": ".types", "ErrorPolicy": ".types", "EvaluationMetrics": ".types", "EvaluationMetricsCreate": ".types", "EvaluationMetricsEdit": ".types", "EvaluationMetricsIdsResponse": ".types", "EvaluationMetricsQuery": ".types", "EvaluationMetricsQueryScenarioIds": ".types", "EvaluationMetricsQueryTimestamps": ".types", "EvaluationMetricsRefresh": ".types", "EvaluationMetricsResponse": ".types", "EvaluationQueue": ".types", "EvaluationQueueCreate": ".types", "EvaluationQueueData": ".types", "EvaluationQueueEdit": ".types", "EvaluationQueueFlags": ".types", "EvaluationQueueIdResponse": ".types", "EvaluationQueueIdsResponse": ".types", "EvaluationQueueQuery": ".types", "EvaluationQueueQueryFlags": ".types", "EvaluationQueueResponse": ".types", "EvaluationQueueScenariosQuery": ".types", "EvaluationQueuesResponse": ".types", "EvaluationResult": ".types", "EvaluationResultCreate": ".types", "EvaluationResultEdit": ".types", "EvaluationResultIdResponse": ".types", "EvaluationResultIdsResponse": ".types", "EvaluationResultQuery": ".types", "EvaluationResultResponse": ".types", "EvaluationResultsResponse": ".types", "EvaluationRun": ".types", "EvaluationRunCreate": ".types", "EvaluationRunData": ".types", "EvaluationRunDataMapping": ".types", "EvaluationRunDataMappingColumn": ".types", "EvaluationRunDataMappingStep": ".types", "EvaluationRunDataStep": ".types", "EvaluationRunDataStepInput": ".types", "EvaluationRunDataStepOrigin": ".types", "EvaluationRunDataStepType": ".types", "EvaluationRunEdit": ".types", "EvaluationRunFlags": ".types", "EvaluationRunIdResponse": ".types", "EvaluationRunIdsRequest": ".types", "EvaluationRunIdsResponse": ".types", "EvaluationRunQuery": ".types", "EvaluationRunQueryFlags": ".types", "EvaluationRunResponse": ".types", "EvaluationRunsResponse": ".types", "EvaluationScenario": ".types", "EvaluationScenarioCreate": ".types", "EvaluationScenarioEdit": ".types", "EvaluationScenarioIdResponse": ".types", "EvaluationScenarioIdsResponse": ".types", "EvaluationScenarioQuery": ".types", "EvaluationScenarioResponse": ".types", "EvaluationScenariosResponse": ".types", "EvaluationStatus": ".types", "Evaluator": ".types", "EvaluatorArtifactFlags": ".types", "EvaluatorArtifactQueryFlags": ".types", "EvaluatorCatalogPreset": ".types", "EvaluatorCatalogPresetResponse": ".types", "EvaluatorCatalogPresetsResponse": ".types", "EvaluatorCatalogTemplate": ".types", "EvaluatorCatalogTemplateResponse": ".types", "EvaluatorCatalogTemplatesResponse": ".types", "EvaluatorCatalogType": ".types", "EvaluatorCatalogTypesResponse": ".types", "EvaluatorCreate": ".types", "EvaluatorEdit": ".types", "EvaluatorFlags": ".types", "EvaluatorFork": ".types", "EvaluatorQuery": ".types", "EvaluatorResponse": ".types", "EvaluatorRevision": ".types", "EvaluatorRevisionCommit": ".types", "EvaluatorRevisionCreate": ".types", "EvaluatorRevisionDataInput": ".types", "EvaluatorRevisionDataInputHeadersValue": ".types", "EvaluatorRevisionDataInputRuntime": ".types", "EvaluatorRevisionDataOutput": ".types", "EvaluatorRevisionDataOutputHeadersValue": ".types", "EvaluatorRevisionDataOutputRuntime": ".types", "EvaluatorRevisionEdit": ".types", "EvaluatorRevisionFlags": ".types", "EvaluatorRevisionFork": ".types", "EvaluatorRevisionQuery": ".types", "EvaluatorRevisionQueryFlags": ".types", "EvaluatorRevisionResolveResponse": ".types", "EvaluatorRevisionResponse": ".types", "EvaluatorRevisionsLog": ".types", "EvaluatorRevisionsResponse": ".types", "EvaluatorTemplate": ".types", "EvaluatorTemplatesResponse": ".types", "EvaluatorVariant": ".types", "EvaluatorVariantCreate": ".types", "EvaluatorVariantEdit": ".types", "EvaluatorVariantFlags": ".types", "EvaluatorVariantFork": ".types", "EvaluatorVariantResponse": ".types", "EvaluatorVariantsResponse": ".types", "EvaluatorsResponse": ".types", "Event": ".types", "EventQuery": ".types", "EventType": ".types", "EventsQueryResponse": ".types", "ExistenceOperator": ".types", "FetchLegacyAnalyticsRequestNewest": ".legacy", "FetchLegacyAnalyticsRequestOldest": ".legacy", "FetchSimpleTestsetToFileRequestFileType": ".testsets", "FetchTestsetRevisionToFileRequestFileType": ".testsets", "FilteringInput": ".types", "FilteringInputConditionsItem": ".types", "FilteringOutput": ".types", "FilteringOutputConditionsItem": ".types", "Focus": ".types", "Folder": ".types", "FolderCreate": ".types", "FolderEdit": ".types", "FolderIdResponse": ".types", "FolderKind": ".types", "FolderQuery": ".types", "FolderQueryKinds": ".types", "FolderResponse": ".types", "FoldersResponse": ".types", "Format": ".types", "Formatting": ".types", typing.Any: ".types", typing.Any: ".types", "Header": ".types", "HttpValidationError": ".types", "InviteRequest": ".types", "Invocation": ".types", "InvocationCreate": ".types", "InvocationCreateLinks": ".types", "InvocationEdit": ".types", "InvocationEditLinks": ".types", "InvocationLinkResponse": ".types", "InvocationLinks": ".types", "InvocationQuery": ".types", "InvocationQueryLinks": ".types", "InvocationResponse": ".types", "InvocationsResponse": ".types", "JsonSchemasInput": ".types", "JsonSchemasOutput": ".types", typing.Any: ".types", typing.Any: ".types", "LegacyLifecycleDto": ".types", "ListApiKeysResponse": ".types", "ListOperator": ".types", "ListOptions": ".types", "LogicalOperator": ".types", "MetricSpec": ".types", "MetricType": ".types", "MetricsBucket": ".types", "NumericOperator": ".types", "OTelEventInput": ".types", "OTelEventInputTimestamp": ".types", "OTelEventOutput": ".types", "OTelEventOutputTimestamp": ".types", "OTelHashInput": ".types", "OTelHashOutput": ".types", "OTelLinkInput": ".types", "OTelLinkOutput": ".types", "OTelLinksResponse": ".types", "OTelReferenceInput": ".types", "OTelReferenceOutput": ".types", "OTelSpanKind": ".types", "OTelStatusCode": ".types", "OTelTracingRequest": ".types", "OTelTracingResponse": ".types", "OldAnalyticsResponse": ".types", "OrganizationDetails": ".types", "OrganizationDomainResponse": ".types", "OrganizationProviderResponse": ".types", "OrganizationUpdate": ".types", "OssSrcModelsApiOrganizationModelsOrganization": ".types", "Permission": ".types", "ProjectsResponse": ".types", "QueriesResponse": ".types", "Query": ".types", "QueryApplicationVariantsRequestOrder": ".applications", "QueryCreate": ".types", "QueryEdit": ".types", "QueryEnvironmentRevisionsRequestOrder": ".environments", "QueryEnvironmentVariantsRequestOrder": ".environments", "QueryEnvironmentsRequestOrder": ".environments", "QueryEvaluatorVariantsRequestOrder": ".evaluators", "QueryFlags": ".types", "QueryQueriesRequestOrder": ".queries", "QueryQueryFlags": ".types", "QueryResponse": ".types", "QueryRevision": ".types", "QueryRevisionCommit": ".types", "QueryRevisionCreate": ".types", "QueryRevisionDataInput": ".types", "QueryRevisionDataOutput": ".types", "QueryRevisionEdit": ".types", "QueryRevisionQuery": ".types", "QueryRevisionResponse": ".types", "QueryRevisionsLog": ".types", "QueryRevisionsResponse": ".types", "QuerySpansAnalyticsRequestNewest": ".traces", "QuerySpansAnalyticsRequestOldest": ".traces", "QueryVariant": ".types", "QueryVariantCreate": ".types", "QueryVariantEdit": ".types", "QueryVariantQuery": ".types", "QueryVariantResponse": ".types", "QueryVariantsResponse": ".types", "QueryWorkflowRevisionsRequestOrder": ".workflows", "QueryWorkflowVariantsRequestOrder": ".workflows", "QueryWorkflowsRequestOrder": ".workflows", "Reference": ".types", "ReferenceRequestModelInput": ".types", "ReferenceRequestModelOutput": ".types", "RequestType": ".types", "ResolutionInfo": ".types", "RetrievalInfo": ".types", "RevisionFork": ".types", "SecretDto": ".types", "SecretDtoData": ".types", "SecretKind": ".types", "SecretResponseDto": ".types", "SecretResponseDtoData": ".types", "SessionIdsResponse": ".types", "SimpleApplication": ".types", "SimpleApplicationCreate": ".types", "SimpleApplicationDataInput": ".types", "SimpleApplicationDataInputHeadersValue": ".types", "SimpleApplicationDataInputRuntime": ".types", "SimpleApplicationDataOutput": ".types", "SimpleApplicationDataOutputHeadersValue": ".types", "SimpleApplicationDataOutputRuntime": ".types", "SimpleApplicationEdit": ".types", "SimpleApplicationFlags": ".types", "SimpleApplicationQuery": ".types", "SimpleApplicationQueryFlags": ".types", "SimpleApplicationResponse": ".types", "SimpleApplicationsResponse": ".types", "SimpleEnvironment": ".types", "SimpleEnvironmentCreate": ".types", "SimpleEnvironmentEdit": ".types", "SimpleEnvironmentQuery": ".types", "SimpleEnvironmentResponse": ".types", "SimpleEnvironmentsResponse": ".types", "SimpleEvaluation": ".types", "SimpleEvaluationCreate": ".types", "SimpleEvaluationData": ".types", "SimpleEvaluationDataApplicationSteps": ".types", "SimpleEvaluationDataApplicationStepsOneValue": ".types", "SimpleEvaluationDataEvaluatorSteps": ".types", "SimpleEvaluationDataEvaluatorStepsOneValue": ".types", "SimpleEvaluationDataQuerySteps": ".types", "SimpleEvaluationDataQueryStepsOneValue": ".types", "SimpleEvaluationDataTestsetSteps": ".types", "SimpleEvaluationDataTestsetStepsOneValue": ".types", "SimpleEvaluationEdit": ".types", "SimpleEvaluationIdResponse": ".types", "SimpleEvaluationQuery": ".types", "SimpleEvaluationResponse": ".types", "SimpleEvaluationsResponse": ".types", "SimpleEvaluator": ".types", "SimpleEvaluatorCreate": ".types", "SimpleEvaluatorDataInput": ".types", "SimpleEvaluatorDataInputHeadersValue": ".types", "SimpleEvaluatorDataInputRuntime": ".types", "SimpleEvaluatorDataOutput": ".types", "SimpleEvaluatorDataOutputHeadersValue": ".types", "SimpleEvaluatorDataOutputRuntime": ".types", "SimpleEvaluatorEdit": ".types", "SimpleEvaluatorFlags": ".types", "SimpleEvaluatorQuery": ".types", "SimpleEvaluatorQueryFlags": ".types", "SimpleEvaluatorResponse": ".types", "SimpleEvaluatorsResponse": ".types", "SimpleQueriesResponse": ".types", "SimpleQuery": ".types", "SimpleQueryCreate": ".types", "SimpleQueryEdit": ".types", "SimpleQueryQuery": ".types", "SimpleQueryResponse": ".types", "SimpleQueue": ".types", "SimpleQueueCreate": ".types", "SimpleQueueData": ".types", "SimpleQueueDataEvaluators": ".types", "SimpleQueueDataEvaluatorsOneValue": ".types", "SimpleQueueIdResponse": ".types", "SimpleQueueKind": ".types", "SimpleQueueQuery": ".types", "SimpleQueueResponse": ".types", "SimpleQueueScenariosQuery": ".types", "SimpleQueueScenariosResponse": ".types", "SimpleQueueSettings": ".types", "SimpleQueuesResponse": ".types", "SimpleTestset": ".types", "SimpleTestsetCreate": ".types", "SimpleTestsetEdit": ".types", "SimpleTestsetQuery": ".types", "SimpleTestsetResponse": ".types", "SimpleTestsetsResponse": ".types", "SimpleTrace": ".types", "SimpleTraceChannel": ".types", "SimpleTraceCreate": ".types", "SimpleTraceCreateLinks": ".types", "SimpleTraceEdit": ".types", "SimpleTraceEditLinks": ".types", "SimpleTraceKind": ".types", "SimpleTraceLinkResponse": ".types", "SimpleTraceLinks": ".types", "SimpleTraceOrigin": ".types", "SimpleTraceQuery": ".types", "SimpleTraceQueryLinks": ".types", "SimpleTraceReferences": ".types", "SimpleTraceResponse": ".types", "SimpleTracesResponse": ".types", "SimpleWorkflow": ".types", "SimpleWorkflowCreate": ".types", "SimpleWorkflowDataInput": ".types", "SimpleWorkflowDataInputHeadersValue": ".types", "SimpleWorkflowDataInputRuntime": ".types", "SimpleWorkflowDataOutput": ".types", "SimpleWorkflowDataOutputHeadersValue": ".types", "SimpleWorkflowDataOutputRuntime": ".types", "SimpleWorkflowEdit": ".types", "SimpleWorkflowFlags": ".types", "SimpleWorkflowQuery": ".types", "SimpleWorkflowQueryFlags": ".types", "SimpleWorkflowResponse": ".types", "SimpleWorkflowsResponse": ".types", "SpanInput": ".types", "SpanInputEndTime": ".types", "SpanInputStartTime": ".types", "SpanOutput": ".types", "SpanOutputEndTime": ".types", "SpanOutputStartTime": ".types", "SpanResponse": ".types", "SpanType": ".types", "SpansNodeInput": ".types", "SpansNodeInputEndTime": ".types", "SpansNodeInputSpansValue": ".types", "SpansNodeInputStartTime": ".types", "SpansNodeOutput": ".types", "SpansNodeOutputEndTime": ".types", "SpansNodeOutputSpansValue": ".types", "SpansNodeOutputStartTime": ".types", "SpansResponse": ".types", "SpansTreeInput": ".types", "SpansTreeInputSpansValue": ".types", "SpansTreeOutput": ".types", "SpansTreeOutputSpansValue": ".types", "SsoProviderDto": ".types", "SsoProviderInfo": ".types", "SsoProviderSettingsDto": ".types", "SsoProviders": ".types", "StandardProviderDto": ".types", "StandardProviderKind": ".types", "StandardProviderSettingsDto": ".types", "Status": ".types", "StringOperator": ".types", "TestcaseInput": ".types", "TestcaseOutput": ".types", "TestcaseResponse": ".types", "TestcasesResponse": ".types", "Testset": ".types", "TestsetCreate": ".types", "TestsetEdit": ".types", "TestsetFlags": ".types", "TestsetQuery": ".types", "TestsetResponse": ".types", "TestsetRevision": ".types", "TestsetRevisionCommit": ".types", "TestsetRevisionCreate": ".types", "TestsetRevisionDataInput": ".types", "TestsetRevisionDataOutput": ".types", "TestsetRevisionDelta": ".types", "TestsetRevisionDeltaColumns": ".types", "TestsetRevisionDeltaRows": ".types", "TestsetRevisionEdit": ".types", "TestsetRevisionQuery": ".types", "TestsetRevisionResponse": ".types", "TestsetRevisionsLog": ".types", "TestsetRevisionsResponse": ".types", "TestsetVariant": ".types", "TestsetVariantCreate": ".types", "TestsetVariantEdit": ".types", "TestsetVariantQuery": ".types", "TestsetVariantResponse": ".types", "TestsetVariantsResponse": ".types", "TestsetsResponse": ".types", "TextOptions": ".types", "ToolAuthScheme": ".types", "ToolCallData": ".types", "ToolCallFunction": ".types", "ToolCallResponse": ".types", "ToolCatalogAction": ".types", "ToolCatalogActionDetails": ".types", "ToolCatalogActionResponse": ".types", "ToolCatalogActionResponseAction": ".types", "ToolCatalogActionsResponse": ".types", "ToolCatalogActionsResponseActionsItem": ".types", "ToolCatalogIntegration": ".types", "ToolCatalogIntegrationDetails": ".types", "ToolCatalogIntegrationResponse": ".types", "ToolCatalogIntegrationResponseIntegration": ".types", "ToolCatalogIntegrationsResponse": ".types", "ToolCatalogIntegrationsResponseIntegrationsItem": ".types", "ToolCatalogProvider": ".types", "ToolCatalogProviderDetails": ".types", "ToolCatalogProviderResponse": ".types", "ToolCatalogProviderResponseProvider": ".types", "ToolCatalogProvidersResponse": ".types", "ToolCatalogProvidersResponseProvidersItem": ".types", "ToolConnection": ".types", "ToolConnectionCreate": ".types", "ToolConnectionCreateData": ".types", "ToolConnectionResponse": ".types", "ToolConnectionStatus": ".types", "ToolConnectionsResponse": ".types", "ToolProviderKind": ".types", "ToolResult": ".types", "ToolResultData": ".types", "TraceIdResponse": ".types", "TraceIdsResponse": ".types", "TraceInput": ".types", "TraceInputSpansValue": ".types", "TraceOutput": ".types", "TraceOutputSpansValue": ".types", "TraceRequest": ".types", "TraceResponse": ".types", "TraceType": ".types", "TracesRequest": ".types", "TracesResponse": ".types", "TracingQuery": ".types", "UnprocessableEntityError": ".errors", "UserIdsResponse": ".types", "ValidationError": ".types", "ValidationErrorLocItem": ".types", "VariantFork": ".types", "WebhookDeliveriesResponse": ".types", "WebhookDelivery": ".types", "WebhookDeliveryCreate": ".types", "WebhookDeliveryData": ".types", "WebhookDeliveryQuery": ".types", "WebhookDeliveryResponse": ".types", "WebhookDeliveryResponseInfo": ".types", "WebhookEventType": ".types", "WebhookProviderDto": ".types", "WebhookProviderSettingsDto": ".types", "WebhookSubscription": ".types", "WebhookSubscriptionCreate": ".types", "WebhookSubscriptionData": ".types", "WebhookSubscriptionDataAuthMode": ".types", "WebhookSubscriptionEdit": ".types", "WebhookSubscriptionQuery": ".types", "WebhookSubscriptionResponse": ".types", "WebhookSubscriptionTestRequestSubscription": ".webhooks", "WebhookSubscriptionsResponse": ".types", "Windowing": ".types", "WindowingOrder": ".types", "Workflow": ".types", "WorkflowArtifactFlags": ".types", "WorkflowCatalogFlags": ".types", "WorkflowCatalogPreset": ".types", "WorkflowCatalogPresetResponse": ".types", "WorkflowCatalogPresetsResponse": ".types", "WorkflowCatalogTemplate": ".types", "WorkflowCatalogTemplateResponse": ".types", "WorkflowCatalogTemplatesResponse": ".types", "WorkflowCatalogType": ".types", "WorkflowCatalogTypeResponse": ".types", "WorkflowCatalogTypesResponse": ".types", "WorkflowCreate": ".types", "WorkflowEdit": ".types", "WorkflowFlags": ".types", "WorkflowFork": ".types", "WorkflowResponse": ".types", "WorkflowRevisionCommit": ".types", "WorkflowRevisionCreate": ".types", "WorkflowRevisionDataInput": ".types", "WorkflowRevisionDataInputHeadersValue": ".types", "WorkflowRevisionDataInputRuntime": ".types", "WorkflowRevisionDataOutput": ".types", "WorkflowRevisionDataOutputHeadersValue": ".types", "WorkflowRevisionDataOutputRuntime": ".types", "WorkflowRevisionEdit": ".types", "WorkflowRevisionFlags": ".types", "WorkflowRevisionFork": ".types", "WorkflowRevisionInput": ".types", "WorkflowRevisionOutput": ".types", "WorkflowRevisionResolveResponse": ".types", "WorkflowRevisionResponse": ".types", "WorkflowRevisionsLog": ".types", "WorkflowRevisionsResponse": ".types", "WorkflowVariant": ".types", "WorkflowVariantCreate": ".types", "WorkflowVariantEdit": ".types", "WorkflowVariantFlags": ".types", "WorkflowVariantFork": ".types", "WorkflowVariantResponse": ".types", "WorkflowVariantsResponse": ".types", "WorkflowsResponse": ".types", "Workspace": ".types", "WorkspaceMemberResponse": ".types", "WorkspacePermission": ".types", "WorkspaceResponse": ".types", "access": ".access", "annotations": ".annotations", "applications": ".applications", "billing": ".billing", "environments": ".environments", "evaluations": ".evaluations", "evaluators": ".evaluators", "events": ".events", "folders": ".folders", "invocations": ".invocations", "keys": ".keys", "legacy": ".legacy", "organizations": ".organizations", "projects": ".projects", "queries": ".queries", "secrets": ".secrets", "status": ".status", "testcases": ".testcases", "testsets": ".testsets", "tools": ".tools", "traces": ".traces", "users": ".users", "webhooks": ".webhooks", "workflows": ".workflows", "workspaces": ".workspaces"}
+_dynamic_imports: typing.Dict[str, str] = {"AdminAccountCreateOptions": ".types", "AdminAccountRead": ".types", "AdminAccountsCreate": ".types", "AdminAccountsDelete": ".types", "AdminAccountsDeleteTarget": ".types", "AdminAccountsResponse": ".types", "AdminApiKeyCreate": ".types", "AdminApiKeyResponse": ".types", "AdminDeleteResponse": ".types", "AdminDeletedEntities": ".types", "AdminDeletedEntity": ".types", "AdminOrganizationCreate": ".types", "AdminOrganizationMembershipCreate": ".types", "AdminOrganizationMembershipRead": ".types", "AdminOrganizationRead": ".types", "AdminProjectCreate": ".types", "AdminProjectMembershipCreate": ".types", "AdminProjectMembershipRead": ".types", "AdminProjectRead": ".types", "AdminSimpleAccountCreate": ".types", "AdminSimpleAccountDeleteEntry": ".types", "AdminSimpleAccountRead": ".types", "AdminSimpleAccountsApiKeysCreate": ".types", "AdminSimpleAccountsCreate": ".types", "AdminSimpleAccountsDelete": ".types", "AdminSimpleAccountsOrganizationsCreate": ".types", "AdminSimpleAccountsOrganizationsMembershipsCreate": ".types", "AdminSimpleAccountsOrganizationsTransferOwnership": ".types", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjects": ".types", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjectsZero": ".types", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspaces": ".types", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspacesZero": ".types", "AdminSimpleAccountsOrganizationsTransferOwnershipResponse": ".types", "AdminSimpleAccountsProjectsCreate": ".types", "AdminSimpleAccountsProjectsMembershipsCreate": ".types", "AdminSimpleAccountsResponse": ".types", "AdminSimpleAccountsUsersCreate": ".types", "AdminSimpleAccountsUsersIdentitiesCreate": ".types", "AdminSimpleAccountsUsersResetPassword": ".types", "AdminSimpleAccountsWorkspacesCreate": ".types", "AdminSimpleAccountsWorkspacesMembershipsCreate": ".types", "AdminStructuredError": ".types", "AdminSubscriptionCreate": ".types", "AdminSubscriptionRead": ".types", "AdminUserCreate": ".types", "AdminUserIdentityCreate": ".types", "AdminUserIdentityRead": ".types", "AdminUserIdentityReadStatus": ".types", "AdminUserRead": ".types", "AdminWorkspaceCreate": ".types", "AdminWorkspaceMembershipCreate": ".types", "AdminWorkspaceMembershipRead": ".types", "AdminWorkspaceRead": ".types", "AgentaApi": ".client", "AgentaApiEnvironment": ".environment", "Analytics": ".types", "AnalyticsResponse": ".types", "Annotation": ".types", "AnnotationCreate": ".types", "AnnotationCreateLinks": ".types", "AnnotationEdit": ".types", "AnnotationEditLinks": ".types", "AnnotationLinkResponse": ".types", "AnnotationLinks": ".types", "AnnotationQuery": ".types", "AnnotationQueryLinks": ".types", "AnnotationResponse": ".types", "AnnotationsResponse": ".types", "Application": ".types", "ApplicationArtifactFlags": ".types", "ApplicationArtifactQueryFlags": ".types", "ApplicationCatalogPreset": ".types", "ApplicationCatalogPresetResponse": ".types", "ApplicationCatalogPresetsResponse": ".types", "ApplicationCatalogTemplate": ".types", "ApplicationCatalogTemplateResponse": ".types", "ApplicationCatalogTemplatesResponse": ".types", "ApplicationCatalogType": ".types", "ApplicationCatalogTypesResponse": ".types", "ApplicationCreate": ".types", "ApplicationEdit": ".types", "ApplicationFlags": ".types", "ApplicationFork": ".types", "ApplicationQuery": ".types", "ApplicationResponse": ".types", "ApplicationRevision": ".types", "ApplicationRevisionCommit": ".types", "ApplicationRevisionCreate": ".types", "ApplicationRevisionDataInput": ".types", "ApplicationRevisionDataInputHeadersValue": ".types", "ApplicationRevisionDataInputRuntime": ".types", "ApplicationRevisionDataOutput": ".types", "ApplicationRevisionDataOutputHeadersValue": ".types", "ApplicationRevisionDataOutputRuntime": ".types", "ApplicationRevisionEdit": ".types", "ApplicationRevisionFlags": ".types", "ApplicationRevisionFork": ".types", "ApplicationRevisionQuery": ".types", "ApplicationRevisionQueryFlags": ".types", "ApplicationRevisionResolveResponse": ".types", "ApplicationRevisionResponse": ".types", "ApplicationRevisionsLog": ".types", "ApplicationRevisionsResponse": ".types", "ApplicationVariant": ".types", "ApplicationVariantCreate": ".types", "ApplicationVariantEdit": ".types", "ApplicationVariantFlags": ".types", "ApplicationVariantFork": ".types", "ApplicationVariantResponse": ".types", "ApplicationVariantsResponse": ".types", "ApplicationsResponse": ".types", "AsyncAgentaApi": ".client", "BodyConfigsFetchVariantsConfigsFetchPost": ".types", "Bucket": ".types", "CollectStatusResponse": ".types", "ComparisonOperator": ".types", "Condition": ".types", "ConditionOperator": ".types", "ConditionOptions": ".types", "ConditionValue": ".types", "ConfigResponseModel": ".types", "CreateSimpleTestsetFromFileRequestFileType": ".testsets", "CreateTestsetRevisionFromFileRequestFileType": ".testsets", "CustomModelSettingsDto": ".types", "CustomProviderDto": ".types", "CustomProviderKind": ".types", "CustomProviderSettingsDto": ".types", "DictOperator": ".types", "DiscoverResponse": ".types", "DiscoverResponseMethodsValue": ".types", "EditSimpleTestsetFromFileRequestFileType": ".testsets", "EeSrcModelsApiOrganizationModelsOrganization": ".types", "EntityRef": ".types", "Environment": ".types", "EnvironmentCreate": ".types", "EnvironmentEdit": ".types", "EnvironmentFlags": ".types", "EnvironmentQueryFlags": ".types", "EnvironmentResponse": ".types", "EnvironmentRevision": ".types", "EnvironmentRevisionCommit": ".types", "EnvironmentRevisionCreate": ".types", "EnvironmentRevisionData": ".types", "EnvironmentRevisionDelta": ".types", "EnvironmentRevisionEdit": ".types", "EnvironmentRevisionResolveResponse": ".types", "EnvironmentRevisionResponse": ".types", "EnvironmentRevisionsLog": ".types", "EnvironmentRevisionsResponse": ".types", "EnvironmentVariant": ".types", "EnvironmentVariantCreate": ".types", "EnvironmentVariantEdit": ".types", "EnvironmentVariantResponse": ".types", "EnvironmentVariantsResponse": ".types", "EnvironmentsResponse": ".types", "ErrorPolicy": ".types", "EvaluationMetrics": ".types", "EvaluationMetricsCreate": ".types", "EvaluationMetricsIdsResponse": ".types", "EvaluationMetricsQuery": ".types", "EvaluationMetricsQueryScenarioIds": ".types", "EvaluationMetricsQueryTimestamps": ".types", "EvaluationMetricsRefresh": ".types", "EvaluationMetricsResponse": ".types", "EvaluationQueue": ".types", "EvaluationQueueCreate": ".types", "EvaluationQueueData": ".types", "EvaluationQueueEdit": ".types", "EvaluationQueueFlags": ".types", "EvaluationQueueIdResponse": ".types", "EvaluationQueueIdsResponse": ".types", "EvaluationQueueQuery": ".types", "EvaluationQueueQueryFlags": ".types", "EvaluationQueueResponse": ".types", "EvaluationQueueScenariosQuery": ".types", "EvaluationQueuesResponse": ".types", "EvaluationResult": ".types", "EvaluationResultCreate": ".types", "EvaluationResultIdResponse": ".types", "EvaluationResultIdsResponse": ".types", "EvaluationResultQuery": ".types", "EvaluationResultResponse": ".types", "EvaluationResultsResponse": ".types", "EvaluationRun": ".types", "EvaluationRunCreate": ".types", "EvaluationRunData": ".types", "EvaluationRunDataConcurrency": ".types", "EvaluationRunDataMapping": ".types", "EvaluationRunDataMappingColumn": ".types", "EvaluationRunDataMappingStep": ".types", "EvaluationRunDataStep": ".types", "EvaluationRunDataStepInput": ".types", "EvaluationRunDataStepOrigin": ".types", "EvaluationRunDataStepType": ".types", "EvaluationRunEdit": ".types", "EvaluationRunFlags": ".types", "EvaluationRunIdResponse": ".types", "EvaluationRunIdsRequest": ".types", "EvaluationRunIdsResponse": ".types", "EvaluationRunQuery": ".types", "EvaluationRunQueryFlags": ".types", "EvaluationRunResponse": ".types", "EvaluationRunsResponse": ".types", "EvaluationScenario": ".types", "EvaluationScenarioCreate": ".types", "EvaluationScenarioEdit": ".types", "EvaluationScenarioIdResponse": ".types", "EvaluationScenarioIdsResponse": ".types", "EvaluationScenarioQuery": ".types", "EvaluationScenarioResponse": ".types", "EvaluationScenariosResponse": ".types", "EvaluationStatus": ".types", "Evaluator": ".types", "EvaluatorArtifactFlags": ".types", "EvaluatorArtifactQueryFlags": ".types", "EvaluatorCatalogPreset": ".types", "EvaluatorCatalogPresetResponse": ".types", "EvaluatorCatalogPresetsResponse": ".types", "EvaluatorCatalogTemplate": ".types", "EvaluatorCatalogTemplateResponse": ".types", "EvaluatorCatalogTemplatesResponse": ".types", "EvaluatorCatalogType": ".types", "EvaluatorCatalogTypesResponse": ".types", "EvaluatorCreate": ".types", "EvaluatorEdit": ".types", "EvaluatorFlags": ".types", "EvaluatorFork": ".types", "EvaluatorQuery": ".types", "EvaluatorResponse": ".types", "EvaluatorRevision": ".types", "EvaluatorRevisionCommit": ".types", "EvaluatorRevisionCreate": ".types", "EvaluatorRevisionDataInput": ".types", "EvaluatorRevisionDataInputHeadersValue": ".types", "EvaluatorRevisionDataInputRuntime": ".types", "EvaluatorRevisionDataOutput": ".types", "EvaluatorRevisionDataOutputHeadersValue": ".types", "EvaluatorRevisionDataOutputRuntime": ".types", "EvaluatorRevisionEdit": ".types", "EvaluatorRevisionFlags": ".types", "EvaluatorRevisionFork": ".types", "EvaluatorRevisionQuery": ".types", "EvaluatorRevisionQueryFlags": ".types", "EvaluatorRevisionResolveResponse": ".types", "EvaluatorRevisionResponse": ".types", "EvaluatorRevisionsLog": ".types", "EvaluatorRevisionsResponse": ".types", "EvaluatorTemplate": ".types", "EvaluatorTemplatesResponse": ".types", "EvaluatorVariant": ".types", "EvaluatorVariantCreate": ".types", "EvaluatorVariantEdit": ".types", "EvaluatorVariantFlags": ".types", "EvaluatorVariantFork": ".types", "EvaluatorVariantResponse": ".types", "EvaluatorVariantsResponse": ".types", "EvaluatorsResponse": ".types", "Event": ".types", "EventQuery": ".types", "EventType": ".types", "EventsQueryResponse": ".types", "ExistenceOperator": ".types", "FetchLegacyAnalyticsRequestNewest": ".legacy", "FetchLegacyAnalyticsRequestOldest": ".legacy", "FetchSimpleTestsetToFileRequestFileType": ".testsets", "FetchTestsetRevisionToFileRequestFileType": ".testsets", "FilteringInput": ".types", "FilteringInputConditionsItem": ".types", "FilteringOutput": ".types", "FilteringOutputConditionsItem": ".types", "Focus": ".types", "Folder": ".types", "FolderCreate": ".types", "FolderEdit": ".types", "FolderIdResponse": ".types", "FolderKind": ".types", "FolderQuery": ".types", "FolderQueryKinds": ".types", "FolderResponse": ".types", "FoldersResponse": ".types", "Format": ".types", "Formatting": ".types", typing.Any: ".types", typing.Any: ".types", "Header": ".types", "HttpValidationError": ".types", "InviteRequest": ".types", "Invocation": ".types", "InvocationCreate": ".types", "InvocationCreateLinks": ".types", "InvocationEdit": ".types", "InvocationEditLinks": ".types", "InvocationLinkResponse": ".types", "InvocationLinks": ".types", "InvocationQuery": ".types", "InvocationQueryLinks": ".types", "InvocationResponse": ".types", "InvocationsResponse": ".types", "JsonSchemasInput": ".types", "JsonSchemasOutput": ".types", typing.Any: ".types", typing.Any: ".types", "LegacyLifecycleDto": ".types", "ListApiKeysResponse": ".types", "ListOperator": ".types", "ListOptions": ".types", "LogicalOperator": ".types", "MetricSpec": ".types", "MetricType": ".types", "MetricsBucket": ".types", "NumericOperator": ".types", "OTelEventInput": ".types", "OTelEventInputTimestamp": ".types", "OTelEventOutput": ".types", "OTelEventOutputTimestamp": ".types", "OTelHashInput": ".types", "OTelHashOutput": ".types", "OTelLinkInput": ".types", "OTelLinkOutput": ".types", "OTelLinksResponse": ".types", "OTelReferenceInput": ".types", "OTelReferenceOutput": ".types", "OTelSpanKind": ".types", "OTelStatusCode": ".types", "OTelTracingRequest": ".types", "OTelTracingResponse": ".types", "OldAnalyticsResponse": ".types", "OrganizationDetails": ".types", "OrganizationDomainResponse": ".types", "OrganizationProviderResponse": ".types", "OrganizationUpdate": ".types", "OssSrcModelsApiOrganizationModelsOrganization": ".types", "Permission": ".types", "ProjectsResponse": ".types", "QueriesResponse": ".types", "Query": ".types", "QueryApplicationVariantsRequestOrder": ".applications", "QueryCreate": ".types", "QueryEdit": ".types", "QueryEnvironmentRevisionsRequestOrder": ".environments", "QueryEnvironmentVariantsRequestOrder": ".environments", "QueryEnvironmentsRequestOrder": ".environments", "QueryEvaluatorVariantsRequestOrder": ".evaluators", "QueryFlags": ".types", "QueryQueriesRequestOrder": ".queries", "QueryQueryFlags": ".types", "QueryResponse": ".types", "QueryRevision": ".types", "QueryRevisionCommit": ".types", "QueryRevisionCreate": ".types", "QueryRevisionDataInput": ".types", "QueryRevisionDataOutput": ".types", "QueryRevisionEdit": ".types", "QueryRevisionQuery": ".types", "QueryRevisionResponse": ".types", "QueryRevisionsLog": ".types", "QueryRevisionsResponse": ".types", "QuerySpansAnalyticsRequestNewest": ".traces", "QuerySpansAnalyticsRequestOldest": ".traces", "QueryVariant": ".types", "QueryVariantCreate": ".types", "QueryVariantEdit": ".types", "QueryVariantQuery": ".types", "QueryVariantResponse": ".types", "QueryVariantsResponse": ".types", "QueryWorkflowRevisionsRequestOrder": ".workflows", "QueryWorkflowVariantsRequestOrder": ".workflows", "QueryWorkflowsRequestOrder": ".workflows", "Reference": ".types", "ReferenceRequestModelInput": ".types", "ReferenceRequestModelOutput": ".types", "RequestType": ".types", "ResolutionInfo": ".types", "RetrievalInfo": ".types", "RevisionFork": ".types", "SecretDto": ".types", "SecretDtoData": ".types", "SecretKind": ".types", "SecretResponseDto": ".types", "SecretResponseDtoData": ".types", "SessionIdsResponse": ".types", "SimpleApplication": ".types", "SimpleApplicationCreate": ".types", "SimpleApplicationDataInput": ".types", "SimpleApplicationDataInputHeadersValue": ".types", "SimpleApplicationDataInputRuntime": ".types", "SimpleApplicationDataOutput": ".types", "SimpleApplicationDataOutputHeadersValue": ".types", "SimpleApplicationDataOutputRuntime": ".types", "SimpleApplicationEdit": ".types", "SimpleApplicationFlags": ".types", "SimpleApplicationQuery": ".types", "SimpleApplicationQueryFlags": ".types", "SimpleApplicationResponse": ".types", "SimpleApplicationsResponse": ".types", "SimpleEnvironment": ".types", "SimpleEnvironmentCreate": ".types", "SimpleEnvironmentEdit": ".types", "SimpleEnvironmentQuery": ".types", "SimpleEnvironmentResponse": ".types", "SimpleEnvironmentsResponse": ".types", "SimpleEvaluation": ".types", "SimpleEvaluationCreate": ".types", "SimpleEvaluationData": ".types", "SimpleEvaluationDataApplicationSteps": ".types", "SimpleEvaluationDataApplicationStepsOneValue": ".types", "SimpleEvaluationDataEvaluatorSteps": ".types", "SimpleEvaluationDataEvaluatorStepsOneValue": ".types", "SimpleEvaluationDataQuerySteps": ".types", "SimpleEvaluationDataQueryStepsOneValue": ".types", "SimpleEvaluationDataTestsetSteps": ".types", "SimpleEvaluationDataTestsetStepsOneValue": ".types", "SimpleEvaluationEdit": ".types", "SimpleEvaluationIdResponse": ".types", "SimpleEvaluationQuery": ".types", "SimpleEvaluationResponse": ".types", "SimpleEvaluationsResponse": ".types", "SimpleEvaluator": ".types", "SimpleEvaluatorCreate": ".types", "SimpleEvaluatorDataInput": ".types", "SimpleEvaluatorDataInputHeadersValue": ".types", "SimpleEvaluatorDataInputRuntime": ".types", "SimpleEvaluatorDataOutput": ".types", "SimpleEvaluatorDataOutputHeadersValue": ".types", "SimpleEvaluatorDataOutputRuntime": ".types", "SimpleEvaluatorEdit": ".types", "SimpleEvaluatorFlags": ".types", "SimpleEvaluatorQuery": ".types", "SimpleEvaluatorQueryFlags": ".types", "SimpleEvaluatorResponse": ".types", "SimpleEvaluatorsResponse": ".types", "SimpleQueriesResponse": ".types", "SimpleQuery": ".types", "SimpleQueryCreate": ".types", "SimpleQueryEdit": ".types", "SimpleQueryQuery": ".types", "SimpleQueryResponse": ".types", "SimpleQueue": ".types", "SimpleQueueCreate": ".types", "SimpleQueueData": ".types", "SimpleQueueDataEvaluators": ".types", "SimpleQueueDataEvaluatorsOneValue": ".types", "SimpleQueueIdResponse": ".types", "SimpleQueueKind": ".types", "SimpleQueueQuery": ".types", "SimpleQueueResponse": ".types", "SimpleQueueScenariosQuery": ".types", "SimpleQueueScenariosResponse": ".types", "SimpleQueueSettings": ".types", "SimpleQueuesResponse": ".types", "SimpleTestset": ".types", "SimpleTestsetCreate": ".types", "SimpleTestsetEdit": ".types", "SimpleTestsetQuery": ".types", "SimpleTestsetResponse": ".types", "SimpleTestsetsResponse": ".types", "SimpleTrace": ".types", "SimpleTraceChannel": ".types", "SimpleTraceCreate": ".types", "SimpleTraceCreateLinks": ".types", "SimpleTraceEdit": ".types", "SimpleTraceEditLinks": ".types", "SimpleTraceKind": ".types", "SimpleTraceLinkResponse": ".types", "SimpleTraceLinks": ".types", "SimpleTraceOrigin": ".types", "SimpleTraceQuery": ".types", "SimpleTraceQueryLinks": ".types", "SimpleTraceReferences": ".types", "SimpleTraceResponse": ".types", "SimpleTracesResponse": ".types", "SimpleWorkflow": ".types", "SimpleWorkflowCreate": ".types", "SimpleWorkflowDataInput": ".types", "SimpleWorkflowDataInputHeadersValue": ".types", "SimpleWorkflowDataInputRuntime": ".types", "SimpleWorkflowDataOutput": ".types", "SimpleWorkflowDataOutputHeadersValue": ".types", "SimpleWorkflowDataOutputRuntime": ".types", "SimpleWorkflowEdit": ".types", "SimpleWorkflowFlags": ".types", "SimpleWorkflowQuery": ".types", "SimpleWorkflowQueryFlags": ".types", "SimpleWorkflowResponse": ".types", "SimpleWorkflowsResponse": ".types", "SpanInput": ".types", "SpanInputEndTime": ".types", "SpanInputStartTime": ".types", "SpanOutput": ".types", "SpanOutputEndTime": ".types", "SpanOutputStartTime": ".types", "SpanResponse": ".types", "SpanType": ".types", "SpansNodeInput": ".types", "SpansNodeInputEndTime": ".types", "SpansNodeInputSpansValue": ".types", "SpansNodeInputStartTime": ".types", "SpansNodeOutput": ".types", "SpansNodeOutputEndTime": ".types", "SpansNodeOutputSpansValue": ".types", "SpansNodeOutputStartTime": ".types", "SpansResponse": ".types", "SpansTreeInput": ".types", "SpansTreeInputSpansValue": ".types", "SpansTreeOutput": ".types", "SpansTreeOutputSpansValue": ".types", "SsoProviderDto": ".types", "SsoProviderInfo": ".types", "SsoProviderSettingsDto": ".types", "SsoProviders": ".types", "StandardProviderDto": ".types", "StandardProviderKind": ".types", "StandardProviderSettingsDto": ".types", "Status": ".types", "StringOperator": ".types", "TestcaseInput": ".types", "TestcaseOutput": ".types", "TestcaseResponse": ".types", "TestcasesResponse": ".types", "Testset": ".types", "TestsetCreate": ".types", "TestsetEdit": ".types", "TestsetFlags": ".types", "TestsetQuery": ".types", "TestsetResponse": ".types", "TestsetRevision": ".types", "TestsetRevisionCommit": ".types", "TestsetRevisionCreate": ".types", "TestsetRevisionDataInput": ".types", "TestsetRevisionDataOutput": ".types", "TestsetRevisionDelta": ".types", "TestsetRevisionDeltaColumns": ".types", "TestsetRevisionDeltaRows": ".types", "TestsetRevisionEdit": ".types", "TestsetRevisionQuery": ".types", "TestsetRevisionResponse": ".types", "TestsetRevisionsLog": ".types", "TestsetRevisionsResponse": ".types", "TestsetVariant": ".types", "TestsetVariantCreate": ".types", "TestsetVariantEdit": ".types", "TestsetVariantQuery": ".types", "TestsetVariantResponse": ".types", "TestsetVariantsResponse": ".types", "TestsetsResponse": ".types", "TextOptions": ".types", "ToolAuthScheme": ".types", "ToolCallData": ".types", "ToolCallFunction": ".types", "ToolCallResponse": ".types", "ToolCatalogAction": ".types", "ToolCatalogActionDetails": ".types", "ToolCatalogActionResponse": ".types", "ToolCatalogActionResponseAction": ".types", "ToolCatalogActionsResponse": ".types", "ToolCatalogActionsResponseActionsItem": ".types", "ToolCatalogIntegration": ".types", "ToolCatalogIntegrationDetails": ".types", "ToolCatalogIntegrationResponse": ".types", "ToolCatalogIntegrationResponseIntegration": ".types", "ToolCatalogIntegrationsResponse": ".types", "ToolCatalogIntegrationsResponseIntegrationsItem": ".types", "ToolCatalogProvider": ".types", "ToolCatalogProviderDetails": ".types", "ToolCatalogProviderResponse": ".types", "ToolCatalogProviderResponseProvider": ".types", "ToolCatalogProvidersResponse": ".types", "ToolCatalogProvidersResponseProvidersItem": ".types", "ToolConnection": ".types", "ToolConnectionCreate": ".types", "ToolConnectionCreateData": ".types", "ToolConnectionResponse": ".types", "ToolConnectionStatus": ".types", "ToolConnectionsResponse": ".types", "ToolProviderKind": ".types", "ToolResult": ".types", "ToolResultData": ".types", "TraceIdResponse": ".types", "TraceIdsResponse": ".types", "TraceInput": ".types", "TraceInputSpansValue": ".types", "TraceOutput": ".types", "TraceOutputSpansValue": ".types", "TraceRequest": ".types", "TraceResponse": ".types", "TraceType": ".types", "TracesRequest": ".types", "TracesResponse": ".types", "TracingQuery": ".types", "UnprocessableEntityError": ".errors", "UserIdsResponse": ".types", "ValidationError": ".types", "ValidationErrorLocItem": ".types", "VariantFork": ".types", "WebhookDeliveriesResponse": ".types", "WebhookDelivery": ".types", "WebhookDeliveryCreate": ".types", "WebhookDeliveryData": ".types", "WebhookDeliveryQuery": ".types", "WebhookDeliveryResponse": ".types", "WebhookDeliveryResponseInfo": ".types", "WebhookEventType": ".types", "WebhookProviderDto": ".types", "WebhookProviderSettingsDto": ".types", "WebhookSubscription": ".types", "WebhookSubscriptionCreate": ".types", "WebhookSubscriptionData": ".types", "WebhookSubscriptionDataAuthMode": ".types", "WebhookSubscriptionEdit": ".types", "WebhookSubscriptionQuery": ".types", "WebhookSubscriptionResponse": ".types", "WebhookSubscriptionTestRequestSubscription": ".webhooks", "WebhookSubscriptionsResponse": ".types", "Windowing": ".types", "WindowingOrder": ".types", "Workflow": ".types", "WorkflowArtifactFlags": ".types", "WorkflowCatalogFlags": ".types", "WorkflowCatalogPreset": ".types", "WorkflowCatalogPresetResponse": ".types", "WorkflowCatalogPresetsResponse": ".types", "WorkflowCatalogTemplate": ".types", "WorkflowCatalogTemplateResponse": ".types", "WorkflowCatalogTemplatesResponse": ".types", "WorkflowCatalogType": ".types", "WorkflowCatalogTypeResponse": ".types", "WorkflowCatalogTypesResponse": ".types", "WorkflowCreate": ".types", "WorkflowEdit": ".types", "WorkflowFlags": ".types", "WorkflowFork": ".types", "WorkflowResponse": ".types", "WorkflowRevisionCommit": ".types", "WorkflowRevisionCreate": ".types", "WorkflowRevisionDataInput": ".types", "WorkflowRevisionDataInputHeadersValue": ".types", "WorkflowRevisionDataInputRuntime": ".types", "WorkflowRevisionDataOutput": ".types", "WorkflowRevisionDataOutputHeadersValue": ".types", "WorkflowRevisionDataOutputRuntime": ".types", "WorkflowRevisionEdit": ".types", "WorkflowRevisionFlags": ".types", "WorkflowRevisionFork": ".types", "WorkflowRevisionInput": ".types", "WorkflowRevisionOutput": ".types", "WorkflowRevisionResolveResponse": ".types", "WorkflowRevisionResponse": ".types", "WorkflowRevisionsLog": ".types", "WorkflowRevisionsResponse": ".types", "WorkflowVariant": ".types", "WorkflowVariantCreate": ".types", "WorkflowVariantEdit": ".types", "WorkflowVariantFlags": ".types", "WorkflowVariantFork": ".types", "WorkflowVariantResponse": ".types", "WorkflowVariantsResponse": ".types", "WorkflowsResponse": ".types", "Workspace": ".types", "WorkspaceMemberResponse": ".types", "WorkspacePermission": ".types", "WorkspaceResponse": ".types", "access": ".access", "annotations": ".annotations", "applications": ".applications", "billing": ".billing", "environments": ".environments", "evaluations": ".evaluations", "evaluators": ".evaluators", "events": ".events", "folders": ".folders", "invocations": ".invocations", "keys": ".keys", "legacy": ".legacy", "organizations": ".organizations", "projects": ".projects", "queries": ".queries", "secrets": ".secrets", "status": ".status", "testcases": ".testcases", "testsets": ".testsets", "tools": ".tools", "traces": ".traces", "users": ".users", "webhooks": ".webhooks", "workflows": ".workflows", "workspaces": ".workspaces"}
def __getattr__(attr_name: str) -> typing.Any:
module_name = _dynamic_imports.get(attr_name)
if module_name is None:
@@ -37,4 +37,4 @@ def __getattr__(attr_name: str) -> typing.Any:
def __dir__():
lazy_attrs = list(_dynamic_imports.keys())
return sorted(lazy_attrs)
-__all__ = ["AdminAccountCreateOptions", "AdminAccountRead", "AdminAccountsCreate", "AdminAccountsDelete", "AdminAccountsDeleteTarget", "AdminAccountsResponse", "AdminApiKeyCreate", "AdminApiKeyResponse", "AdminDeleteResponse", "AdminDeletedEntities", "AdminDeletedEntity", "AdminOrganizationCreate", "AdminOrganizationMembershipCreate", "AdminOrganizationMembershipRead", "AdminOrganizationRead", "AdminProjectCreate", "AdminProjectMembershipCreate", "AdminProjectMembershipRead", "AdminProjectRead", "AdminSimpleAccountCreate", "AdminSimpleAccountDeleteEntry", "AdminSimpleAccountRead", "AdminSimpleAccountsApiKeysCreate", "AdminSimpleAccountsCreate", "AdminSimpleAccountsDelete", "AdminSimpleAccountsOrganizationsCreate", "AdminSimpleAccountsOrganizationsMembershipsCreate", "AdminSimpleAccountsOrganizationsTransferOwnership", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjects", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjectsZero", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspaces", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspacesZero", "AdminSimpleAccountsOrganizationsTransferOwnershipResponse", "AdminSimpleAccountsProjectsCreate", "AdminSimpleAccountsProjectsMembershipsCreate", "AdminSimpleAccountsResponse", "AdminSimpleAccountsUsersCreate", "AdminSimpleAccountsUsersIdentitiesCreate", "AdminSimpleAccountsUsersResetPassword", "AdminSimpleAccountsWorkspacesCreate", "AdminSimpleAccountsWorkspacesMembershipsCreate", "AdminStructuredError", "AdminSubscriptionCreate", "AdminSubscriptionRead", "AdminUserCreate", "AdminUserIdentityCreate", "AdminUserIdentityRead", "AdminUserIdentityReadStatus", "AdminUserRead", "AdminWorkspaceCreate", "AdminWorkspaceMembershipCreate", "AdminWorkspaceMembershipRead", "AdminWorkspaceRead", "AgentaApi", "AgentaApiEnvironment", "Analytics", "AnalyticsResponse", "Annotation", "AnnotationCreate", "AnnotationCreateLinks", "AnnotationEdit", "AnnotationEditLinks", "AnnotationLinkResponse", "AnnotationLinks", "AnnotationQuery", "AnnotationQueryLinks", "AnnotationResponse", "AnnotationsResponse", "Application", "ApplicationArtifactFlags", "ApplicationArtifactQueryFlags", "ApplicationCatalogPreset", "ApplicationCatalogPresetResponse", "ApplicationCatalogPresetsResponse", "ApplicationCatalogTemplate", "ApplicationCatalogTemplateResponse", "ApplicationCatalogTemplatesResponse", "ApplicationCatalogType", "ApplicationCatalogTypesResponse", "ApplicationCreate", "ApplicationEdit", "ApplicationFlags", "ApplicationFork", "ApplicationQuery", "ApplicationResponse", "ApplicationRevision", "ApplicationRevisionCommit", "ApplicationRevisionCreate", "ApplicationRevisionDataInput", "ApplicationRevisionDataInputHeadersValue", "ApplicationRevisionDataInputRuntime", "ApplicationRevisionDataOutput", "ApplicationRevisionDataOutputHeadersValue", "ApplicationRevisionDataOutputRuntime", "ApplicationRevisionEdit", "ApplicationRevisionFlags", "ApplicationRevisionFork", "ApplicationRevisionQuery", "ApplicationRevisionQueryFlags", "ApplicationRevisionResolveResponse", "ApplicationRevisionResponse", "ApplicationRevisionsLog", "ApplicationRevisionsResponse", "ApplicationVariant", "ApplicationVariantCreate", "ApplicationVariantEdit", "ApplicationVariantFlags", "ApplicationVariantFork", "ApplicationVariantResponse", "ApplicationVariantsResponse", "ApplicationsResponse", "AsyncAgentaApi", "BodyConfigsFetchVariantsConfigsFetchPost", "Bucket", "CollectStatusResponse", "ComparisonOperator", "Condition", "ConditionOperator", "ConditionOptions", "ConditionValue", "ConfigResponseModel", "CreateSimpleTestsetFromFileRequestFileType", "CreateTestsetRevisionFromFileRequestFileType", "CustomModelSettingsDto", "CustomProviderDto", "CustomProviderKind", "CustomProviderSettingsDto", "DictOperator", "DiscoverResponse", "DiscoverResponseMethodsValue", "EditSimpleTestsetFromFileRequestFileType", "EeSrcModelsApiOrganizationModelsOrganization", "EntityRef", "Environment", "EnvironmentCreate", "EnvironmentEdit", "EnvironmentFlags", "EnvironmentQueryFlags", "EnvironmentResponse", "EnvironmentRevision", "EnvironmentRevisionCommit", "EnvironmentRevisionCreate", "EnvironmentRevisionData", "EnvironmentRevisionDelta", "EnvironmentRevisionEdit", "EnvironmentRevisionResolveResponse", "EnvironmentRevisionResponse", "EnvironmentRevisionsLog", "EnvironmentRevisionsResponse", "EnvironmentVariant", "EnvironmentVariantCreate", "EnvironmentVariantEdit", "EnvironmentVariantResponse", "EnvironmentVariantsResponse", "EnvironmentsResponse", "ErrorPolicy", "EvaluationMetrics", "EvaluationMetricsCreate", "EvaluationMetricsEdit", "EvaluationMetricsIdsResponse", "EvaluationMetricsQuery", "EvaluationMetricsQueryScenarioIds", "EvaluationMetricsQueryTimestamps", "EvaluationMetricsRefresh", "EvaluationMetricsResponse", "EvaluationQueue", "EvaluationQueueCreate", "EvaluationQueueData", "EvaluationQueueEdit", "EvaluationQueueFlags", "EvaluationQueueIdResponse", "EvaluationQueueIdsResponse", "EvaluationQueueQuery", "EvaluationQueueQueryFlags", "EvaluationQueueResponse", "EvaluationQueueScenariosQuery", "EvaluationQueuesResponse", "EvaluationResult", "EvaluationResultCreate", "EvaluationResultEdit", "EvaluationResultIdResponse", "EvaluationResultIdsResponse", "EvaluationResultQuery", "EvaluationResultResponse", "EvaluationResultsResponse", "EvaluationRun", "EvaluationRunCreate", "EvaluationRunData", "EvaluationRunDataMapping", "EvaluationRunDataMappingColumn", "EvaluationRunDataMappingStep", "EvaluationRunDataStep", "EvaluationRunDataStepInput", "EvaluationRunDataStepOrigin", "EvaluationRunDataStepType", "EvaluationRunEdit", "EvaluationRunFlags", "EvaluationRunIdResponse", "EvaluationRunIdsRequest", "EvaluationRunIdsResponse", "EvaluationRunQuery", "EvaluationRunQueryFlags", "EvaluationRunResponse", "EvaluationRunsResponse", "EvaluationScenario", "EvaluationScenarioCreate", "EvaluationScenarioEdit", "EvaluationScenarioIdResponse", "EvaluationScenarioIdsResponse", "EvaluationScenarioQuery", "EvaluationScenarioResponse", "EvaluationScenariosResponse", "EvaluationStatus", "Evaluator", "EvaluatorArtifactFlags", "EvaluatorArtifactQueryFlags", "EvaluatorCatalogPreset", "EvaluatorCatalogPresetResponse", "EvaluatorCatalogPresetsResponse", "EvaluatorCatalogTemplate", "EvaluatorCatalogTemplateResponse", "EvaluatorCatalogTemplatesResponse", "EvaluatorCatalogType", "EvaluatorCatalogTypesResponse", "EvaluatorCreate", "EvaluatorEdit", "EvaluatorFlags", "EvaluatorFork", "EvaluatorQuery", "EvaluatorResponse", "EvaluatorRevision", "EvaluatorRevisionCommit", "EvaluatorRevisionCreate", "EvaluatorRevisionDataInput", "EvaluatorRevisionDataInputHeadersValue", "EvaluatorRevisionDataInputRuntime", "EvaluatorRevisionDataOutput", "EvaluatorRevisionDataOutputHeadersValue", "EvaluatorRevisionDataOutputRuntime", "EvaluatorRevisionEdit", "EvaluatorRevisionFlags", "EvaluatorRevisionFork", "EvaluatorRevisionQuery", "EvaluatorRevisionQueryFlags", "EvaluatorRevisionResolveResponse", "EvaluatorRevisionResponse", "EvaluatorRevisionsLog", "EvaluatorRevisionsResponse", "EvaluatorTemplate", "EvaluatorTemplatesResponse", "EvaluatorVariant", "EvaluatorVariantCreate", "EvaluatorVariantEdit", "EvaluatorVariantFlags", "EvaluatorVariantFork", "EvaluatorVariantResponse", "EvaluatorVariantsResponse", "EvaluatorsResponse", "Event", "EventQuery", "EventType", "EventsQueryResponse", "ExistenceOperator", "FetchLegacyAnalyticsRequestNewest", "FetchLegacyAnalyticsRequestOldest", "FetchSimpleTestsetToFileRequestFileType", "FetchTestsetRevisionToFileRequestFileType", "FilteringInput", "FilteringInputConditionsItem", "FilteringOutput", "FilteringOutputConditionsItem", "Focus", "Folder", "FolderCreate", "FolderEdit", "FolderIdResponse", "FolderKind", "FolderQuery", "FolderQueryKinds", "FolderResponse", "FoldersResponse", "Format", "Formatting", typing.Any, typing.Any, "Header", "HttpValidationError", "InviteRequest", "Invocation", "InvocationCreate", "InvocationCreateLinks", "InvocationEdit", "InvocationEditLinks", "InvocationLinkResponse", "InvocationLinks", "InvocationQuery", "InvocationQueryLinks", "InvocationResponse", "InvocationsResponse", "JsonSchemasInput", "JsonSchemasOutput", typing.Any, typing.Any, "LegacyLifecycleDto", "ListApiKeysResponse", "ListOperator", "ListOptions", "LogicalOperator", "MetricSpec", "MetricType", "MetricsBucket", "NumericOperator", "OTelEventInput", "OTelEventInputTimestamp", "OTelEventOutput", "OTelEventOutputTimestamp", "OTelHashInput", "OTelHashOutput", "OTelLinkInput", "OTelLinkOutput", "OTelLinksResponse", "OTelReferenceInput", "OTelReferenceOutput", "OTelSpanKind", "OTelStatusCode", "OTelTracingRequest", "OTelTracingResponse", "OldAnalyticsResponse", "OrganizationDetails", "OrganizationDomainResponse", "OrganizationProviderResponse", "OrganizationUpdate", "OssSrcModelsApiOrganizationModelsOrganization", "Permission", "ProjectsResponse", "QueriesResponse", "Query", "QueryApplicationVariantsRequestOrder", "QueryCreate", "QueryEdit", "QueryEnvironmentRevisionsRequestOrder", "QueryEnvironmentVariantsRequestOrder", "QueryEnvironmentsRequestOrder", "QueryEvaluatorVariantsRequestOrder", "QueryFlags", "QueryQueriesRequestOrder", "QueryQueryFlags", "QueryResponse", "QueryRevision", "QueryRevisionCommit", "QueryRevisionCreate", "QueryRevisionDataInput", "QueryRevisionDataOutput", "QueryRevisionEdit", "QueryRevisionQuery", "QueryRevisionResponse", "QueryRevisionsLog", "QueryRevisionsResponse", "QuerySpansAnalyticsRequestNewest", "QuerySpansAnalyticsRequestOldest", "QueryVariant", "QueryVariantCreate", "QueryVariantEdit", "QueryVariantQuery", "QueryVariantResponse", "QueryVariantsResponse", "QueryWorkflowRevisionsRequestOrder", "QueryWorkflowVariantsRequestOrder", "QueryWorkflowsRequestOrder", "Reference", "ReferenceRequestModelInput", "ReferenceRequestModelOutput", "RequestType", "ResolutionInfo", "RetrievalInfo", "RevisionFork", "SecretDto", "SecretDtoData", "SecretKind", "SecretResponseDto", "SecretResponseDtoData", "SessionIdsResponse", "SimpleApplication", "SimpleApplicationCreate", "SimpleApplicationDataInput", "SimpleApplicationDataInputHeadersValue", "SimpleApplicationDataInputRuntime", "SimpleApplicationDataOutput", "SimpleApplicationDataOutputHeadersValue", "SimpleApplicationDataOutputRuntime", "SimpleApplicationEdit", "SimpleApplicationFlags", "SimpleApplicationQuery", "SimpleApplicationQueryFlags", "SimpleApplicationResponse", "SimpleApplicationsResponse", "SimpleEnvironment", "SimpleEnvironmentCreate", "SimpleEnvironmentEdit", "SimpleEnvironmentQuery", "SimpleEnvironmentResponse", "SimpleEnvironmentsResponse", "SimpleEvaluation", "SimpleEvaluationCreate", "SimpleEvaluationData", "SimpleEvaluationDataApplicationSteps", "SimpleEvaluationDataApplicationStepsOneValue", "SimpleEvaluationDataEvaluatorSteps", "SimpleEvaluationDataEvaluatorStepsOneValue", "SimpleEvaluationDataQuerySteps", "SimpleEvaluationDataQueryStepsOneValue", "SimpleEvaluationDataTestsetSteps", "SimpleEvaluationDataTestsetStepsOneValue", "SimpleEvaluationEdit", "SimpleEvaluationIdResponse", "SimpleEvaluationQuery", "SimpleEvaluationResponse", "SimpleEvaluationsResponse", "SimpleEvaluator", "SimpleEvaluatorCreate", "SimpleEvaluatorDataInput", "SimpleEvaluatorDataInputHeadersValue", "SimpleEvaluatorDataInputRuntime", "SimpleEvaluatorDataOutput", "SimpleEvaluatorDataOutputHeadersValue", "SimpleEvaluatorDataOutputRuntime", "SimpleEvaluatorEdit", "SimpleEvaluatorFlags", "SimpleEvaluatorQuery", "SimpleEvaluatorQueryFlags", "SimpleEvaluatorResponse", "SimpleEvaluatorsResponse", "SimpleQueriesResponse", "SimpleQuery", "SimpleQueryCreate", "SimpleQueryEdit", "SimpleQueryQuery", "SimpleQueryResponse", "SimpleQueue", "SimpleQueueCreate", "SimpleQueueData", "SimpleQueueDataEvaluators", "SimpleQueueDataEvaluatorsOneValue", "SimpleQueueIdResponse", "SimpleQueueKind", "SimpleQueueQuery", "SimpleQueueResponse", "SimpleQueueScenariosQuery", "SimpleQueueScenariosResponse", "SimpleQueueSettings", "SimpleQueuesResponse", "SimpleTestset", "SimpleTestsetCreate", "SimpleTestsetEdit", "SimpleTestsetQuery", "SimpleTestsetResponse", "SimpleTestsetsResponse", "SimpleTrace", "SimpleTraceChannel", "SimpleTraceCreate", "SimpleTraceCreateLinks", "SimpleTraceEdit", "SimpleTraceEditLinks", "SimpleTraceKind", "SimpleTraceLinkResponse", "SimpleTraceLinks", "SimpleTraceOrigin", "SimpleTraceQuery", "SimpleTraceQueryLinks", "SimpleTraceReferences", "SimpleTraceResponse", "SimpleTracesResponse", "SimpleWorkflow", "SimpleWorkflowCreate", "SimpleWorkflowDataInput", "SimpleWorkflowDataInputHeadersValue", "SimpleWorkflowDataInputRuntime", "SimpleWorkflowDataOutput", "SimpleWorkflowDataOutputHeadersValue", "SimpleWorkflowDataOutputRuntime", "SimpleWorkflowEdit", "SimpleWorkflowFlags", "SimpleWorkflowQuery", "SimpleWorkflowQueryFlags", "SimpleWorkflowResponse", "SimpleWorkflowsResponse", "SpanInput", "SpanInputEndTime", "SpanInputStartTime", "SpanOutput", "SpanOutputEndTime", "SpanOutputStartTime", "SpanResponse", "SpanType", "SpansNodeInput", "SpansNodeInputEndTime", "SpansNodeInputSpansValue", "SpansNodeInputStartTime", "SpansNodeOutput", "SpansNodeOutputEndTime", "SpansNodeOutputSpansValue", "SpansNodeOutputStartTime", "SpansResponse", "SpansTreeInput", "SpansTreeInputSpansValue", "SpansTreeOutput", "SpansTreeOutputSpansValue", "SsoProviderDto", "SsoProviderInfo", "SsoProviderSettingsDto", "SsoProviders", "StandardProviderDto", "StandardProviderKind", "StandardProviderSettingsDto", "Status", "StringOperator", "TestcaseInput", "TestcaseOutput", "TestcaseResponse", "TestcasesResponse", "Testset", "TestsetCreate", "TestsetEdit", "TestsetFlags", "TestsetQuery", "TestsetResponse", "TestsetRevision", "TestsetRevisionCommit", "TestsetRevisionCreate", "TestsetRevisionDataInput", "TestsetRevisionDataOutput", "TestsetRevisionDelta", "TestsetRevisionDeltaColumns", "TestsetRevisionDeltaRows", "TestsetRevisionEdit", "TestsetRevisionQuery", "TestsetRevisionResponse", "TestsetRevisionsLog", "TestsetRevisionsResponse", "TestsetVariant", "TestsetVariantCreate", "TestsetVariantEdit", "TestsetVariantQuery", "TestsetVariantResponse", "TestsetVariantsResponse", "TestsetsResponse", "TextOptions", "ToolAuthScheme", "ToolCallData", "ToolCallFunction", "ToolCallResponse", "ToolCatalogAction", "ToolCatalogActionDetails", "ToolCatalogActionResponse", "ToolCatalogActionResponseAction", "ToolCatalogActionsResponse", "ToolCatalogActionsResponseActionsItem", "ToolCatalogIntegration", "ToolCatalogIntegrationDetails", "ToolCatalogIntegrationResponse", "ToolCatalogIntegrationResponseIntegration", "ToolCatalogIntegrationsResponse", "ToolCatalogIntegrationsResponseIntegrationsItem", "ToolCatalogProvider", "ToolCatalogProviderDetails", "ToolCatalogProviderResponse", "ToolCatalogProviderResponseProvider", "ToolCatalogProvidersResponse", "ToolCatalogProvidersResponseProvidersItem", "ToolConnection", "ToolConnectionCreate", "ToolConnectionCreateData", "ToolConnectionResponse", "ToolConnectionStatus", "ToolConnectionsResponse", "ToolProviderKind", "ToolResult", "ToolResultData", "TraceIdResponse", "TraceIdsResponse", "TraceInput", "TraceInputSpansValue", "TraceOutput", "TraceOutputSpansValue", "TraceRequest", "TraceResponse", "TraceType", "TracesRequest", "TracesResponse", "TracingQuery", "UnprocessableEntityError", "UserIdsResponse", "ValidationError", "ValidationErrorLocItem", "VariantFork", "WebhookDeliveriesResponse", "WebhookDelivery", "WebhookDeliveryCreate", "WebhookDeliveryData", "WebhookDeliveryQuery", "WebhookDeliveryResponse", "WebhookDeliveryResponseInfo", "WebhookEventType", "WebhookProviderDto", "WebhookProviderSettingsDto", "WebhookSubscription", "WebhookSubscriptionCreate", "WebhookSubscriptionData", "WebhookSubscriptionDataAuthMode", "WebhookSubscriptionEdit", "WebhookSubscriptionQuery", "WebhookSubscriptionResponse", "WebhookSubscriptionTestRequestSubscription", "WebhookSubscriptionsResponse", "Windowing", "WindowingOrder", "Workflow", "WorkflowArtifactFlags", "WorkflowCatalogFlags", "WorkflowCatalogPreset", "WorkflowCatalogPresetResponse", "WorkflowCatalogPresetsResponse", "WorkflowCatalogTemplate", "WorkflowCatalogTemplateResponse", "WorkflowCatalogTemplatesResponse", "WorkflowCatalogType", "WorkflowCatalogTypeResponse", "WorkflowCatalogTypesResponse", "WorkflowCreate", "WorkflowEdit", "WorkflowFlags", "WorkflowFork", "WorkflowResponse", "WorkflowRevisionCommit", "WorkflowRevisionCreate", "WorkflowRevisionDataInput", "WorkflowRevisionDataInputHeadersValue", "WorkflowRevisionDataInputRuntime", "WorkflowRevisionDataOutput", "WorkflowRevisionDataOutputHeadersValue", "WorkflowRevisionDataOutputRuntime", "WorkflowRevisionEdit", "WorkflowRevisionFlags", "WorkflowRevisionFork", "WorkflowRevisionInput", "WorkflowRevisionOutput", "WorkflowRevisionResolveResponse", "WorkflowRevisionResponse", "WorkflowRevisionsLog", "WorkflowRevisionsResponse", "WorkflowVariant", "WorkflowVariantCreate", "WorkflowVariantEdit", "WorkflowVariantFlags", "WorkflowVariantFork", "WorkflowVariantResponse", "WorkflowVariantsResponse", "WorkflowsResponse", "Workspace", "WorkspaceMemberResponse", "WorkspacePermission", "WorkspaceResponse", "access", "annotations", "applications", "billing", "environments", "evaluations", "evaluators", "events", "folders", "invocations", "keys", "legacy", "organizations", "projects", "queries", "secrets", "status", "testcases", "testsets", "tools", "traces", "users", "webhooks", "workflows", "workspaces"]
+__all__ = ["AdminAccountCreateOptions", "AdminAccountRead", "AdminAccountsCreate", "AdminAccountsDelete", "AdminAccountsDeleteTarget", "AdminAccountsResponse", "AdminApiKeyCreate", "AdminApiKeyResponse", "AdminDeleteResponse", "AdminDeletedEntities", "AdminDeletedEntity", "AdminOrganizationCreate", "AdminOrganizationMembershipCreate", "AdminOrganizationMembershipRead", "AdminOrganizationRead", "AdminProjectCreate", "AdminProjectMembershipCreate", "AdminProjectMembershipRead", "AdminProjectRead", "AdminSimpleAccountCreate", "AdminSimpleAccountDeleteEntry", "AdminSimpleAccountRead", "AdminSimpleAccountsApiKeysCreate", "AdminSimpleAccountsCreate", "AdminSimpleAccountsDelete", "AdminSimpleAccountsOrganizationsCreate", "AdminSimpleAccountsOrganizationsMembershipsCreate", "AdminSimpleAccountsOrganizationsTransferOwnership", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjects", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjectsZero", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspaces", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspacesZero", "AdminSimpleAccountsOrganizationsTransferOwnershipResponse", "AdminSimpleAccountsProjectsCreate", "AdminSimpleAccountsProjectsMembershipsCreate", "AdminSimpleAccountsResponse", "AdminSimpleAccountsUsersCreate", "AdminSimpleAccountsUsersIdentitiesCreate", "AdminSimpleAccountsUsersResetPassword", "AdminSimpleAccountsWorkspacesCreate", "AdminSimpleAccountsWorkspacesMembershipsCreate", "AdminStructuredError", "AdminSubscriptionCreate", "AdminSubscriptionRead", "AdminUserCreate", "AdminUserIdentityCreate", "AdminUserIdentityRead", "AdminUserIdentityReadStatus", "AdminUserRead", "AdminWorkspaceCreate", "AdminWorkspaceMembershipCreate", "AdminWorkspaceMembershipRead", "AdminWorkspaceRead", "AgentaApi", "AgentaApiEnvironment", "Analytics", "AnalyticsResponse", "Annotation", "AnnotationCreate", "AnnotationCreateLinks", "AnnotationEdit", "AnnotationEditLinks", "AnnotationLinkResponse", "AnnotationLinks", "AnnotationQuery", "AnnotationQueryLinks", "AnnotationResponse", "AnnotationsResponse", "Application", "ApplicationArtifactFlags", "ApplicationArtifactQueryFlags", "ApplicationCatalogPreset", "ApplicationCatalogPresetResponse", "ApplicationCatalogPresetsResponse", "ApplicationCatalogTemplate", "ApplicationCatalogTemplateResponse", "ApplicationCatalogTemplatesResponse", "ApplicationCatalogType", "ApplicationCatalogTypesResponse", "ApplicationCreate", "ApplicationEdit", "ApplicationFlags", "ApplicationFork", "ApplicationQuery", "ApplicationResponse", "ApplicationRevision", "ApplicationRevisionCommit", "ApplicationRevisionCreate", "ApplicationRevisionDataInput", "ApplicationRevisionDataInputHeadersValue", "ApplicationRevisionDataInputRuntime", "ApplicationRevisionDataOutput", "ApplicationRevisionDataOutputHeadersValue", "ApplicationRevisionDataOutputRuntime", "ApplicationRevisionEdit", "ApplicationRevisionFlags", "ApplicationRevisionFork", "ApplicationRevisionQuery", "ApplicationRevisionQueryFlags", "ApplicationRevisionResolveResponse", "ApplicationRevisionResponse", "ApplicationRevisionsLog", "ApplicationRevisionsResponse", "ApplicationVariant", "ApplicationVariantCreate", "ApplicationVariantEdit", "ApplicationVariantFlags", "ApplicationVariantFork", "ApplicationVariantResponse", "ApplicationVariantsResponse", "ApplicationsResponse", "AsyncAgentaApi", "BodyConfigsFetchVariantsConfigsFetchPost", "Bucket", "CollectStatusResponse", "ComparisonOperator", "Condition", "ConditionOperator", "ConditionOptions", "ConditionValue", "ConfigResponseModel", "CreateSimpleTestsetFromFileRequestFileType", "CreateTestsetRevisionFromFileRequestFileType", "CustomModelSettingsDto", "CustomProviderDto", "CustomProviderKind", "CustomProviderSettingsDto", "DictOperator", "DiscoverResponse", "DiscoverResponseMethodsValue", "EditSimpleTestsetFromFileRequestFileType", "EeSrcModelsApiOrganizationModelsOrganization", "EntityRef", "Environment", "EnvironmentCreate", "EnvironmentEdit", "EnvironmentFlags", "EnvironmentQueryFlags", "EnvironmentResponse", "EnvironmentRevision", "EnvironmentRevisionCommit", "EnvironmentRevisionCreate", "EnvironmentRevisionData", "EnvironmentRevisionDelta", "EnvironmentRevisionEdit", "EnvironmentRevisionResolveResponse", "EnvironmentRevisionResponse", "EnvironmentRevisionsLog", "EnvironmentRevisionsResponse", "EnvironmentVariant", "EnvironmentVariantCreate", "EnvironmentVariantEdit", "EnvironmentVariantResponse", "EnvironmentVariantsResponse", "EnvironmentsResponse", "ErrorPolicy", "EvaluationMetrics", "EvaluationMetricsCreate", "EvaluationMetricsIdsResponse", "EvaluationMetricsQuery", "EvaluationMetricsQueryScenarioIds", "EvaluationMetricsQueryTimestamps", "EvaluationMetricsRefresh", "EvaluationMetricsResponse", "EvaluationQueue", "EvaluationQueueCreate", "EvaluationQueueData", "EvaluationQueueEdit", "EvaluationQueueFlags", "EvaluationQueueIdResponse", "EvaluationQueueIdsResponse", "EvaluationQueueQuery", "EvaluationQueueQueryFlags", "EvaluationQueueResponse", "EvaluationQueueScenariosQuery", "EvaluationQueuesResponse", "EvaluationResult", "EvaluationResultCreate", "EvaluationResultIdResponse", "EvaluationResultIdsResponse", "EvaluationResultQuery", "EvaluationResultResponse", "EvaluationResultsResponse", "EvaluationRun", "EvaluationRunCreate", "EvaluationRunData", "EvaluationRunDataConcurrency", "EvaluationRunDataMapping", "EvaluationRunDataMappingColumn", "EvaluationRunDataMappingStep", "EvaluationRunDataStep", "EvaluationRunDataStepInput", "EvaluationRunDataStepOrigin", "EvaluationRunDataStepType", "EvaluationRunEdit", "EvaluationRunFlags", "EvaluationRunIdResponse", "EvaluationRunIdsRequest", "EvaluationRunIdsResponse", "EvaluationRunQuery", "EvaluationRunQueryFlags", "EvaluationRunResponse", "EvaluationRunsResponse", "EvaluationScenario", "EvaluationScenarioCreate", "EvaluationScenarioEdit", "EvaluationScenarioIdResponse", "EvaluationScenarioIdsResponse", "EvaluationScenarioQuery", "EvaluationScenarioResponse", "EvaluationScenariosResponse", "EvaluationStatus", "Evaluator", "EvaluatorArtifactFlags", "EvaluatorArtifactQueryFlags", "EvaluatorCatalogPreset", "EvaluatorCatalogPresetResponse", "EvaluatorCatalogPresetsResponse", "EvaluatorCatalogTemplate", "EvaluatorCatalogTemplateResponse", "EvaluatorCatalogTemplatesResponse", "EvaluatorCatalogType", "EvaluatorCatalogTypesResponse", "EvaluatorCreate", "EvaluatorEdit", "EvaluatorFlags", "EvaluatorFork", "EvaluatorQuery", "EvaluatorResponse", "EvaluatorRevision", "EvaluatorRevisionCommit", "EvaluatorRevisionCreate", "EvaluatorRevisionDataInput", "EvaluatorRevisionDataInputHeadersValue", "EvaluatorRevisionDataInputRuntime", "EvaluatorRevisionDataOutput", "EvaluatorRevisionDataOutputHeadersValue", "EvaluatorRevisionDataOutputRuntime", "EvaluatorRevisionEdit", "EvaluatorRevisionFlags", "EvaluatorRevisionFork", "EvaluatorRevisionQuery", "EvaluatorRevisionQueryFlags", "EvaluatorRevisionResolveResponse", "EvaluatorRevisionResponse", "EvaluatorRevisionsLog", "EvaluatorRevisionsResponse", "EvaluatorTemplate", "EvaluatorTemplatesResponse", "EvaluatorVariant", "EvaluatorVariantCreate", "EvaluatorVariantEdit", "EvaluatorVariantFlags", "EvaluatorVariantFork", "EvaluatorVariantResponse", "EvaluatorVariantsResponse", "EvaluatorsResponse", "Event", "EventQuery", "EventType", "EventsQueryResponse", "ExistenceOperator", "FetchLegacyAnalyticsRequestNewest", "FetchLegacyAnalyticsRequestOldest", "FetchSimpleTestsetToFileRequestFileType", "FetchTestsetRevisionToFileRequestFileType", "FilteringInput", "FilteringInputConditionsItem", "FilteringOutput", "FilteringOutputConditionsItem", "Focus", "Folder", "FolderCreate", "FolderEdit", "FolderIdResponse", "FolderKind", "FolderQuery", "FolderQueryKinds", "FolderResponse", "FoldersResponse", "Format", "Formatting", typing.Any, typing.Any, "Header", "HttpValidationError", "InviteRequest", "Invocation", "InvocationCreate", "InvocationCreateLinks", "InvocationEdit", "InvocationEditLinks", "InvocationLinkResponse", "InvocationLinks", "InvocationQuery", "InvocationQueryLinks", "InvocationResponse", "InvocationsResponse", "JsonSchemasInput", "JsonSchemasOutput", typing.Any, typing.Any, "LegacyLifecycleDto", "ListApiKeysResponse", "ListOperator", "ListOptions", "LogicalOperator", "MetricSpec", "MetricType", "MetricsBucket", "NumericOperator", "OTelEventInput", "OTelEventInputTimestamp", "OTelEventOutput", "OTelEventOutputTimestamp", "OTelHashInput", "OTelHashOutput", "OTelLinkInput", "OTelLinkOutput", "OTelLinksResponse", "OTelReferenceInput", "OTelReferenceOutput", "OTelSpanKind", "OTelStatusCode", "OTelTracingRequest", "OTelTracingResponse", "OldAnalyticsResponse", "OrganizationDetails", "OrganizationDomainResponse", "OrganizationProviderResponse", "OrganizationUpdate", "OssSrcModelsApiOrganizationModelsOrganization", "Permission", "ProjectsResponse", "QueriesResponse", "Query", "QueryApplicationVariantsRequestOrder", "QueryCreate", "QueryEdit", "QueryEnvironmentRevisionsRequestOrder", "QueryEnvironmentVariantsRequestOrder", "QueryEnvironmentsRequestOrder", "QueryEvaluatorVariantsRequestOrder", "QueryFlags", "QueryQueriesRequestOrder", "QueryQueryFlags", "QueryResponse", "QueryRevision", "QueryRevisionCommit", "QueryRevisionCreate", "QueryRevisionDataInput", "QueryRevisionDataOutput", "QueryRevisionEdit", "QueryRevisionQuery", "QueryRevisionResponse", "QueryRevisionsLog", "QueryRevisionsResponse", "QuerySpansAnalyticsRequestNewest", "QuerySpansAnalyticsRequestOldest", "QueryVariant", "QueryVariantCreate", "QueryVariantEdit", "QueryVariantQuery", "QueryVariantResponse", "QueryVariantsResponse", "QueryWorkflowRevisionsRequestOrder", "QueryWorkflowVariantsRequestOrder", "QueryWorkflowsRequestOrder", "Reference", "ReferenceRequestModelInput", "ReferenceRequestModelOutput", "RequestType", "ResolutionInfo", "RetrievalInfo", "RevisionFork", "SecretDto", "SecretDtoData", "SecretKind", "SecretResponseDto", "SecretResponseDtoData", "SessionIdsResponse", "SimpleApplication", "SimpleApplicationCreate", "SimpleApplicationDataInput", "SimpleApplicationDataInputHeadersValue", "SimpleApplicationDataInputRuntime", "SimpleApplicationDataOutput", "SimpleApplicationDataOutputHeadersValue", "SimpleApplicationDataOutputRuntime", "SimpleApplicationEdit", "SimpleApplicationFlags", "SimpleApplicationQuery", "SimpleApplicationQueryFlags", "SimpleApplicationResponse", "SimpleApplicationsResponse", "SimpleEnvironment", "SimpleEnvironmentCreate", "SimpleEnvironmentEdit", "SimpleEnvironmentQuery", "SimpleEnvironmentResponse", "SimpleEnvironmentsResponse", "SimpleEvaluation", "SimpleEvaluationCreate", "SimpleEvaluationData", "SimpleEvaluationDataApplicationSteps", "SimpleEvaluationDataApplicationStepsOneValue", "SimpleEvaluationDataEvaluatorSteps", "SimpleEvaluationDataEvaluatorStepsOneValue", "SimpleEvaluationDataQuerySteps", "SimpleEvaluationDataQueryStepsOneValue", "SimpleEvaluationDataTestsetSteps", "SimpleEvaluationDataTestsetStepsOneValue", "SimpleEvaluationEdit", "SimpleEvaluationIdResponse", "SimpleEvaluationQuery", "SimpleEvaluationResponse", "SimpleEvaluationsResponse", "SimpleEvaluator", "SimpleEvaluatorCreate", "SimpleEvaluatorDataInput", "SimpleEvaluatorDataInputHeadersValue", "SimpleEvaluatorDataInputRuntime", "SimpleEvaluatorDataOutput", "SimpleEvaluatorDataOutputHeadersValue", "SimpleEvaluatorDataOutputRuntime", "SimpleEvaluatorEdit", "SimpleEvaluatorFlags", "SimpleEvaluatorQuery", "SimpleEvaluatorQueryFlags", "SimpleEvaluatorResponse", "SimpleEvaluatorsResponse", "SimpleQueriesResponse", "SimpleQuery", "SimpleQueryCreate", "SimpleQueryEdit", "SimpleQueryQuery", "SimpleQueryResponse", "SimpleQueue", "SimpleQueueCreate", "SimpleQueueData", "SimpleQueueDataEvaluators", "SimpleQueueDataEvaluatorsOneValue", "SimpleQueueIdResponse", "SimpleQueueKind", "SimpleQueueQuery", "SimpleQueueResponse", "SimpleQueueScenariosQuery", "SimpleQueueScenariosResponse", "SimpleQueueSettings", "SimpleQueuesResponse", "SimpleTestset", "SimpleTestsetCreate", "SimpleTestsetEdit", "SimpleTestsetQuery", "SimpleTestsetResponse", "SimpleTestsetsResponse", "SimpleTrace", "SimpleTraceChannel", "SimpleTraceCreate", "SimpleTraceCreateLinks", "SimpleTraceEdit", "SimpleTraceEditLinks", "SimpleTraceKind", "SimpleTraceLinkResponse", "SimpleTraceLinks", "SimpleTraceOrigin", "SimpleTraceQuery", "SimpleTraceQueryLinks", "SimpleTraceReferences", "SimpleTraceResponse", "SimpleTracesResponse", "SimpleWorkflow", "SimpleWorkflowCreate", "SimpleWorkflowDataInput", "SimpleWorkflowDataInputHeadersValue", "SimpleWorkflowDataInputRuntime", "SimpleWorkflowDataOutput", "SimpleWorkflowDataOutputHeadersValue", "SimpleWorkflowDataOutputRuntime", "SimpleWorkflowEdit", "SimpleWorkflowFlags", "SimpleWorkflowQuery", "SimpleWorkflowQueryFlags", "SimpleWorkflowResponse", "SimpleWorkflowsResponse", "SpanInput", "SpanInputEndTime", "SpanInputStartTime", "SpanOutput", "SpanOutputEndTime", "SpanOutputStartTime", "SpanResponse", "SpanType", "SpansNodeInput", "SpansNodeInputEndTime", "SpansNodeInputSpansValue", "SpansNodeInputStartTime", "SpansNodeOutput", "SpansNodeOutputEndTime", "SpansNodeOutputSpansValue", "SpansNodeOutputStartTime", "SpansResponse", "SpansTreeInput", "SpansTreeInputSpansValue", "SpansTreeOutput", "SpansTreeOutputSpansValue", "SsoProviderDto", "SsoProviderInfo", "SsoProviderSettingsDto", "SsoProviders", "StandardProviderDto", "StandardProviderKind", "StandardProviderSettingsDto", "Status", "StringOperator", "TestcaseInput", "TestcaseOutput", "TestcaseResponse", "TestcasesResponse", "Testset", "TestsetCreate", "TestsetEdit", "TestsetFlags", "TestsetQuery", "TestsetResponse", "TestsetRevision", "TestsetRevisionCommit", "TestsetRevisionCreate", "TestsetRevisionDataInput", "TestsetRevisionDataOutput", "TestsetRevisionDelta", "TestsetRevisionDeltaColumns", "TestsetRevisionDeltaRows", "TestsetRevisionEdit", "TestsetRevisionQuery", "TestsetRevisionResponse", "TestsetRevisionsLog", "TestsetRevisionsResponse", "TestsetVariant", "TestsetVariantCreate", "TestsetVariantEdit", "TestsetVariantQuery", "TestsetVariantResponse", "TestsetVariantsResponse", "TestsetsResponse", "TextOptions", "ToolAuthScheme", "ToolCallData", "ToolCallFunction", "ToolCallResponse", "ToolCatalogAction", "ToolCatalogActionDetails", "ToolCatalogActionResponse", "ToolCatalogActionResponseAction", "ToolCatalogActionsResponse", "ToolCatalogActionsResponseActionsItem", "ToolCatalogIntegration", "ToolCatalogIntegrationDetails", "ToolCatalogIntegrationResponse", "ToolCatalogIntegrationResponseIntegration", "ToolCatalogIntegrationsResponse", "ToolCatalogIntegrationsResponseIntegrationsItem", "ToolCatalogProvider", "ToolCatalogProviderDetails", "ToolCatalogProviderResponse", "ToolCatalogProviderResponseProvider", "ToolCatalogProvidersResponse", "ToolCatalogProvidersResponseProvidersItem", "ToolConnection", "ToolConnectionCreate", "ToolConnectionCreateData", "ToolConnectionResponse", "ToolConnectionStatus", "ToolConnectionsResponse", "ToolProviderKind", "ToolResult", "ToolResultData", "TraceIdResponse", "TraceIdsResponse", "TraceInput", "TraceInputSpansValue", "TraceOutput", "TraceOutputSpansValue", "TraceRequest", "TraceResponse", "TraceType", "TracesRequest", "TracesResponse", "TracingQuery", "UnprocessableEntityError", "UserIdsResponse", "ValidationError", "ValidationErrorLocItem", "VariantFork", "WebhookDeliveriesResponse", "WebhookDelivery", "WebhookDeliveryCreate", "WebhookDeliveryData", "WebhookDeliveryQuery", "WebhookDeliveryResponse", "WebhookDeliveryResponseInfo", "WebhookEventType", "WebhookProviderDto", "WebhookProviderSettingsDto", "WebhookSubscription", "WebhookSubscriptionCreate", "WebhookSubscriptionData", "WebhookSubscriptionDataAuthMode", "WebhookSubscriptionEdit", "WebhookSubscriptionQuery", "WebhookSubscriptionResponse", "WebhookSubscriptionTestRequestSubscription", "WebhookSubscriptionsResponse", "Windowing", "WindowingOrder", "Workflow", "WorkflowArtifactFlags", "WorkflowCatalogFlags", "WorkflowCatalogPreset", "WorkflowCatalogPresetResponse", "WorkflowCatalogPresetsResponse", "WorkflowCatalogTemplate", "WorkflowCatalogTemplateResponse", "WorkflowCatalogTemplatesResponse", "WorkflowCatalogType", "WorkflowCatalogTypeResponse", "WorkflowCatalogTypesResponse", "WorkflowCreate", "WorkflowEdit", "WorkflowFlags", "WorkflowFork", "WorkflowResponse", "WorkflowRevisionCommit", "WorkflowRevisionCreate", "WorkflowRevisionDataInput", "WorkflowRevisionDataInputHeadersValue", "WorkflowRevisionDataInputRuntime", "WorkflowRevisionDataOutput", "WorkflowRevisionDataOutputHeadersValue", "WorkflowRevisionDataOutputRuntime", "WorkflowRevisionEdit", "WorkflowRevisionFlags", "WorkflowRevisionFork", "WorkflowRevisionInput", "WorkflowRevisionOutput", "WorkflowRevisionResolveResponse", "WorkflowRevisionResponse", "WorkflowRevisionsLog", "WorkflowRevisionsResponse", "WorkflowVariant", "WorkflowVariantCreate", "WorkflowVariantEdit", "WorkflowVariantFlags", "WorkflowVariantFork", "WorkflowVariantResponse", "WorkflowVariantsResponse", "WorkflowsResponse", "Workspace", "WorkspaceMemberResponse", "WorkspacePermission", "WorkspaceResponse", "access", "annotations", "applications", "billing", "environments", "evaluations", "evaluators", "events", "folders", "invocations", "keys", "legacy", "organizations", "projects", "queries", "secrets", "status", "testcases", "testsets", "tools", "traces", "users", "webhooks", "workflows", "workspaces"]
diff --git a/clients/python/agenta_client/access/client.py b/clients/python/agenta_client/access/client.py
index fbf72584bc..57edb177e9 100644
--- a/clients/python/agenta_client/access/client.py
+++ b/clients/python/agenta_client/access/client.py
@@ -63,7 +63,7 @@ def fetch_access_roles(self, *, request_options: typing.Optional[RequestOptions]
verbatim from access-controls, including the `"*"` wildcard for
`owner` — callers that need to render the full permission list
should expand the wildcard themselves (see
- `ee.src.services.converters._expand_permissions`).
+ `ee.src.services.db_manager_ee._expand_permissions`).
Parameters
----------
@@ -229,7 +229,7 @@ def sso_callback_redirect(self, organization_slug: str, provider_slug: str, *, r
_response = self._raw_client.sso_callback_redirect(organization_slug, provider_slug, request_options=request_options)
return _response.data
- def verify_permissions(self, *, action: typing.Optional[str] = None, scope_type: typing.Optional[str] = None, scope_id: typing.Optional[str] = None, resource_type: typing.Optional[str] = None, resource_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None) -> typing.Any:
+ def check_permissions(self, *, action: typing.Optional[str] = None, scope_type: typing.Optional[str] = None, scope_id: typing.Optional[str] = None, resource_type: typing.Optional[str] = None, resource_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None) -> typing.Any:
"""
Parameters
----------
@@ -258,9 +258,9 @@ def verify_permissions(self, *, action: typing.Optional[str] = None, scope_type:
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.access.verify_permissions()
+ client.access.check_permissions()
"""
- _response = self._raw_client.verify_permissions(action=action, scope_type=scope_type, scope_id=scope_id, resource_type=resource_type, resource_id=resource_id, request_options=request_options)
+ _response = self._raw_client.check_permissions(action=action, scope_type=scope_type, scope_id=scope_id, resource_type=resource_type, resource_id=resource_id, request_options=request_options)
return _response.data
class AsyncAccessClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -324,7 +324,7 @@ async def fetch_access_roles(self, *, request_options: typing.Optional[RequestOp
verbatim from access-controls, including the `"*"` wildcard for
`owner` — callers that need to render the full permission list
should expand the wildcard themselves (see
- `ee.src.services.converters._expand_permissions`).
+ `ee.src.services.db_manager_ee._expand_permissions`).
Parameters
----------
@@ -530,7 +530,7 @@ async def main() -> None:
_response = await self._raw_client.sso_callback_redirect(organization_slug, provider_slug, request_options=request_options)
return _response.data
- async def verify_permissions(self, *, action: typing.Optional[str] = None, scope_type: typing.Optional[str] = None, scope_id: typing.Optional[str] = None, resource_type: typing.Optional[str] = None, resource_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None) -> typing.Any:
+ async def check_permissions(self, *, action: typing.Optional[str] = None, scope_type: typing.Optional[str] = None, scope_id: typing.Optional[str] = None, resource_type: typing.Optional[str] = None, resource_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None) -> typing.Any:
"""
Parameters
----------
@@ -564,10 +564,10 @@ async def verify_permissions(self, *, action: typing.Optional[str] = None, scope
async def main() -> None:
- await client.access.verify_permissions()
+ await client.access.check_permissions()
asyncio.run(main())
"""
- _response = await self._raw_client.verify_permissions(action=action, scope_type=scope_type, scope_id=scope_id, resource_type=resource_type, resource_id=resource_id, request_options=request_options)
+ _response = await self._raw_client.check_permissions(action=action, scope_type=scope_type, scope_id=scope_id, resource_type=resource_type, resource_id=resource_id, request_options=request_options)
return _response.data
diff --git a/clients/python/agenta_client/access/raw_client.py b/clients/python/agenta_client/access/raw_client.py
index 8a2a1e32d3..deb8f88f23 100644
--- a/clients/python/agenta_client/access/raw_client.py
+++ b/clients/python/agenta_client/access/raw_client.py
@@ -64,7 +64,7 @@ def fetch_access_roles(self, *, request_options: typing.Optional[RequestOptions]
verbatim from access-controls, including the `"*"` wildcard for
`owner` — callers that need to render the full permission list
should expand the wildcard themselves (see
- `ee.src.services.converters._expand_permissions`).
+ `ee.src.services.db_manager_ee._expand_permissions`).
Parameters
----------
@@ -305,7 +305,7 @@ def sso_callback_redirect(self, organization_slug: str, provider_slug: str, *, r
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def verify_permissions(self, *, action: typing.Optional[str] = None, scope_type: typing.Optional[str] = None, scope_id: typing.Optional[str] = None, resource_type: typing.Optional[str] = None, resource_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[typing.Any]:
+ def check_permissions(self, *, action: typing.Optional[str] = None, scope_type: typing.Optional[str] = None, scope_id: typing.Optional[str] = None, resource_type: typing.Optional[str] = None, resource_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[typing.Any]:
"""
Parameters
----------
@@ -328,7 +328,7 @@ def verify_permissions(self, *, action: typing.Optional[str] = None, scope_type:
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- "permissions/verify",method="GET",
+ "access/permissions/check",method="GET",
params={"action": action, "scope_type": scope_type, "scope_id": scope_id, "resource_type": resource_type, "resource_id": resource_id, }
,
request_options=request_options,)
@@ -405,7 +405,7 @@ async def fetch_access_roles(self, *, request_options: typing.Optional[RequestOp
verbatim from access-controls, including the `"*"` wildcard for
`owner` — callers that need to render the full permission list
should expand the wildcard themselves (see
- `ee.src.services.converters._expand_permissions`).
+ `ee.src.services.db_manager_ee._expand_permissions`).
Parameters
----------
@@ -646,7 +646,7 @@ async def sso_callback_redirect(self, organization_slug: str, provider_slug: str
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def verify_permissions(self, *, action: typing.Optional[str] = None, scope_type: typing.Optional[str] = None, scope_id: typing.Optional[str] = None, resource_type: typing.Optional[str] = None, resource_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[typing.Any]:
+ async def check_permissions(self, *, action: typing.Optional[str] = None, scope_type: typing.Optional[str] = None, scope_id: typing.Optional[str] = None, resource_type: typing.Optional[str] = None, resource_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[typing.Any]:
"""
Parameters
----------
@@ -669,7 +669,7 @@ async def verify_permissions(self, *, action: typing.Optional[str] = None, scope
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "permissions/verify",method="GET",
+ "access/permissions/check",method="GET",
params={"action": action, "scope_type": scope_type, "scope_id": scope_id, "resource_type": resource_type, "resource_id": resource_id, }
,
request_options=request_options,)
diff --git a/clients/python/agenta_client/client.py b/clients/python/agenta_client/client.py
index 6b07f0438b..a451eb5fc8 100644
--- a/clients/python/agenta_client/client.py
+++ b/clients/python/agenta_client/client.py
@@ -80,13 +80,13 @@ def __init__(self, *, base_url: typing.Optional[str] = None, environment: Agenta
, timeout=_defaulted_timeout)
self._access: typing.Optional[AccessClient] = None
self._billing: typing.Optional[BillingClient] = None
+ self._events: typing.Optional[EventsClient] = None
self._organizations: typing.Optional[OrganizationsClient] = None
self._workspaces: typing.Optional[WorkspacesClient] = None
self._secrets: typing.Optional[SecretsClient] = None
self._webhooks: typing.Optional[WebhooksClient] = None
self._legacy: typing.Optional[LegacyClient] = None
self._traces: typing.Optional[TracesClient] = None
- self._events: typing.Optional[EventsClient] = None
self._invocations: typing.Optional[InvocationsClient] = None
self._annotations: typing.Optional[AnnotationsClient] = None
self._testcases: typing.Optional[TestcasesClient] = None
@@ -118,6 +118,13 @@ def billing(self):
self._billing = BillingClient(client_wrapper=self._client_wrapper)
return self._billing
+ @property
+ def events(self):
+ if self._events is None:
+ from .events.client import EventsClient # noqa: E402
+ self._events = EventsClient(client_wrapper=self._client_wrapper)
+ return self._events
+
@property
def organizations(self):
if self._organizations is None:
@@ -160,13 +167,6 @@ def traces(self):
self._traces = TracesClient(client_wrapper=self._client_wrapper)
return self._traces
- @property
- def events(self):
- if self._events is None:
- from .events.client import EventsClient # noqa: E402
- self._events = EventsClient(client_wrapper=self._client_wrapper)
- return self._events
-
@property
def invocations(self):
if self._invocations is None:
@@ -324,13 +324,13 @@ def __init__(self, *, base_url: typing.Optional[str] = None, environment: Agenta
, timeout=_defaulted_timeout)
self._access: typing.Optional[AsyncAccessClient] = None
self._billing: typing.Optional[AsyncBillingClient] = None
+ self._events: typing.Optional[AsyncEventsClient] = None
self._organizations: typing.Optional[AsyncOrganizationsClient] = None
self._workspaces: typing.Optional[AsyncWorkspacesClient] = None
self._secrets: typing.Optional[AsyncSecretsClient] = None
self._webhooks: typing.Optional[AsyncWebhooksClient] = None
self._legacy: typing.Optional[AsyncLegacyClient] = None
self._traces: typing.Optional[AsyncTracesClient] = None
- self._events: typing.Optional[AsyncEventsClient] = None
self._invocations: typing.Optional[AsyncInvocationsClient] = None
self._annotations: typing.Optional[AsyncAnnotationsClient] = None
self._testcases: typing.Optional[AsyncTestcasesClient] = None
@@ -362,6 +362,13 @@ def billing(self):
self._billing = AsyncBillingClient(client_wrapper=self._client_wrapper)
return self._billing
+ @property
+ def events(self):
+ if self._events is None:
+ from .events.client import AsyncEventsClient # noqa: E402
+ self._events = AsyncEventsClient(client_wrapper=self._client_wrapper)
+ return self._events
+
@property
def organizations(self):
if self._organizations is None:
@@ -404,13 +411,6 @@ def traces(self):
self._traces = AsyncTracesClient(client_wrapper=self._client_wrapper)
return self._traces
- @property
- def events(self):
- if self._events is None:
- from .events.client import AsyncEventsClient # noqa: E402
- self._events = AsyncEventsClient(client_wrapper=self._client_wrapper)
- return self._events
-
@property
def invocations(self):
if self._invocations is None:
diff --git a/clients/python/agenta_client/evaluations/client.py b/clients/python/agenta_client/evaluations/client.py
index 5c5e1be270..b22620b6ce 100644
--- a/clients/python/agenta_client/evaluations/client.py
+++ b/clients/python/agenta_client/evaluations/client.py
@@ -1,11 +1,11 @@
# This file was auto-generated by Fern from our API Definition.
+import datetime as dt
import typing
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
from ..types.evaluation_metrics_create import EvaluationMetricsCreate
-from ..types.evaluation_metrics_edit import EvaluationMetricsEdit
from ..types.evaluation_metrics_ids_response import EvaluationMetricsIdsResponse
from ..types.evaluation_metrics_query import EvaluationMetricsQuery
from ..types.evaluation_metrics_refresh import EvaluationMetricsRefresh
@@ -19,13 +19,13 @@
from ..types.evaluation_queue_scenarios_query import EvaluationQueueScenariosQuery
from ..types.evaluation_queues_response import EvaluationQueuesResponse
from ..types.evaluation_result_create import EvaluationResultCreate
-from ..types.evaluation_result_edit import EvaluationResultEdit
from ..types.evaluation_result_id_response import EvaluationResultIdResponse
from ..types.evaluation_result_ids_response import EvaluationResultIdsResponse
from ..types.evaluation_result_query import EvaluationResultQuery
from ..types.evaluation_result_response import EvaluationResultResponse
from ..types.evaluation_results_response import EvaluationResultsResponse
from ..types.evaluation_run_create import EvaluationRunCreate
+from ..types.evaluation_run_data_step import EvaluationRunDataStep
from ..types.evaluation_run_edit import EvaluationRunEdit
from ..types.evaluation_run_id_response import EvaluationRunIdResponse
from ..types.evaluation_run_ids_response import EvaluationRunIdsResponse
@@ -358,14 +358,12 @@ def close_run(self, run_id: str, *, status: typing.Optional[EvaluationStatus] =
_response = self._raw_client.close_run(run_id, status=status, request_options=request_options)
return _response.data
- def close_run_with_status(self, run_id: str, status: typing.Optional[EvaluationStatus], *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
+ def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
"""
Parameters
----------
run_id : str
- status : typing.Optional[EvaluationStatus]
-
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -381,15 +379,14 @@ def close_run_with_status(self, run_id: str, status: typing.Optional[EvaluationS
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.close_run_with_status(
+ client.evaluations.open_run(
run_id="run_id",
- status="pending",
)
"""
- _response = self._raw_client.close_run_with_status(run_id, status, request_options=request_options)
+ _response = self._raw_client.open_run(run_id, request_options=request_options)
return _response.data
- def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
+ def fetch_default_queue(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueueResponse:
"""
Parameters
----------
@@ -400,7 +397,7 @@ def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptio
Returns
-------
- EvaluationRunResponse
+ EvaluationQueueResponse
Successful Response
Examples
@@ -410,11 +407,11 @@ def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptio
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.open_run(
+ client.evaluations.fetch_default_queue(
run_id="run_id",
)
"""
- _response = self._raw_client.open_run(run_id, request_options=request_options)
+ _response = self._raw_client.fetch_default_queue(run_id, request_options=request_options)
return _response.data
def create_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
@@ -620,7 +617,7 @@ def edit_scenario(self, scenario_id: str, *, scenario: EvaluationScenarioEdit, r
_response = self._raw_client.edit_scenario(scenario_id, scenario=scenario, request_options=request_options)
return _response.data
- def create_results(self, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
+ def set_results(self, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
"""
Parameters
----------
@@ -641,7 +638,7 @@ def create_results(self, *, results: typing.Sequence[EvaluationResultCreate], re
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.create_results(
+ client.evaluations.set_results(
results=[
EvaluationResultCreate(
step_key="step_key",
@@ -651,7 +648,7 @@ def create_results(self, *, results: typing.Sequence[EvaluationResultCreate], re
],
)
"""
- _response = self._raw_client.create_results(results=results, request_options=request_options)
+ _response = self._raw_client.set_results(results=results, request_options=request_options)
return _response.data
def delete_results(self, *, result_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultIdsResponse:
@@ -682,34 +679,6 @@ def delete_results(self, *, result_ids: typing.Sequence[str], request_options: t
_response = self._raw_client.delete_results(result_ids=result_ids, request_options=request_options)
return _response.data
- def edit_results(self, *, results: typing.Sequence[EvaluationResultEdit], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
- """
- Parameters
- ----------
- results : typing.Sequence[EvaluationResultEdit]
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- EvaluationResultsResponse
- Successful Response
-
- Examples
- --------
- from agenta import AgentaApi, EvaluationResultEdit
-
- client = AgentaApi(
- api_key="YOUR_API_KEY",
- )
- client.evaluations.edit_results(
- results=[EvaluationResultEdit()],
- )
- """
- _response = self._raw_client.edit_results(results=results, request_options=request_options)
- return _response.data
-
def query_results(self, *, result: typing.Optional[EvaluationResultQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
"""
Parameters
@@ -794,37 +763,6 @@ def delete_result(self, result_id: str, *, request_options: typing.Optional[Requ
_response = self._raw_client.delete_result(result_id, request_options=request_options)
return _response.data
- def edit_result(self, result_id: str, *, result: EvaluationResultEdit, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultResponse:
- """
- Parameters
- ----------
- result_id : str
-
- result : EvaluationResultEdit
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- EvaluationResultResponse
- Successful Response
-
- Examples
- --------
- from agenta import AgentaApi, EvaluationResultEdit
-
- client = AgentaApi(
- api_key="YOUR_API_KEY",
- )
- client.evaluations.edit_result(
- result_id="result_id",
- result=EvaluationResultEdit(),
- )
- """
- _response = self._raw_client.edit_result(result_id, result=result, request_options=request_options)
- return _response.data
-
def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
"""
Parameters
@@ -853,7 +791,7 @@ def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_options:
_response = self._raw_client.refresh_metrics(metrics=metrics, request_options=request_options)
return _response.data
- def create_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
+ def set_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
"""
Parameters
----------
@@ -874,7 +812,7 @@ def create_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], r
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.create_metrics(
+ client.evaluations.set_metrics(
metrics=[
EvaluationMetricsCreate(
run_id="run_id",
@@ -882,7 +820,7 @@ def create_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], r
],
)
"""
- _response = self._raw_client.create_metrics(metrics=metrics, request_options=request_options)
+ _response = self._raw_client.set_metrics(metrics=metrics, request_options=request_options)
return _response.data
def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsIdsResponse:
@@ -913,11 +851,13 @@ def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_options:
_response = self._raw_client.delete_metrics(metrics_ids=metrics_ids, request_options=request_options)
return _response.data
- def edit_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsEdit], request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
+ def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
"""
Parameters
----------
- metrics : typing.Sequence[EvaluationMetricsEdit]
+ metrics : typing.Optional[EvaluationMetricsQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -929,25 +869,21 @@ def edit_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsEdit], reque
Examples
--------
- from agenta import AgentaApi, EvaluationMetricsEdit
+ from agenta import AgentaApi
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.edit_metrics(
- metrics=[EvaluationMetricsEdit()],
- )
+ client.evaluations.query_metrics()
"""
- _response = self._raw_client.edit_metrics(metrics=metrics, request_options=request_options)
+ _response = self._raw_client.query_metrics(metrics=metrics, windowing=windowing, request_options=request_options)
return _response.data
- def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
+ def fetch_metric(self, metrics_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
"""
Parameters
----------
- metrics : typing.Optional[EvaluationMetricsQuery]
-
- windowing : typing.Optional[Windowing]
+ metrics_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -964,9 +900,39 @@ def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery] = OM
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.query_metrics()
+ client.evaluations.fetch_metric(
+ metrics_id="metrics_id",
+ )
"""
- _response = self._raw_client.query_metrics(metrics=metrics, windowing=windowing, request_options=request_options)
+ _response = self._raw_client.fetch_metric(metrics_id, request_options=request_options)
+ return _response.data
+
+ def delete_metric(self, metrics_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsIdsResponse:
+ """
+ Parameters
+ ----------
+ metrics_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationMetricsIdsResponse
+ Successful Response
+
+ Examples
+ --------
+ from agenta import AgentaApi
+
+ client = AgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+ client.evaluations.delete_metric(
+ metrics_id="metrics_id",
+ )
+ """
+ _response = self._raw_client.delete_metric(metrics_id, request_options=request_options)
return _response.data
def create_queues(self, *, queues: typing.Sequence[EvaluationQueueCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueuesResponse:
@@ -1234,18 +1200,20 @@ def create_simple_evaluation(self, *, evaluation: SimpleEvaluationCreate, reques
_response = self._raw_client.create_simple_evaluation(evaluation=evaluation, request_options=request_options)
return _response.data
- def fetch_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
+ def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEvaluationQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationsResponse:
"""
Parameters
----------
- evaluation_id : str
+ evaluation : typing.Optional[SimpleEvaluationQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationResponse
+ SimpleEvaluationsResponse
Successful Response
Examples
@@ -1255,14 +1223,12 @@ def fetch_simple_evaluation(self, evaluation_id: str, *, request_options: typing
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.fetch_simple_evaluation(
- evaluation_id="evaluation_id",
- )
+ client.evaluations.query_simple_evaluations()
"""
- _response = self._raw_client.fetch_simple_evaluation(evaluation_id, request_options=request_options)
+ _response = self._raw_client.query_simple_evaluations(evaluation=evaluation, windowing=windowing, request_options=request_options)
return _response.data
- def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationIdResponse:
+ def fetch_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
"""
Parameters
----------
@@ -1273,7 +1239,7 @@ def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typin
Returns
-------
- SimpleEvaluationIdResponse
+ SimpleEvaluationResponse
Successful Response
Examples
@@ -1283,70 +1249,70 @@ def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typin
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.delete_simple_evaluation(
+ client.evaluations.fetch_simple_evaluation(
evaluation_id="evaluation_id",
)
"""
- _response = self._raw_client.delete_simple_evaluation(evaluation_id, request_options=request_options)
+ _response = self._raw_client.fetch_simple_evaluation(evaluation_id, request_options=request_options)
return _response.data
- def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: SimpleEvaluationEdit, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
+ def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationIdResponse:
"""
Parameters
----------
evaluation_id : str
- evaluation : SimpleEvaluationEdit
-
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationResponse
+ SimpleEvaluationIdResponse
Successful Response
Examples
--------
- from agenta import AgentaApi, SimpleEvaluationEdit
+ from agenta import AgentaApi
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.edit_simple_evaluation(
+ client.evaluations.delete_simple_evaluation(
evaluation_id="evaluation_id",
- evaluation=SimpleEvaluationEdit(),
)
"""
- _response = self._raw_client.edit_simple_evaluation(evaluation_id, evaluation=evaluation, request_options=request_options)
+ _response = self._raw_client.delete_simple_evaluation(evaluation_id, request_options=request_options)
return _response.data
- def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEvaluationQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationsResponse:
+ def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: SimpleEvaluationEdit, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
"""
Parameters
----------
- evaluation : typing.Optional[SimpleEvaluationQuery]
+ evaluation_id : str
- windowing : typing.Optional[Windowing]
+ evaluation : SimpleEvaluationEdit
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationsResponse
+ SimpleEvaluationResponse
Successful Response
Examples
--------
- from agenta import AgentaApi
+ from agenta import AgentaApi, SimpleEvaluationEdit
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.query_simple_evaluations()
+ client.evaluations.edit_simple_evaluation(
+ evaluation_id="evaluation_id",
+ evaluation=SimpleEvaluationEdit(),
+ )
"""
- _response = self._raw_client.query_simple_evaluations(evaluation=evaluation, windowing=windowing, request_options=request_options)
+ _response = self._raw_client.edit_simple_evaluation(evaluation_id, evaluation=evaluation, request_options=request_options)
return _response.data
def start_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
@@ -1461,49 +1427,64 @@ def open_simple_evaluation(self, evaluation_id: str, *, request_options: typing.
_response = self._raw_client.open_simple_evaluation(evaluation_id, request_options=request_options)
return _response.data
- def create_simple_queue(self, *, queue: SimpleQueueCreate, request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueResponse:
+ def populate_slice(self, evaluation_id: str, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
"""
Parameters
----------
- queue : SimpleQueueCreate
+ evaluation_id : str
+
+ results : typing.Sequence[EvaluationResultCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleQueueResponse
+ EvaluationResultsResponse
Successful Response
Examples
--------
- from agenta import AgentaApi, SimpleQueueCreate
+ from agenta import AgentaApi, EvaluationResultCreate
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.create_simple_queue(
- queue=SimpleQueueCreate(),
+ client.evaluations.populate_slice(
+ evaluation_id="evaluation_id",
+ results=[
+ EvaluationResultCreate(
+ step_key="step_key",
+ scenario_id="scenario_id",
+ run_id="run_id",
+ )
+ ],
)
"""
- _response = self._raw_client.create_simple_queue(queue=queue, request_options=request_options)
+ _response = self._raw_client.populate_slice(evaluation_id, results=results, request_options=request_options)
return _response.data
- def query_simple_queues(self, *, queue: typing.Optional[SimpleQueueQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> SimpleQueuesResponse:
+ def process_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, overwrite: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> typing.Any:
"""
Parameters
----------
- queue : typing.Optional[SimpleQueueQuery]
+ evaluation_id : str
- windowing : typing.Optional[Windowing]
+ scenario_ids : typing.Optional[typing.Sequence[str]]
+
+ step_keys : typing.Optional[typing.Sequence[str]]
+
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
+
+ overwrite : typing.Optional[bool]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleQueuesResponse
- Successful Response
+ typing.Any
+ Accepted.
Examples
--------
@@ -1512,23 +1493,31 @@ def query_simple_queues(self, *, queue: typing.Optional[SimpleQueueQuery] = OMIT
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.query_simple_queues()
+ client.evaluations.process_slice(
+ evaluation_id="evaluation_id",
+ )
"""
- _response = self._raw_client.query_simple_queues(queue=queue, windowing=windowing, request_options=request_options)
+ _response = self._raw_client.process_slice(evaluation_id, scenario_ids=scenario_ids, step_keys=step_keys, repeat_idxs=repeat_idxs, overwrite=overwrite, request_options=request_options)
return _response.data
- def fetch_simple_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueResponse:
+ def probe_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
+
+ scenario_ids : typing.Optional[typing.Sequence[str]]
+
+ step_keys : typing.Optional[typing.Sequence[str]]
+
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleQueueResponse
+ EvaluationResultsResponse
Successful Response
Examples
@@ -1538,32 +1527,31 @@ def fetch_simple_queue(self, queue_id: str, *, request_options: typing.Optional[
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.fetch_simple_queue(
- queue_id="queue_id",
+ client.evaluations.probe_slice(
+ evaluation_id="evaluation_id",
)
"""
- _response = self._raw_client.fetch_simple_queue(queue_id, request_options=request_options)
+ _response = self._raw_client.probe_slice(evaluation_id, scenario_ids=scenario_ids, step_keys=step_keys, repeat_idxs=repeat_idxs, request_options=request_options)
return _response.data
- def query_simple_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[SimpleQueueScenariosQuery] = OMIT, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueScenariosResponse:
+ def prune_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
- queue : typing.Optional[SimpleQueueScenariosQuery]
+ scenario_ids : typing.Optional[typing.Sequence[str]]
- scenario : typing.Optional[EvaluationScenarioQuery]
+ step_keys : typing.Optional[typing.Sequence[str]]
- windowing : typing.Optional[Windowing]
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleQueueScenariosResponse
- Successful Response
+ None
Examples
--------
@@ -1572,27 +1560,29 @@ def query_simple_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.query_simple_queue_scenarios(
- queue_id="queue_id",
+ client.evaluations.prune_slice(
+ evaluation_id="evaluation_id",
)
"""
- _response = self._raw_client.query_simple_queue_scenarios(queue_id, queue=queue, scenario=scenario, windowing=windowing, request_options=request_options)
+ _response = self._raw_client.prune_slice(evaluation_id, scenario_ids=scenario_ids, step_keys=step_keys, repeat_idxs=repeat_idxs, request_options=request_options)
return _response.data
- def add_simple_queue_traces(self, queue_id: str, *, trace_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueIdResponse:
+ def add_scenarios(self, evaluation_id: str, *, count: int, timestamp: typing.Optional[dt.datetime] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
- trace_ids : typing.Sequence[str]
+ count : int
+
+ timestamp : typing.Optional[dt.datetime]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleQueueIdResponse
+ EvaluationScenariosResponse
Successful Response
Examples
@@ -1602,29 +1592,28 @@ def add_simple_queue_traces(self, queue_id: str, *, trace_ids: typing.Sequence[s
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.add_simple_queue_traces(
- queue_id="queue_id",
- trace_ids=["trace_ids"],
+ client.evaluations.add_scenarios(
+ evaluation_id="evaluation_id",
+ count=1,
)
"""
- _response = self._raw_client.add_simple_queue_traces(queue_id, trace_ids=trace_ids, request_options=request_options)
+ _response = self._raw_client.add_scenarios(evaluation_id, count=count, timestamp=timestamp, request_options=request_options)
return _response.data
- def add_simple_queue_testcases(self, queue_id: str, *, testcase_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueIdResponse:
+ def remove_scenarios(self, evaluation_id: str, *, scenario_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
- testcase_ids : typing.Sequence[str]
+ scenario_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleQueueIdResponse
- Successful Response
+ None
Examples
--------
@@ -1633,65 +1622,489 @@ def add_simple_queue_testcases(self, queue_id: str, *, testcase_ids: typing.Sequ
client = AgentaApi(
api_key="YOUR_API_KEY",
)
- client.evaluations.add_simple_queue_testcases(
- queue_id="queue_id",
- testcase_ids=["testcase_ids"],
+ client.evaluations.remove_scenarios(
+ evaluation_id="evaluation_id",
+ scenario_ids=["scenario_ids"],
)
"""
- _response = self._raw_client.add_simple_queue_testcases(queue_id, testcase_ids=testcase_ids, request_options=request_options)
+ _response = self._raw_client.remove_scenarios(evaluation_id, scenario_ids=scenario_ids, request_options=request_options)
return _response.data
-class AsyncEvaluationsClient:
- def __init__(self, *, client_wrapper: AsyncClientWrapper):
- self._raw_client = AsyncRawEvaluationsClient(client_wrapper=client_wrapper)
-
- @property
- def with_raw_response(self) -> AsyncRawEvaluationsClient:
- """
- Retrieves a raw implementation of this client that returns raw responses.
-
- Returns
- -------
- AsyncRawEvaluationsClient
- """
- return self._raw_client
- async def create_runs(self, *, runs: typing.Sequence[EvaluationRunCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunsResponse:
+ def add_steps(self, evaluation_id: str, *, steps: typing.Sequence[EvaluationRunDataStep], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
"""
Parameters
----------
- runs : typing.Sequence[EvaluationRunCreate]
+ evaluation_id : str
+
+ steps : typing.Sequence[EvaluationRunDataStep]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationRunsResponse
+ EvaluationRunResponse
Successful Response
Examples
--------
- import asyncio
-
- from agenta import AsyncAgentaApi, EvaluationRunCreate
+ from agenta import AgentaApi, EvaluationRunDataStep, Reference
- client = AsyncAgentaApi(
+ client = AgentaApi(
api_key="YOUR_API_KEY",
)
-
-
+ client.evaluations.add_steps(
+ evaluation_id="evaluation_id",
+ steps=[
+ EvaluationRunDataStep(
+ key="key",
+ type="input",
+ origin="custom",
+ references={"key": Reference()},
+ )
+ ],
+ )
+ """
+ _response = self._raw_client.add_steps(evaluation_id, steps=steps, request_options=request_options)
+ return _response.data
+
+ def remove_steps(self, evaluation_id: str, *, step_keys: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
+ """
+ Parameters
+ ----------
+ evaluation_id : str
+
+ step_keys : typing.Sequence[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationRunResponse
+ Successful Response
+
+ Examples
+ --------
+ from agenta import AgentaApi
+
+ client = AgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+ client.evaluations.remove_steps(
+ evaluation_id="evaluation_id",
+ step_keys=["step_keys"],
+ )
+ """
+ _response = self._raw_client.remove_steps(evaluation_id, step_keys=step_keys, request_options=request_options)
+ return _response.data
+
+ def set_repeats(self, evaluation_id: str, *, repeats: int, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
+ """
+ Parameters
+ ----------
+ evaluation_id : str
+
+ repeats : int
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationRunResponse
+ Successful Response
+
+ Examples
+ --------
+ from agenta import AgentaApi
+
+ client = AgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+ client.evaluations.set_repeats(
+ evaluation_id="evaluation_id",
+ repeats=1,
+ )
+ """
+ _response = self._raw_client.set_repeats(evaluation_id, repeats=repeats, request_options=request_options)
+ return _response.data
+
+ def create_simple_queue(self, *, queue: SimpleQueueCreate, request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueResponse:
+ """
+ Parameters
+ ----------
+ queue : SimpleQueueCreate
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SimpleQueueResponse
+ Successful Response
+
+ Examples
+ --------
+ from agenta import AgentaApi, SimpleQueueCreate
+
+ client = AgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+ client.evaluations.create_simple_queue(
+ queue=SimpleQueueCreate(),
+ )
+ """
+ _response = self._raw_client.create_simple_queue(queue=queue, request_options=request_options)
+ return _response.data
+
+ def query_simple_queues(self, *, queue: typing.Optional[SimpleQueueQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> SimpleQueuesResponse:
+ """
+ Parameters
+ ----------
+ queue : typing.Optional[SimpleQueueQuery]
+
+ windowing : typing.Optional[Windowing]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SimpleQueuesResponse
+ Successful Response
+
+ Examples
+ --------
+ from agenta import AgentaApi
+
+ client = AgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+ client.evaluations.query_simple_queues()
+ """
+ _response = self._raw_client.query_simple_queues(queue=queue, windowing=windowing, request_options=request_options)
+ return _response.data
+
+ def fetch_simple_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueResponse:
+ """
+ Parameters
+ ----------
+ queue_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SimpleQueueResponse
+ Successful Response
+
+ Examples
+ --------
+ from agenta import AgentaApi
+
+ client = AgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+ client.evaluations.fetch_simple_queue(
+ queue_id="queue_id",
+ )
+ """
+ _response = self._raw_client.fetch_simple_queue(queue_id, request_options=request_options)
+ return _response.data
+
+ def query_simple_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[SimpleQueueScenariosQuery] = OMIT, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueScenariosResponse:
+ """
+ Parameters
+ ----------
+ queue_id : str
+
+ queue : typing.Optional[SimpleQueueScenariosQuery]
+
+ scenario : typing.Optional[EvaluationScenarioQuery]
+
+ windowing : typing.Optional[Windowing]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SimpleQueueScenariosResponse
+ Successful Response
+
+ Examples
+ --------
+ from agenta import AgentaApi
+
+ client = AgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+ client.evaluations.query_simple_queue_scenarios(
+ queue_id="queue_id",
+ )
+ """
+ _response = self._raw_client.query_simple_queue_scenarios(queue_id, queue=queue, scenario=scenario, windowing=windowing, request_options=request_options)
+ return _response.data
+
+ def add_simple_queue_traces(self, queue_id: str, *, trace_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueIdResponse:
+ """
+ Parameters
+ ----------
+ queue_id : str
+
+ trace_ids : typing.Sequence[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SimpleQueueIdResponse
+ Successful Response
+
+ Examples
+ --------
+ from agenta import AgentaApi
+
+ client = AgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+ client.evaluations.add_simple_queue_traces(
+ queue_id="queue_id",
+ trace_ids=["trace_ids"],
+ )
+ """
+ _response = self._raw_client.add_simple_queue_traces(queue_id, trace_ids=trace_ids, request_options=request_options)
+ return _response.data
+
+ def add_simple_queue_testcases(self, queue_id: str, *, testcase_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueIdResponse:
+ """
+ Parameters
+ ----------
+ queue_id : str
+
+ testcase_ids : typing.Sequence[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SimpleQueueIdResponse
+ Successful Response
+
+ Examples
+ --------
+ from agenta import AgentaApi
+
+ client = AgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+ client.evaluations.add_simple_queue_testcases(
+ queue_id="queue_id",
+ testcase_ids=["testcase_ids"],
+ )
+ """
+ _response = self._raw_client.add_simple_queue_testcases(queue_id, testcase_ids=testcase_ids, request_options=request_options)
+ return _response.data
+class AsyncEvaluationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawEvaluationsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawEvaluationsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawEvaluationsClient
+ """
+ return self._raw_client
+
+ async def create_runs(self, *, runs: typing.Sequence[EvaluationRunCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunsResponse:
+ """
+ Parameters
+ ----------
+ runs : typing.Sequence[EvaluationRunCreate]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationRunsResponse
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from agenta import AsyncAgentaApi, EvaluationRunCreate
+
+ client = AsyncAgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.evaluations.create_runs(
+ runs=[EvaluationRunCreate()],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create_runs(runs=runs, request_options=request_options)
+ return _response.data
+
+ async def delete_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunIdsResponse:
+ """
+ Parameters
+ ----------
+ run_ids : typing.Sequence[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationRunIdsResponse
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from agenta import AsyncAgentaApi
+
+ client = AsyncAgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.evaluations.delete_runs(
+ run_ids=["run_ids"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete_runs(run_ids=run_ids, request_options=request_options)
+ return _response.data
+
+ async def edit_runs(self, *, runs: typing.Sequence[EvaluationRunEdit], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunsResponse:
+ """
+ Parameters
+ ----------
+ runs : typing.Sequence[EvaluationRunEdit]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationRunsResponse
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from agenta import AsyncAgentaApi, EvaluationRunEdit
+
+ client = AsyncAgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.evaluations.edit_runs(
+ runs=[EvaluationRunEdit()],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.edit_runs(runs=runs, request_options=request_options)
+ return _response.data
+
+ async def query_runs(self, *, run: typing.Optional[EvaluationRunQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunsResponse:
+ """
+ Parameters
+ ----------
+ run : typing.Optional[EvaluationRunQuery]
+
+ windowing : typing.Optional[Windowing]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationRunsResponse
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from agenta import AsyncAgentaApi
+
+ client = AsyncAgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.evaluations.query_runs()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.query_runs(run=run, windowing=windowing, request_options=request_options)
+ return _response.data
+
+ async def close_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunsResponse:
+ """
+ Parameters
+ ----------
+ run_ids : typing.Sequence[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationRunsResponse
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from agenta import AsyncAgentaApi
+
+ client = AsyncAgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+
+
async def main() -> None:
- await client.evaluations.create_runs(
- runs=[EvaluationRunCreate()],
+ await client.evaluations.close_runs(
+ run_ids=["run_ids"],
)
asyncio.run(main())
"""
- _response = await self._raw_client.create_runs(runs=runs, request_options=request_options)
+ _response = await self._raw_client.close_runs(run_ids=run_ids, request_options=request_options)
return _response.data
- async def delete_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunIdsResponse:
+ async def open_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunsResponse:
"""
Parameters
----------
@@ -1702,7 +2115,7 @@ async def delete_runs(self, *, run_ids: typing.Sequence[str], request_options: t
Returns
-------
- EvaluationRunIdsResponse
+ EvaluationRunsResponse
Successful Response
Examples
@@ -1717,35 +2130,35 @@ async def delete_runs(self, *, run_ids: typing.Sequence[str], request_options: t
async def main() -> None:
- await client.evaluations.delete_runs(
+ await client.evaluations.open_runs(
run_ids=["run_ids"],
)
asyncio.run(main())
"""
- _response = await self._raw_client.delete_runs(run_ids=run_ids, request_options=request_options)
+ _response = await self._raw_client.open_runs(run_ids=run_ids, request_options=request_options)
return _response.data
- async def edit_runs(self, *, runs: typing.Sequence[EvaluationRunEdit], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunsResponse:
+ async def fetch_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
"""
Parameters
----------
- runs : typing.Sequence[EvaluationRunEdit]
+ run_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationRunsResponse
+ EvaluationRunResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationRunEdit
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -1753,30 +2166,28 @@ async def edit_runs(self, *, runs: typing.Sequence[EvaluationRunEdit], request_o
async def main() -> None:
- await client.evaluations.edit_runs(
- runs=[EvaluationRunEdit()],
+ await client.evaluations.fetch_run(
+ run_id="run_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.edit_runs(runs=runs, request_options=request_options)
+ _response = await self._raw_client.fetch_run(run_id, request_options=request_options)
return _response.data
- async def query_runs(self, *, run: typing.Optional[EvaluationRunQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunsResponse:
+ async def delete_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunIdResponse:
"""
Parameters
----------
- run : typing.Optional[EvaluationRunQuery]
-
- windowing : typing.Optional[Windowing]
+ run_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationRunsResponse
+ EvaluationRunIdResponse
Successful Response
Examples
@@ -1791,33 +2202,37 @@ async def query_runs(self, *, run: typing.Optional[EvaluationRunQuery] = OMIT, w
async def main() -> None:
- await client.evaluations.query_runs()
+ await client.evaluations.delete_run(
+ run_id="run_id",
+ )
asyncio.run(main())
"""
- _response = await self._raw_client.query_runs(run=run, windowing=windowing, request_options=request_options)
+ _response = await self._raw_client.delete_run(run_id, request_options=request_options)
return _response.data
- async def close_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunsResponse:
+ async def edit_run(self, run_id: str, *, run: EvaluationRunEdit, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
"""
Parameters
----------
- run_ids : typing.Sequence[str]
+ run_id : str
+
+ run : EvaluationRunEdit
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationRunsResponse
+ EvaluationRunResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, EvaluationRunEdit
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -1825,28 +2240,31 @@ async def close_runs(self, *, run_ids: typing.Sequence[str], request_options: ty
async def main() -> None:
- await client.evaluations.close_runs(
- run_ids=["run_ids"],
+ await client.evaluations.edit_run(
+ run_id="run_id",
+ run=EvaluationRunEdit(),
)
asyncio.run(main())
"""
- _response = await self._raw_client.close_runs(run_ids=run_ids, request_options=request_options)
+ _response = await self._raw_client.edit_run(run_id, run=run, request_options=request_options)
return _response.data
- async def open_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunsResponse:
+ async def close_run(self, run_id: str, *, status: typing.Optional[EvaluationStatus] = None, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
"""
Parameters
----------
- run_ids : typing.Sequence[str]
+ run_id : str
+
+ status : typing.Optional[EvaluationStatus]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationRunsResponse
+ EvaluationRunResponse
Successful Response
Examples
@@ -1861,17 +2279,17 @@ async def open_runs(self, *, run_ids: typing.Sequence[str], request_options: typ
async def main() -> None:
- await client.evaluations.open_runs(
- run_ids=["run_ids"],
+ await client.evaluations.close_run(
+ run_id="run_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.open_runs(run_ids=run_ids, request_options=request_options)
+ _response = await self._raw_client.close_run(run_id, status=status, request_options=request_options)
return _response.data
- async def fetch_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
+ async def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
"""
Parameters
----------
@@ -1897,17 +2315,17 @@ async def fetch_run(self, run_id: str, *, request_options: typing.Optional[Reque
async def main() -> None:
- await client.evaluations.fetch_run(
+ await client.evaluations.open_run(
run_id="run_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.fetch_run(run_id, request_options=request_options)
+ _response = await self._raw_client.open_run(run_id, request_options=request_options)
return _response.data
- async def delete_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunIdResponse:
+ async def fetch_default_queue(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueueResponse:
"""
Parameters
----------
@@ -1918,7 +2336,7 @@ async def delete_run(self, run_id: str, *, request_options: typing.Optional[Requ
Returns
-------
- EvaluationRunIdResponse
+ EvaluationQueueResponse
Successful Response
Examples
@@ -1933,37 +2351,75 @@ async def delete_run(self, run_id: str, *, request_options: typing.Optional[Requ
async def main() -> None:
- await client.evaluations.delete_run(
+ await client.evaluations.fetch_default_queue(
run_id="run_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.delete_run(run_id, request_options=request_options)
+ _response = await self._raw_client.fetch_default_queue(run_id, request_options=request_options)
return _response.data
- async def edit_run(self, run_id: str, *, run: EvaluationRunEdit, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
+ async def create_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
"""
Parameters
----------
- run_id : str
+ scenarios : typing.Sequence[EvaluationScenarioCreate]
- run : EvaluationRunEdit
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationScenariosResponse
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from agenta import AsyncAgentaApi, EvaluationScenarioCreate
+
+ client = AsyncAgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.evaluations.create_scenarios(
+ scenarios=[
+ EvaluationScenarioCreate(
+ run_id="run_id",
+ )
+ ],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create_scenarios(scenarios=scenarios, request_options=request_options)
+ return _response.data
+
+ async def delete_scenarios(self, *, scenario_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenarioIdsResponse:
+ """
+ Parameters
+ ----------
+ scenario_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationRunResponse
+ EvaluationScenarioIdsResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationRunEdit
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -1971,31 +2427,66 @@ async def edit_run(self, run_id: str, *, run: EvaluationRunEdit, request_options
async def main() -> None:
- await client.evaluations.edit_run(
- run_id="run_id",
- run=EvaluationRunEdit(),
+ await client.evaluations.delete_scenarios(
+ scenario_ids=["scenario_ids"],
)
asyncio.run(main())
"""
- _response = await self._raw_client.edit_run(run_id, run=run, request_options=request_options)
+ _response = await self._raw_client.delete_scenarios(scenario_ids=scenario_ids, request_options=request_options)
return _response.data
- async def close_run(self, run_id: str, *, status: typing.Optional[EvaluationStatus] = None, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
+ async def edit_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioEdit], request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
"""
Parameters
----------
- run_id : str
+ scenarios : typing.Sequence[EvaluationScenarioEdit]
- status : typing.Optional[EvaluationStatus]
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationScenariosResponse
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from agenta import AsyncAgentaApi, EvaluationScenarioEdit
+
+ client = AsyncAgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.evaluations.edit_scenarios(
+ scenarios=[EvaluationScenarioEdit()],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.edit_scenarios(scenarios=scenarios, request_options=request_options)
+ return _response.data
+
+ async def query_scenarios(self, *, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
+ """
+ Parameters
+ ----------
+ scenario : typing.Optional[EvaluationScenarioQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationRunResponse
+ EvaluationScenariosResponse
Successful Response
Examples
@@ -2010,37 +2501,107 @@ async def close_run(self, run_id: str, *, status: typing.Optional[EvaluationStat
async def main() -> None:
- await client.evaluations.close_run(
- run_id="run_id",
+ await client.evaluations.query_scenarios()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.query_scenarios(scenario=scenario, windowing=windowing, request_options=request_options)
+ return _response.data
+
+ async def fetch_scenario(self, scenario_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenarioResponse:
+ """
+ Parameters
+ ----------
+ scenario_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationScenarioResponse
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from agenta import AsyncAgentaApi
+
+ client = AsyncAgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.evaluations.fetch_scenario(
+ scenario_id="scenario_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.fetch_scenario(scenario_id, request_options=request_options)
+ return _response.data
+
+ async def delete_scenario(self, scenario_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenarioIdResponse:
+ """
+ Parameters
+ ----------
+ scenario_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ EvaluationScenarioIdResponse
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from agenta import AsyncAgentaApi
+
+ client = AsyncAgentaApi(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.evaluations.delete_scenario(
+ scenario_id="scenario_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.close_run(run_id, status=status, request_options=request_options)
+ _response = await self._raw_client.delete_scenario(scenario_id, request_options=request_options)
return _response.data
- async def close_run_with_status(self, run_id: str, status: typing.Optional[EvaluationStatus], *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
+ async def edit_scenario(self, scenario_id: str, *, scenario: EvaluationScenarioEdit, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenarioResponse:
"""
Parameters
----------
- run_id : str
+ scenario_id : str
- status : typing.Optional[EvaluationStatus]
+ scenario : EvaluationScenarioEdit
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationRunResponse
+ EvaluationScenarioResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, EvaluationScenarioEdit
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2048,36 +2609,36 @@ async def close_run_with_status(self, run_id: str, status: typing.Optional[Evalu
async def main() -> None:
- await client.evaluations.close_run_with_status(
- run_id="run_id",
- status="pending",
+ await client.evaluations.edit_scenario(
+ scenario_id="scenario_id",
+ scenario=EvaluationScenarioEdit(),
)
asyncio.run(main())
"""
- _response = await self._raw_client.close_run_with_status(run_id, status, request_options=request_options)
+ _response = await self._raw_client.edit_scenario(scenario_id, scenario=scenario, request_options=request_options)
return _response.data
- async def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
+ async def set_results(self, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
"""
Parameters
----------
- run_id : str
+ results : typing.Sequence[EvaluationResultCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationRunResponse
+ EvaluationResultsResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, EvaluationResultCreate
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2085,35 +2646,41 @@ async def open_run(self, run_id: str, *, request_options: typing.Optional[Reques
async def main() -> None:
- await client.evaluations.open_run(
- run_id="run_id",
+ await client.evaluations.set_results(
+ results=[
+ EvaluationResultCreate(
+ step_key="step_key",
+ scenario_id="scenario_id",
+ run_id="run_id",
+ )
+ ],
)
asyncio.run(main())
"""
- _response = await self._raw_client.open_run(run_id, request_options=request_options)
+ _response = await self._raw_client.set_results(results=results, request_options=request_options)
return _response.data
- async def create_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
+ async def delete_results(self, *, result_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultIdsResponse:
"""
Parameters
----------
- scenarios : typing.Sequence[EvaluationScenarioCreate]
+ result_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationScenariosResponse
+ EvaluationResultIdsResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationScenarioCreate
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2121,32 +2688,30 @@ async def create_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenari
async def main() -> None:
- await client.evaluations.create_scenarios(
- scenarios=[
- EvaluationScenarioCreate(
- run_id="run_id",
- )
- ],
+ await client.evaluations.delete_results(
+ result_ids=["result_ids"],
)
asyncio.run(main())
"""
- _response = await self._raw_client.create_scenarios(scenarios=scenarios, request_options=request_options)
+ _response = await self._raw_client.delete_results(result_ids=result_ids, request_options=request_options)
return _response.data
- async def delete_scenarios(self, *, scenario_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenarioIdsResponse:
+ async def query_results(self, *, result: typing.Optional[EvaluationResultQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
"""
Parameters
----------
- scenario_ids : typing.Sequence[str]
+ result : typing.Optional[EvaluationResultQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationScenarioIdsResponse
+ EvaluationResultsResponse
Successful Response
Examples
@@ -2161,35 +2726,33 @@ async def delete_scenarios(self, *, scenario_ids: typing.Sequence[str], request_
async def main() -> None:
- await client.evaluations.delete_scenarios(
- scenario_ids=["scenario_ids"],
- )
+ await client.evaluations.query_results()
asyncio.run(main())
"""
- _response = await self._raw_client.delete_scenarios(scenario_ids=scenario_ids, request_options=request_options)
+ _response = await self._raw_client.query_results(result=result, windowing=windowing, request_options=request_options)
return _response.data
- async def edit_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioEdit], request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
+ async def fetch_result(self, result_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultResponse:
"""
Parameters
----------
- scenarios : typing.Sequence[EvaluationScenarioEdit]
+ result_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationScenariosResponse
+ EvaluationResultResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationScenarioEdit
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2197,30 +2760,28 @@ async def edit_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioE
async def main() -> None:
- await client.evaluations.edit_scenarios(
- scenarios=[EvaluationScenarioEdit()],
+ await client.evaluations.fetch_result(
+ result_id="result_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.edit_scenarios(scenarios=scenarios, request_options=request_options)
+ _response = await self._raw_client.fetch_result(result_id, request_options=request_options)
return _response.data
- async def query_scenarios(self, *, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
+ async def delete_result(self, result_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultIdResponse:
"""
Parameters
----------
- scenario : typing.Optional[EvaluationScenarioQuery]
-
- windowing : typing.Optional[Windowing]
+ result_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationScenariosResponse
+ EvaluationResultIdResponse
Successful Response
Examples
@@ -2235,33 +2796,35 @@ async def query_scenarios(self, *, scenario: typing.Optional[EvaluationScenarioQ
async def main() -> None:
- await client.evaluations.query_scenarios()
+ await client.evaluations.delete_result(
+ result_id="result_id",
+ )
asyncio.run(main())
"""
- _response = await self._raw_client.query_scenarios(scenario=scenario, windowing=windowing, request_options=request_options)
+ _response = await self._raw_client.delete_result(result_id, request_options=request_options)
return _response.data
- async def fetch_scenario(self, scenario_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenarioResponse:
+ async def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
"""
Parameters
----------
- scenario_id : str
+ metrics : EvaluationMetricsRefresh
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationScenarioResponse
+ EvaluationMetricsResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, EvaluationMetricsRefresh
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2269,35 +2832,35 @@ async def fetch_scenario(self, scenario_id: str, *, request_options: typing.Opti
async def main() -> None:
- await client.evaluations.fetch_scenario(
- scenario_id="scenario_id",
+ await client.evaluations.refresh_metrics(
+ metrics=EvaluationMetricsRefresh(),
)
asyncio.run(main())
"""
- _response = await self._raw_client.fetch_scenario(scenario_id, request_options=request_options)
+ _response = await self._raw_client.refresh_metrics(metrics=metrics, request_options=request_options)
return _response.data
- async def delete_scenario(self, scenario_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenarioIdResponse:
+ async def set_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
"""
Parameters
----------
- scenario_id : str
+ metrics : typing.Sequence[EvaluationMetricsCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationScenarioIdResponse
+ EvaluationMetricsResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, EvaluationMetricsCreate
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2305,37 +2868,39 @@ async def delete_scenario(self, scenario_id: str, *, request_options: typing.Opt
async def main() -> None:
- await client.evaluations.delete_scenario(
- scenario_id="scenario_id",
+ await client.evaluations.set_metrics(
+ metrics=[
+ EvaluationMetricsCreate(
+ run_id="run_id",
+ )
+ ],
)
asyncio.run(main())
"""
- _response = await self._raw_client.delete_scenario(scenario_id, request_options=request_options)
+ _response = await self._raw_client.set_metrics(metrics=metrics, request_options=request_options)
return _response.data
- async def edit_scenario(self, scenario_id: str, *, scenario: EvaluationScenarioEdit, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenarioResponse:
+ async def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsIdsResponse:
"""
Parameters
----------
- scenario_id : str
-
- scenario : EvaluationScenarioEdit
+ metrics_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationScenarioResponse
+ EvaluationMetricsIdsResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationScenarioEdit
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2343,36 +2908,37 @@ async def edit_scenario(self, scenario_id: str, *, scenario: EvaluationScenarioE
async def main() -> None:
- await client.evaluations.edit_scenario(
- scenario_id="scenario_id",
- scenario=EvaluationScenarioEdit(),
+ await client.evaluations.delete_metrics(
+ metrics_ids=["metrics_ids"],
)
asyncio.run(main())
"""
- _response = await self._raw_client.edit_scenario(scenario_id, scenario=scenario, request_options=request_options)
+ _response = await self._raw_client.delete_metrics(metrics_ids=metrics_ids, request_options=request_options)
return _response.data
- async def create_results(self, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
+ async def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
"""
Parameters
----------
- results : typing.Sequence[EvaluationResultCreate]
+ metrics : typing.Optional[EvaluationMetricsQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationResultsResponse
+ EvaluationMetricsResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationResultCreate
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2380,34 +2946,26 @@ async def create_results(self, *, results: typing.Sequence[EvaluationResultCreat
async def main() -> None:
- await client.evaluations.create_results(
- results=[
- EvaluationResultCreate(
- step_key="step_key",
- scenario_id="scenario_id",
- run_id="run_id",
- )
- ],
- )
+ await client.evaluations.query_metrics()
asyncio.run(main())
"""
- _response = await self._raw_client.create_results(results=results, request_options=request_options)
+ _response = await self._raw_client.query_metrics(metrics=metrics, windowing=windowing, request_options=request_options)
return _response.data
- async def delete_results(self, *, result_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultIdsResponse:
+ async def fetch_metric(self, metrics_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
"""
Parameters
----------
- result_ids : typing.Sequence[str]
+ metrics_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationResultIdsResponse
+ EvaluationMetricsResponse
Successful Response
Examples
@@ -2422,35 +2980,35 @@ async def delete_results(self, *, result_ids: typing.Sequence[str], request_opti
async def main() -> None:
- await client.evaluations.delete_results(
- result_ids=["result_ids"],
+ await client.evaluations.fetch_metric(
+ metrics_id="metrics_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.delete_results(result_ids=result_ids, request_options=request_options)
+ _response = await self._raw_client.fetch_metric(metrics_id, request_options=request_options)
return _response.data
- async def edit_results(self, *, results: typing.Sequence[EvaluationResultEdit], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
+ async def delete_metric(self, metrics_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsIdsResponse:
"""
Parameters
----------
- results : typing.Sequence[EvaluationResultEdit]
+ metrics_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationResultsResponse
+ EvaluationMetricsIdsResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationResultEdit
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2458,37 +3016,35 @@ async def edit_results(self, *, results: typing.Sequence[EvaluationResultEdit],
async def main() -> None:
- await client.evaluations.edit_results(
- results=[EvaluationResultEdit()],
+ await client.evaluations.delete_metric(
+ metrics_id="metrics_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.edit_results(results=results, request_options=request_options)
+ _response = await self._raw_client.delete_metric(metrics_id, request_options=request_options)
return _response.data
- async def query_results(self, *, result: typing.Optional[EvaluationResultQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
+ async def create_queues(self, *, queues: typing.Sequence[EvaluationQueueCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueuesResponse:
"""
Parameters
----------
- result : typing.Optional[EvaluationResultQuery]
-
- windowing : typing.Optional[Windowing]
+ queues : typing.Sequence[EvaluationQueueCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationResultsResponse
+ EvaluationQueuesResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, EvaluationQueueCreate
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2496,26 +3052,32 @@ async def query_results(self, *, result: typing.Optional[EvaluationResultQuery]
async def main() -> None:
- await client.evaluations.query_results()
+ await client.evaluations.create_queues(
+ queues=[
+ EvaluationQueueCreate(
+ run_id="run_id",
+ )
+ ],
+ )
asyncio.run(main())
"""
- _response = await self._raw_client.query_results(result=result, windowing=windowing, request_options=request_options)
+ _response = await self._raw_client.create_queues(queues=queues, request_options=request_options)
return _response.data
- async def fetch_result(self, result_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultResponse:
+ async def delete_queues(self, *, queue_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueueIdsResponse:
"""
Parameters
----------
- result_id : str
+ queue_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationResultResponse
+ EvaluationQueueIdsResponse
Successful Response
Examples
@@ -2530,35 +3092,35 @@ async def fetch_result(self, result_id: str, *, request_options: typing.Optional
async def main() -> None:
- await client.evaluations.fetch_result(
- result_id="result_id",
+ await client.evaluations.delete_queues(
+ queue_ids=["queue_ids"],
)
asyncio.run(main())
"""
- _response = await self._raw_client.fetch_result(result_id, request_options=request_options)
+ _response = await self._raw_client.delete_queues(queue_ids=queue_ids, request_options=request_options)
return _response.data
- async def delete_result(self, result_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultIdResponse:
+ async def edit_queues(self, *, queues: typing.Sequence[EvaluationQueueEdit], request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueuesResponse:
"""
Parameters
----------
- result_id : str
+ queues : typing.Sequence[EvaluationQueueEdit]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationResultIdResponse
+ EvaluationQueuesResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, EvaluationQueueEdit
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2566,37 +3128,37 @@ async def delete_result(self, result_id: str, *, request_options: typing.Optiona
async def main() -> None:
- await client.evaluations.delete_result(
- result_id="result_id",
+ await client.evaluations.edit_queues(
+ queues=[EvaluationQueueEdit()],
)
asyncio.run(main())
"""
- _response = await self._raw_client.delete_result(result_id, request_options=request_options)
+ _response = await self._raw_client.edit_queues(queues=queues, request_options=request_options)
return _response.data
- async def edit_result(self, result_id: str, *, result: EvaluationResultEdit, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultResponse:
+ async def query_queues(self, *, queue: typing.Optional[EvaluationQueueQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueuesResponse:
"""
Parameters
----------
- result_id : str
+ queue : typing.Optional[EvaluationQueueQuery]
- result : EvaluationResultEdit
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationResultResponse
+ EvaluationQueuesResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationResultEdit
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2604,36 +3166,33 @@ async def edit_result(self, result_id: str, *, result: EvaluationResultEdit, req
async def main() -> None:
- await client.evaluations.edit_result(
- result_id="result_id",
- result=EvaluationResultEdit(),
- )
+ await client.evaluations.query_queues()
asyncio.run(main())
"""
- _response = await self._raw_client.edit_result(result_id, result=result, request_options=request_options)
+ _response = await self._raw_client.query_queues(queue=queue, windowing=windowing, request_options=request_options)
return _response.data
- async def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
+ async def fetch_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueueResponse:
"""
Parameters
----------
- metrics : EvaluationMetricsRefresh
+ queue_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationMetricsResponse
+ EvaluationQueueResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationMetricsRefresh
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2641,35 +3200,35 @@ async def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_op
async def main() -> None:
- await client.evaluations.refresh_metrics(
- metrics=EvaluationMetricsRefresh(),
+ await client.evaluations.fetch_queue(
+ queue_id="queue_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.refresh_metrics(metrics=metrics, request_options=request_options)
+ _response = await self._raw_client.fetch_queue(queue_id, request_options=request_options)
return _response.data
- async def create_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
+ async def delete_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueueIdResponse:
"""
Parameters
----------
- metrics : typing.Sequence[EvaluationMetricsCreate]
+ queue_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationMetricsResponse
+ EvaluationQueueIdResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationMetricsCreate
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2677,39 +3236,37 @@ async def create_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCrea
async def main() -> None:
- await client.evaluations.create_metrics(
- metrics=[
- EvaluationMetricsCreate(
- run_id="run_id",
- )
- ],
+ await client.evaluations.delete_queue(
+ queue_id="queue_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.create_metrics(metrics=metrics, request_options=request_options)
+ _response = await self._raw_client.delete_queue(queue_id, request_options=request_options)
return _response.data
- async def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsIdsResponse:
+ async def edit_queue(self, queue_id: str, *, queue: EvaluationQueueEdit, request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueueResponse:
"""
Parameters
----------
- metrics_ids : typing.Sequence[str]
+ queue_id : str
+
+ queue : EvaluationQueueEdit
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationMetricsIdsResponse
+ EvaluationQueueResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, EvaluationQueueEdit
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2717,35 +3274,42 @@ async def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_opt
async def main() -> None:
- await client.evaluations.delete_metrics(
- metrics_ids=["metrics_ids"],
+ await client.evaluations.edit_queue(
+ queue_id="queue_id",
+ queue=EvaluationQueueEdit(),
)
asyncio.run(main())
"""
- _response = await self._raw_client.delete_metrics(metrics_ids=metrics_ids, request_options=request_options)
+ _response = await self._raw_client.edit_queue(queue_id, queue=queue, request_options=request_options)
return _response.data
- async def edit_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsEdit], request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
+ async def query_evaluation_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[EvaluationQueueScenariosQuery] = OMIT, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
"""
Parameters
----------
- metrics : typing.Sequence[EvaluationMetricsEdit]
+ queue_id : str
+
+ queue : typing.Optional[EvaluationQueueScenariosQuery]
+
+ scenario : typing.Optional[EvaluationScenarioQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationMetricsResponse
+ EvaluationScenariosResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationMetricsEdit
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2753,37 +3317,35 @@ async def edit_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsEdit],
async def main() -> None:
- await client.evaluations.edit_metrics(
- metrics=[EvaluationMetricsEdit()],
+ await client.evaluations.query_evaluation_queue_scenarios(
+ queue_id="queue_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.edit_metrics(metrics=metrics, request_options=request_options)
+ _response = await self._raw_client.query_evaluation_queue_scenarios(queue_id, queue=queue, scenario=scenario, windowing=windowing, request_options=request_options)
return _response.data
- async def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationMetricsResponse:
+ async def create_simple_evaluation(self, *, evaluation: SimpleEvaluationCreate, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
"""
Parameters
----------
- metrics : typing.Optional[EvaluationMetricsQuery]
-
- windowing : typing.Optional[Windowing]
+ evaluation : SimpleEvaluationCreate
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationMetricsResponse
+ SimpleEvaluationResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, SimpleEvaluationCreate
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2791,33 +3353,37 @@ async def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery
async def main() -> None:
- await client.evaluations.query_metrics()
+ await client.evaluations.create_simple_evaluation(
+ evaluation=SimpleEvaluationCreate(),
+ )
asyncio.run(main())
"""
- _response = await self._raw_client.query_metrics(metrics=metrics, windowing=windowing, request_options=request_options)
+ _response = await self._raw_client.create_simple_evaluation(evaluation=evaluation, request_options=request_options)
return _response.data
- async def create_queues(self, *, queues: typing.Sequence[EvaluationQueueCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueuesResponse:
+ async def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEvaluationQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationsResponse:
"""
Parameters
----------
- queues : typing.Sequence[EvaluationQueueCreate]
+ evaluation : typing.Optional[SimpleEvaluationQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationQueuesResponse
+ SimpleEvaluationsResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationQueueCreate
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2825,32 +3391,26 @@ async def create_queues(self, *, queues: typing.Sequence[EvaluationQueueCreate],
async def main() -> None:
- await client.evaluations.create_queues(
- queues=[
- EvaluationQueueCreate(
- run_id="run_id",
- )
- ],
- )
+ await client.evaluations.query_simple_evaluations()
asyncio.run(main())
"""
- _response = await self._raw_client.create_queues(queues=queues, request_options=request_options)
+ _response = await self._raw_client.query_simple_evaluations(evaluation=evaluation, windowing=windowing, request_options=request_options)
return _response.data
- async def delete_queues(self, *, queue_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueueIdsResponse:
+ async def fetch_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
"""
Parameters
----------
- queue_ids : typing.Sequence[str]
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationQueueIdsResponse
+ SimpleEvaluationResponse
Successful Response
Examples
@@ -2865,35 +3425,35 @@ async def delete_queues(self, *, queue_ids: typing.Sequence[str], request_option
async def main() -> None:
- await client.evaluations.delete_queues(
- queue_ids=["queue_ids"],
+ await client.evaluations.fetch_simple_evaluation(
+ evaluation_id="evaluation_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.delete_queues(queue_ids=queue_ids, request_options=request_options)
+ _response = await self._raw_client.fetch_simple_evaluation(evaluation_id, request_options=request_options)
return _response.data
- async def edit_queues(self, *, queues: typing.Sequence[EvaluationQueueEdit], request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueuesResponse:
+ async def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationIdResponse:
"""
Parameters
----------
- queues : typing.Sequence[EvaluationQueueEdit]
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationQueuesResponse
+ SimpleEvaluationIdResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationQueueEdit
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2901,37 +3461,37 @@ async def edit_queues(self, *, queues: typing.Sequence[EvaluationQueueEdit], req
async def main() -> None:
- await client.evaluations.edit_queues(
- queues=[EvaluationQueueEdit()],
+ await client.evaluations.delete_simple_evaluation(
+ evaluation_id="evaluation_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.edit_queues(queues=queues, request_options=request_options)
+ _response = await self._raw_client.delete_simple_evaluation(evaluation_id, request_options=request_options)
return _response.data
- async def query_queues(self, *, queue: typing.Optional[EvaluationQueueQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueuesResponse:
+ async def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: SimpleEvaluationEdit, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
"""
Parameters
----------
- queue : typing.Optional[EvaluationQueueQuery]
+ evaluation_id : str
- windowing : typing.Optional[Windowing]
+ evaluation : SimpleEvaluationEdit
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationQueuesResponse
+ SimpleEvaluationResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, SimpleEvaluationEdit
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -2939,26 +3499,29 @@ async def query_queues(self, *, queue: typing.Optional[EvaluationQueueQuery] = O
async def main() -> None:
- await client.evaluations.query_queues()
+ await client.evaluations.edit_simple_evaluation(
+ evaluation_id="evaluation_id",
+ evaluation=SimpleEvaluationEdit(),
+ )
asyncio.run(main())
"""
- _response = await self._raw_client.query_queues(queue=queue, windowing=windowing, request_options=request_options)
+ _response = await self._raw_client.edit_simple_evaluation(evaluation_id, evaluation=evaluation, request_options=request_options)
return _response.data
- async def fetch_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueueResponse:
+ async def start_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationQueueResponse
+ SimpleEvaluationResponse
Successful Response
Examples
@@ -2973,28 +3536,28 @@ async def fetch_queue(self, queue_id: str, *, request_options: typing.Optional[R
async def main() -> None:
- await client.evaluations.fetch_queue(
- queue_id="queue_id",
+ await client.evaluations.start_simple_evaluation(
+ evaluation_id="evaluation_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.fetch_queue(queue_id, request_options=request_options)
+ _response = await self._raw_client.start_simple_evaluation(evaluation_id, request_options=request_options)
return _response.data
- async def delete_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueueIdResponse:
+ async def stop_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationQueueIdResponse
+ SimpleEvaluationResponse
Successful Response
Examples
@@ -3009,37 +3572,35 @@ async def delete_queue(self, queue_id: str, *, request_options: typing.Optional[
async def main() -> None:
- await client.evaluations.delete_queue(
- queue_id="queue_id",
+ await client.evaluations.stop_simple_evaluation(
+ evaluation_id="evaluation_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.delete_queue(queue_id, request_options=request_options)
+ _response = await self._raw_client.stop_simple_evaluation(evaluation_id, request_options=request_options)
return _response.data
- async def edit_queue(self, queue_id: str, *, queue: EvaluationQueueEdit, request_options: typing.Optional[RequestOptions] = None) -> EvaluationQueueResponse:
+ async def close_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
"""
Parameters
----------
- queue_id : str
-
- queue : EvaluationQueueEdit
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationQueueResponse
+ SimpleEvaluationResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, EvaluationQueueEdit
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -3047,35 +3608,28 @@ async def edit_queue(self, queue_id: str, *, queue: EvaluationQueueEdit, request
async def main() -> None:
- await client.evaluations.edit_queue(
- queue_id="queue_id",
- queue=EvaluationQueueEdit(),
+ await client.evaluations.close_simple_evaluation(
+ evaluation_id="evaluation_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.edit_queue(queue_id, queue=queue, request_options=request_options)
+ _response = await self._raw_client.close_simple_evaluation(evaluation_id, request_options=request_options)
return _response.data
- async def query_evaluation_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[EvaluationQueueScenariosQuery] = OMIT, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
+ async def open_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
"""
Parameters
----------
- queue_id : str
-
- queue : typing.Optional[EvaluationQueueScenariosQuery]
-
- scenario : typing.Optional[EvaluationScenarioQuery]
-
- windowing : typing.Optional[Windowing]
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- EvaluationScenariosResponse
+ SimpleEvaluationResponse
Successful Response
Examples
@@ -3090,35 +3644,37 @@ async def query_evaluation_queue_scenarios(self, queue_id: str, *, queue: typing
async def main() -> None:
- await client.evaluations.query_evaluation_queue_scenarios(
- queue_id="queue_id",
+ await client.evaluations.open_simple_evaluation(
+ evaluation_id="evaluation_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.query_evaluation_queue_scenarios(queue_id, queue=queue, scenario=scenario, windowing=windowing, request_options=request_options)
+ _response = await self._raw_client.open_simple_evaluation(evaluation_id, request_options=request_options)
return _response.data
- async def create_simple_evaluation(self, *, evaluation: SimpleEvaluationCreate, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
+ async def populate_slice(self, evaluation_id: str, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
"""
Parameters
----------
- evaluation : SimpleEvaluationCreate
+ evaluation_id : str
+
+ results : typing.Sequence[EvaluationResultCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationResponse
+ EvaluationResultsResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, SimpleEvaluationCreate
+ from agenta import AsyncAgentaApi, EvaluationResultCreate
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -3126,29 +3682,44 @@ async def create_simple_evaluation(self, *, evaluation: SimpleEvaluationCreate,
async def main() -> None:
- await client.evaluations.create_simple_evaluation(
- evaluation=SimpleEvaluationCreate(),
+ await client.evaluations.populate_slice(
+ evaluation_id="evaluation_id",
+ results=[
+ EvaluationResultCreate(
+ step_key="step_key",
+ scenario_id="scenario_id",
+ run_id="run_id",
+ )
+ ],
)
asyncio.run(main())
"""
- _response = await self._raw_client.create_simple_evaluation(evaluation=evaluation, request_options=request_options)
+ _response = await self._raw_client.populate_slice(evaluation_id, results=results, request_options=request_options)
return _response.data
- async def fetch_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
+ async def process_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, overwrite: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> typing.Any:
"""
Parameters
----------
evaluation_id : str
+ scenario_ids : typing.Optional[typing.Sequence[str]]
+
+ step_keys : typing.Optional[typing.Sequence[str]]
+
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
+
+ overwrite : typing.Optional[bool]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationResponse
- Successful Response
+ typing.Any
+ Accepted.
Examples
--------
@@ -3162,28 +3733,34 @@ async def fetch_simple_evaluation(self, evaluation_id: str, *, request_options:
async def main() -> None:
- await client.evaluations.fetch_simple_evaluation(
+ await client.evaluations.process_slice(
evaluation_id="evaluation_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.fetch_simple_evaluation(evaluation_id, request_options=request_options)
+ _response = await self._raw_client.process_slice(evaluation_id, scenario_ids=scenario_ids, step_keys=step_keys, repeat_idxs=repeat_idxs, overwrite=overwrite, request_options=request_options)
return _response.data
- async def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationIdResponse:
+ async def probe_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationResultsResponse:
"""
Parameters
----------
evaluation_id : str
+ scenario_ids : typing.Optional[typing.Sequence[str]]
+
+ step_keys : typing.Optional[typing.Sequence[str]]
+
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationIdResponse
+ EvaluationResultsResponse
Successful Response
Examples
@@ -3198,37 +3775,40 @@ async def delete_simple_evaluation(self, evaluation_id: str, *, request_options:
async def main() -> None:
- await client.evaluations.delete_simple_evaluation(
+ await client.evaluations.probe_slice(
evaluation_id="evaluation_id",
)
asyncio.run(main())
"""
- _response = await self._raw_client.delete_simple_evaluation(evaluation_id, request_options=request_options)
+ _response = await self._raw_client.probe_slice(evaluation_id, scenario_ids=scenario_ids, step_keys=step_keys, repeat_idxs=repeat_idxs, request_options=request_options)
return _response.data
- async def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: SimpleEvaluationEdit, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
+ async def prune_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Parameters
----------
evaluation_id : str
- evaluation : SimpleEvaluationEdit
+ scenario_ids : typing.Optional[typing.Sequence[str]]
+
+ step_keys : typing.Optional[typing.Sequence[str]]
+
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationResponse
- Successful Response
+ None
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi, SimpleEvaluationEdit
+ from agenta import AsyncAgentaApi
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -3236,31 +3816,32 @@ async def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: Simple
async def main() -> None:
- await client.evaluations.edit_simple_evaluation(
+ await client.evaluations.prune_slice(
evaluation_id="evaluation_id",
- evaluation=SimpleEvaluationEdit(),
)
asyncio.run(main())
"""
- _response = await self._raw_client.edit_simple_evaluation(evaluation_id, evaluation=evaluation, request_options=request_options)
+ _response = await self._raw_client.prune_slice(evaluation_id, scenario_ids=scenario_ids, step_keys=step_keys, repeat_idxs=repeat_idxs, request_options=request_options)
return _response.data
- async def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEvaluationQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationsResponse:
+ async def add_scenarios(self, evaluation_id: str, *, count: int, timestamp: typing.Optional[dt.datetime] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> EvaluationScenariosResponse:
"""
Parameters
----------
- evaluation : typing.Optional[SimpleEvaluationQuery]
+ evaluation_id : str
- windowing : typing.Optional[Windowing]
+ count : int
+
+ timestamp : typing.Optional[dt.datetime]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationsResponse
+ EvaluationScenariosResponse
Successful Response
Examples
@@ -3275,27 +3856,31 @@ async def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEv
async def main() -> None:
- await client.evaluations.query_simple_evaluations()
+ await client.evaluations.add_scenarios(
+ evaluation_id="evaluation_id",
+ count=1,
+ )
asyncio.run(main())
"""
- _response = await self._raw_client.query_simple_evaluations(evaluation=evaluation, windowing=windowing, request_options=request_options)
+ _response = await self._raw_client.add_scenarios(evaluation_id, count=count, timestamp=timestamp, request_options=request_options)
return _response.data
- async def start_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
+ async def remove_scenarios(self, evaluation_id: str, *, scenario_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Parameters
----------
evaluation_id : str
+ scenario_ids : typing.Sequence[str]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationResponse
- Successful Response
+ None
Examples
--------
@@ -3309,35 +3894,38 @@ async def start_simple_evaluation(self, evaluation_id: str, *, request_options:
async def main() -> None:
- await client.evaluations.start_simple_evaluation(
+ await client.evaluations.remove_scenarios(
evaluation_id="evaluation_id",
+ scenario_ids=["scenario_ids"],
)
asyncio.run(main())
"""
- _response = await self._raw_client.start_simple_evaluation(evaluation_id, request_options=request_options)
+ _response = await self._raw_client.remove_scenarios(evaluation_id, scenario_ids=scenario_ids, request_options=request_options)
return _response.data
- async def stop_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
+ async def add_steps(self, evaluation_id: str, *, steps: typing.Sequence[EvaluationRunDataStep], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
"""
Parameters
----------
evaluation_id : str
+ steps : typing.Sequence[EvaluationRunDataStep]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationResponse
+ EvaluationRunResponse
Successful Response
Examples
--------
import asyncio
- from agenta import AsyncAgentaApi
+ from agenta import AsyncAgentaApi, EvaluationRunDataStep, Reference
client = AsyncAgentaApi(
api_key="YOUR_API_KEY",
@@ -3345,28 +3933,38 @@ async def stop_simple_evaluation(self, evaluation_id: str, *, request_options: t
async def main() -> None:
- await client.evaluations.stop_simple_evaluation(
+ await client.evaluations.add_steps(
evaluation_id="evaluation_id",
+ steps=[
+ EvaluationRunDataStep(
+ key="key",
+ type="input",
+ origin="custom",
+ references={"key": Reference()},
+ )
+ ],
)
asyncio.run(main())
"""
- _response = await self._raw_client.stop_simple_evaluation(evaluation_id, request_options=request_options)
+ _response = await self._raw_client.add_steps(evaluation_id, steps=steps, request_options=request_options)
return _response.data
- async def close_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
+ async def remove_steps(self, evaluation_id: str, *, step_keys: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
"""
Parameters
----------
evaluation_id : str
+ step_keys : typing.Sequence[str]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationResponse
+ EvaluationRunResponse
Successful Response
Examples
@@ -3381,28 +3979,31 @@ async def close_simple_evaluation(self, evaluation_id: str, *, request_options:
async def main() -> None:
- await client.evaluations.close_simple_evaluation(
+ await client.evaluations.remove_steps(
evaluation_id="evaluation_id",
+ step_keys=["step_keys"],
)
asyncio.run(main())
"""
- _response = await self._raw_client.close_simple_evaluation(evaluation_id, request_options=request_options)
+ _response = await self._raw_client.remove_steps(evaluation_id, step_keys=step_keys, request_options=request_options)
return _response.data
- async def open_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SimpleEvaluationResponse:
+ async def set_repeats(self, evaluation_id: str, *, repeats: int, request_options: typing.Optional[RequestOptions] = None) -> EvaluationRunResponse:
"""
Parameters
----------
evaluation_id : str
+ repeats : int
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- SimpleEvaluationResponse
+ EvaluationRunResponse
Successful Response
Examples
@@ -3417,14 +4018,15 @@ async def open_simple_evaluation(self, evaluation_id: str, *, request_options: t
async def main() -> None:
- await client.evaluations.open_simple_evaluation(
+ await client.evaluations.set_repeats(
evaluation_id="evaluation_id",
+ repeats=1,
)
asyncio.run(main())
"""
- _response = await self._raw_client.open_simple_evaluation(evaluation_id, request_options=request_options)
+ _response = await self._raw_client.set_repeats(evaluation_id, repeats=repeats, request_options=request_options)
return _response.data
async def create_simple_queue(self, *, queue: SimpleQueueCreate, request_options: typing.Optional[RequestOptions] = None) -> SimpleQueueResponse:
diff --git a/clients/python/agenta_client/evaluations/raw_client.py b/clients/python/agenta_client/evaluations/raw_client.py
index 47abfdda12..9302a48c6e 100644
--- a/clients/python/agenta_client/evaluations/raw_client.py
+++ b/clients/python/agenta_client/evaluations/raw_client.py
@@ -1,5 +1,6 @@
# This file was auto-generated by Fern from our API Definition.
+import datetime as dt
import typing
from json.decoder import JSONDecodeError
@@ -12,7 +13,6 @@
from ..core.serialization import convert_and_respect_annotation_metadata
from ..errors.unprocessable_entity_error import UnprocessableEntityError
from ..types.evaluation_metrics_create import EvaluationMetricsCreate
-from ..types.evaluation_metrics_edit import EvaluationMetricsEdit
from ..types.evaluation_metrics_ids_response import EvaluationMetricsIdsResponse
from ..types.evaluation_metrics_query import EvaluationMetricsQuery
from ..types.evaluation_metrics_refresh import EvaluationMetricsRefresh
@@ -26,13 +26,13 @@
from ..types.evaluation_queue_scenarios_query import EvaluationQueueScenariosQuery
from ..types.evaluation_queues_response import EvaluationQueuesResponse
from ..types.evaluation_result_create import EvaluationResultCreate
-from ..types.evaluation_result_edit import EvaluationResultEdit
from ..types.evaluation_result_id_response import EvaluationResultIdResponse
from ..types.evaluation_result_ids_response import EvaluationResultIdsResponse
from ..types.evaluation_result_query import EvaluationResultQuery
from ..types.evaluation_result_response import EvaluationResultResponse
from ..types.evaluation_results_response import EvaluationResultsResponse
from ..types.evaluation_run_create import EvaluationRunCreate
+from ..types.evaluation_run_data_step import EvaluationRunDataStep
from ..types.evaluation_run_edit import EvaluationRunEdit
from ..types.evaluation_run_id_response import EvaluationRunIdResponse
from ..types.evaluation_run_ids_response import EvaluationRunIdsResponse
@@ -527,14 +527,12 @@ def close_run(self, run_id: str, *, status: typing.Optional[EvaluationStatus] =
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def close_run_with_status(self, run_id: str, status: typing.Optional[EvaluationStatus], *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationRunResponse]:
+ def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationRunResponse]:
"""
Parameters
----------
run_id : str
- status : typing.Optional[EvaluationStatus]
-
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -544,7 +542,7 @@ def close_run_with_status(self, run_id: str, status: typing.Optional[EvaluationS
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- f"evaluations/runs/{jsonable_encoder(run_id)}/close/{jsonable_encoder(status)}",method="POST",
+ f"evaluations/runs/{jsonable_encoder(run_id)}/open",method="POST",
request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
@@ -569,7 +567,7 @@ def close_run_with_status(self, run_id: str, status: typing.Optional[EvaluationS
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationRunResponse]:
+ def fetch_default_queue(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationQueueResponse]:
"""
Parameters
----------
@@ -580,18 +578,18 @@ def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptio
Returns
-------
- HttpResponse[EvaluationRunResponse]
+ HttpResponse[EvaluationQueueResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- f"evaluations/runs/{jsonable_encoder(run_id)}/open",method="POST",
+ f"evaluations/runs/{jsonable_encoder(run_id)}/queues/default",method="GET",
request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunResponse,
+ EvaluationQueueResponse,
parse_obj_as(
- type_ =EvaluationRunResponse, # type: ignore
+ type_ =EvaluationQueueResponse, # type: ignore
object_ =_response.json()
)
)
@@ -929,7 +927,7 @@ def edit_scenario(self, scenario_id: str, *, scenario: EvaluationScenarioEdit, r
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def create_results(self, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationResultsResponse]:
+ def set_results(self, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationResultsResponse]:
"""
Parameters
----------
@@ -1023,53 +1021,6 @@ def delete_results(self, *, result_ids: typing.Sequence[str], request_options: t
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def edit_results(self, *, results: typing.Sequence[EvaluationResultEdit], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationResultsResponse]:
- """
- Parameters
- ----------
- results : typing.Sequence[EvaluationResultEdit]
-
- request_options : typing.Optional[RequestOptions]
- Request-specific configuration.
-
- Returns
- -------
- HttpResponse[EvaluationResultsResponse]
- Successful Response
- """
- _response = self._client_wrapper.httpx_client.request(
- "evaluations/results/",method="PATCH",
- json={
- "results": convert_and_respect_annotation_metadata(object_=results, annotation=typing.Sequence[EvaluationResultEdit], direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
- try:
- if 200 <= _response.status_code < 300:
- _data = typing.cast(
- EvaluationResultsResponse,
- parse_obj_as(
- type_ =EvaluationResultsResponse, # type: ignore
- object_ =_response.json()
- )
- )
- return HttpResponse(response=_response, data=_data)
- if _response.status_code == 422:
- raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
- HttpValidationError,
- parse_obj_as(
- type_ =HttpValidationError, # type: ignore
- object_ =_response.json()
- )
- ))
- _response_json = _response.json()
- except JSONDecodeError:
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-
def query_results(self, *, result: typing.Optional[EvaluationResultQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationResultsResponse]:
"""
Parameters
@@ -1200,26 +1151,24 @@ def delete_result(self, result_id: str, *, request_options: typing.Optional[Requ
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def edit_result(self, result_id: str, *, result: EvaluationResultEdit, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationResultResponse]:
+ def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsResponse]:
"""
Parameters
----------
- result_id : str
-
- result : EvaluationResultEdit
+ metrics : EvaluationMetricsRefresh
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[EvaluationResultResponse]
+ HttpResponse[EvaluationMetricsResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- f"evaluations/results/{jsonable_encoder(result_id)}",method="PATCH",
+ "evaluations/metrics/refresh",method="POST",
json={
- "result": convert_and_respect_annotation_metadata(object_=result, annotation=EvaluationResultEdit, direction="write"),
+ "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=EvaluationMetricsRefresh, direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -1229,9 +1178,9 @@ def edit_result(self, result_id: str, *, result: EvaluationResultEdit, request_o
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationResultResponse,
+ EvaluationMetricsResponse,
parse_obj_as(
- type_ =EvaluationResultResponse, # type: ignore
+ type_ =EvaluationMetricsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -1249,11 +1198,11 @@ def edit_result(self, result_id: str, *, result: EvaluationResultEdit, request_o
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsResponse]:
+ def set_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsResponse]:
"""
Parameters
----------
- metrics : EvaluationMetricsRefresh
+ metrics : typing.Sequence[EvaluationMetricsCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -1264,9 +1213,9 @@ def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_options:
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- "evaluations/metrics/refresh",method="POST",
+ "evaluations/metrics/",method="POST",
json={
- "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=EvaluationMetricsRefresh, direction="write"),
+ "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=typing.Sequence[EvaluationMetricsCreate], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -1296,24 +1245,24 @@ def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_options:
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def create_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsResponse]:
+ def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsIdsResponse]:
"""
Parameters
----------
- metrics : typing.Sequence[EvaluationMetricsCreate]
+ metrics_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[EvaluationMetricsResponse]
+ HttpResponse[EvaluationMetricsIdsResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- "evaluations/metrics/",method="POST",
+ "evaluations/metrics/",method="DELETE",
json={
- "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=typing.Sequence[EvaluationMetricsCreate], direction="write"),
+ "metrics_ids": metrics_ids,
}
,
headers={"content-type": "application/json", }
@@ -1323,9 +1272,9 @@ def create_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], r
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationMetricsResponse,
+ EvaluationMetricsIdsResponse,
parse_obj_as(
- type_ =EvaluationMetricsResponse, # type: ignore
+ type_ =EvaluationMetricsIdsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -1343,24 +1292,27 @@ def create_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], r
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsIdsResponse]:
+ def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsResponse]:
"""
Parameters
----------
- metrics_ids : typing.Sequence[str]
+ metrics : typing.Optional[EvaluationMetricsQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[EvaluationMetricsIdsResponse]
+ HttpResponse[EvaluationMetricsResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- "evaluations/metrics/",method="DELETE",
+ "evaluations/metrics/query",method="POST",
json={
- "metrics_ids": metrics_ids,
+ "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=typing.Optional[EvaluationMetricsQuery], direction="write"),
+ "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -1370,9 +1322,9 @@ def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_options:
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationMetricsIdsResponse,
+ EvaluationMetricsResponse,
parse_obj_as(
- type_ =EvaluationMetricsIdsResponse, # type: ignore
+ type_ =EvaluationMetricsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -1390,11 +1342,11 @@ def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_options:
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def edit_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsEdit], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsResponse]:
+ def fetch_metric(self, metrics_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsResponse]:
"""
Parameters
----------
- metrics : typing.Sequence[EvaluationMetricsEdit]
+ metrics_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -1405,15 +1357,8 @@ def edit_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsEdit], reque
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- "evaluations/metrics/",method="PATCH",
- json={
- "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=typing.Sequence[EvaluationMetricsEdit], direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"evaluations/metrics/{jsonable_encoder(metrics_id)}",method="GET",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
@@ -1437,39 +1382,29 @@ def edit_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsEdit], reque
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsResponse]:
+ def delete_metric(self, metrics_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationMetricsIdsResponse]:
"""
Parameters
----------
- metrics : typing.Optional[EvaluationMetricsQuery]
-
- windowing : typing.Optional[Windowing]
+ metrics_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[EvaluationMetricsResponse]
+ HttpResponse[EvaluationMetricsIdsResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- "evaluations/metrics/query",method="POST",
- json={
- "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=typing.Optional[EvaluationMetricsQuery], direction="write"),
- "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"evaluations/metrics/{jsonable_encoder(metrics_id)}",method="DELETE",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationMetricsResponse,
+ EvaluationMetricsIdsResponse,
parse_obj_as(
- type_ =EvaluationMetricsResponse, # type: ignore
+ type_ =EvaluationMetricsIdsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -1909,29 +1844,39 @@ def create_simple_evaluation(self, *, evaluation: SimpleEvaluationCreate, reques
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def fetch_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleEvaluationResponse]:
+ def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEvaluationQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleEvaluationsResponse]:
"""
Parameters
----------
- evaluation_id : str
+ evaluation : typing.Optional[SimpleEvaluationQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[SimpleEvaluationResponse]
+ HttpResponse[SimpleEvaluationsResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="GET",
- request_options=request_options,)
+ "simple/evaluations/query",method="POST",
+ json={
+ "evaluation": convert_and_respect_annotation_metadata(object_=evaluation, annotation=typing.Optional[SimpleEvaluationQuery], direction="write"),
+ "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationResponse,
+ SimpleEvaluationsResponse,
parse_obj_as(
- type_ =SimpleEvaluationResponse, # type: ignore
+ type_ =SimpleEvaluationsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -1949,7 +1894,7 @@ def fetch_simple_evaluation(self, evaluation_id: str, *, request_options: typing
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleEvaluationIdResponse]:
+ def fetch_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleEvaluationResponse]:
"""
Parameters
----------
@@ -1960,18 +1905,18 @@ def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typin
Returns
-------
- HttpResponse[SimpleEvaluationIdResponse]
+ HttpResponse[SimpleEvaluationResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="DELETE",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="GET",
request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationIdResponse,
+ SimpleEvaluationResponse,
parse_obj_as(
- type_ =SimpleEvaluationIdResponse, # type: ignore
+ type_ =SimpleEvaluationResponse, # type: ignore
object_ =_response.json()
)
)
@@ -1989,38 +1934,29 @@ def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typin
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: SimpleEvaluationEdit, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleEvaluationResponse]:
+ def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleEvaluationIdResponse]:
"""
Parameters
----------
evaluation_id : str
- evaluation : SimpleEvaluationEdit
-
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[SimpleEvaluationResponse]
+ HttpResponse[SimpleEvaluationIdResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="PATCH",
- json={
- "evaluation": convert_and_respect_annotation_metadata(object_=evaluation, annotation=SimpleEvaluationEdit, direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="DELETE",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationResponse,
+ SimpleEvaluationIdResponse,
parse_obj_as(
- type_ =SimpleEvaluationResponse, # type: ignore
+ type_ =SimpleEvaluationIdResponse, # type: ignore
object_ =_response.json()
)
)
@@ -2038,27 +1974,26 @@ def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: SimpleEvalua
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEvaluationQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleEvaluationsResponse]:
+ def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: SimpleEvaluationEdit, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleEvaluationResponse]:
"""
Parameters
----------
- evaluation : typing.Optional[SimpleEvaluationQuery]
+ evaluation_id : str
- windowing : typing.Optional[Windowing]
+ evaluation : SimpleEvaluationEdit
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[SimpleEvaluationsResponse]
+ HttpResponse[SimpleEvaluationResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- "simple/evaluations/query",method="POST",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="PATCH",
json={
- "evaluation": convert_and_respect_annotation_metadata(object_=evaluation, annotation=typing.Optional[SimpleEvaluationQuery], direction="write"),
- "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
+ "evaluation": convert_and_respect_annotation_metadata(object_=evaluation, annotation=SimpleEvaluationEdit, direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -2068,9 +2003,9 @@ def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEvaluati
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationsResponse,
+ SimpleEvaluationResponse,
parse_obj_as(
- type_ =SimpleEvaluationsResponse, # type: ignore
+ type_ =SimpleEvaluationResponse, # type: ignore
object_ =_response.json()
)
)
@@ -2248,24 +2183,26 @@ def open_simple_evaluation(self, evaluation_id: str, *, request_options: typing.
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def create_simple_queue(self, *, queue: SimpleQueueCreate, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueueResponse]:
+ def populate_slice(self, evaluation_id: str, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationResultsResponse]:
"""
Parameters
----------
- queue : SimpleQueueCreate
+ evaluation_id : str
+
+ results : typing.Sequence[EvaluationResultCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[SimpleQueueResponse]
+ HttpResponse[EvaluationResultsResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- "simple/queues/",method="POST",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/populate",method="POST",
json={
- "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=SimpleQueueCreate, direction="write"),
+ "results": convert_and_respect_annotation_metadata(object_=results, annotation=typing.Sequence[EvaluationResultCreate], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -2275,9 +2212,9 @@ def create_simple_queue(self, *, queue: SimpleQueueCreate, request_options: typi
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleQueueResponse,
+ EvaluationResultsResponse,
parse_obj_as(
- type_ =SimpleQueueResponse, # type: ignore
+ type_ =EvaluationResultsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -2295,27 +2232,35 @@ def create_simple_queue(self, *, queue: SimpleQueueCreate, request_options: typi
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def query_simple_queues(self, *, queue: typing.Optional[SimpleQueueQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueuesResponse]:
+ def process_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, overwrite: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[typing.Any]:
"""
Parameters
----------
- queue : typing.Optional[SimpleQueueQuery]
+ evaluation_id : str
- windowing : typing.Optional[Windowing]
+ scenario_ids : typing.Optional[typing.Sequence[str]]
+
+ step_keys : typing.Optional[typing.Sequence[str]]
+
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
+
+ overwrite : typing.Optional[bool]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[SimpleQueuesResponse]
- Successful Response
+ HttpResponse[typing.Any]
+ Accepted.
"""
_response = self._client_wrapper.httpx_client.request(
- "simple/queues/query",method="POST",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/process",method="POST",
json={
- "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=typing.Optional[SimpleQueueQuery], direction="write"),
- "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
+ "scenario_ids": scenario_ids,
+ "step_keys": step_keys,
+ "repeat_idxs": repeat_idxs,
+ "overwrite": overwrite,
}
,
headers={"content-type": "application/json", }
@@ -2323,11 +2268,13 @@ def query_simple_queues(self, *, queue: typing.Optional[SimpleQueueQuery] = OMIT
request_options=request_options,omit=OMIT,
)
try:
+ if _response is None or not _response.text.strip():
+ return HttpResponse(response=_response, data=None)
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleQueuesResponse,
+ typing.Any,
parse_obj_as(
- type_ =SimpleQueuesResponse, # type: ignore
+ type_ =typing.Any, # type: ignore
object_ =_response.json()
)
)
@@ -2345,29 +2292,44 @@ def query_simple_queues(self, *, queue: typing.Optional[SimpleQueueQuery] = OMIT
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def fetch_simple_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueueResponse]:
+ def probe_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationResultsResponse]:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
+
+ scenario_ids : typing.Optional[typing.Sequence[str]]
+
+ step_keys : typing.Optional[typing.Sequence[str]]
+
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[SimpleQueueResponse]
+ HttpResponse[EvaluationResultsResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- f"simple/queues/{jsonable_encoder(queue_id)}",method="GET",
- request_options=request_options,)
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/probe",method="POST",
+ json={
+ "scenario_ids": scenario_ids,
+ "step_keys": step_keys,
+ "repeat_idxs": repeat_idxs,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleQueueResponse,
+ EvaluationResultsResponse,
parse_obj_as(
- type_ =SimpleQueueResponse, # type: ignore
+ type_ =EvaluationResultsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -2385,32 +2347,31 @@ def fetch_simple_queue(self, queue_id: str, *, request_options: typing.Optional[
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def query_simple_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[SimpleQueueScenariosQuery] = OMIT, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueueScenariosResponse]:
+ def prune_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
- queue : typing.Optional[SimpleQueueScenariosQuery]
+ scenario_ids : typing.Optional[typing.Sequence[str]]
- scenario : typing.Optional[EvaluationScenarioQuery]
+ step_keys : typing.Optional[typing.Sequence[str]]
- windowing : typing.Optional[Windowing]
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[SimpleQueueScenariosResponse]
- Successful Response
+ HttpResponse[None]
"""
_response = self._client_wrapper.httpx_client.request(
- f"simple/queues/{jsonable_encoder(queue_id)}/scenarios/query",method="POST",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/prune",method="POST",
json={
- "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=typing.Optional[SimpleQueueScenariosQuery], direction="write"),
- "scenario": convert_and_respect_annotation_metadata(object_=scenario, annotation=typing.Optional[EvaluationScenarioQuery], direction="write"),
- "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
+ "scenario_ids": scenario_ids,
+ "step_keys": step_keys,
+ "repeat_idxs": repeat_idxs,
}
,
headers={"content-type": "application/json", }
@@ -2419,14 +2380,7 @@ def query_simple_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[
)
try:
if 200 <= _response.status_code < 300:
- _data = typing.cast(
- SimpleQueueScenariosResponse,
- parse_obj_as(
- type_ =SimpleQueueScenariosResponse, # type: ignore
- object_ =_response.json()
- )
- )
- return HttpResponse(response=_response, data=_data)
+ return HttpResponse(response=_response, data=None)
if _response.status_code == 422:
raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
HttpValidationError,
@@ -2440,26 +2394,29 @@ def query_simple_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def add_simple_queue_traces(self, queue_id: str, *, trace_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueueIdResponse]:
+ def add_scenarios(self, evaluation_id: str, *, count: int, timestamp: typing.Optional[dt.datetime] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationScenariosResponse]:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
- trace_ids : typing.Sequence[str]
+ count : int
+
+ timestamp : typing.Optional[dt.datetime]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[SimpleQueueIdResponse]
+ HttpResponse[EvaluationScenariosResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- f"simple/queues/{jsonable_encoder(queue_id)}/traces/",method="POST",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/scenarios/add",method="POST",
json={
- "trace_ids": trace_ids,
+ "count": count,
+ "timestamp": timestamp,
}
,
headers={"content-type": "application/json", }
@@ -2469,9 +2426,9 @@ def add_simple_queue_traces(self, queue_id: str, *, trace_ids: typing.Sequence[s
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleQueueIdResponse,
+ EvaluationScenariosResponse,
parse_obj_as(
- type_ =SimpleQueueIdResponse, # type: ignore
+ type_ =EvaluationScenariosResponse, # type: ignore
object_ =_response.json()
)
)
@@ -2489,26 +2446,67 @@ def add_simple_queue_traces(self, queue_id: str, *, trace_ids: typing.Sequence[s
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- def add_simple_queue_testcases(self, queue_id: str, *, testcase_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueueIdResponse]:
+ def remove_scenarios(self, evaluation_id: str, *, scenario_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
- testcase_ids : typing.Sequence[str]
+ scenario_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[SimpleQueueIdResponse]
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/scenarios/remove",method="POST",
+ json={
+ "scenario_ids": scenario_ids,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def add_steps(self, evaluation_id: str, *, steps: typing.Sequence[EvaluationRunDataStep], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationRunResponse]:
+ """
+ Parameters
+ ----------
+ evaluation_id : str
+
+ steps : typing.Sequence[EvaluationRunDataStep]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[EvaluationRunResponse]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
- f"simple/queues/{jsonable_encoder(queue_id)}/testcases/",method="POST",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/steps/add",method="POST",
json={
- "testcase_ids": testcase_ids,
+ "steps": convert_and_respect_annotation_metadata(object_=steps, annotation=typing.Sequence[EvaluationRunDataStep], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -2518,9 +2516,9 @@ def add_simple_queue_testcases(self, queue_id: str, *, testcase_ids: typing.Sequ
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleQueueIdResponse,
+ EvaluationRunResponse,
parse_obj_as(
- type_ =SimpleQueueIdResponse, # type: ignore
+ type_ =EvaluationRunResponse, # type: ignore
object_ =_response.json()
)
)
@@ -2537,28 +2535,27 @@ def add_simple_queue_testcases(self, queue_id: str, *, testcase_ids: typing.Sequ
except JSONDecodeError:
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
-class AsyncRawEvaluationsClient:
- def __init__(self, *, client_wrapper: AsyncClientWrapper):
- self._client_wrapper = client_wrapper
- async def create_runs(self, *, runs: typing.Sequence[EvaluationRunCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunsResponse]:
+ def remove_steps(self, evaluation_id: str, *, step_keys: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationRunResponse]:
"""
Parameters
----------
- runs : typing.Sequence[EvaluationRunCreate]
+ evaluation_id : str
+
+ step_keys : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunsResponse]
+ HttpResponse[EvaluationRunResponse]
Successful Response
"""
- _response = await self._client_wrapper.httpx_client.request(
- "evaluations/runs/",method="POST",
+ _response = self._client_wrapper.httpx_client.request(
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/steps/remove",method="POST",
json={
- "runs": convert_and_respect_annotation_metadata(object_=runs, annotation=typing.Sequence[EvaluationRunCreate], direction="write"),
+ "step_keys": step_keys,
}
,
headers={"content-type": "application/json", }
@@ -2568,13 +2565,13 @@ async def create_runs(self, *, runs: typing.Sequence[EvaluationRunCreate], reque
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunsResponse,
+ EvaluationRunResponse,
parse_obj_as(
- type_ =EvaluationRunsResponse, # type: ignore
+ type_ =EvaluationRunResponse, # type: ignore
object_ =_response.json()
)
)
- return AsyncHttpResponse(response=_response, data=_data)
+ return HttpResponse(response=_response, data=_data)
if _response.status_code == 422:
raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
HttpValidationError,
@@ -2588,24 +2585,26 @@ async def create_runs(self, *, runs: typing.Sequence[EvaluationRunCreate], reque
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def delete_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunIdsResponse]:
+ def set_repeats(self, evaluation_id: str, *, repeats: int, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[EvaluationRunResponse]:
"""
Parameters
----------
- run_ids : typing.Sequence[str]
+ evaluation_id : str
+
+ repeats : int
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunIdsResponse]
+ HttpResponse[EvaluationRunResponse]
Successful Response
"""
- _response = await self._client_wrapper.httpx_client.request(
- "evaluations/runs/",method="DELETE",
+ _response = self._client_wrapper.httpx_client.request(
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/repeats/set",method="POST",
json={
- "run_ids": run_ids,
+ "repeats": repeats,
}
,
headers={"content-type": "application/json", }
@@ -2615,13 +2614,13 @@ async def delete_runs(self, *, run_ids: typing.Sequence[str], request_options: t
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunIdsResponse,
+ EvaluationRunResponse,
parse_obj_as(
- type_ =EvaluationRunIdsResponse, # type: ignore
+ type_ =EvaluationRunResponse, # type: ignore
object_ =_response.json()
)
)
- return AsyncHttpResponse(response=_response, data=_data)
+ return HttpResponse(response=_response, data=_data)
if _response.status_code == 422:
raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
HttpValidationError,
@@ -2635,24 +2634,24 @@ async def delete_runs(self, *, run_ids: typing.Sequence[str], request_options: t
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def edit_runs(self, *, runs: typing.Sequence[EvaluationRunEdit], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunsResponse]:
+ def create_simple_queue(self, *, queue: SimpleQueueCreate, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueueResponse]:
"""
Parameters
----------
- runs : typing.Sequence[EvaluationRunEdit]
+ queue : SimpleQueueCreate
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunsResponse]
+ HttpResponse[SimpleQueueResponse]
Successful Response
"""
- _response = await self._client_wrapper.httpx_client.request(
- "evaluations/runs/",method="PATCH",
+ _response = self._client_wrapper.httpx_client.request(
+ "simple/queues/",method="POST",
json={
- "runs": convert_and_respect_annotation_metadata(object_=runs, annotation=typing.Sequence[EvaluationRunEdit], direction="write"),
+ "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=SimpleQueueCreate, direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -2662,13 +2661,13 @@ async def edit_runs(self, *, runs: typing.Sequence[EvaluationRunEdit], request_o
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunsResponse,
+ SimpleQueueResponse,
parse_obj_as(
- type_ =EvaluationRunsResponse, # type: ignore
+ type_ =SimpleQueueResponse, # type: ignore
object_ =_response.json()
)
)
- return AsyncHttpResponse(response=_response, data=_data)
+ return HttpResponse(response=_response, data=_data)
if _response.status_code == 422:
raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
HttpValidationError,
@@ -2682,11 +2681,11 @@ async def edit_runs(self, *, runs: typing.Sequence[EvaluationRunEdit], request_o
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def query_runs(self, *, run: typing.Optional[EvaluationRunQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunsResponse]:
+ def query_simple_queues(self, *, queue: typing.Optional[SimpleQueueQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueuesResponse]:
"""
Parameters
----------
- run : typing.Optional[EvaluationRunQuery]
+ queue : typing.Optional[SimpleQueueQuery]
windowing : typing.Optional[Windowing]
@@ -2695,13 +2694,13 @@ async def query_runs(self, *, run: typing.Optional[EvaluationRunQuery] = OMIT, w
Returns
-------
- AsyncHttpResponse[EvaluationRunsResponse]
+ HttpResponse[SimpleQueuesResponse]
Successful Response
"""
- _response = await self._client_wrapper.httpx_client.request(
- "evaluations/runs/query",method="POST",
+ _response = self._client_wrapper.httpx_client.request(
+ "simple/queues/query",method="POST",
json={
- "run": convert_and_respect_annotation_metadata(object_=run, annotation=typing.Optional[EvaluationRunQuery], direction="write"),
+ "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=typing.Optional[SimpleQueueQuery], direction="write"),
"windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
}
,
@@ -2712,13 +2711,13 @@ async def query_runs(self, *, run: typing.Optional[EvaluationRunQuery] = OMIT, w
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunsResponse,
+ SimpleQueuesResponse,
parse_obj_as(
- type_ =EvaluationRunsResponse, # type: ignore
+ type_ =SimpleQueuesResponse, # type: ignore
object_ =_response.json()
)
)
- return AsyncHttpResponse(response=_response, data=_data)
+ return HttpResponse(response=_response, data=_data)
if _response.status_code == 422:
raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
HttpValidationError,
@@ -2732,24 +2731,72 @@ async def query_runs(self, *, run: typing.Optional[EvaluationRunQuery] = OMIT, w
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def close_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunsResponse]:
+ def fetch_simple_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueueResponse]:
"""
Parameters
----------
- run_ids : typing.Sequence[str]
+ queue_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunsResponse]
+ HttpResponse[SimpleQueueResponse]
Successful Response
"""
- _response = await self._client_wrapper.httpx_client.request(
- "evaluations/runs/close",method="POST",
+ _response = self._client_wrapper.httpx_client.request(
+ f"simple/queues/{jsonable_encoder(queue_id)}",method="GET",
+ request_options=request_options,)
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SimpleQueueResponse,
+ parse_obj_as(
+ type_ =SimpleQueueResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def query_simple_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[SimpleQueueScenariosQuery] = OMIT, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueueScenariosResponse]:
+ """
+ Parameters
+ ----------
+ queue_id : str
+
+ queue : typing.Optional[SimpleQueueScenariosQuery]
+
+ scenario : typing.Optional[EvaluationScenarioQuery]
+
+ windowing : typing.Optional[Windowing]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[SimpleQueueScenariosResponse]
+ Successful Response
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"simple/queues/{jsonable_encoder(queue_id)}/scenarios/query",method="POST",
json={
- "run_ids": run_ids,
+ "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=typing.Optional[SimpleQueueScenariosQuery], direction="write"),
+ "scenario": convert_and_respect_annotation_metadata(object_=scenario, annotation=typing.Optional[EvaluationScenarioQuery], direction="write"),
+ "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -2759,13 +2806,13 @@ async def close_runs(self, *, run_ids: typing.Sequence[str], request_options: ty
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunsResponse,
+ SimpleQueueScenariosResponse,
parse_obj_as(
- type_ =EvaluationRunsResponse, # type: ignore
+ type_ =SimpleQueueScenariosResponse, # type: ignore
object_ =_response.json()
)
)
- return AsyncHttpResponse(response=_response, data=_data)
+ return HttpResponse(response=_response, data=_data)
if _response.status_code == 422:
raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
HttpValidationError,
@@ -2779,24 +2826,26 @@ async def close_runs(self, *, run_ids: typing.Sequence[str], request_options: ty
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def open_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunsResponse]:
+ def add_simple_queue_traces(self, queue_id: str, *, trace_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueueIdResponse]:
"""
Parameters
----------
- run_ids : typing.Sequence[str]
+ queue_id : str
+
+ trace_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunsResponse]
+ HttpResponse[SimpleQueueIdResponse]
Successful Response
"""
- _response = await self._client_wrapper.httpx_client.request(
- "evaluations/runs/open",method="POST",
+ _response = self._client_wrapper.httpx_client.request(
+ f"simple/queues/{jsonable_encoder(queue_id)}/traces/",method="POST",
json={
- "run_ids": run_ids,
+ "trace_ids": trace_ids,
}
,
headers={"content-type": "application/json", }
@@ -2806,13 +2855,13 @@ async def open_runs(self, *, run_ids: typing.Sequence[str], request_options: typ
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunsResponse,
+ SimpleQueueIdResponse,
parse_obj_as(
- type_ =EvaluationRunsResponse, # type: ignore
+ type_ =SimpleQueueIdResponse, # type: ignore
object_ =_response.json()
)
)
- return AsyncHttpResponse(response=_response, data=_data)
+ return HttpResponse(response=_response, data=_data)
if _response.status_code == 422:
raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
HttpValidationError,
@@ -2826,29 +2875,720 @@ async def open_runs(self, *, run_ids: typing.Sequence[str], request_options: typ
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def fetch_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
+ def add_simple_queue_testcases(self, queue_id: str, *, testcase_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[SimpleQueueIdResponse]:
"""
Parameters
----------
- run_id : str
+ queue_id : str
+
+ testcase_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunResponse]
+ HttpResponse[SimpleQueueIdResponse]
Successful Response
"""
- _response = await self._client_wrapper.httpx_client.request(
- f"evaluations/runs/{jsonable_encoder(run_id)}",method="GET",
- request_options=request_options,)
+ _response = self._client_wrapper.httpx_client.request(
+ f"simple/queues/{jsonable_encoder(queue_id)}/testcases/",method="POST",
+ json={
+ "testcase_ids": testcase_ids,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SimpleQueueIdResponse,
+ parse_obj_as(
+ type_ =SimpleQueueIdResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+class AsyncRawEvaluationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def create_runs(self, *, runs: typing.Sequence[EvaluationRunCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunsResponse]:
+ """
+ Parameters
+ ----------
+ runs : typing.Sequence[EvaluationRunCreate]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunsResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "evaluations/runs/",method="POST",
+ json={
+ "runs": convert_and_respect_annotation_metadata(object_=runs, annotation=typing.Sequence[EvaluationRunCreate], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunsResponse,
+ parse_obj_as(
+ type_ =EvaluationRunsResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunIdsResponse]:
+ """
+ Parameters
+ ----------
+ run_ids : typing.Sequence[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunIdsResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "evaluations/runs/",method="DELETE",
+ json={
+ "run_ids": run_ids,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunIdsResponse,
+ parse_obj_as(
+ type_ =EvaluationRunIdsResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def edit_runs(self, *, runs: typing.Sequence[EvaluationRunEdit], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunsResponse]:
+ """
+ Parameters
+ ----------
+ runs : typing.Sequence[EvaluationRunEdit]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunsResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "evaluations/runs/",method="PATCH",
+ json={
+ "runs": convert_and_respect_annotation_metadata(object_=runs, annotation=typing.Sequence[EvaluationRunEdit], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunsResponse,
+ parse_obj_as(
+ type_ =EvaluationRunsResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def query_runs(self, *, run: typing.Optional[EvaluationRunQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunsResponse]:
+ """
+ Parameters
+ ----------
+ run : typing.Optional[EvaluationRunQuery]
+
+ windowing : typing.Optional[Windowing]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunsResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "evaluations/runs/query",method="POST",
+ json={
+ "run": convert_and_respect_annotation_metadata(object_=run, annotation=typing.Optional[EvaluationRunQuery], direction="write"),
+ "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunsResponse,
+ parse_obj_as(
+ type_ =EvaluationRunsResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def close_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunsResponse]:
+ """
+ Parameters
+ ----------
+ run_ids : typing.Sequence[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunsResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "evaluations/runs/close",method="POST",
+ json={
+ "run_ids": run_ids,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunsResponse,
+ parse_obj_as(
+ type_ =EvaluationRunsResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def open_runs(self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunsResponse]:
+ """
+ Parameters
+ ----------
+ run_ids : typing.Sequence[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunsResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "evaluations/runs/open",method="POST",
+ json={
+ "run_ids": run_ids,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunsResponse,
+ parse_obj_as(
+ type_ =EvaluationRunsResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def fetch_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
+ """
+ Parameters
+ ----------
+ run_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"evaluations/runs/{jsonable_encoder(run_id)}",method="GET",
+ request_options=request_options,)
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunResponse,
+ parse_obj_as(
+ type_ =EvaluationRunResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunIdResponse]:
+ """
+ Parameters
+ ----------
+ run_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunIdResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"evaluations/runs/{jsonable_encoder(run_id)}",method="DELETE",
+ request_options=request_options,)
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunIdResponse,
+ parse_obj_as(
+ type_ =EvaluationRunIdResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def edit_run(self, run_id: str, *, run: EvaluationRunEdit, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
+ """
+ Parameters
+ ----------
+ run_id : str
+
+ run : EvaluationRunEdit
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"evaluations/runs/{jsonable_encoder(run_id)}",method="PATCH",
+ json={
+ "run": convert_and_respect_annotation_metadata(object_=run, annotation=EvaluationRunEdit, direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunResponse,
+ parse_obj_as(
+ type_ =EvaluationRunResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def close_run(self, run_id: str, *, status: typing.Optional[EvaluationStatus] = None, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
+ """
+ Parameters
+ ----------
+ run_id : str
+
+ status : typing.Optional[EvaluationStatus]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"evaluations/runs/{jsonable_encoder(run_id)}/close",method="POST",
+ params={"status": status, }
+ ,
+ request_options=request_options,)
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunResponse,
+ parse_obj_as(
+ type_ =EvaluationRunResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
+ """
+ Parameters
+ ----------
+ run_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationRunResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"evaluations/runs/{jsonable_encoder(run_id)}/open",method="POST",
+ request_options=request_options,)
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationRunResponse,
+ parse_obj_as(
+ type_ =EvaluationRunResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def fetch_default_queue(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueueResponse]:
+ """
+ Parameters
+ ----------
+ run_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationQueueResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"evaluations/runs/{jsonable_encoder(run_id)}/queues/default",method="GET",
+ request_options=request_options,)
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationQueueResponse,
+ parse_obj_as(
+ type_ =EvaluationQueueResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenariosResponse]:
+ """
+ Parameters
+ ----------
+ scenarios : typing.Sequence[EvaluationScenarioCreate]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationScenariosResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "evaluations/scenarios/",method="POST",
+ json={
+ "scenarios": convert_and_respect_annotation_metadata(object_=scenarios, annotation=typing.Sequence[EvaluationScenarioCreate], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationScenariosResponse,
+ parse_obj_as(
+ type_ =EvaluationScenariosResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete_scenarios(self, *, scenario_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenarioIdsResponse]:
+ """
+ Parameters
+ ----------
+ scenario_ids : typing.Sequence[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationScenarioIdsResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "evaluations/scenarios/",method="DELETE",
+ json={
+ "scenario_ids": scenario_ids,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ EvaluationScenarioIdsResponse,
+ parse_obj_as(
+ type_ =EvaluationScenarioIdsResponse, # type: ignore
+ object_ =_response.json()
+ )
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_ =HttpValidationError, # type: ignore
+ object_ =_response.json()
+ )
+ ))
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def edit_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioEdit], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenariosResponse]:
+ """
+ Parameters
+ ----------
+ scenarios : typing.Sequence[EvaluationScenarioEdit]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[EvaluationScenariosResponse]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "evaluations/scenarios/",method="PATCH",
+ json={
+ "scenarios": convert_and_respect_annotation_metadata(object_=scenarios, annotation=typing.Sequence[EvaluationScenarioEdit], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunResponse,
+ EvaluationScenariosResponse,
parse_obj_as(
- type_ =EvaluationRunResponse, # type: ignore
+ type_ =EvaluationScenariosResponse, # type: ignore
object_ =_response.json()
)
)
@@ -2866,29 +3606,39 @@ async def fetch_run(self, run_id: str, *, request_options: typing.Optional[Reque
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def delete_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunIdResponse]:
+ async def query_scenarios(self, *, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenariosResponse]:
"""
Parameters
----------
- run_id : str
+ scenario : typing.Optional[EvaluationScenarioQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunIdResponse]
+ AsyncHttpResponse[EvaluationScenariosResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/runs/{jsonable_encoder(run_id)}",method="DELETE",
- request_options=request_options,)
+ "evaluations/scenarios/query",method="POST",
+ json={
+ "scenario": convert_and_respect_annotation_metadata(object_=scenario, annotation=typing.Optional[EvaluationScenarioQuery], direction="write"),
+ "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunIdResponse,
+ EvaluationScenariosResponse,
parse_obj_as(
- type_ =EvaluationRunIdResponse, # type: ignore
+ type_ =EvaluationScenariosResponse, # type: ignore
object_ =_response.json()
)
)
@@ -2906,38 +3656,29 @@ async def delete_run(self, run_id: str, *, request_options: typing.Optional[Requ
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def edit_run(self, run_id: str, *, run: EvaluationRunEdit, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
+ async def fetch_scenario(self, scenario_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenarioResponse]:
"""
Parameters
----------
- run_id : str
-
- run : EvaluationRunEdit
+ scenario_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunResponse]
+ AsyncHttpResponse[EvaluationScenarioResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/runs/{jsonable_encoder(run_id)}",method="PATCH",
- json={
- "run": convert_and_respect_annotation_metadata(object_=run, annotation=EvaluationRunEdit, direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"evaluations/scenarios/{jsonable_encoder(scenario_id)}",method="GET",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunResponse,
+ EvaluationScenarioResponse,
parse_obj_as(
- type_ =EvaluationRunResponse, # type: ignore
+ type_ =EvaluationScenarioResponse, # type: ignore
object_ =_response.json()
)
)
@@ -2955,33 +3696,29 @@ async def edit_run(self, run_id: str, *, run: EvaluationRunEdit, request_options
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def close_run(self, run_id: str, *, status: typing.Optional[EvaluationStatus] = None, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
+ async def delete_scenario(self, scenario_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenarioIdResponse]:
"""
Parameters
----------
- run_id : str
-
- status : typing.Optional[EvaluationStatus]
+ scenario_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunResponse]
+ AsyncHttpResponse[EvaluationScenarioIdResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/runs/{jsonable_encoder(run_id)}/close",method="POST",
- params={"status": status, }
- ,
+ f"evaluations/scenarios/{jsonable_encoder(scenario_id)}",method="DELETE",
request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunResponse,
+ EvaluationScenarioIdResponse,
parse_obj_as(
- type_ =EvaluationRunResponse, # type: ignore
+ type_ =EvaluationScenarioIdResponse, # type: ignore
object_ =_response.json()
)
)
@@ -2999,31 +3736,38 @@ async def close_run(self, run_id: str, *, status: typing.Optional[EvaluationStat
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def close_run_with_status(self, run_id: str, status: typing.Optional[EvaluationStatus], *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
+ async def edit_scenario(self, scenario_id: str, *, scenario: EvaluationScenarioEdit, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenarioResponse]:
"""
Parameters
----------
- run_id : str
+ scenario_id : str
- status : typing.Optional[EvaluationStatus]
+ scenario : EvaluationScenarioEdit
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunResponse]
+ AsyncHttpResponse[EvaluationScenarioResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/runs/{jsonable_encoder(run_id)}/close/{jsonable_encoder(status)}",method="POST",
- request_options=request_options,)
+ f"evaluations/scenarios/{jsonable_encoder(scenario_id)}",method="PATCH",
+ json={
+ "scenario": convert_and_respect_annotation_metadata(object_=scenario, annotation=EvaluationScenarioEdit, direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunResponse,
+ EvaluationScenarioResponse,
parse_obj_as(
- type_ =EvaluationRunResponse, # type: ignore
+ type_ =EvaluationScenarioResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3041,29 +3785,36 @@ async def close_run_with_status(self, run_id: str, status: typing.Optional[Evalu
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def open_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
+ async def set_results(self, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultsResponse]:
"""
Parameters
----------
- run_id : str
+ results : typing.Sequence[EvaluationResultCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationRunResponse]
+ AsyncHttpResponse[EvaluationResultsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/runs/{jsonable_encoder(run_id)}/open",method="POST",
- request_options=request_options,)
+ "evaluations/results/",method="POST",
+ json={
+ "results": convert_and_respect_annotation_metadata(object_=results, annotation=typing.Sequence[EvaluationResultCreate], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationRunResponse,
+ EvaluationResultsResponse,
parse_obj_as(
- type_ =EvaluationRunResponse, # type: ignore
+ type_ =EvaluationResultsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3081,24 +3832,24 @@ async def open_run(self, run_id: str, *, request_options: typing.Optional[Reques
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def create_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenariosResponse]:
+ async def delete_results(self, *, result_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultIdsResponse]:
"""
Parameters
----------
- scenarios : typing.Sequence[EvaluationScenarioCreate]
+ result_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationScenariosResponse]
+ AsyncHttpResponse[EvaluationResultIdsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/scenarios/",method="POST",
+ "evaluations/results/",method="DELETE",
json={
- "scenarios": convert_and_respect_annotation_metadata(object_=scenarios, annotation=typing.Sequence[EvaluationScenarioCreate], direction="write"),
+ "result_ids": result_ids,
}
,
headers={"content-type": "application/json", }
@@ -3108,9 +3859,9 @@ async def create_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenari
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationScenariosResponse,
+ EvaluationResultIdsResponse,
parse_obj_as(
- type_ =EvaluationScenariosResponse, # type: ignore
+ type_ =EvaluationResultIdsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3128,24 +3879,27 @@ async def create_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenari
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def delete_scenarios(self, *, scenario_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenarioIdsResponse]:
+ async def query_results(self, *, result: typing.Optional[EvaluationResultQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultsResponse]:
"""
Parameters
----------
- scenario_ids : typing.Sequence[str]
+ result : typing.Optional[EvaluationResultQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationScenarioIdsResponse]
+ AsyncHttpResponse[EvaluationResultsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/scenarios/",method="DELETE",
+ "evaluations/results/query",method="POST",
json={
- "scenario_ids": scenario_ids,
+ "result": convert_and_respect_annotation_metadata(object_=result, annotation=typing.Optional[EvaluationResultQuery], direction="write"),
+ "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -3155,9 +3909,9 @@ async def delete_scenarios(self, *, scenario_ids: typing.Sequence[str], request_
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationScenarioIdsResponse,
+ EvaluationResultsResponse,
parse_obj_as(
- type_ =EvaluationScenarioIdsResponse, # type: ignore
+ type_ =EvaluationResultsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3175,36 +3929,29 @@ async def delete_scenarios(self, *, scenario_ids: typing.Sequence[str], request_
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def edit_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioEdit], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenariosResponse]:
+ async def fetch_result(self, result_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultResponse]:
"""
Parameters
----------
- scenarios : typing.Sequence[EvaluationScenarioEdit]
+ result_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationScenariosResponse]
+ AsyncHttpResponse[EvaluationResultResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/scenarios/",method="PATCH",
- json={
- "scenarios": convert_and_respect_annotation_metadata(object_=scenarios, annotation=typing.Sequence[EvaluationScenarioEdit], direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"evaluations/results/{jsonable_encoder(result_id)}",method="GET",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationScenariosResponse,
+ EvaluationResultResponse,
parse_obj_as(
- type_ =EvaluationScenariosResponse, # type: ignore
+ type_ =EvaluationResultResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3222,39 +3969,29 @@ async def edit_scenarios(self, *, scenarios: typing.Sequence[EvaluationScenarioE
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def query_scenarios(self, *, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenariosResponse]:
+ async def delete_result(self, result_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultIdResponse]:
"""
Parameters
----------
- scenario : typing.Optional[EvaluationScenarioQuery]
-
- windowing : typing.Optional[Windowing]
+ result_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationScenariosResponse]
+ AsyncHttpResponse[EvaluationResultIdResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/scenarios/query",method="POST",
- json={
- "scenario": convert_and_respect_annotation_metadata(object_=scenario, annotation=typing.Optional[EvaluationScenarioQuery], direction="write"),
- "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"evaluations/results/{jsonable_encoder(result_id)}",method="DELETE",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationScenariosResponse,
+ EvaluationResultIdResponse,
parse_obj_as(
- type_ =EvaluationScenariosResponse, # type: ignore
+ type_ =EvaluationResultIdResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3272,29 +4009,36 @@ async def query_scenarios(self, *, scenario: typing.Optional[EvaluationScenarioQ
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def fetch_scenario(self, scenario_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenarioResponse]:
+ async def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsResponse]:
"""
Parameters
----------
- scenario_id : str
+ metrics : EvaluationMetricsRefresh
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationScenarioResponse]
+ AsyncHttpResponse[EvaluationMetricsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/scenarios/{jsonable_encoder(scenario_id)}",method="GET",
- request_options=request_options,)
+ "evaluations/metrics/refresh",method="POST",
+ json={
+ "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=EvaluationMetricsRefresh, direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationScenarioResponse,
+ EvaluationMetricsResponse,
parse_obj_as(
- type_ =EvaluationScenarioResponse, # type: ignore
+ type_ =EvaluationMetricsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3312,29 +4056,36 @@ async def fetch_scenario(self, scenario_id: str, *, request_options: typing.Opti
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def delete_scenario(self, scenario_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenarioIdResponse]:
+ async def set_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsResponse]:
"""
Parameters
----------
- scenario_id : str
+ metrics : typing.Sequence[EvaluationMetricsCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationScenarioIdResponse]
+ AsyncHttpResponse[EvaluationMetricsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/scenarios/{jsonable_encoder(scenario_id)}",method="DELETE",
- request_options=request_options,)
+ "evaluations/metrics/",method="POST",
+ json={
+ "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=typing.Sequence[EvaluationMetricsCreate], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationScenarioIdResponse,
+ EvaluationMetricsResponse,
parse_obj_as(
- type_ =EvaluationScenarioIdResponse, # type: ignore
+ type_ =EvaluationMetricsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3352,26 +4103,24 @@ async def delete_scenario(self, scenario_id: str, *, request_options: typing.Opt
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def edit_scenario(self, scenario_id: str, *, scenario: EvaluationScenarioEdit, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenarioResponse]:
+ async def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsIdsResponse]:
"""
Parameters
----------
- scenario_id : str
-
- scenario : EvaluationScenarioEdit
+ metrics_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationScenarioResponse]
+ AsyncHttpResponse[EvaluationMetricsIdsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/scenarios/{jsonable_encoder(scenario_id)}",method="PATCH",
+ "evaluations/metrics/",method="DELETE",
json={
- "scenario": convert_and_respect_annotation_metadata(object_=scenario, annotation=EvaluationScenarioEdit, direction="write"),
+ "metrics_ids": metrics_ids,
}
,
headers={"content-type": "application/json", }
@@ -3381,9 +4130,9 @@ async def edit_scenario(self, scenario_id: str, *, scenario: EvaluationScenarioE
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationScenarioResponse,
+ EvaluationMetricsIdsResponse,
parse_obj_as(
- type_ =EvaluationScenarioResponse, # type: ignore
+ type_ =EvaluationMetricsIdsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3401,24 +4150,27 @@ async def edit_scenario(self, scenario_id: str, *, scenario: EvaluationScenarioE
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def create_results(self, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultsResponse]:
+ async def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsResponse]:
"""
Parameters
----------
- results : typing.Sequence[EvaluationResultCreate]
+ metrics : typing.Optional[EvaluationMetricsQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationResultsResponse]
+ AsyncHttpResponse[EvaluationMetricsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/results/",method="POST",
+ "evaluations/metrics/query",method="POST",
json={
- "results": convert_and_respect_annotation_metadata(object_=results, annotation=typing.Sequence[EvaluationResultCreate], direction="write"),
+ "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=typing.Optional[EvaluationMetricsQuery], direction="write"),
+ "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -3428,9 +4180,9 @@ async def create_results(self, *, results: typing.Sequence[EvaluationResultCreat
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationResultsResponse,
+ EvaluationMetricsResponse,
parse_obj_as(
- type_ =EvaluationResultsResponse, # type: ignore
+ type_ =EvaluationMetricsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3448,36 +4200,29 @@ async def create_results(self, *, results: typing.Sequence[EvaluationResultCreat
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def delete_results(self, *, result_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultIdsResponse]:
+ async def fetch_metric(self, metrics_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsResponse]:
"""
Parameters
----------
- result_ids : typing.Sequence[str]
+ metrics_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationResultIdsResponse]
+ AsyncHttpResponse[EvaluationMetricsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/results/",method="DELETE",
- json={
- "result_ids": result_ids,
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"evaluations/metrics/{jsonable_encoder(metrics_id)}",method="GET",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationResultIdsResponse,
+ EvaluationMetricsResponse,
parse_obj_as(
- type_ =EvaluationResultIdsResponse, # type: ignore
+ type_ =EvaluationMetricsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3495,36 +4240,29 @@ async def delete_results(self, *, result_ids: typing.Sequence[str], request_opti
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def edit_results(self, *, results: typing.Sequence[EvaluationResultEdit], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultsResponse]:
+ async def delete_metric(self, metrics_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsIdsResponse]:
"""
Parameters
----------
- results : typing.Sequence[EvaluationResultEdit]
+ metrics_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationResultsResponse]
+ AsyncHttpResponse[EvaluationMetricsIdsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/results/",method="PATCH",
- json={
- "results": convert_and_respect_annotation_metadata(object_=results, annotation=typing.Sequence[EvaluationResultEdit], direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"evaluations/metrics/{jsonable_encoder(metrics_id)}",method="DELETE",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationResultsResponse,
+ EvaluationMetricsIdsResponse,
parse_obj_as(
- type_ =EvaluationResultsResponse, # type: ignore
+ type_ =EvaluationMetricsIdsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3542,27 +4280,24 @@ async def edit_results(self, *, results: typing.Sequence[EvaluationResultEdit],
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def query_results(self, *, result: typing.Optional[EvaluationResultQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultsResponse]:
+ async def create_queues(self, *, queues: typing.Sequence[EvaluationQueueCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueuesResponse]:
"""
Parameters
----------
- result : typing.Optional[EvaluationResultQuery]
-
- windowing : typing.Optional[Windowing]
+ queues : typing.Sequence[EvaluationQueueCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationResultsResponse]
+ AsyncHttpResponse[EvaluationQueuesResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/results/query",method="POST",
+ "evaluations/queues/",method="POST",
json={
- "result": convert_and_respect_annotation_metadata(object_=result, annotation=typing.Optional[EvaluationResultQuery], direction="write"),
- "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
+ "queues": convert_and_respect_annotation_metadata(object_=queues, annotation=typing.Sequence[EvaluationQueueCreate], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -3572,9 +4307,9 @@ async def query_results(self, *, result: typing.Optional[EvaluationResultQuery]
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationResultsResponse,
+ EvaluationQueuesResponse,
parse_obj_as(
- type_ =EvaluationResultsResponse, # type: ignore
+ type_ =EvaluationQueuesResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3592,29 +4327,36 @@ async def query_results(self, *, result: typing.Optional[EvaluationResultQuery]
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def fetch_result(self, result_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultResponse]:
+ async def delete_queues(self, *, queue_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueueIdsResponse]:
"""
Parameters
----------
- result_id : str
+ queue_ids : typing.Sequence[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationResultResponse]
+ AsyncHttpResponse[EvaluationQueueIdsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/results/{jsonable_encoder(result_id)}",method="GET",
- request_options=request_options,)
+ "evaluations/queues/",method="DELETE",
+ json={
+ "queue_ids": queue_ids,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationResultResponse,
+ EvaluationQueueIdsResponse,
parse_obj_as(
- type_ =EvaluationResultResponse, # type: ignore
+ type_ =EvaluationQueueIdsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3632,29 +4374,36 @@ async def fetch_result(self, result_id: str, *, request_options: typing.Optional
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def delete_result(self, result_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultIdResponse]:
+ async def edit_queues(self, *, queues: typing.Sequence[EvaluationQueueEdit], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueuesResponse]:
"""
Parameters
----------
- result_id : str
+ queues : typing.Sequence[EvaluationQueueEdit]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationResultIdResponse]
+ AsyncHttpResponse[EvaluationQueuesResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/results/{jsonable_encoder(result_id)}",method="DELETE",
- request_options=request_options,)
+ "evaluations/queues/",method="PATCH",
+ json={
+ "queues": convert_and_respect_annotation_metadata(object_=queues, annotation=typing.Sequence[EvaluationQueueEdit], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationResultIdResponse,
+ EvaluationQueuesResponse,
parse_obj_as(
- type_ =EvaluationResultIdResponse, # type: ignore
+ type_ =EvaluationQueuesResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3672,26 +4421,27 @@ async def delete_result(self, result_id: str, *, request_options: typing.Optiona
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def edit_result(self, result_id: str, *, result: EvaluationResultEdit, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultResponse]:
+ async def query_queues(self, *, queue: typing.Optional[EvaluationQueueQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueuesResponse]:
"""
Parameters
----------
- result_id : str
+ queue : typing.Optional[EvaluationQueueQuery]
- result : EvaluationResultEdit
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationResultResponse]
+ AsyncHttpResponse[EvaluationQueuesResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/results/{jsonable_encoder(result_id)}",method="PATCH",
+ "evaluations/queues/query",method="POST",
json={
- "result": convert_and_respect_annotation_metadata(object_=result, annotation=EvaluationResultEdit, direction="write"),
+ "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=typing.Optional[EvaluationQueueQuery], direction="write"),
+ "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -3701,9 +4451,9 @@ async def edit_result(self, result_id: str, *, result: EvaluationResultEdit, req
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationResultResponse,
+ EvaluationQueuesResponse,
parse_obj_as(
- type_ =EvaluationResultResponse, # type: ignore
+ type_ =EvaluationQueuesResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3721,36 +4471,29 @@ async def edit_result(self, result_id: str, *, result: EvaluationResultEdit, req
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsResponse]:
+ async def fetch_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueueResponse]:
"""
Parameters
----------
- metrics : EvaluationMetricsRefresh
+ queue_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationMetricsResponse]
+ AsyncHttpResponse[EvaluationQueueResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/metrics/refresh",method="POST",
- json={
- "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=EvaluationMetricsRefresh, direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"evaluations/queues/{jsonable_encoder(queue_id)}",method="GET",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationMetricsResponse,
+ EvaluationQueueResponse,
parse_obj_as(
- type_ =EvaluationMetricsResponse, # type: ignore
+ type_ =EvaluationQueueResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3768,36 +4511,29 @@ async def refresh_metrics(self, *, metrics: EvaluationMetricsRefresh, request_op
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def create_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsResponse]:
+ async def delete_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueueIdResponse]:
"""
Parameters
----------
- metrics : typing.Sequence[EvaluationMetricsCreate]
+ queue_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationMetricsResponse]
+ AsyncHttpResponse[EvaluationQueueIdResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/metrics/",method="POST",
- json={
- "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=typing.Sequence[EvaluationMetricsCreate], direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"evaluations/queues/{jsonable_encoder(queue_id)}",method="DELETE",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationMetricsResponse,
+ EvaluationQueueIdResponse,
parse_obj_as(
- type_ =EvaluationMetricsResponse, # type: ignore
+ type_ =EvaluationQueueIdResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3815,24 +4551,26 @@ async def create_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsCrea
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsIdsResponse]:
+ async def edit_queue(self, queue_id: str, *, queue: EvaluationQueueEdit, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueueResponse]:
"""
Parameters
----------
- metrics_ids : typing.Sequence[str]
+ queue_id : str
+
+ queue : EvaluationQueueEdit
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationMetricsIdsResponse]
+ AsyncHttpResponse[EvaluationQueueResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/metrics/",method="DELETE",
+ f"evaluations/queues/{jsonable_encoder(queue_id)}",method="PATCH",
json={
- "metrics_ids": metrics_ids,
+ "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=EvaluationQueueEdit, direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -3842,9 +4580,9 @@ async def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_opt
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationMetricsIdsResponse,
+ EvaluationQueueResponse,
parse_obj_as(
- type_ =EvaluationMetricsIdsResponse, # type: ignore
+ type_ =EvaluationQueueResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3862,24 +4600,32 @@ async def delete_metrics(self, *, metrics_ids: typing.Sequence[str], request_opt
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def edit_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsEdit], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsResponse]:
+ async def query_evaluation_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[EvaluationQueueScenariosQuery] = OMIT, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenariosResponse]:
"""
Parameters
----------
- metrics : typing.Sequence[EvaluationMetricsEdit]
+ queue_id : str
+
+ queue : typing.Optional[EvaluationQueueScenariosQuery]
+
+ scenario : typing.Optional[EvaluationScenarioQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationMetricsResponse]
+ AsyncHttpResponse[EvaluationScenariosResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/metrics/",method="PATCH",
+ f"evaluations/queues/{jsonable_encoder(queue_id)}/scenarios/query",method="POST",
json={
- "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=typing.Sequence[EvaluationMetricsEdit], direction="write"),
+ "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=typing.Optional[EvaluationQueueScenariosQuery], direction="write"),
+ "scenario": convert_and_respect_annotation_metadata(object_=scenario, annotation=typing.Optional[EvaluationScenarioQuery], direction="write"),
+ "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -3889,9 +4635,9 @@ async def edit_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsEdit],
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationMetricsResponse,
+ EvaluationScenariosResponse,
parse_obj_as(
- type_ =EvaluationMetricsResponse, # type: ignore
+ type_ =EvaluationScenariosResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3909,27 +4655,24 @@ async def edit_metrics(self, *, metrics: typing.Sequence[EvaluationMetricsEdit],
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationMetricsResponse]:
+ async def create_simple_evaluation(self, *, evaluation: SimpleEvaluationCreate, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
"""
Parameters
----------
- metrics : typing.Optional[EvaluationMetricsQuery]
-
- windowing : typing.Optional[Windowing]
+ evaluation : SimpleEvaluationCreate
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationMetricsResponse]
+ AsyncHttpResponse[SimpleEvaluationResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/metrics/query",method="POST",
+ "simple/evaluations/",method="POST",
json={
- "metrics": convert_and_respect_annotation_metadata(object_=metrics, annotation=typing.Optional[EvaluationMetricsQuery], direction="write"),
- "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
+ "evaluation": convert_and_respect_annotation_metadata(object_=evaluation, annotation=SimpleEvaluationCreate, direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -3939,9 +4682,9 @@ async def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationMetricsResponse,
+ SimpleEvaluationResponse,
parse_obj_as(
- type_ =EvaluationMetricsResponse, # type: ignore
+ type_ =SimpleEvaluationResponse, # type: ignore
object_ =_response.json()
)
)
@@ -3959,24 +4702,27 @@ async def query_metrics(self, *, metrics: typing.Optional[EvaluationMetricsQuery
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def create_queues(self, *, queues: typing.Sequence[EvaluationQueueCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueuesResponse]:
+ async def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEvaluationQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationsResponse]:
"""
Parameters
----------
- queues : typing.Sequence[EvaluationQueueCreate]
+ evaluation : typing.Optional[SimpleEvaluationQuery]
+
+ windowing : typing.Optional[Windowing]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationQueuesResponse]
+ AsyncHttpResponse[SimpleEvaluationsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/queues/",method="POST",
+ "simple/evaluations/query",method="POST",
json={
- "queues": convert_and_respect_annotation_metadata(object_=queues, annotation=typing.Sequence[EvaluationQueueCreate], direction="write"),
+ "evaluation": convert_and_respect_annotation_metadata(object_=evaluation, annotation=typing.Optional[SimpleEvaluationQuery], direction="write"),
+ "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -3986,9 +4732,9 @@ async def create_queues(self, *, queues: typing.Sequence[EvaluationQueueCreate],
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationQueuesResponse,
+ SimpleEvaluationsResponse,
parse_obj_as(
- type_ =EvaluationQueuesResponse, # type: ignore
+ type_ =SimpleEvaluationsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4006,36 +4752,29 @@ async def create_queues(self, *, queues: typing.Sequence[EvaluationQueueCreate],
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def delete_queues(self, *, queue_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueueIdsResponse]:
+ async def fetch_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
"""
Parameters
----------
- queue_ids : typing.Sequence[str]
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationQueueIdsResponse]
+ AsyncHttpResponse[SimpleEvaluationResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/queues/",method="DELETE",
- json={
- "queue_ids": queue_ids,
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="GET",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationQueueIdsResponse,
+ SimpleEvaluationResponse,
parse_obj_as(
- type_ =EvaluationQueueIdsResponse, # type: ignore
+ type_ =SimpleEvaluationResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4053,36 +4792,29 @@ async def delete_queues(self, *, queue_ids: typing.Sequence[str], request_option
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def edit_queues(self, *, queues: typing.Sequence[EvaluationQueueEdit], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueuesResponse]:
+ async def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationIdResponse]:
"""
Parameters
----------
- queues : typing.Sequence[EvaluationQueueEdit]
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationQueuesResponse]
+ AsyncHttpResponse[SimpleEvaluationIdResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/queues/",method="PATCH",
- json={
- "queues": convert_and_respect_annotation_metadata(object_=queues, annotation=typing.Sequence[EvaluationQueueEdit], direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="DELETE",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationQueuesResponse,
+ SimpleEvaluationIdResponse,
parse_obj_as(
- type_ =EvaluationQueuesResponse, # type: ignore
+ type_ =SimpleEvaluationIdResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4100,27 +4832,26 @@ async def edit_queues(self, *, queues: typing.Sequence[EvaluationQueueEdit], req
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def query_queues(self, *, queue: typing.Optional[EvaluationQueueQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueuesResponse]:
+ async def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: SimpleEvaluationEdit, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
"""
Parameters
----------
- queue : typing.Optional[EvaluationQueueQuery]
+ evaluation_id : str
- windowing : typing.Optional[Windowing]
+ evaluation : SimpleEvaluationEdit
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationQueuesResponse]
+ AsyncHttpResponse[SimpleEvaluationResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "evaluations/queues/query",method="POST",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="PATCH",
json={
- "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=typing.Optional[EvaluationQueueQuery], direction="write"),
- "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
+ "evaluation": convert_and_respect_annotation_metadata(object_=evaluation, annotation=SimpleEvaluationEdit, direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -4130,9 +4861,9 @@ async def query_queues(self, *, queue: typing.Optional[EvaluationQueueQuery] = O
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationQueuesResponse,
+ SimpleEvaluationResponse,
parse_obj_as(
- type_ =EvaluationQueuesResponse, # type: ignore
+ type_ =SimpleEvaluationResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4150,29 +4881,29 @@ async def query_queues(self, *, queue: typing.Optional[EvaluationQueueQuery] = O
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def fetch_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueueResponse]:
+ async def start_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationQueueResponse]
+ AsyncHttpResponse[SimpleEvaluationResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/queues/{jsonable_encoder(queue_id)}",method="GET",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/start",method="POST",
request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationQueueResponse,
+ SimpleEvaluationResponse,
parse_obj_as(
- type_ =EvaluationQueueResponse, # type: ignore
+ type_ =SimpleEvaluationResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4190,29 +4921,29 @@ async def fetch_queue(self, queue_id: str, *, request_options: typing.Optional[R
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def delete_queue(self, queue_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueueIdResponse]:
+ async def stop_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
"""
Parameters
----------
- queue_id : str
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationQueueIdResponse]
+ AsyncHttpResponse[SimpleEvaluationResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/queues/{jsonable_encoder(queue_id)}",method="DELETE",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/stop",method="POST",
request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationQueueIdResponse,
+ SimpleEvaluationResponse,
parse_obj_as(
- type_ =EvaluationQueueIdResponse, # type: ignore
+ type_ =SimpleEvaluationResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4230,38 +4961,29 @@ async def delete_queue(self, queue_id: str, *, request_options: typing.Optional[
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def edit_queue(self, queue_id: str, *, queue: EvaluationQueueEdit, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationQueueResponse]:
+ async def close_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
"""
Parameters
----------
- queue_id : str
-
- queue : EvaluationQueueEdit
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationQueueResponse]
+ AsyncHttpResponse[SimpleEvaluationResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/queues/{jsonable_encoder(queue_id)}",method="PATCH",
- json={
- "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=EvaluationQueueEdit, direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/close",method="POST",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationQueueResponse,
+ SimpleEvaluationResponse,
parse_obj_as(
- type_ =EvaluationQueueResponse, # type: ignore
+ type_ =SimpleEvaluationResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4279,44 +5001,29 @@ async def edit_queue(self, queue_id: str, *, queue: EvaluationQueueEdit, request
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def query_evaluation_queue_scenarios(self, queue_id: str, *, queue: typing.Optional[EvaluationQueueScenariosQuery] = OMIT, scenario: typing.Optional[EvaluationScenarioQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenariosResponse]:
+ async def open_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
"""
Parameters
----------
- queue_id : str
-
- queue : typing.Optional[EvaluationQueueScenariosQuery]
-
- scenario : typing.Optional[EvaluationScenarioQuery]
-
- windowing : typing.Optional[Windowing]
+ evaluation_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[EvaluationScenariosResponse]
+ AsyncHttpResponse[SimpleEvaluationResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"evaluations/queues/{jsonable_encoder(queue_id)}/scenarios/query",method="POST",
- json={
- "queue": convert_and_respect_annotation_metadata(object_=queue, annotation=typing.Optional[EvaluationQueueScenariosQuery], direction="write"),
- "scenario": convert_and_respect_annotation_metadata(object_=scenario, annotation=typing.Optional[EvaluationScenarioQuery], direction="write"),
- "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
- }
- ,
- headers={"content-type": "application/json", }
- ,
- request_options=request_options,omit=OMIT,
- )
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/open",method="POST",
+ request_options=request_options,)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- EvaluationScenariosResponse,
+ SimpleEvaluationResponse,
parse_obj_as(
- type_ =EvaluationScenariosResponse, # type: ignore
+ type_ =SimpleEvaluationResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4334,24 +5041,26 @@ async def query_evaluation_queue_scenarios(self, queue_id: str, *, queue: typing
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def create_simple_evaluation(self, *, evaluation: SimpleEvaluationCreate, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
+ async def populate_slice(self, evaluation_id: str, *, results: typing.Sequence[EvaluationResultCreate], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultsResponse]:
"""
Parameters
----------
- evaluation : SimpleEvaluationCreate
+ evaluation_id : str
+
+ results : typing.Sequence[EvaluationResultCreate]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[SimpleEvaluationResponse]
+ AsyncHttpResponse[EvaluationResultsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "simple/evaluations/",method="POST",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/populate",method="POST",
json={
- "evaluation": convert_and_respect_annotation_metadata(object_=evaluation, annotation=SimpleEvaluationCreate, direction="write"),
+ "results": convert_and_respect_annotation_metadata(object_=results, annotation=typing.Sequence[EvaluationResultCreate], direction="write"),
}
,
headers={"content-type": "application/json", }
@@ -4361,9 +5070,9 @@ async def create_simple_evaluation(self, *, evaluation: SimpleEvaluationCreate,
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationResponse,
+ EvaluationResultsResponse,
parse_obj_as(
- type_ =SimpleEvaluationResponse, # type: ignore
+ type_ =EvaluationResultsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4381,29 +5090,49 @@ async def create_simple_evaluation(self, *, evaluation: SimpleEvaluationCreate,
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def fetch_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
+ async def process_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, overwrite: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[typing.Any]:
"""
Parameters
----------
evaluation_id : str
+ scenario_ids : typing.Optional[typing.Sequence[str]]
+
+ step_keys : typing.Optional[typing.Sequence[str]]
+
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
+
+ overwrite : typing.Optional[bool]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[SimpleEvaluationResponse]
- Successful Response
+ AsyncHttpResponse[typing.Any]
+ Accepted.
"""
_response = await self._client_wrapper.httpx_client.request(
- f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="GET",
- request_options=request_options,)
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/process",method="POST",
+ json={
+ "scenario_ids": scenario_ids,
+ "step_keys": step_keys,
+ "repeat_idxs": repeat_idxs,
+ "overwrite": overwrite,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
+ if _response is None or not _response.text.strip():
+ return AsyncHttpResponse(response=_response, data=None)
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationResponse,
+ typing.Any,
parse_obj_as(
- type_ =SimpleEvaluationResponse, # type: ignore
+ type_ =typing.Any, # type: ignore
object_ =_response.json()
)
)
@@ -4421,29 +5150,44 @@ async def fetch_simple_evaluation(self, evaluation_id: str, *, request_options:
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def delete_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationIdResponse]:
+ async def probe_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationResultsResponse]:
"""
Parameters
----------
evaluation_id : str
+ scenario_ids : typing.Optional[typing.Sequence[str]]
+
+ step_keys : typing.Optional[typing.Sequence[str]]
+
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[SimpleEvaluationIdResponse]
+ AsyncHttpResponse[EvaluationResultsResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="DELETE",
- request_options=request_options,)
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/probe",method="POST",
+ json={
+ "scenario_ids": scenario_ids,
+ "step_keys": step_keys,
+ "repeat_idxs": repeat_idxs,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationIdResponse,
+ EvaluationResultsResponse,
parse_obj_as(
- type_ =SimpleEvaluationIdResponse, # type: ignore
+ type_ =EvaluationResultsResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4461,26 +5205,31 @@ async def delete_simple_evaluation(self, evaluation_id: str, *, request_options:
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: SimpleEvaluationEdit, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
+ async def prune_slice(self, evaluation_id: str, *, scenario_ids: typing.Optional[typing.Sequence[str]] = OMIT, step_keys: typing.Optional[typing.Sequence[str]] = OMIT, repeat_idxs: typing.Optional[typing.Sequence[int]] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[None]:
"""
Parameters
----------
evaluation_id : str
- evaluation : SimpleEvaluationEdit
+ scenario_ids : typing.Optional[typing.Sequence[str]]
+
+ step_keys : typing.Optional[typing.Sequence[str]]
+
+ repeat_idxs : typing.Optional[typing.Sequence[int]]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[SimpleEvaluationResponse]
- Successful Response
+ AsyncHttpResponse[None]
"""
_response = await self._client_wrapper.httpx_client.request(
- f"simple/evaluations/{jsonable_encoder(evaluation_id)}",method="PATCH",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/prune",method="POST",
json={
- "evaluation": convert_and_respect_annotation_metadata(object_=evaluation, annotation=SimpleEvaluationEdit, direction="write"),
+ "scenario_ids": scenario_ids,
+ "step_keys": step_keys,
+ "repeat_idxs": repeat_idxs,
}
,
headers={"content-type": "application/json", }
@@ -4489,14 +5238,7 @@ async def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: Simple
)
try:
if 200 <= _response.status_code < 300:
- _data = typing.cast(
- SimpleEvaluationResponse,
- parse_obj_as(
- type_ =SimpleEvaluationResponse, # type: ignore
- object_ =_response.json()
- )
- )
- return AsyncHttpResponse(response=_response, data=_data)
+ return AsyncHttpResponse(response=_response, data=None)
if _response.status_code == 422:
raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
HttpValidationError,
@@ -4510,27 +5252,29 @@ async def edit_simple_evaluation(self, evaluation_id: str, *, evaluation: Simple
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEvaluationQuery] = OMIT, windowing: typing.Optional[Windowing] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationsResponse]:
+ async def add_scenarios(self, evaluation_id: str, *, count: int, timestamp: typing.Optional[dt.datetime] = OMIT, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationScenariosResponse]:
"""
Parameters
----------
- evaluation : typing.Optional[SimpleEvaluationQuery]
+ evaluation_id : str
- windowing : typing.Optional[Windowing]
+ count : int
+
+ timestamp : typing.Optional[dt.datetime]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[SimpleEvaluationsResponse]
+ AsyncHttpResponse[EvaluationScenariosResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- "simple/evaluations/query",method="POST",
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/scenarios/add",method="POST",
json={
- "evaluation": convert_and_respect_annotation_metadata(object_=evaluation, annotation=typing.Optional[SimpleEvaluationQuery], direction="write"),
- "windowing": convert_and_respect_annotation_metadata(object_=windowing, annotation=typing.Optional[Windowing], direction="write"),
+ "count": count,
+ "timestamp": timestamp,
}
,
headers={"content-type": "application/json", }
@@ -4540,9 +5284,9 @@ async def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEv
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationsResponse,
+ EvaluationScenariosResponse,
parse_obj_as(
- type_ =SimpleEvaluationsResponse, # type: ignore
+ type_ =EvaluationScenariosResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4560,33 +5304,34 @@ async def query_simple_evaluations(self, *, evaluation: typing.Optional[SimpleEv
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def start_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
+ async def remove_scenarios(self, evaluation_id: str, *, scenario_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[None]:
"""
Parameters
----------
evaluation_id : str
+ scenario_ids : typing.Sequence[str]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[SimpleEvaluationResponse]
- Successful Response
+ AsyncHttpResponse[None]
"""
_response = await self._client_wrapper.httpx_client.request(
- f"simple/evaluations/{jsonable_encoder(evaluation_id)}/start",method="POST",
- request_options=request_options,)
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/scenarios/remove",method="POST",
+ json={
+ "scenario_ids": scenario_ids,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
- _data = typing.cast(
- SimpleEvaluationResponse,
- parse_obj_as(
- type_ =SimpleEvaluationResponse, # type: ignore
- object_ =_response.json()
- )
- )
- return AsyncHttpResponse(response=_response, data=_data)
+ return AsyncHttpResponse(response=_response, data=None)
if _response.status_code == 422:
raise UnprocessableEntityError(headers=dict(_response.headers), body=typing.cast(
HttpValidationError,
@@ -4600,29 +5345,38 @@ async def start_simple_evaluation(self, evaluation_id: str, *, request_options:
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def stop_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
+ async def add_steps(self, evaluation_id: str, *, steps: typing.Sequence[EvaluationRunDataStep], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
"""
Parameters
----------
evaluation_id : str
+ steps : typing.Sequence[EvaluationRunDataStep]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[SimpleEvaluationResponse]
+ AsyncHttpResponse[EvaluationRunResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"simple/evaluations/{jsonable_encoder(evaluation_id)}/stop",method="POST",
- request_options=request_options,)
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/steps/add",method="POST",
+ json={
+ "steps": convert_and_respect_annotation_metadata(object_=steps, annotation=typing.Sequence[EvaluationRunDataStep], direction="write"),
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationResponse,
+ EvaluationRunResponse,
parse_obj_as(
- type_ =SimpleEvaluationResponse, # type: ignore
+ type_ =EvaluationRunResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4640,29 +5394,38 @@ async def stop_simple_evaluation(self, evaluation_id: str, *, request_options: t
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def close_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
+ async def remove_steps(self, evaluation_id: str, *, step_keys: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
"""
Parameters
----------
evaluation_id : str
+ step_keys : typing.Sequence[str]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[SimpleEvaluationResponse]
+ AsyncHttpResponse[EvaluationRunResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"simple/evaluations/{jsonable_encoder(evaluation_id)}/close",method="POST",
- request_options=request_options,)
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/steps/remove",method="POST",
+ json={
+ "step_keys": step_keys,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationResponse,
+ EvaluationRunResponse,
parse_obj_as(
- type_ =SimpleEvaluationResponse, # type: ignore
+ type_ =EvaluationRunResponse, # type: ignore
object_ =_response.json()
)
)
@@ -4680,29 +5443,38 @@ async def close_simple_evaluation(self, evaluation_id: str, *, request_options:
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
- async def open_simple_evaluation(self, evaluation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[SimpleEvaluationResponse]:
+ async def set_repeats(self, evaluation_id: str, *, repeats: int, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[EvaluationRunResponse]:
"""
Parameters
----------
evaluation_id : str
+ repeats : int
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[SimpleEvaluationResponse]
+ AsyncHttpResponse[EvaluationRunResponse]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
- f"simple/evaluations/{jsonable_encoder(evaluation_id)}/open",method="POST",
- request_options=request_options,)
+ f"simple/evaluations/{jsonable_encoder(evaluation_id)}/repeats/set",method="POST",
+ json={
+ "repeats": repeats,
+ }
+ ,
+ headers={"content-type": "application/json", }
+ ,
+ request_options=request_options,omit=OMIT,
+ )
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SimpleEvaluationResponse,
+ EvaluationRunResponse,
parse_obj_as(
- type_ =SimpleEvaluationResponse, # type: ignore
+ type_ =EvaluationRunResponse, # type: ignore
object_ =_response.json()
)
)
diff --git a/clients/python/agenta_client/types/__init__.py b/clients/python/agenta_client/types/__init__.py
index 553461ec47..274aabb152 100644
--- a/clients/python/agenta_client/types/__init__.py
+++ b/clients/python/agenta_client/types/__init__.py
@@ -157,7 +157,6 @@
from .error_policy import ErrorPolicy
from .evaluation_metrics import EvaluationMetrics
from .evaluation_metrics_create import EvaluationMetricsCreate
- from .evaluation_metrics_edit import EvaluationMetricsEdit
from .evaluation_metrics_ids_response import EvaluationMetricsIdsResponse
from .evaluation_metrics_query import EvaluationMetricsQuery
from .evaluation_metrics_query_scenario_ids import EvaluationMetricsQueryScenarioIds
@@ -178,7 +177,6 @@
from .evaluation_queues_response import EvaluationQueuesResponse
from .evaluation_result import EvaluationResult
from .evaluation_result_create import EvaluationResultCreate
- from .evaluation_result_edit import EvaluationResultEdit
from .evaluation_result_id_response import EvaluationResultIdResponse
from .evaluation_result_ids_response import EvaluationResultIdsResponse
from .evaluation_result_query import EvaluationResultQuery
@@ -187,6 +185,7 @@
from .evaluation_run import EvaluationRun
from .evaluation_run_create import EvaluationRunCreate
from .evaluation_run_data import EvaluationRunData
+ from .evaluation_run_data_concurrency import EvaluationRunDataConcurrency
from .evaluation_run_data_mapping import EvaluationRunDataMapping
from .evaluation_run_data_mapping_column import EvaluationRunDataMappingColumn
from .evaluation_run_data_mapping_step import EvaluationRunDataMappingStep
@@ -644,7 +643,7 @@
from .workspace_member_response import WorkspaceMemberResponse
from .workspace_permission import WorkspacePermission
from .workspace_response import WorkspaceResponse
-_dynamic_imports: typing.Dict[str, str] = {"AdminAccountCreateOptions": ".admin_account_create_options", "AdminAccountRead": ".admin_account_read", "AdminAccountsCreate": ".admin_accounts_create", "AdminAccountsDelete": ".admin_accounts_delete", "AdminAccountsDeleteTarget": ".admin_accounts_delete_target", "AdminAccountsResponse": ".admin_accounts_response", "AdminApiKeyCreate": ".admin_api_key_create", "AdminApiKeyResponse": ".admin_api_key_response", "AdminDeleteResponse": ".admin_delete_response", "AdminDeletedEntities": ".admin_deleted_entities", "AdminDeletedEntity": ".admin_deleted_entity", "AdminOrganizationCreate": ".admin_organization_create", "AdminOrganizationMembershipCreate": ".admin_organization_membership_create", "AdminOrganizationMembershipRead": ".admin_organization_membership_read", "AdminOrganizationRead": ".admin_organization_read", "AdminProjectCreate": ".admin_project_create", "AdminProjectMembershipCreate": ".admin_project_membership_create", "AdminProjectMembershipRead": ".admin_project_membership_read", "AdminProjectRead": ".admin_project_read", "AdminSimpleAccountCreate": ".admin_simple_account_create", "AdminSimpleAccountDeleteEntry": ".admin_simple_account_delete_entry", "AdminSimpleAccountRead": ".admin_simple_account_read", "AdminSimpleAccountsApiKeysCreate": ".admin_simple_accounts_api_keys_create", "AdminSimpleAccountsCreate": ".admin_simple_accounts_create", "AdminSimpleAccountsDelete": ".admin_simple_accounts_delete", "AdminSimpleAccountsOrganizationsCreate": ".admin_simple_accounts_organizations_create", "AdminSimpleAccountsOrganizationsMembershipsCreate": ".admin_simple_accounts_organizations_memberships_create", "AdminSimpleAccountsOrganizationsTransferOwnership": ".admin_simple_accounts_organizations_transfer_ownership", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjects": ".admin_simple_accounts_organizations_transfer_ownership_include_projects", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjectsZero": ".admin_simple_accounts_organizations_transfer_ownership_include_projects_zero", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspaces": ".admin_simple_accounts_organizations_transfer_ownership_include_workspaces", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspacesZero": ".admin_simple_accounts_organizations_transfer_ownership_include_workspaces_zero", "AdminSimpleAccountsOrganizationsTransferOwnershipResponse": ".admin_simple_accounts_organizations_transfer_ownership_response", "AdminSimpleAccountsProjectsCreate": ".admin_simple_accounts_projects_create", "AdminSimpleAccountsProjectsMembershipsCreate": ".admin_simple_accounts_projects_memberships_create", "AdminSimpleAccountsResponse": ".admin_simple_accounts_response", "AdminSimpleAccountsUsersCreate": ".admin_simple_accounts_users_create", "AdminSimpleAccountsUsersIdentitiesCreate": ".admin_simple_accounts_users_identities_create", "AdminSimpleAccountsUsersResetPassword": ".admin_simple_accounts_users_reset_password", "AdminSimpleAccountsWorkspacesCreate": ".admin_simple_accounts_workspaces_create", "AdminSimpleAccountsWorkspacesMembershipsCreate": ".admin_simple_accounts_workspaces_memberships_create", "AdminStructuredError": ".admin_structured_error", "AdminSubscriptionCreate": ".admin_subscription_create", "AdminSubscriptionRead": ".admin_subscription_read", "AdminUserCreate": ".admin_user_create", "AdminUserIdentityCreate": ".admin_user_identity_create", "AdminUserIdentityRead": ".admin_user_identity_read", "AdminUserIdentityReadStatus": ".admin_user_identity_read_status", "AdminUserRead": ".admin_user_read", "AdminWorkspaceCreate": ".admin_workspace_create", "AdminWorkspaceMembershipCreate": ".admin_workspace_membership_create", "AdminWorkspaceMembershipRead": ".admin_workspace_membership_read", "AdminWorkspaceRead": ".admin_workspace_read", "Analytics": ".analytics", "AnalyticsResponse": ".analytics_response", "Annotation": ".annotation", "AnnotationCreate": ".annotation_create", "AnnotationCreateLinks": ".annotation_create_links", "AnnotationEdit": ".annotation_edit", "AnnotationEditLinks": ".annotation_edit_links", "AnnotationLinkResponse": ".annotation_link_response", "AnnotationLinks": ".annotation_links", "AnnotationQuery": ".annotation_query", "AnnotationQueryLinks": ".annotation_query_links", "AnnotationResponse": ".annotation_response", "AnnotationsResponse": ".annotations_response", "Application": ".application", "ApplicationArtifactFlags": ".application_artifact_flags", "ApplicationArtifactQueryFlags": ".application_artifact_query_flags", "ApplicationCatalogPreset": ".application_catalog_preset", "ApplicationCatalogPresetResponse": ".application_catalog_preset_response", "ApplicationCatalogPresetsResponse": ".application_catalog_presets_response", "ApplicationCatalogTemplate": ".application_catalog_template", "ApplicationCatalogTemplateResponse": ".application_catalog_template_response", "ApplicationCatalogTemplatesResponse": ".application_catalog_templates_response", "ApplicationCatalogType": ".application_catalog_type", "ApplicationCatalogTypesResponse": ".application_catalog_types_response", "ApplicationCreate": ".application_create", "ApplicationEdit": ".application_edit", "ApplicationFlags": ".application_flags", "ApplicationFork": ".application_fork", "ApplicationQuery": ".application_query", "ApplicationResponse": ".application_response", "ApplicationRevision": ".application_revision", "ApplicationRevisionCommit": ".application_revision_commit", "ApplicationRevisionCreate": ".application_revision_create", "ApplicationRevisionDataInput": ".application_revision_data_input", "ApplicationRevisionDataInputHeadersValue": ".application_revision_data_input_headers_value", "ApplicationRevisionDataInputRuntime": ".application_revision_data_input_runtime", "ApplicationRevisionDataOutput": ".application_revision_data_output", "ApplicationRevisionDataOutputHeadersValue": ".application_revision_data_output_headers_value", "ApplicationRevisionDataOutputRuntime": ".application_revision_data_output_runtime", "ApplicationRevisionEdit": ".application_revision_edit", "ApplicationRevisionFlags": ".application_revision_flags", "ApplicationRevisionFork": ".application_revision_fork", "ApplicationRevisionQuery": ".application_revision_query", "ApplicationRevisionQueryFlags": ".application_revision_query_flags", "ApplicationRevisionResolveResponse": ".application_revision_resolve_response", "ApplicationRevisionResponse": ".application_revision_response", "ApplicationRevisionsLog": ".application_revisions_log", "ApplicationRevisionsResponse": ".application_revisions_response", "ApplicationVariant": ".application_variant", "ApplicationVariantCreate": ".application_variant_create", "ApplicationVariantEdit": ".application_variant_edit", "ApplicationVariantFlags": ".application_variant_flags", "ApplicationVariantFork": ".application_variant_fork", "ApplicationVariantResponse": ".application_variant_response", "ApplicationVariantsResponse": ".application_variants_response", "ApplicationsResponse": ".applications_response", "BodyConfigsFetchVariantsConfigsFetchPost": ".body_configs_fetch_variants_configs_fetch_post", "Bucket": ".bucket", "CollectStatusResponse": ".collect_status_response", "ComparisonOperator": ".comparison_operator", "Condition": ".condition", "ConditionOperator": ".condition_operator", "ConditionOptions": ".condition_options", "ConditionValue": ".condition_value", "ConfigResponseModel": ".config_response_model", "CustomModelSettingsDto": ".custom_model_settings_dto", "CustomProviderDto": ".custom_provider_dto", "CustomProviderKind": ".custom_provider_kind", "CustomProviderSettingsDto": ".custom_provider_settings_dto", "DictOperator": ".dict_operator", "DiscoverResponse": ".discover_response", "DiscoverResponseMethodsValue": ".discover_response_methods_value", "EeSrcModelsApiOrganizationModelsOrganization": ".ee_src_models_api_organization_models_organization", "EntityRef": ".entity_ref", "Environment": ".environment", "EnvironmentCreate": ".environment_create", "EnvironmentEdit": ".environment_edit", "EnvironmentFlags": ".environment_flags", "EnvironmentQueryFlags": ".environment_query_flags", "EnvironmentResponse": ".environment_response", "EnvironmentRevision": ".environment_revision", "EnvironmentRevisionCommit": ".environment_revision_commit", "EnvironmentRevisionCreate": ".environment_revision_create", "EnvironmentRevisionData": ".environment_revision_data", "EnvironmentRevisionDelta": ".environment_revision_delta", "EnvironmentRevisionEdit": ".environment_revision_edit", "EnvironmentRevisionResolveResponse": ".environment_revision_resolve_response", "EnvironmentRevisionResponse": ".environment_revision_response", "EnvironmentRevisionsLog": ".environment_revisions_log", "EnvironmentRevisionsResponse": ".environment_revisions_response", "EnvironmentVariant": ".environment_variant", "EnvironmentVariantCreate": ".environment_variant_create", "EnvironmentVariantEdit": ".environment_variant_edit", "EnvironmentVariantResponse": ".environment_variant_response", "EnvironmentVariantsResponse": ".environment_variants_response", "EnvironmentsResponse": ".environments_response", "ErrorPolicy": ".error_policy", "EvaluationMetrics": ".evaluation_metrics", "EvaluationMetricsCreate": ".evaluation_metrics_create", "EvaluationMetricsEdit": ".evaluation_metrics_edit", "EvaluationMetricsIdsResponse": ".evaluation_metrics_ids_response", "EvaluationMetricsQuery": ".evaluation_metrics_query", "EvaluationMetricsQueryScenarioIds": ".evaluation_metrics_query_scenario_ids", "EvaluationMetricsQueryTimestamps": ".evaluation_metrics_query_timestamps", "EvaluationMetricsRefresh": ".evaluation_metrics_refresh", "EvaluationMetricsResponse": ".evaluation_metrics_response", "EvaluationQueue": ".evaluation_queue", "EvaluationQueueCreate": ".evaluation_queue_create", "EvaluationQueueData": ".evaluation_queue_data", "EvaluationQueueEdit": ".evaluation_queue_edit", "EvaluationQueueFlags": ".evaluation_queue_flags", "EvaluationQueueIdResponse": ".evaluation_queue_id_response", "EvaluationQueueIdsResponse": ".evaluation_queue_ids_response", "EvaluationQueueQuery": ".evaluation_queue_query", "EvaluationQueueQueryFlags": ".evaluation_queue_query_flags", "EvaluationQueueResponse": ".evaluation_queue_response", "EvaluationQueueScenariosQuery": ".evaluation_queue_scenarios_query", "EvaluationQueuesResponse": ".evaluation_queues_response", "EvaluationResult": ".evaluation_result", "EvaluationResultCreate": ".evaluation_result_create", "EvaluationResultEdit": ".evaluation_result_edit", "EvaluationResultIdResponse": ".evaluation_result_id_response", "EvaluationResultIdsResponse": ".evaluation_result_ids_response", "EvaluationResultQuery": ".evaluation_result_query", "EvaluationResultResponse": ".evaluation_result_response", "EvaluationResultsResponse": ".evaluation_results_response", "EvaluationRun": ".evaluation_run", "EvaluationRunCreate": ".evaluation_run_create", "EvaluationRunData": ".evaluation_run_data", "EvaluationRunDataMapping": ".evaluation_run_data_mapping", "EvaluationRunDataMappingColumn": ".evaluation_run_data_mapping_column", "EvaluationRunDataMappingStep": ".evaluation_run_data_mapping_step", "EvaluationRunDataStep": ".evaluation_run_data_step", "EvaluationRunDataStepInput": ".evaluation_run_data_step_input", "EvaluationRunDataStepOrigin": ".evaluation_run_data_step_origin", "EvaluationRunDataStepType": ".evaluation_run_data_step_type", "EvaluationRunEdit": ".evaluation_run_edit", "EvaluationRunFlags": ".evaluation_run_flags", "EvaluationRunIdResponse": ".evaluation_run_id_response", "EvaluationRunIdsRequest": ".evaluation_run_ids_request", "EvaluationRunIdsResponse": ".evaluation_run_ids_response", "EvaluationRunQuery": ".evaluation_run_query", "EvaluationRunQueryFlags": ".evaluation_run_query_flags", "EvaluationRunResponse": ".evaluation_run_response", "EvaluationRunsResponse": ".evaluation_runs_response", "EvaluationScenario": ".evaluation_scenario", "EvaluationScenarioCreate": ".evaluation_scenario_create", "EvaluationScenarioEdit": ".evaluation_scenario_edit", "EvaluationScenarioIdResponse": ".evaluation_scenario_id_response", "EvaluationScenarioIdsResponse": ".evaluation_scenario_ids_response", "EvaluationScenarioQuery": ".evaluation_scenario_query", "EvaluationScenarioResponse": ".evaluation_scenario_response", "EvaluationScenariosResponse": ".evaluation_scenarios_response", "EvaluationStatus": ".evaluation_status", "Evaluator": ".evaluator", "EvaluatorArtifactFlags": ".evaluator_artifact_flags", "EvaluatorArtifactQueryFlags": ".evaluator_artifact_query_flags", "EvaluatorCatalogPreset": ".evaluator_catalog_preset", "EvaluatorCatalogPresetResponse": ".evaluator_catalog_preset_response", "EvaluatorCatalogPresetsResponse": ".evaluator_catalog_presets_response", "EvaluatorCatalogTemplate": ".evaluator_catalog_template", "EvaluatorCatalogTemplateResponse": ".evaluator_catalog_template_response", "EvaluatorCatalogTemplatesResponse": ".evaluator_catalog_templates_response", "EvaluatorCatalogType": ".evaluator_catalog_type", "EvaluatorCatalogTypesResponse": ".evaluator_catalog_types_response", "EvaluatorCreate": ".evaluator_create", "EvaluatorEdit": ".evaluator_edit", "EvaluatorFlags": ".evaluator_flags", "EvaluatorFork": ".evaluator_fork", "EvaluatorQuery": ".evaluator_query", "EvaluatorResponse": ".evaluator_response", "EvaluatorRevision": ".evaluator_revision", "EvaluatorRevisionCommit": ".evaluator_revision_commit", "EvaluatorRevisionCreate": ".evaluator_revision_create", "EvaluatorRevisionDataInput": ".evaluator_revision_data_input", "EvaluatorRevisionDataInputHeadersValue": ".evaluator_revision_data_input_headers_value", "EvaluatorRevisionDataInputRuntime": ".evaluator_revision_data_input_runtime", "EvaluatorRevisionDataOutput": ".evaluator_revision_data_output", "EvaluatorRevisionDataOutputHeadersValue": ".evaluator_revision_data_output_headers_value", "EvaluatorRevisionDataOutputRuntime": ".evaluator_revision_data_output_runtime", "EvaluatorRevisionEdit": ".evaluator_revision_edit", "EvaluatorRevisionFlags": ".evaluator_revision_flags", "EvaluatorRevisionFork": ".evaluator_revision_fork", "EvaluatorRevisionQuery": ".evaluator_revision_query", "EvaluatorRevisionQueryFlags": ".evaluator_revision_query_flags", "EvaluatorRevisionResolveResponse": ".evaluator_revision_resolve_response", "EvaluatorRevisionResponse": ".evaluator_revision_response", "EvaluatorRevisionsLog": ".evaluator_revisions_log", "EvaluatorRevisionsResponse": ".evaluator_revisions_response", "EvaluatorTemplate": ".evaluator_template", "EvaluatorTemplatesResponse": ".evaluator_templates_response", "EvaluatorVariant": ".evaluator_variant", "EvaluatorVariantCreate": ".evaluator_variant_create", "EvaluatorVariantEdit": ".evaluator_variant_edit", "EvaluatorVariantFlags": ".evaluator_variant_flags", "EvaluatorVariantFork": ".evaluator_variant_fork", "EvaluatorVariantResponse": ".evaluator_variant_response", "EvaluatorVariantsResponse": ".evaluator_variants_response", "EvaluatorsResponse": ".evaluators_response", "Event": ".event", "EventQuery": ".event_query", "EventType": ".event_type", "EventsQueryResponse": ".events_query_response", "ExistenceOperator": ".existence_operator", "FilteringInput": ".filtering_input", "FilteringInputConditionsItem": ".filtering_input_conditions_item", "FilteringOutput": ".filtering_output", "FilteringOutputConditionsItem": ".filtering_output_conditions_item", "Focus": ".focus", "Folder": ".folder", "FolderCreate": ".folder_create", "FolderEdit": ".folder_edit", "FolderIdResponse": ".folder_id_response", "FolderKind": ".folder_kind", "FolderQuery": ".folder_query", "FolderQueryKinds": ".folder_query_kinds", "FolderResponse": ".folder_response", "FoldersResponse": ".folders_response", "Format": ".format", "Formatting": ".formatting", typing.Any: ".full_json_input", typing.Any: ".full_json_output", "Header": ".header", "HttpValidationError": ".http_validation_error", "InviteRequest": ".invite_request", "Invocation": ".invocation", "InvocationCreate": ".invocation_create", "InvocationCreateLinks": ".invocation_create_links", "InvocationEdit": ".invocation_edit", "InvocationEditLinks": ".invocation_edit_links", "InvocationLinkResponse": ".invocation_link_response", "InvocationLinks": ".invocation_links", "InvocationQuery": ".invocation_query", "InvocationQueryLinks": ".invocation_query_links", "InvocationResponse": ".invocation_response", "InvocationsResponse": ".invocations_response", "JsonSchemasInput": ".json_schemas_input", "JsonSchemasOutput": ".json_schemas_output", typing.Any: ".label_json_input", typing.Any: ".label_json_output", "LegacyLifecycleDto": ".legacy_lifecycle_dto", "ListApiKeysResponse": ".list_api_keys_response", "ListOperator": ".list_operator", "ListOptions": ".list_options", "LogicalOperator": ".logical_operator", "MetricSpec": ".metric_spec", "MetricType": ".metric_type", "MetricsBucket": ".metrics_bucket", "NumericOperator": ".numeric_operator", "OTelEventInput": ".o_tel_event_input", "OTelEventInputTimestamp": ".o_tel_event_input_timestamp", "OTelEventOutput": ".o_tel_event_output", "OTelEventOutputTimestamp": ".o_tel_event_output_timestamp", "OTelHashInput": ".o_tel_hash_input", "OTelHashOutput": ".o_tel_hash_output", "OTelLinkInput": ".o_tel_link_input", "OTelLinkOutput": ".o_tel_link_output", "OTelLinksResponse": ".o_tel_links_response", "OTelReferenceInput": ".o_tel_reference_input", "OTelReferenceOutput": ".o_tel_reference_output", "OTelSpanKind": ".o_tel_span_kind", "OTelStatusCode": ".o_tel_status_code", "OTelTracingRequest": ".o_tel_tracing_request", "OTelTracingResponse": ".o_tel_tracing_response", "OldAnalyticsResponse": ".old_analytics_response", "OrganizationDetails": ".organization_details", "OrganizationDomainResponse": ".organization_domain_response", "OrganizationProviderResponse": ".organization_provider_response", "OrganizationUpdate": ".organization_update", "OssSrcModelsApiOrganizationModelsOrganization": ".oss_src_models_api_organization_models_organization", "Permission": ".permission", "ProjectsResponse": ".projects_response", "QueriesResponse": ".queries_response", "Query": ".query", "QueryCreate": ".query_create", "QueryEdit": ".query_edit", "QueryFlags": ".query_flags", "QueryQueryFlags": ".query_query_flags", "QueryResponse": ".query_response", "QueryRevision": ".query_revision", "QueryRevisionCommit": ".query_revision_commit", "QueryRevisionCreate": ".query_revision_create", "QueryRevisionDataInput": ".query_revision_data_input", "QueryRevisionDataOutput": ".query_revision_data_output", "QueryRevisionEdit": ".query_revision_edit", "QueryRevisionQuery": ".query_revision_query", "QueryRevisionResponse": ".query_revision_response", "QueryRevisionsLog": ".query_revisions_log", "QueryRevisionsResponse": ".query_revisions_response", "QueryVariant": ".query_variant", "QueryVariantCreate": ".query_variant_create", "QueryVariantEdit": ".query_variant_edit", "QueryVariantQuery": ".query_variant_query", "QueryVariantResponse": ".query_variant_response", "QueryVariantsResponse": ".query_variants_response", "Reference": ".reference", "ReferenceRequestModelInput": ".reference_request_model_input", "ReferenceRequestModelOutput": ".reference_request_model_output", "RequestType": ".request_type", "ResolutionInfo": ".resolution_info", "RetrievalInfo": ".retrieval_info", "RevisionFork": ".revision_fork", "SecretDto": ".secret_dto", "SecretDtoData": ".secret_dto_data", "SecretKind": ".secret_kind", "SecretResponseDto": ".secret_response_dto", "SecretResponseDtoData": ".secret_response_dto_data", "SessionIdsResponse": ".session_ids_response", "SimpleApplication": ".simple_application", "SimpleApplicationCreate": ".simple_application_create", "SimpleApplicationDataInput": ".simple_application_data_input", "SimpleApplicationDataInputHeadersValue": ".simple_application_data_input_headers_value", "SimpleApplicationDataInputRuntime": ".simple_application_data_input_runtime", "SimpleApplicationDataOutput": ".simple_application_data_output", "SimpleApplicationDataOutputHeadersValue": ".simple_application_data_output_headers_value", "SimpleApplicationDataOutputRuntime": ".simple_application_data_output_runtime", "SimpleApplicationEdit": ".simple_application_edit", "SimpleApplicationFlags": ".simple_application_flags", "SimpleApplicationQuery": ".simple_application_query", "SimpleApplicationQueryFlags": ".simple_application_query_flags", "SimpleApplicationResponse": ".simple_application_response", "SimpleApplicationsResponse": ".simple_applications_response", "SimpleEnvironment": ".simple_environment", "SimpleEnvironmentCreate": ".simple_environment_create", "SimpleEnvironmentEdit": ".simple_environment_edit", "SimpleEnvironmentQuery": ".simple_environment_query", "SimpleEnvironmentResponse": ".simple_environment_response", "SimpleEnvironmentsResponse": ".simple_environments_response", "SimpleEvaluation": ".simple_evaluation", "SimpleEvaluationCreate": ".simple_evaluation_create", "SimpleEvaluationData": ".simple_evaluation_data", "SimpleEvaluationDataApplicationSteps": ".simple_evaluation_data_application_steps", "SimpleEvaluationDataApplicationStepsOneValue": ".simple_evaluation_data_application_steps_one_value", "SimpleEvaluationDataEvaluatorSteps": ".simple_evaluation_data_evaluator_steps", "SimpleEvaluationDataEvaluatorStepsOneValue": ".simple_evaluation_data_evaluator_steps_one_value", "SimpleEvaluationDataQuerySteps": ".simple_evaluation_data_query_steps", "SimpleEvaluationDataQueryStepsOneValue": ".simple_evaluation_data_query_steps_one_value", "SimpleEvaluationDataTestsetSteps": ".simple_evaluation_data_testset_steps", "SimpleEvaluationDataTestsetStepsOneValue": ".simple_evaluation_data_testset_steps_one_value", "SimpleEvaluationEdit": ".simple_evaluation_edit", "SimpleEvaluationIdResponse": ".simple_evaluation_id_response", "SimpleEvaluationQuery": ".simple_evaluation_query", "SimpleEvaluationResponse": ".simple_evaluation_response", "SimpleEvaluationsResponse": ".simple_evaluations_response", "SimpleEvaluator": ".simple_evaluator", "SimpleEvaluatorCreate": ".simple_evaluator_create", "SimpleEvaluatorDataInput": ".simple_evaluator_data_input", "SimpleEvaluatorDataInputHeadersValue": ".simple_evaluator_data_input_headers_value", "SimpleEvaluatorDataInputRuntime": ".simple_evaluator_data_input_runtime", "SimpleEvaluatorDataOutput": ".simple_evaluator_data_output", "SimpleEvaluatorDataOutputHeadersValue": ".simple_evaluator_data_output_headers_value", "SimpleEvaluatorDataOutputRuntime": ".simple_evaluator_data_output_runtime", "SimpleEvaluatorEdit": ".simple_evaluator_edit", "SimpleEvaluatorFlags": ".simple_evaluator_flags", "SimpleEvaluatorQuery": ".simple_evaluator_query", "SimpleEvaluatorQueryFlags": ".simple_evaluator_query_flags", "SimpleEvaluatorResponse": ".simple_evaluator_response", "SimpleEvaluatorsResponse": ".simple_evaluators_response", "SimpleQueriesResponse": ".simple_queries_response", "SimpleQuery": ".simple_query", "SimpleQueryCreate": ".simple_query_create", "SimpleQueryEdit": ".simple_query_edit", "SimpleQueryQuery": ".simple_query_query", "SimpleQueryResponse": ".simple_query_response", "SimpleQueue": ".simple_queue", "SimpleQueueCreate": ".simple_queue_create", "SimpleQueueData": ".simple_queue_data", "SimpleQueueDataEvaluators": ".simple_queue_data_evaluators", "SimpleQueueDataEvaluatorsOneValue": ".simple_queue_data_evaluators_one_value", "SimpleQueueIdResponse": ".simple_queue_id_response", "SimpleQueueKind": ".simple_queue_kind", "SimpleQueueQuery": ".simple_queue_query", "SimpleQueueResponse": ".simple_queue_response", "SimpleQueueScenariosQuery": ".simple_queue_scenarios_query", "SimpleQueueScenariosResponse": ".simple_queue_scenarios_response", "SimpleQueueSettings": ".simple_queue_settings", "SimpleQueuesResponse": ".simple_queues_response", "SimpleTestset": ".simple_testset", "SimpleTestsetCreate": ".simple_testset_create", "SimpleTestsetEdit": ".simple_testset_edit", "SimpleTestsetQuery": ".simple_testset_query", "SimpleTestsetResponse": ".simple_testset_response", "SimpleTestsetsResponse": ".simple_testsets_response", "SimpleTrace": ".simple_trace", "SimpleTraceChannel": ".simple_trace_channel", "SimpleTraceCreate": ".simple_trace_create", "SimpleTraceCreateLinks": ".simple_trace_create_links", "SimpleTraceEdit": ".simple_trace_edit", "SimpleTraceEditLinks": ".simple_trace_edit_links", "SimpleTraceKind": ".simple_trace_kind", "SimpleTraceLinkResponse": ".simple_trace_link_response", "SimpleTraceLinks": ".simple_trace_links", "SimpleTraceOrigin": ".simple_trace_origin", "SimpleTraceQuery": ".simple_trace_query", "SimpleTraceQueryLinks": ".simple_trace_query_links", "SimpleTraceReferences": ".simple_trace_references", "SimpleTraceResponse": ".simple_trace_response", "SimpleTracesResponse": ".simple_traces_response", "SimpleWorkflow": ".simple_workflow", "SimpleWorkflowCreate": ".simple_workflow_create", "SimpleWorkflowDataInput": ".simple_workflow_data_input", "SimpleWorkflowDataInputHeadersValue": ".simple_workflow_data_input_headers_value", "SimpleWorkflowDataInputRuntime": ".simple_workflow_data_input_runtime", "SimpleWorkflowDataOutput": ".simple_workflow_data_output", "SimpleWorkflowDataOutputHeadersValue": ".simple_workflow_data_output_headers_value", "SimpleWorkflowDataOutputRuntime": ".simple_workflow_data_output_runtime", "SimpleWorkflowEdit": ".simple_workflow_edit", "SimpleWorkflowFlags": ".simple_workflow_flags", "SimpleWorkflowQuery": ".simple_workflow_query", "SimpleWorkflowQueryFlags": ".simple_workflow_query_flags", "SimpleWorkflowResponse": ".simple_workflow_response", "SimpleWorkflowsResponse": ".simple_workflows_response", "SpanInput": ".span_input", "SpanInputEndTime": ".span_input_end_time", "SpanInputStartTime": ".span_input_start_time", "SpanOutput": ".span_output", "SpanOutputEndTime": ".span_output_end_time", "SpanOutputStartTime": ".span_output_start_time", "SpanResponse": ".span_response", "SpanType": ".span_type", "SpansNodeInput": ".spans_node_input", "SpansNodeInputEndTime": ".spans_node_input_end_time", "SpansNodeInputSpansValue": ".spans_node_input_spans_value", "SpansNodeInputStartTime": ".spans_node_input_start_time", "SpansNodeOutput": ".spans_node_output", "SpansNodeOutputEndTime": ".spans_node_output_end_time", "SpansNodeOutputSpansValue": ".spans_node_output_spans_value", "SpansNodeOutputStartTime": ".spans_node_output_start_time", "SpansResponse": ".spans_response", "SpansTreeInput": ".spans_tree_input", "SpansTreeInputSpansValue": ".spans_tree_input_spans_value", "SpansTreeOutput": ".spans_tree_output", "SpansTreeOutputSpansValue": ".spans_tree_output_spans_value", "SsoProviderDto": ".sso_provider_dto", "SsoProviderInfo": ".sso_provider_info", "SsoProviderSettingsDto": ".sso_provider_settings_dto", "SsoProviders": ".sso_providers", "StandardProviderDto": ".standard_provider_dto", "StandardProviderKind": ".standard_provider_kind", "StandardProviderSettingsDto": ".standard_provider_settings_dto", "Status": ".status", "StringOperator": ".string_operator", "TestcaseInput": ".testcase_input", "TestcaseOutput": ".testcase_output", "TestcaseResponse": ".testcase_response", "TestcasesResponse": ".testcases_response", "Testset": ".testset", "TestsetCreate": ".testset_create", "TestsetEdit": ".testset_edit", "TestsetFlags": ".testset_flags", "TestsetQuery": ".testset_query", "TestsetResponse": ".testset_response", "TestsetRevision": ".testset_revision", "TestsetRevisionCommit": ".testset_revision_commit", "TestsetRevisionCreate": ".testset_revision_create", "TestsetRevisionDataInput": ".testset_revision_data_input", "TestsetRevisionDataOutput": ".testset_revision_data_output", "TestsetRevisionDelta": ".testset_revision_delta", "TestsetRevisionDeltaColumns": ".testset_revision_delta_columns", "TestsetRevisionDeltaRows": ".testset_revision_delta_rows", "TestsetRevisionEdit": ".testset_revision_edit", "TestsetRevisionQuery": ".testset_revision_query", "TestsetRevisionResponse": ".testset_revision_response", "TestsetRevisionsLog": ".testset_revisions_log", "TestsetRevisionsResponse": ".testset_revisions_response", "TestsetVariant": ".testset_variant", "TestsetVariantCreate": ".testset_variant_create", "TestsetVariantEdit": ".testset_variant_edit", "TestsetVariantQuery": ".testset_variant_query", "TestsetVariantResponse": ".testset_variant_response", "TestsetVariantsResponse": ".testset_variants_response", "TestsetsResponse": ".testsets_response", "TextOptions": ".text_options", "ToolAuthScheme": ".tool_auth_scheme", "ToolCallData": ".tool_call_data", "ToolCallFunction": ".tool_call_function", "ToolCallResponse": ".tool_call_response", "ToolCatalogAction": ".tool_catalog_action", "ToolCatalogActionDetails": ".tool_catalog_action_details", "ToolCatalogActionResponse": ".tool_catalog_action_response", "ToolCatalogActionResponseAction": ".tool_catalog_action_response_action", "ToolCatalogActionsResponse": ".tool_catalog_actions_response", "ToolCatalogActionsResponseActionsItem": ".tool_catalog_actions_response_actions_item", "ToolCatalogIntegration": ".tool_catalog_integration", "ToolCatalogIntegrationDetails": ".tool_catalog_integration_details", "ToolCatalogIntegrationResponse": ".tool_catalog_integration_response", "ToolCatalogIntegrationResponseIntegration": ".tool_catalog_integration_response_integration", "ToolCatalogIntegrationsResponse": ".tool_catalog_integrations_response", "ToolCatalogIntegrationsResponseIntegrationsItem": ".tool_catalog_integrations_response_integrations_item", "ToolCatalogProvider": ".tool_catalog_provider", "ToolCatalogProviderDetails": ".tool_catalog_provider_details", "ToolCatalogProviderResponse": ".tool_catalog_provider_response", "ToolCatalogProviderResponseProvider": ".tool_catalog_provider_response_provider", "ToolCatalogProvidersResponse": ".tool_catalog_providers_response", "ToolCatalogProvidersResponseProvidersItem": ".tool_catalog_providers_response_providers_item", "ToolConnection": ".tool_connection", "ToolConnectionCreate": ".tool_connection_create", "ToolConnectionCreateData": ".tool_connection_create_data", "ToolConnectionResponse": ".tool_connection_response", "ToolConnectionStatus": ".tool_connection_status", "ToolConnectionsResponse": ".tool_connections_response", "ToolProviderKind": ".tool_provider_kind", "ToolResult": ".tool_result", "ToolResultData": ".tool_result_data", "TraceIdResponse": ".trace_id_response", "TraceIdsResponse": ".trace_ids_response", "TraceInput": ".trace_input", "TraceInputSpansValue": ".trace_input_spans_value", "TraceOutput": ".trace_output", "TraceOutputSpansValue": ".trace_output_spans_value", "TraceRequest": ".trace_request", "TraceResponse": ".trace_response", "TraceType": ".trace_type", "TracesRequest": ".traces_request", "TracesResponse": ".traces_response", "TracingQuery": ".tracing_query", "UserIdsResponse": ".user_ids_response", "ValidationError": ".validation_error", "ValidationErrorLocItem": ".validation_error_loc_item", "VariantFork": ".variant_fork", "WebhookDeliveriesResponse": ".webhook_deliveries_response", "WebhookDelivery": ".webhook_delivery", "WebhookDeliveryCreate": ".webhook_delivery_create", "WebhookDeliveryData": ".webhook_delivery_data", "WebhookDeliveryQuery": ".webhook_delivery_query", "WebhookDeliveryResponse": ".webhook_delivery_response", "WebhookDeliveryResponseInfo": ".webhook_delivery_response_info", "WebhookEventType": ".webhook_event_type", "WebhookProviderDto": ".webhook_provider_dto", "WebhookProviderSettingsDto": ".webhook_provider_settings_dto", "WebhookSubscription": ".webhook_subscription", "WebhookSubscriptionCreate": ".webhook_subscription_create", "WebhookSubscriptionData": ".webhook_subscription_data", "WebhookSubscriptionDataAuthMode": ".webhook_subscription_data_auth_mode", "WebhookSubscriptionEdit": ".webhook_subscription_edit", "WebhookSubscriptionQuery": ".webhook_subscription_query", "WebhookSubscriptionResponse": ".webhook_subscription_response", "WebhookSubscriptionsResponse": ".webhook_subscriptions_response", "Windowing": ".windowing", "WindowingOrder": ".windowing_order", "Workflow": ".workflow", "WorkflowArtifactFlags": ".workflow_artifact_flags", "WorkflowCatalogFlags": ".workflow_catalog_flags", "WorkflowCatalogPreset": ".workflow_catalog_preset", "WorkflowCatalogPresetResponse": ".workflow_catalog_preset_response", "WorkflowCatalogPresetsResponse": ".workflow_catalog_presets_response", "WorkflowCatalogTemplate": ".workflow_catalog_template", "WorkflowCatalogTemplateResponse": ".workflow_catalog_template_response", "WorkflowCatalogTemplatesResponse": ".workflow_catalog_templates_response", "WorkflowCatalogType": ".workflow_catalog_type", "WorkflowCatalogTypeResponse": ".workflow_catalog_type_response", "WorkflowCatalogTypesResponse": ".workflow_catalog_types_response", "WorkflowCreate": ".workflow_create", "WorkflowEdit": ".workflow_edit", "WorkflowFlags": ".workflow_flags", "WorkflowFork": ".workflow_fork", "WorkflowResponse": ".workflow_response", "WorkflowRevisionCommit": ".workflow_revision_commit", "WorkflowRevisionCreate": ".workflow_revision_create", "WorkflowRevisionDataInput": ".workflow_revision_data_input", "WorkflowRevisionDataInputHeadersValue": ".workflow_revision_data_input_headers_value", "WorkflowRevisionDataInputRuntime": ".workflow_revision_data_input_runtime", "WorkflowRevisionDataOutput": ".workflow_revision_data_output", "WorkflowRevisionDataOutputHeadersValue": ".workflow_revision_data_output_headers_value", "WorkflowRevisionDataOutputRuntime": ".workflow_revision_data_output_runtime", "WorkflowRevisionEdit": ".workflow_revision_edit", "WorkflowRevisionFlags": ".workflow_revision_flags", "WorkflowRevisionFork": ".workflow_revision_fork", "WorkflowRevisionInput": ".workflow_revision_input", "WorkflowRevisionOutput": ".workflow_revision_output", "WorkflowRevisionResolveResponse": ".workflow_revision_resolve_response", "WorkflowRevisionResponse": ".workflow_revision_response", "WorkflowRevisionsLog": ".workflow_revisions_log", "WorkflowRevisionsResponse": ".workflow_revisions_response", "WorkflowVariant": ".workflow_variant", "WorkflowVariantCreate": ".workflow_variant_create", "WorkflowVariantEdit": ".workflow_variant_edit", "WorkflowVariantFlags": ".workflow_variant_flags", "WorkflowVariantFork": ".workflow_variant_fork", "WorkflowVariantResponse": ".workflow_variant_response", "WorkflowVariantsResponse": ".workflow_variants_response", "WorkflowsResponse": ".workflows_response", "Workspace": ".workspace", "WorkspaceMemberResponse": ".workspace_member_response", "WorkspacePermission": ".workspace_permission", "WorkspaceResponse": ".workspace_response"}
+_dynamic_imports: typing.Dict[str, str] = {"AdminAccountCreateOptions": ".admin_account_create_options", "AdminAccountRead": ".admin_account_read", "AdminAccountsCreate": ".admin_accounts_create", "AdminAccountsDelete": ".admin_accounts_delete", "AdminAccountsDeleteTarget": ".admin_accounts_delete_target", "AdminAccountsResponse": ".admin_accounts_response", "AdminApiKeyCreate": ".admin_api_key_create", "AdminApiKeyResponse": ".admin_api_key_response", "AdminDeleteResponse": ".admin_delete_response", "AdminDeletedEntities": ".admin_deleted_entities", "AdminDeletedEntity": ".admin_deleted_entity", "AdminOrganizationCreate": ".admin_organization_create", "AdminOrganizationMembershipCreate": ".admin_organization_membership_create", "AdminOrganizationMembershipRead": ".admin_organization_membership_read", "AdminOrganizationRead": ".admin_organization_read", "AdminProjectCreate": ".admin_project_create", "AdminProjectMembershipCreate": ".admin_project_membership_create", "AdminProjectMembershipRead": ".admin_project_membership_read", "AdminProjectRead": ".admin_project_read", "AdminSimpleAccountCreate": ".admin_simple_account_create", "AdminSimpleAccountDeleteEntry": ".admin_simple_account_delete_entry", "AdminSimpleAccountRead": ".admin_simple_account_read", "AdminSimpleAccountsApiKeysCreate": ".admin_simple_accounts_api_keys_create", "AdminSimpleAccountsCreate": ".admin_simple_accounts_create", "AdminSimpleAccountsDelete": ".admin_simple_accounts_delete", "AdminSimpleAccountsOrganizationsCreate": ".admin_simple_accounts_organizations_create", "AdminSimpleAccountsOrganizationsMembershipsCreate": ".admin_simple_accounts_organizations_memberships_create", "AdminSimpleAccountsOrganizationsTransferOwnership": ".admin_simple_accounts_organizations_transfer_ownership", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjects": ".admin_simple_accounts_organizations_transfer_ownership_include_projects", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjectsZero": ".admin_simple_accounts_organizations_transfer_ownership_include_projects_zero", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspaces": ".admin_simple_accounts_organizations_transfer_ownership_include_workspaces", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspacesZero": ".admin_simple_accounts_organizations_transfer_ownership_include_workspaces_zero", "AdminSimpleAccountsOrganizationsTransferOwnershipResponse": ".admin_simple_accounts_organizations_transfer_ownership_response", "AdminSimpleAccountsProjectsCreate": ".admin_simple_accounts_projects_create", "AdminSimpleAccountsProjectsMembershipsCreate": ".admin_simple_accounts_projects_memberships_create", "AdminSimpleAccountsResponse": ".admin_simple_accounts_response", "AdminSimpleAccountsUsersCreate": ".admin_simple_accounts_users_create", "AdminSimpleAccountsUsersIdentitiesCreate": ".admin_simple_accounts_users_identities_create", "AdminSimpleAccountsUsersResetPassword": ".admin_simple_accounts_users_reset_password", "AdminSimpleAccountsWorkspacesCreate": ".admin_simple_accounts_workspaces_create", "AdminSimpleAccountsWorkspacesMembershipsCreate": ".admin_simple_accounts_workspaces_memberships_create", "AdminStructuredError": ".admin_structured_error", "AdminSubscriptionCreate": ".admin_subscription_create", "AdminSubscriptionRead": ".admin_subscription_read", "AdminUserCreate": ".admin_user_create", "AdminUserIdentityCreate": ".admin_user_identity_create", "AdminUserIdentityRead": ".admin_user_identity_read", "AdminUserIdentityReadStatus": ".admin_user_identity_read_status", "AdminUserRead": ".admin_user_read", "AdminWorkspaceCreate": ".admin_workspace_create", "AdminWorkspaceMembershipCreate": ".admin_workspace_membership_create", "AdminWorkspaceMembershipRead": ".admin_workspace_membership_read", "AdminWorkspaceRead": ".admin_workspace_read", "Analytics": ".analytics", "AnalyticsResponse": ".analytics_response", "Annotation": ".annotation", "AnnotationCreate": ".annotation_create", "AnnotationCreateLinks": ".annotation_create_links", "AnnotationEdit": ".annotation_edit", "AnnotationEditLinks": ".annotation_edit_links", "AnnotationLinkResponse": ".annotation_link_response", "AnnotationLinks": ".annotation_links", "AnnotationQuery": ".annotation_query", "AnnotationQueryLinks": ".annotation_query_links", "AnnotationResponse": ".annotation_response", "AnnotationsResponse": ".annotations_response", "Application": ".application", "ApplicationArtifactFlags": ".application_artifact_flags", "ApplicationArtifactQueryFlags": ".application_artifact_query_flags", "ApplicationCatalogPreset": ".application_catalog_preset", "ApplicationCatalogPresetResponse": ".application_catalog_preset_response", "ApplicationCatalogPresetsResponse": ".application_catalog_presets_response", "ApplicationCatalogTemplate": ".application_catalog_template", "ApplicationCatalogTemplateResponse": ".application_catalog_template_response", "ApplicationCatalogTemplatesResponse": ".application_catalog_templates_response", "ApplicationCatalogType": ".application_catalog_type", "ApplicationCatalogTypesResponse": ".application_catalog_types_response", "ApplicationCreate": ".application_create", "ApplicationEdit": ".application_edit", "ApplicationFlags": ".application_flags", "ApplicationFork": ".application_fork", "ApplicationQuery": ".application_query", "ApplicationResponse": ".application_response", "ApplicationRevision": ".application_revision", "ApplicationRevisionCommit": ".application_revision_commit", "ApplicationRevisionCreate": ".application_revision_create", "ApplicationRevisionDataInput": ".application_revision_data_input", "ApplicationRevisionDataInputHeadersValue": ".application_revision_data_input_headers_value", "ApplicationRevisionDataInputRuntime": ".application_revision_data_input_runtime", "ApplicationRevisionDataOutput": ".application_revision_data_output", "ApplicationRevisionDataOutputHeadersValue": ".application_revision_data_output_headers_value", "ApplicationRevisionDataOutputRuntime": ".application_revision_data_output_runtime", "ApplicationRevisionEdit": ".application_revision_edit", "ApplicationRevisionFlags": ".application_revision_flags", "ApplicationRevisionFork": ".application_revision_fork", "ApplicationRevisionQuery": ".application_revision_query", "ApplicationRevisionQueryFlags": ".application_revision_query_flags", "ApplicationRevisionResolveResponse": ".application_revision_resolve_response", "ApplicationRevisionResponse": ".application_revision_response", "ApplicationRevisionsLog": ".application_revisions_log", "ApplicationRevisionsResponse": ".application_revisions_response", "ApplicationVariant": ".application_variant", "ApplicationVariantCreate": ".application_variant_create", "ApplicationVariantEdit": ".application_variant_edit", "ApplicationVariantFlags": ".application_variant_flags", "ApplicationVariantFork": ".application_variant_fork", "ApplicationVariantResponse": ".application_variant_response", "ApplicationVariantsResponse": ".application_variants_response", "ApplicationsResponse": ".applications_response", "BodyConfigsFetchVariantsConfigsFetchPost": ".body_configs_fetch_variants_configs_fetch_post", "Bucket": ".bucket", "CollectStatusResponse": ".collect_status_response", "ComparisonOperator": ".comparison_operator", "Condition": ".condition", "ConditionOperator": ".condition_operator", "ConditionOptions": ".condition_options", "ConditionValue": ".condition_value", "ConfigResponseModel": ".config_response_model", "CustomModelSettingsDto": ".custom_model_settings_dto", "CustomProviderDto": ".custom_provider_dto", "CustomProviderKind": ".custom_provider_kind", "CustomProviderSettingsDto": ".custom_provider_settings_dto", "DictOperator": ".dict_operator", "DiscoverResponse": ".discover_response", "DiscoverResponseMethodsValue": ".discover_response_methods_value", "EeSrcModelsApiOrganizationModelsOrganization": ".ee_src_models_api_organization_models_organization", "EntityRef": ".entity_ref", "Environment": ".environment", "EnvironmentCreate": ".environment_create", "EnvironmentEdit": ".environment_edit", "EnvironmentFlags": ".environment_flags", "EnvironmentQueryFlags": ".environment_query_flags", "EnvironmentResponse": ".environment_response", "EnvironmentRevision": ".environment_revision", "EnvironmentRevisionCommit": ".environment_revision_commit", "EnvironmentRevisionCreate": ".environment_revision_create", "EnvironmentRevisionData": ".environment_revision_data", "EnvironmentRevisionDelta": ".environment_revision_delta", "EnvironmentRevisionEdit": ".environment_revision_edit", "EnvironmentRevisionResolveResponse": ".environment_revision_resolve_response", "EnvironmentRevisionResponse": ".environment_revision_response", "EnvironmentRevisionsLog": ".environment_revisions_log", "EnvironmentRevisionsResponse": ".environment_revisions_response", "EnvironmentVariant": ".environment_variant", "EnvironmentVariantCreate": ".environment_variant_create", "EnvironmentVariantEdit": ".environment_variant_edit", "EnvironmentVariantResponse": ".environment_variant_response", "EnvironmentVariantsResponse": ".environment_variants_response", "EnvironmentsResponse": ".environments_response", "ErrorPolicy": ".error_policy", "EvaluationMetrics": ".evaluation_metrics", "EvaluationMetricsCreate": ".evaluation_metrics_create", "EvaluationMetricsIdsResponse": ".evaluation_metrics_ids_response", "EvaluationMetricsQuery": ".evaluation_metrics_query", "EvaluationMetricsQueryScenarioIds": ".evaluation_metrics_query_scenario_ids", "EvaluationMetricsQueryTimestamps": ".evaluation_metrics_query_timestamps", "EvaluationMetricsRefresh": ".evaluation_metrics_refresh", "EvaluationMetricsResponse": ".evaluation_metrics_response", "EvaluationQueue": ".evaluation_queue", "EvaluationQueueCreate": ".evaluation_queue_create", "EvaluationQueueData": ".evaluation_queue_data", "EvaluationQueueEdit": ".evaluation_queue_edit", "EvaluationQueueFlags": ".evaluation_queue_flags", "EvaluationQueueIdResponse": ".evaluation_queue_id_response", "EvaluationQueueIdsResponse": ".evaluation_queue_ids_response", "EvaluationQueueQuery": ".evaluation_queue_query", "EvaluationQueueQueryFlags": ".evaluation_queue_query_flags", "EvaluationQueueResponse": ".evaluation_queue_response", "EvaluationQueueScenariosQuery": ".evaluation_queue_scenarios_query", "EvaluationQueuesResponse": ".evaluation_queues_response", "EvaluationResult": ".evaluation_result", "EvaluationResultCreate": ".evaluation_result_create", "EvaluationResultIdResponse": ".evaluation_result_id_response", "EvaluationResultIdsResponse": ".evaluation_result_ids_response", "EvaluationResultQuery": ".evaluation_result_query", "EvaluationResultResponse": ".evaluation_result_response", "EvaluationResultsResponse": ".evaluation_results_response", "EvaluationRun": ".evaluation_run", "EvaluationRunCreate": ".evaluation_run_create", "EvaluationRunData": ".evaluation_run_data", "EvaluationRunDataConcurrency": ".evaluation_run_data_concurrency", "EvaluationRunDataMapping": ".evaluation_run_data_mapping", "EvaluationRunDataMappingColumn": ".evaluation_run_data_mapping_column", "EvaluationRunDataMappingStep": ".evaluation_run_data_mapping_step", "EvaluationRunDataStep": ".evaluation_run_data_step", "EvaluationRunDataStepInput": ".evaluation_run_data_step_input", "EvaluationRunDataStepOrigin": ".evaluation_run_data_step_origin", "EvaluationRunDataStepType": ".evaluation_run_data_step_type", "EvaluationRunEdit": ".evaluation_run_edit", "EvaluationRunFlags": ".evaluation_run_flags", "EvaluationRunIdResponse": ".evaluation_run_id_response", "EvaluationRunIdsRequest": ".evaluation_run_ids_request", "EvaluationRunIdsResponse": ".evaluation_run_ids_response", "EvaluationRunQuery": ".evaluation_run_query", "EvaluationRunQueryFlags": ".evaluation_run_query_flags", "EvaluationRunResponse": ".evaluation_run_response", "EvaluationRunsResponse": ".evaluation_runs_response", "EvaluationScenario": ".evaluation_scenario", "EvaluationScenarioCreate": ".evaluation_scenario_create", "EvaluationScenarioEdit": ".evaluation_scenario_edit", "EvaluationScenarioIdResponse": ".evaluation_scenario_id_response", "EvaluationScenarioIdsResponse": ".evaluation_scenario_ids_response", "EvaluationScenarioQuery": ".evaluation_scenario_query", "EvaluationScenarioResponse": ".evaluation_scenario_response", "EvaluationScenariosResponse": ".evaluation_scenarios_response", "EvaluationStatus": ".evaluation_status", "Evaluator": ".evaluator", "EvaluatorArtifactFlags": ".evaluator_artifact_flags", "EvaluatorArtifactQueryFlags": ".evaluator_artifact_query_flags", "EvaluatorCatalogPreset": ".evaluator_catalog_preset", "EvaluatorCatalogPresetResponse": ".evaluator_catalog_preset_response", "EvaluatorCatalogPresetsResponse": ".evaluator_catalog_presets_response", "EvaluatorCatalogTemplate": ".evaluator_catalog_template", "EvaluatorCatalogTemplateResponse": ".evaluator_catalog_template_response", "EvaluatorCatalogTemplatesResponse": ".evaluator_catalog_templates_response", "EvaluatorCatalogType": ".evaluator_catalog_type", "EvaluatorCatalogTypesResponse": ".evaluator_catalog_types_response", "EvaluatorCreate": ".evaluator_create", "EvaluatorEdit": ".evaluator_edit", "EvaluatorFlags": ".evaluator_flags", "EvaluatorFork": ".evaluator_fork", "EvaluatorQuery": ".evaluator_query", "EvaluatorResponse": ".evaluator_response", "EvaluatorRevision": ".evaluator_revision", "EvaluatorRevisionCommit": ".evaluator_revision_commit", "EvaluatorRevisionCreate": ".evaluator_revision_create", "EvaluatorRevisionDataInput": ".evaluator_revision_data_input", "EvaluatorRevisionDataInputHeadersValue": ".evaluator_revision_data_input_headers_value", "EvaluatorRevisionDataInputRuntime": ".evaluator_revision_data_input_runtime", "EvaluatorRevisionDataOutput": ".evaluator_revision_data_output", "EvaluatorRevisionDataOutputHeadersValue": ".evaluator_revision_data_output_headers_value", "EvaluatorRevisionDataOutputRuntime": ".evaluator_revision_data_output_runtime", "EvaluatorRevisionEdit": ".evaluator_revision_edit", "EvaluatorRevisionFlags": ".evaluator_revision_flags", "EvaluatorRevisionFork": ".evaluator_revision_fork", "EvaluatorRevisionQuery": ".evaluator_revision_query", "EvaluatorRevisionQueryFlags": ".evaluator_revision_query_flags", "EvaluatorRevisionResolveResponse": ".evaluator_revision_resolve_response", "EvaluatorRevisionResponse": ".evaluator_revision_response", "EvaluatorRevisionsLog": ".evaluator_revisions_log", "EvaluatorRevisionsResponse": ".evaluator_revisions_response", "EvaluatorTemplate": ".evaluator_template", "EvaluatorTemplatesResponse": ".evaluator_templates_response", "EvaluatorVariant": ".evaluator_variant", "EvaluatorVariantCreate": ".evaluator_variant_create", "EvaluatorVariantEdit": ".evaluator_variant_edit", "EvaluatorVariantFlags": ".evaluator_variant_flags", "EvaluatorVariantFork": ".evaluator_variant_fork", "EvaluatorVariantResponse": ".evaluator_variant_response", "EvaluatorVariantsResponse": ".evaluator_variants_response", "EvaluatorsResponse": ".evaluators_response", "Event": ".event", "EventQuery": ".event_query", "EventType": ".event_type", "EventsQueryResponse": ".events_query_response", "ExistenceOperator": ".existence_operator", "FilteringInput": ".filtering_input", "FilteringInputConditionsItem": ".filtering_input_conditions_item", "FilteringOutput": ".filtering_output", "FilteringOutputConditionsItem": ".filtering_output_conditions_item", "Focus": ".focus", "Folder": ".folder", "FolderCreate": ".folder_create", "FolderEdit": ".folder_edit", "FolderIdResponse": ".folder_id_response", "FolderKind": ".folder_kind", "FolderQuery": ".folder_query", "FolderQueryKinds": ".folder_query_kinds", "FolderResponse": ".folder_response", "FoldersResponse": ".folders_response", "Format": ".format", "Formatting": ".formatting", typing.Any: ".full_json_input", typing.Any: ".full_json_output", "Header": ".header", "HttpValidationError": ".http_validation_error", "InviteRequest": ".invite_request", "Invocation": ".invocation", "InvocationCreate": ".invocation_create", "InvocationCreateLinks": ".invocation_create_links", "InvocationEdit": ".invocation_edit", "InvocationEditLinks": ".invocation_edit_links", "InvocationLinkResponse": ".invocation_link_response", "InvocationLinks": ".invocation_links", "InvocationQuery": ".invocation_query", "InvocationQueryLinks": ".invocation_query_links", "InvocationResponse": ".invocation_response", "InvocationsResponse": ".invocations_response", "JsonSchemasInput": ".json_schemas_input", "JsonSchemasOutput": ".json_schemas_output", typing.Any: ".label_json_input", typing.Any: ".label_json_output", "LegacyLifecycleDto": ".legacy_lifecycle_dto", "ListApiKeysResponse": ".list_api_keys_response", "ListOperator": ".list_operator", "ListOptions": ".list_options", "LogicalOperator": ".logical_operator", "MetricSpec": ".metric_spec", "MetricType": ".metric_type", "MetricsBucket": ".metrics_bucket", "NumericOperator": ".numeric_operator", "OTelEventInput": ".o_tel_event_input", "OTelEventInputTimestamp": ".o_tel_event_input_timestamp", "OTelEventOutput": ".o_tel_event_output", "OTelEventOutputTimestamp": ".o_tel_event_output_timestamp", "OTelHashInput": ".o_tel_hash_input", "OTelHashOutput": ".o_tel_hash_output", "OTelLinkInput": ".o_tel_link_input", "OTelLinkOutput": ".o_tel_link_output", "OTelLinksResponse": ".o_tel_links_response", "OTelReferenceInput": ".o_tel_reference_input", "OTelReferenceOutput": ".o_tel_reference_output", "OTelSpanKind": ".o_tel_span_kind", "OTelStatusCode": ".o_tel_status_code", "OTelTracingRequest": ".o_tel_tracing_request", "OTelTracingResponse": ".o_tel_tracing_response", "OldAnalyticsResponse": ".old_analytics_response", "OrganizationDetails": ".organization_details", "OrganizationDomainResponse": ".organization_domain_response", "OrganizationProviderResponse": ".organization_provider_response", "OrganizationUpdate": ".organization_update", "OssSrcModelsApiOrganizationModelsOrganization": ".oss_src_models_api_organization_models_organization", "Permission": ".permission", "ProjectsResponse": ".projects_response", "QueriesResponse": ".queries_response", "Query": ".query", "QueryCreate": ".query_create", "QueryEdit": ".query_edit", "QueryFlags": ".query_flags", "QueryQueryFlags": ".query_query_flags", "QueryResponse": ".query_response", "QueryRevision": ".query_revision", "QueryRevisionCommit": ".query_revision_commit", "QueryRevisionCreate": ".query_revision_create", "QueryRevisionDataInput": ".query_revision_data_input", "QueryRevisionDataOutput": ".query_revision_data_output", "QueryRevisionEdit": ".query_revision_edit", "QueryRevisionQuery": ".query_revision_query", "QueryRevisionResponse": ".query_revision_response", "QueryRevisionsLog": ".query_revisions_log", "QueryRevisionsResponse": ".query_revisions_response", "QueryVariant": ".query_variant", "QueryVariantCreate": ".query_variant_create", "QueryVariantEdit": ".query_variant_edit", "QueryVariantQuery": ".query_variant_query", "QueryVariantResponse": ".query_variant_response", "QueryVariantsResponse": ".query_variants_response", "Reference": ".reference", "ReferenceRequestModelInput": ".reference_request_model_input", "ReferenceRequestModelOutput": ".reference_request_model_output", "RequestType": ".request_type", "ResolutionInfo": ".resolution_info", "RetrievalInfo": ".retrieval_info", "RevisionFork": ".revision_fork", "SecretDto": ".secret_dto", "SecretDtoData": ".secret_dto_data", "SecretKind": ".secret_kind", "SecretResponseDto": ".secret_response_dto", "SecretResponseDtoData": ".secret_response_dto_data", "SessionIdsResponse": ".session_ids_response", "SimpleApplication": ".simple_application", "SimpleApplicationCreate": ".simple_application_create", "SimpleApplicationDataInput": ".simple_application_data_input", "SimpleApplicationDataInputHeadersValue": ".simple_application_data_input_headers_value", "SimpleApplicationDataInputRuntime": ".simple_application_data_input_runtime", "SimpleApplicationDataOutput": ".simple_application_data_output", "SimpleApplicationDataOutputHeadersValue": ".simple_application_data_output_headers_value", "SimpleApplicationDataOutputRuntime": ".simple_application_data_output_runtime", "SimpleApplicationEdit": ".simple_application_edit", "SimpleApplicationFlags": ".simple_application_flags", "SimpleApplicationQuery": ".simple_application_query", "SimpleApplicationQueryFlags": ".simple_application_query_flags", "SimpleApplicationResponse": ".simple_application_response", "SimpleApplicationsResponse": ".simple_applications_response", "SimpleEnvironment": ".simple_environment", "SimpleEnvironmentCreate": ".simple_environment_create", "SimpleEnvironmentEdit": ".simple_environment_edit", "SimpleEnvironmentQuery": ".simple_environment_query", "SimpleEnvironmentResponse": ".simple_environment_response", "SimpleEnvironmentsResponse": ".simple_environments_response", "SimpleEvaluation": ".simple_evaluation", "SimpleEvaluationCreate": ".simple_evaluation_create", "SimpleEvaluationData": ".simple_evaluation_data", "SimpleEvaluationDataApplicationSteps": ".simple_evaluation_data_application_steps", "SimpleEvaluationDataApplicationStepsOneValue": ".simple_evaluation_data_application_steps_one_value", "SimpleEvaluationDataEvaluatorSteps": ".simple_evaluation_data_evaluator_steps", "SimpleEvaluationDataEvaluatorStepsOneValue": ".simple_evaluation_data_evaluator_steps_one_value", "SimpleEvaluationDataQuerySteps": ".simple_evaluation_data_query_steps", "SimpleEvaluationDataQueryStepsOneValue": ".simple_evaluation_data_query_steps_one_value", "SimpleEvaluationDataTestsetSteps": ".simple_evaluation_data_testset_steps", "SimpleEvaluationDataTestsetStepsOneValue": ".simple_evaluation_data_testset_steps_one_value", "SimpleEvaluationEdit": ".simple_evaluation_edit", "SimpleEvaluationIdResponse": ".simple_evaluation_id_response", "SimpleEvaluationQuery": ".simple_evaluation_query", "SimpleEvaluationResponse": ".simple_evaluation_response", "SimpleEvaluationsResponse": ".simple_evaluations_response", "SimpleEvaluator": ".simple_evaluator", "SimpleEvaluatorCreate": ".simple_evaluator_create", "SimpleEvaluatorDataInput": ".simple_evaluator_data_input", "SimpleEvaluatorDataInputHeadersValue": ".simple_evaluator_data_input_headers_value", "SimpleEvaluatorDataInputRuntime": ".simple_evaluator_data_input_runtime", "SimpleEvaluatorDataOutput": ".simple_evaluator_data_output", "SimpleEvaluatorDataOutputHeadersValue": ".simple_evaluator_data_output_headers_value", "SimpleEvaluatorDataOutputRuntime": ".simple_evaluator_data_output_runtime", "SimpleEvaluatorEdit": ".simple_evaluator_edit", "SimpleEvaluatorFlags": ".simple_evaluator_flags", "SimpleEvaluatorQuery": ".simple_evaluator_query", "SimpleEvaluatorQueryFlags": ".simple_evaluator_query_flags", "SimpleEvaluatorResponse": ".simple_evaluator_response", "SimpleEvaluatorsResponse": ".simple_evaluators_response", "SimpleQueriesResponse": ".simple_queries_response", "SimpleQuery": ".simple_query", "SimpleQueryCreate": ".simple_query_create", "SimpleQueryEdit": ".simple_query_edit", "SimpleQueryQuery": ".simple_query_query", "SimpleQueryResponse": ".simple_query_response", "SimpleQueue": ".simple_queue", "SimpleQueueCreate": ".simple_queue_create", "SimpleQueueData": ".simple_queue_data", "SimpleQueueDataEvaluators": ".simple_queue_data_evaluators", "SimpleQueueDataEvaluatorsOneValue": ".simple_queue_data_evaluators_one_value", "SimpleQueueIdResponse": ".simple_queue_id_response", "SimpleQueueKind": ".simple_queue_kind", "SimpleQueueQuery": ".simple_queue_query", "SimpleQueueResponse": ".simple_queue_response", "SimpleQueueScenariosQuery": ".simple_queue_scenarios_query", "SimpleQueueScenariosResponse": ".simple_queue_scenarios_response", "SimpleQueueSettings": ".simple_queue_settings", "SimpleQueuesResponse": ".simple_queues_response", "SimpleTestset": ".simple_testset", "SimpleTestsetCreate": ".simple_testset_create", "SimpleTestsetEdit": ".simple_testset_edit", "SimpleTestsetQuery": ".simple_testset_query", "SimpleTestsetResponse": ".simple_testset_response", "SimpleTestsetsResponse": ".simple_testsets_response", "SimpleTrace": ".simple_trace", "SimpleTraceChannel": ".simple_trace_channel", "SimpleTraceCreate": ".simple_trace_create", "SimpleTraceCreateLinks": ".simple_trace_create_links", "SimpleTraceEdit": ".simple_trace_edit", "SimpleTraceEditLinks": ".simple_trace_edit_links", "SimpleTraceKind": ".simple_trace_kind", "SimpleTraceLinkResponse": ".simple_trace_link_response", "SimpleTraceLinks": ".simple_trace_links", "SimpleTraceOrigin": ".simple_trace_origin", "SimpleTraceQuery": ".simple_trace_query", "SimpleTraceQueryLinks": ".simple_trace_query_links", "SimpleTraceReferences": ".simple_trace_references", "SimpleTraceResponse": ".simple_trace_response", "SimpleTracesResponse": ".simple_traces_response", "SimpleWorkflow": ".simple_workflow", "SimpleWorkflowCreate": ".simple_workflow_create", "SimpleWorkflowDataInput": ".simple_workflow_data_input", "SimpleWorkflowDataInputHeadersValue": ".simple_workflow_data_input_headers_value", "SimpleWorkflowDataInputRuntime": ".simple_workflow_data_input_runtime", "SimpleWorkflowDataOutput": ".simple_workflow_data_output", "SimpleWorkflowDataOutputHeadersValue": ".simple_workflow_data_output_headers_value", "SimpleWorkflowDataOutputRuntime": ".simple_workflow_data_output_runtime", "SimpleWorkflowEdit": ".simple_workflow_edit", "SimpleWorkflowFlags": ".simple_workflow_flags", "SimpleWorkflowQuery": ".simple_workflow_query", "SimpleWorkflowQueryFlags": ".simple_workflow_query_flags", "SimpleWorkflowResponse": ".simple_workflow_response", "SimpleWorkflowsResponse": ".simple_workflows_response", "SpanInput": ".span_input", "SpanInputEndTime": ".span_input_end_time", "SpanInputStartTime": ".span_input_start_time", "SpanOutput": ".span_output", "SpanOutputEndTime": ".span_output_end_time", "SpanOutputStartTime": ".span_output_start_time", "SpanResponse": ".span_response", "SpanType": ".span_type", "SpansNodeInput": ".spans_node_input", "SpansNodeInputEndTime": ".spans_node_input_end_time", "SpansNodeInputSpansValue": ".spans_node_input_spans_value", "SpansNodeInputStartTime": ".spans_node_input_start_time", "SpansNodeOutput": ".spans_node_output", "SpansNodeOutputEndTime": ".spans_node_output_end_time", "SpansNodeOutputSpansValue": ".spans_node_output_spans_value", "SpansNodeOutputStartTime": ".spans_node_output_start_time", "SpansResponse": ".spans_response", "SpansTreeInput": ".spans_tree_input", "SpansTreeInputSpansValue": ".spans_tree_input_spans_value", "SpansTreeOutput": ".spans_tree_output", "SpansTreeOutputSpansValue": ".spans_tree_output_spans_value", "SsoProviderDto": ".sso_provider_dto", "SsoProviderInfo": ".sso_provider_info", "SsoProviderSettingsDto": ".sso_provider_settings_dto", "SsoProviders": ".sso_providers", "StandardProviderDto": ".standard_provider_dto", "StandardProviderKind": ".standard_provider_kind", "StandardProviderSettingsDto": ".standard_provider_settings_dto", "Status": ".status", "StringOperator": ".string_operator", "TestcaseInput": ".testcase_input", "TestcaseOutput": ".testcase_output", "TestcaseResponse": ".testcase_response", "TestcasesResponse": ".testcases_response", "Testset": ".testset", "TestsetCreate": ".testset_create", "TestsetEdit": ".testset_edit", "TestsetFlags": ".testset_flags", "TestsetQuery": ".testset_query", "TestsetResponse": ".testset_response", "TestsetRevision": ".testset_revision", "TestsetRevisionCommit": ".testset_revision_commit", "TestsetRevisionCreate": ".testset_revision_create", "TestsetRevisionDataInput": ".testset_revision_data_input", "TestsetRevisionDataOutput": ".testset_revision_data_output", "TestsetRevisionDelta": ".testset_revision_delta", "TestsetRevisionDeltaColumns": ".testset_revision_delta_columns", "TestsetRevisionDeltaRows": ".testset_revision_delta_rows", "TestsetRevisionEdit": ".testset_revision_edit", "TestsetRevisionQuery": ".testset_revision_query", "TestsetRevisionResponse": ".testset_revision_response", "TestsetRevisionsLog": ".testset_revisions_log", "TestsetRevisionsResponse": ".testset_revisions_response", "TestsetVariant": ".testset_variant", "TestsetVariantCreate": ".testset_variant_create", "TestsetVariantEdit": ".testset_variant_edit", "TestsetVariantQuery": ".testset_variant_query", "TestsetVariantResponse": ".testset_variant_response", "TestsetVariantsResponse": ".testset_variants_response", "TestsetsResponse": ".testsets_response", "TextOptions": ".text_options", "ToolAuthScheme": ".tool_auth_scheme", "ToolCallData": ".tool_call_data", "ToolCallFunction": ".tool_call_function", "ToolCallResponse": ".tool_call_response", "ToolCatalogAction": ".tool_catalog_action", "ToolCatalogActionDetails": ".tool_catalog_action_details", "ToolCatalogActionResponse": ".tool_catalog_action_response", "ToolCatalogActionResponseAction": ".tool_catalog_action_response_action", "ToolCatalogActionsResponse": ".tool_catalog_actions_response", "ToolCatalogActionsResponseActionsItem": ".tool_catalog_actions_response_actions_item", "ToolCatalogIntegration": ".tool_catalog_integration", "ToolCatalogIntegrationDetails": ".tool_catalog_integration_details", "ToolCatalogIntegrationResponse": ".tool_catalog_integration_response", "ToolCatalogIntegrationResponseIntegration": ".tool_catalog_integration_response_integration", "ToolCatalogIntegrationsResponse": ".tool_catalog_integrations_response", "ToolCatalogIntegrationsResponseIntegrationsItem": ".tool_catalog_integrations_response_integrations_item", "ToolCatalogProvider": ".tool_catalog_provider", "ToolCatalogProviderDetails": ".tool_catalog_provider_details", "ToolCatalogProviderResponse": ".tool_catalog_provider_response", "ToolCatalogProviderResponseProvider": ".tool_catalog_provider_response_provider", "ToolCatalogProvidersResponse": ".tool_catalog_providers_response", "ToolCatalogProvidersResponseProvidersItem": ".tool_catalog_providers_response_providers_item", "ToolConnection": ".tool_connection", "ToolConnectionCreate": ".tool_connection_create", "ToolConnectionCreateData": ".tool_connection_create_data", "ToolConnectionResponse": ".tool_connection_response", "ToolConnectionStatus": ".tool_connection_status", "ToolConnectionsResponse": ".tool_connections_response", "ToolProviderKind": ".tool_provider_kind", "ToolResult": ".tool_result", "ToolResultData": ".tool_result_data", "TraceIdResponse": ".trace_id_response", "TraceIdsResponse": ".trace_ids_response", "TraceInput": ".trace_input", "TraceInputSpansValue": ".trace_input_spans_value", "TraceOutput": ".trace_output", "TraceOutputSpansValue": ".trace_output_spans_value", "TraceRequest": ".trace_request", "TraceResponse": ".trace_response", "TraceType": ".trace_type", "TracesRequest": ".traces_request", "TracesResponse": ".traces_response", "TracingQuery": ".tracing_query", "UserIdsResponse": ".user_ids_response", "ValidationError": ".validation_error", "ValidationErrorLocItem": ".validation_error_loc_item", "VariantFork": ".variant_fork", "WebhookDeliveriesResponse": ".webhook_deliveries_response", "WebhookDelivery": ".webhook_delivery", "WebhookDeliveryCreate": ".webhook_delivery_create", "WebhookDeliveryData": ".webhook_delivery_data", "WebhookDeliveryQuery": ".webhook_delivery_query", "WebhookDeliveryResponse": ".webhook_delivery_response", "WebhookDeliveryResponseInfo": ".webhook_delivery_response_info", "WebhookEventType": ".webhook_event_type", "WebhookProviderDto": ".webhook_provider_dto", "WebhookProviderSettingsDto": ".webhook_provider_settings_dto", "WebhookSubscription": ".webhook_subscription", "WebhookSubscriptionCreate": ".webhook_subscription_create", "WebhookSubscriptionData": ".webhook_subscription_data", "WebhookSubscriptionDataAuthMode": ".webhook_subscription_data_auth_mode", "WebhookSubscriptionEdit": ".webhook_subscription_edit", "WebhookSubscriptionQuery": ".webhook_subscription_query", "WebhookSubscriptionResponse": ".webhook_subscription_response", "WebhookSubscriptionsResponse": ".webhook_subscriptions_response", "Windowing": ".windowing", "WindowingOrder": ".windowing_order", "Workflow": ".workflow", "WorkflowArtifactFlags": ".workflow_artifact_flags", "WorkflowCatalogFlags": ".workflow_catalog_flags", "WorkflowCatalogPreset": ".workflow_catalog_preset", "WorkflowCatalogPresetResponse": ".workflow_catalog_preset_response", "WorkflowCatalogPresetsResponse": ".workflow_catalog_presets_response", "WorkflowCatalogTemplate": ".workflow_catalog_template", "WorkflowCatalogTemplateResponse": ".workflow_catalog_template_response", "WorkflowCatalogTemplatesResponse": ".workflow_catalog_templates_response", "WorkflowCatalogType": ".workflow_catalog_type", "WorkflowCatalogTypeResponse": ".workflow_catalog_type_response", "WorkflowCatalogTypesResponse": ".workflow_catalog_types_response", "WorkflowCreate": ".workflow_create", "WorkflowEdit": ".workflow_edit", "WorkflowFlags": ".workflow_flags", "WorkflowFork": ".workflow_fork", "WorkflowResponse": ".workflow_response", "WorkflowRevisionCommit": ".workflow_revision_commit", "WorkflowRevisionCreate": ".workflow_revision_create", "WorkflowRevisionDataInput": ".workflow_revision_data_input", "WorkflowRevisionDataInputHeadersValue": ".workflow_revision_data_input_headers_value", "WorkflowRevisionDataInputRuntime": ".workflow_revision_data_input_runtime", "WorkflowRevisionDataOutput": ".workflow_revision_data_output", "WorkflowRevisionDataOutputHeadersValue": ".workflow_revision_data_output_headers_value", "WorkflowRevisionDataOutputRuntime": ".workflow_revision_data_output_runtime", "WorkflowRevisionEdit": ".workflow_revision_edit", "WorkflowRevisionFlags": ".workflow_revision_flags", "WorkflowRevisionFork": ".workflow_revision_fork", "WorkflowRevisionInput": ".workflow_revision_input", "WorkflowRevisionOutput": ".workflow_revision_output", "WorkflowRevisionResolveResponse": ".workflow_revision_resolve_response", "WorkflowRevisionResponse": ".workflow_revision_response", "WorkflowRevisionsLog": ".workflow_revisions_log", "WorkflowRevisionsResponse": ".workflow_revisions_response", "WorkflowVariant": ".workflow_variant", "WorkflowVariantCreate": ".workflow_variant_create", "WorkflowVariantEdit": ".workflow_variant_edit", "WorkflowVariantFlags": ".workflow_variant_flags", "WorkflowVariantFork": ".workflow_variant_fork", "WorkflowVariantResponse": ".workflow_variant_response", "WorkflowVariantsResponse": ".workflow_variants_response", "WorkflowsResponse": ".workflows_response", "Workspace": ".workspace", "WorkspaceMemberResponse": ".workspace_member_response", "WorkspacePermission": ".workspace_permission", "WorkspaceResponse": ".workspace_response"}
def __getattr__(attr_name: str) -> typing.Any:
module_name = _dynamic_imports.get(attr_name)
if module_name is None:
@@ -662,4 +661,4 @@ def __getattr__(attr_name: str) -> typing.Any:
def __dir__():
lazy_attrs = list(_dynamic_imports.keys())
return sorted(lazy_attrs)
-__all__ = ["AdminAccountCreateOptions", "AdminAccountRead", "AdminAccountsCreate", "AdminAccountsDelete", "AdminAccountsDeleteTarget", "AdminAccountsResponse", "AdminApiKeyCreate", "AdminApiKeyResponse", "AdminDeleteResponse", "AdminDeletedEntities", "AdminDeletedEntity", "AdminOrganizationCreate", "AdminOrganizationMembershipCreate", "AdminOrganizationMembershipRead", "AdminOrganizationRead", "AdminProjectCreate", "AdminProjectMembershipCreate", "AdminProjectMembershipRead", "AdminProjectRead", "AdminSimpleAccountCreate", "AdminSimpleAccountDeleteEntry", "AdminSimpleAccountRead", "AdminSimpleAccountsApiKeysCreate", "AdminSimpleAccountsCreate", "AdminSimpleAccountsDelete", "AdminSimpleAccountsOrganizationsCreate", "AdminSimpleAccountsOrganizationsMembershipsCreate", "AdminSimpleAccountsOrganizationsTransferOwnership", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjects", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjectsZero", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspaces", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspacesZero", "AdminSimpleAccountsOrganizationsTransferOwnershipResponse", "AdminSimpleAccountsProjectsCreate", "AdminSimpleAccountsProjectsMembershipsCreate", "AdminSimpleAccountsResponse", "AdminSimpleAccountsUsersCreate", "AdminSimpleAccountsUsersIdentitiesCreate", "AdminSimpleAccountsUsersResetPassword", "AdminSimpleAccountsWorkspacesCreate", "AdminSimpleAccountsWorkspacesMembershipsCreate", "AdminStructuredError", "AdminSubscriptionCreate", "AdminSubscriptionRead", "AdminUserCreate", "AdminUserIdentityCreate", "AdminUserIdentityRead", "AdminUserIdentityReadStatus", "AdminUserRead", "AdminWorkspaceCreate", "AdminWorkspaceMembershipCreate", "AdminWorkspaceMembershipRead", "AdminWorkspaceRead", "Analytics", "AnalyticsResponse", "Annotation", "AnnotationCreate", "AnnotationCreateLinks", "AnnotationEdit", "AnnotationEditLinks", "AnnotationLinkResponse", "AnnotationLinks", "AnnotationQuery", "AnnotationQueryLinks", "AnnotationResponse", "AnnotationsResponse", "Application", "ApplicationArtifactFlags", "ApplicationArtifactQueryFlags", "ApplicationCatalogPreset", "ApplicationCatalogPresetResponse", "ApplicationCatalogPresetsResponse", "ApplicationCatalogTemplate", "ApplicationCatalogTemplateResponse", "ApplicationCatalogTemplatesResponse", "ApplicationCatalogType", "ApplicationCatalogTypesResponse", "ApplicationCreate", "ApplicationEdit", "ApplicationFlags", "ApplicationFork", "ApplicationQuery", "ApplicationResponse", "ApplicationRevision", "ApplicationRevisionCommit", "ApplicationRevisionCreate", "ApplicationRevisionDataInput", "ApplicationRevisionDataInputHeadersValue", "ApplicationRevisionDataInputRuntime", "ApplicationRevisionDataOutput", "ApplicationRevisionDataOutputHeadersValue", "ApplicationRevisionDataOutputRuntime", "ApplicationRevisionEdit", "ApplicationRevisionFlags", "ApplicationRevisionFork", "ApplicationRevisionQuery", "ApplicationRevisionQueryFlags", "ApplicationRevisionResolveResponse", "ApplicationRevisionResponse", "ApplicationRevisionsLog", "ApplicationRevisionsResponse", "ApplicationVariant", "ApplicationVariantCreate", "ApplicationVariantEdit", "ApplicationVariantFlags", "ApplicationVariantFork", "ApplicationVariantResponse", "ApplicationVariantsResponse", "ApplicationsResponse", "BodyConfigsFetchVariantsConfigsFetchPost", "Bucket", "CollectStatusResponse", "ComparisonOperator", "Condition", "ConditionOperator", "ConditionOptions", "ConditionValue", "ConfigResponseModel", "CustomModelSettingsDto", "CustomProviderDto", "CustomProviderKind", "CustomProviderSettingsDto", "DictOperator", "DiscoverResponse", "DiscoverResponseMethodsValue", "EeSrcModelsApiOrganizationModelsOrganization", "EntityRef", "Environment", "EnvironmentCreate", "EnvironmentEdit", "EnvironmentFlags", "EnvironmentQueryFlags", "EnvironmentResponse", "EnvironmentRevision", "EnvironmentRevisionCommit", "EnvironmentRevisionCreate", "EnvironmentRevisionData", "EnvironmentRevisionDelta", "EnvironmentRevisionEdit", "EnvironmentRevisionResolveResponse", "EnvironmentRevisionResponse", "EnvironmentRevisionsLog", "EnvironmentRevisionsResponse", "EnvironmentVariant", "EnvironmentVariantCreate", "EnvironmentVariantEdit", "EnvironmentVariantResponse", "EnvironmentVariantsResponse", "EnvironmentsResponse", "ErrorPolicy", "EvaluationMetrics", "EvaluationMetricsCreate", "EvaluationMetricsEdit", "EvaluationMetricsIdsResponse", "EvaluationMetricsQuery", "EvaluationMetricsQueryScenarioIds", "EvaluationMetricsQueryTimestamps", "EvaluationMetricsRefresh", "EvaluationMetricsResponse", "EvaluationQueue", "EvaluationQueueCreate", "EvaluationQueueData", "EvaluationQueueEdit", "EvaluationQueueFlags", "EvaluationQueueIdResponse", "EvaluationQueueIdsResponse", "EvaluationQueueQuery", "EvaluationQueueQueryFlags", "EvaluationQueueResponse", "EvaluationQueueScenariosQuery", "EvaluationQueuesResponse", "EvaluationResult", "EvaluationResultCreate", "EvaluationResultEdit", "EvaluationResultIdResponse", "EvaluationResultIdsResponse", "EvaluationResultQuery", "EvaluationResultResponse", "EvaluationResultsResponse", "EvaluationRun", "EvaluationRunCreate", "EvaluationRunData", "EvaluationRunDataMapping", "EvaluationRunDataMappingColumn", "EvaluationRunDataMappingStep", "EvaluationRunDataStep", "EvaluationRunDataStepInput", "EvaluationRunDataStepOrigin", "EvaluationRunDataStepType", "EvaluationRunEdit", "EvaluationRunFlags", "EvaluationRunIdResponse", "EvaluationRunIdsRequest", "EvaluationRunIdsResponse", "EvaluationRunQuery", "EvaluationRunQueryFlags", "EvaluationRunResponse", "EvaluationRunsResponse", "EvaluationScenario", "EvaluationScenarioCreate", "EvaluationScenarioEdit", "EvaluationScenarioIdResponse", "EvaluationScenarioIdsResponse", "EvaluationScenarioQuery", "EvaluationScenarioResponse", "EvaluationScenariosResponse", "EvaluationStatus", "Evaluator", "EvaluatorArtifactFlags", "EvaluatorArtifactQueryFlags", "EvaluatorCatalogPreset", "EvaluatorCatalogPresetResponse", "EvaluatorCatalogPresetsResponse", "EvaluatorCatalogTemplate", "EvaluatorCatalogTemplateResponse", "EvaluatorCatalogTemplatesResponse", "EvaluatorCatalogType", "EvaluatorCatalogTypesResponse", "EvaluatorCreate", "EvaluatorEdit", "EvaluatorFlags", "EvaluatorFork", "EvaluatorQuery", "EvaluatorResponse", "EvaluatorRevision", "EvaluatorRevisionCommit", "EvaluatorRevisionCreate", "EvaluatorRevisionDataInput", "EvaluatorRevisionDataInputHeadersValue", "EvaluatorRevisionDataInputRuntime", "EvaluatorRevisionDataOutput", "EvaluatorRevisionDataOutputHeadersValue", "EvaluatorRevisionDataOutputRuntime", "EvaluatorRevisionEdit", "EvaluatorRevisionFlags", "EvaluatorRevisionFork", "EvaluatorRevisionQuery", "EvaluatorRevisionQueryFlags", "EvaluatorRevisionResolveResponse", "EvaluatorRevisionResponse", "EvaluatorRevisionsLog", "EvaluatorRevisionsResponse", "EvaluatorTemplate", "EvaluatorTemplatesResponse", "EvaluatorVariant", "EvaluatorVariantCreate", "EvaluatorVariantEdit", "EvaluatorVariantFlags", "EvaluatorVariantFork", "EvaluatorVariantResponse", "EvaluatorVariantsResponse", "EvaluatorsResponse", "Event", "EventQuery", "EventType", "EventsQueryResponse", "ExistenceOperator", "FilteringInput", "FilteringInputConditionsItem", "FilteringOutput", "FilteringOutputConditionsItem", "Focus", "Folder", "FolderCreate", "FolderEdit", "FolderIdResponse", "FolderKind", "FolderQuery", "FolderQueryKinds", "FolderResponse", "FoldersResponse", "Format", "Formatting", typing.Any, typing.Any, "Header", "HttpValidationError", "InviteRequest", "Invocation", "InvocationCreate", "InvocationCreateLinks", "InvocationEdit", "InvocationEditLinks", "InvocationLinkResponse", "InvocationLinks", "InvocationQuery", "InvocationQueryLinks", "InvocationResponse", "InvocationsResponse", "JsonSchemasInput", "JsonSchemasOutput", typing.Any, typing.Any, "LegacyLifecycleDto", "ListApiKeysResponse", "ListOperator", "ListOptions", "LogicalOperator", "MetricSpec", "MetricType", "MetricsBucket", "NumericOperator", "OTelEventInput", "OTelEventInputTimestamp", "OTelEventOutput", "OTelEventOutputTimestamp", "OTelHashInput", "OTelHashOutput", "OTelLinkInput", "OTelLinkOutput", "OTelLinksResponse", "OTelReferenceInput", "OTelReferenceOutput", "OTelSpanKind", "OTelStatusCode", "OTelTracingRequest", "OTelTracingResponse", "OldAnalyticsResponse", "OrganizationDetails", "OrganizationDomainResponse", "OrganizationProviderResponse", "OrganizationUpdate", "OssSrcModelsApiOrganizationModelsOrganization", "Permission", "ProjectsResponse", "QueriesResponse", "Query", "QueryCreate", "QueryEdit", "QueryFlags", "QueryQueryFlags", "QueryResponse", "QueryRevision", "QueryRevisionCommit", "QueryRevisionCreate", "QueryRevisionDataInput", "QueryRevisionDataOutput", "QueryRevisionEdit", "QueryRevisionQuery", "QueryRevisionResponse", "QueryRevisionsLog", "QueryRevisionsResponse", "QueryVariant", "QueryVariantCreate", "QueryVariantEdit", "QueryVariantQuery", "QueryVariantResponse", "QueryVariantsResponse", "Reference", "ReferenceRequestModelInput", "ReferenceRequestModelOutput", "RequestType", "ResolutionInfo", "RetrievalInfo", "RevisionFork", "SecretDto", "SecretDtoData", "SecretKind", "SecretResponseDto", "SecretResponseDtoData", "SessionIdsResponse", "SimpleApplication", "SimpleApplicationCreate", "SimpleApplicationDataInput", "SimpleApplicationDataInputHeadersValue", "SimpleApplicationDataInputRuntime", "SimpleApplicationDataOutput", "SimpleApplicationDataOutputHeadersValue", "SimpleApplicationDataOutputRuntime", "SimpleApplicationEdit", "SimpleApplicationFlags", "SimpleApplicationQuery", "SimpleApplicationQueryFlags", "SimpleApplicationResponse", "SimpleApplicationsResponse", "SimpleEnvironment", "SimpleEnvironmentCreate", "SimpleEnvironmentEdit", "SimpleEnvironmentQuery", "SimpleEnvironmentResponse", "SimpleEnvironmentsResponse", "SimpleEvaluation", "SimpleEvaluationCreate", "SimpleEvaluationData", "SimpleEvaluationDataApplicationSteps", "SimpleEvaluationDataApplicationStepsOneValue", "SimpleEvaluationDataEvaluatorSteps", "SimpleEvaluationDataEvaluatorStepsOneValue", "SimpleEvaluationDataQuerySteps", "SimpleEvaluationDataQueryStepsOneValue", "SimpleEvaluationDataTestsetSteps", "SimpleEvaluationDataTestsetStepsOneValue", "SimpleEvaluationEdit", "SimpleEvaluationIdResponse", "SimpleEvaluationQuery", "SimpleEvaluationResponse", "SimpleEvaluationsResponse", "SimpleEvaluator", "SimpleEvaluatorCreate", "SimpleEvaluatorDataInput", "SimpleEvaluatorDataInputHeadersValue", "SimpleEvaluatorDataInputRuntime", "SimpleEvaluatorDataOutput", "SimpleEvaluatorDataOutputHeadersValue", "SimpleEvaluatorDataOutputRuntime", "SimpleEvaluatorEdit", "SimpleEvaluatorFlags", "SimpleEvaluatorQuery", "SimpleEvaluatorQueryFlags", "SimpleEvaluatorResponse", "SimpleEvaluatorsResponse", "SimpleQueriesResponse", "SimpleQuery", "SimpleQueryCreate", "SimpleQueryEdit", "SimpleQueryQuery", "SimpleQueryResponse", "SimpleQueue", "SimpleQueueCreate", "SimpleQueueData", "SimpleQueueDataEvaluators", "SimpleQueueDataEvaluatorsOneValue", "SimpleQueueIdResponse", "SimpleQueueKind", "SimpleQueueQuery", "SimpleQueueResponse", "SimpleQueueScenariosQuery", "SimpleQueueScenariosResponse", "SimpleQueueSettings", "SimpleQueuesResponse", "SimpleTestset", "SimpleTestsetCreate", "SimpleTestsetEdit", "SimpleTestsetQuery", "SimpleTestsetResponse", "SimpleTestsetsResponse", "SimpleTrace", "SimpleTraceChannel", "SimpleTraceCreate", "SimpleTraceCreateLinks", "SimpleTraceEdit", "SimpleTraceEditLinks", "SimpleTraceKind", "SimpleTraceLinkResponse", "SimpleTraceLinks", "SimpleTraceOrigin", "SimpleTraceQuery", "SimpleTraceQueryLinks", "SimpleTraceReferences", "SimpleTraceResponse", "SimpleTracesResponse", "SimpleWorkflow", "SimpleWorkflowCreate", "SimpleWorkflowDataInput", "SimpleWorkflowDataInputHeadersValue", "SimpleWorkflowDataInputRuntime", "SimpleWorkflowDataOutput", "SimpleWorkflowDataOutputHeadersValue", "SimpleWorkflowDataOutputRuntime", "SimpleWorkflowEdit", "SimpleWorkflowFlags", "SimpleWorkflowQuery", "SimpleWorkflowQueryFlags", "SimpleWorkflowResponse", "SimpleWorkflowsResponse", "SpanInput", "SpanInputEndTime", "SpanInputStartTime", "SpanOutput", "SpanOutputEndTime", "SpanOutputStartTime", "SpanResponse", "SpanType", "SpansNodeInput", "SpansNodeInputEndTime", "SpansNodeInputSpansValue", "SpansNodeInputStartTime", "SpansNodeOutput", "SpansNodeOutputEndTime", "SpansNodeOutputSpansValue", "SpansNodeOutputStartTime", "SpansResponse", "SpansTreeInput", "SpansTreeInputSpansValue", "SpansTreeOutput", "SpansTreeOutputSpansValue", "SsoProviderDto", "SsoProviderInfo", "SsoProviderSettingsDto", "SsoProviders", "StandardProviderDto", "StandardProviderKind", "StandardProviderSettingsDto", "Status", "StringOperator", "TestcaseInput", "TestcaseOutput", "TestcaseResponse", "TestcasesResponse", "Testset", "TestsetCreate", "TestsetEdit", "TestsetFlags", "TestsetQuery", "TestsetResponse", "TestsetRevision", "TestsetRevisionCommit", "TestsetRevisionCreate", "TestsetRevisionDataInput", "TestsetRevisionDataOutput", "TestsetRevisionDelta", "TestsetRevisionDeltaColumns", "TestsetRevisionDeltaRows", "TestsetRevisionEdit", "TestsetRevisionQuery", "TestsetRevisionResponse", "TestsetRevisionsLog", "TestsetRevisionsResponse", "TestsetVariant", "TestsetVariantCreate", "TestsetVariantEdit", "TestsetVariantQuery", "TestsetVariantResponse", "TestsetVariantsResponse", "TestsetsResponse", "TextOptions", "ToolAuthScheme", "ToolCallData", "ToolCallFunction", "ToolCallResponse", "ToolCatalogAction", "ToolCatalogActionDetails", "ToolCatalogActionResponse", "ToolCatalogActionResponseAction", "ToolCatalogActionsResponse", "ToolCatalogActionsResponseActionsItem", "ToolCatalogIntegration", "ToolCatalogIntegrationDetails", "ToolCatalogIntegrationResponse", "ToolCatalogIntegrationResponseIntegration", "ToolCatalogIntegrationsResponse", "ToolCatalogIntegrationsResponseIntegrationsItem", "ToolCatalogProvider", "ToolCatalogProviderDetails", "ToolCatalogProviderResponse", "ToolCatalogProviderResponseProvider", "ToolCatalogProvidersResponse", "ToolCatalogProvidersResponseProvidersItem", "ToolConnection", "ToolConnectionCreate", "ToolConnectionCreateData", "ToolConnectionResponse", "ToolConnectionStatus", "ToolConnectionsResponse", "ToolProviderKind", "ToolResult", "ToolResultData", "TraceIdResponse", "TraceIdsResponse", "TraceInput", "TraceInputSpansValue", "TraceOutput", "TraceOutputSpansValue", "TraceRequest", "TraceResponse", "TraceType", "TracesRequest", "TracesResponse", "TracingQuery", "UserIdsResponse", "ValidationError", "ValidationErrorLocItem", "VariantFork", "WebhookDeliveriesResponse", "WebhookDelivery", "WebhookDeliveryCreate", "WebhookDeliveryData", "WebhookDeliveryQuery", "WebhookDeliveryResponse", "WebhookDeliveryResponseInfo", "WebhookEventType", "WebhookProviderDto", "WebhookProviderSettingsDto", "WebhookSubscription", "WebhookSubscriptionCreate", "WebhookSubscriptionData", "WebhookSubscriptionDataAuthMode", "WebhookSubscriptionEdit", "WebhookSubscriptionQuery", "WebhookSubscriptionResponse", "WebhookSubscriptionsResponse", "Windowing", "WindowingOrder", "Workflow", "WorkflowArtifactFlags", "WorkflowCatalogFlags", "WorkflowCatalogPreset", "WorkflowCatalogPresetResponse", "WorkflowCatalogPresetsResponse", "WorkflowCatalogTemplate", "WorkflowCatalogTemplateResponse", "WorkflowCatalogTemplatesResponse", "WorkflowCatalogType", "WorkflowCatalogTypeResponse", "WorkflowCatalogTypesResponse", "WorkflowCreate", "WorkflowEdit", "WorkflowFlags", "WorkflowFork", "WorkflowResponse", "WorkflowRevisionCommit", "WorkflowRevisionCreate", "WorkflowRevisionDataInput", "WorkflowRevisionDataInputHeadersValue", "WorkflowRevisionDataInputRuntime", "WorkflowRevisionDataOutput", "WorkflowRevisionDataOutputHeadersValue", "WorkflowRevisionDataOutputRuntime", "WorkflowRevisionEdit", "WorkflowRevisionFlags", "WorkflowRevisionFork", "WorkflowRevisionInput", "WorkflowRevisionOutput", "WorkflowRevisionResolveResponse", "WorkflowRevisionResponse", "WorkflowRevisionsLog", "WorkflowRevisionsResponse", "WorkflowVariant", "WorkflowVariantCreate", "WorkflowVariantEdit", "WorkflowVariantFlags", "WorkflowVariantFork", "WorkflowVariantResponse", "WorkflowVariantsResponse", "WorkflowsResponse", "Workspace", "WorkspaceMemberResponse", "WorkspacePermission", "WorkspaceResponse"]
+__all__ = ["AdminAccountCreateOptions", "AdminAccountRead", "AdminAccountsCreate", "AdminAccountsDelete", "AdminAccountsDeleteTarget", "AdminAccountsResponse", "AdminApiKeyCreate", "AdminApiKeyResponse", "AdminDeleteResponse", "AdminDeletedEntities", "AdminDeletedEntity", "AdminOrganizationCreate", "AdminOrganizationMembershipCreate", "AdminOrganizationMembershipRead", "AdminOrganizationRead", "AdminProjectCreate", "AdminProjectMembershipCreate", "AdminProjectMembershipRead", "AdminProjectRead", "AdminSimpleAccountCreate", "AdminSimpleAccountDeleteEntry", "AdminSimpleAccountRead", "AdminSimpleAccountsApiKeysCreate", "AdminSimpleAccountsCreate", "AdminSimpleAccountsDelete", "AdminSimpleAccountsOrganizationsCreate", "AdminSimpleAccountsOrganizationsMembershipsCreate", "AdminSimpleAccountsOrganizationsTransferOwnership", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjects", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeProjectsZero", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspaces", "AdminSimpleAccountsOrganizationsTransferOwnershipIncludeWorkspacesZero", "AdminSimpleAccountsOrganizationsTransferOwnershipResponse", "AdminSimpleAccountsProjectsCreate", "AdminSimpleAccountsProjectsMembershipsCreate", "AdminSimpleAccountsResponse", "AdminSimpleAccountsUsersCreate", "AdminSimpleAccountsUsersIdentitiesCreate", "AdminSimpleAccountsUsersResetPassword", "AdminSimpleAccountsWorkspacesCreate", "AdminSimpleAccountsWorkspacesMembershipsCreate", "AdminStructuredError", "AdminSubscriptionCreate", "AdminSubscriptionRead", "AdminUserCreate", "AdminUserIdentityCreate", "AdminUserIdentityRead", "AdminUserIdentityReadStatus", "AdminUserRead", "AdminWorkspaceCreate", "AdminWorkspaceMembershipCreate", "AdminWorkspaceMembershipRead", "AdminWorkspaceRead", "Analytics", "AnalyticsResponse", "Annotation", "AnnotationCreate", "AnnotationCreateLinks", "AnnotationEdit", "AnnotationEditLinks", "AnnotationLinkResponse", "AnnotationLinks", "AnnotationQuery", "AnnotationQueryLinks", "AnnotationResponse", "AnnotationsResponse", "Application", "ApplicationArtifactFlags", "ApplicationArtifactQueryFlags", "ApplicationCatalogPreset", "ApplicationCatalogPresetResponse", "ApplicationCatalogPresetsResponse", "ApplicationCatalogTemplate", "ApplicationCatalogTemplateResponse", "ApplicationCatalogTemplatesResponse", "ApplicationCatalogType", "ApplicationCatalogTypesResponse", "ApplicationCreate", "ApplicationEdit", "ApplicationFlags", "ApplicationFork", "ApplicationQuery", "ApplicationResponse", "ApplicationRevision", "ApplicationRevisionCommit", "ApplicationRevisionCreate", "ApplicationRevisionDataInput", "ApplicationRevisionDataInputHeadersValue", "ApplicationRevisionDataInputRuntime", "ApplicationRevisionDataOutput", "ApplicationRevisionDataOutputHeadersValue", "ApplicationRevisionDataOutputRuntime", "ApplicationRevisionEdit", "ApplicationRevisionFlags", "ApplicationRevisionFork", "ApplicationRevisionQuery", "ApplicationRevisionQueryFlags", "ApplicationRevisionResolveResponse", "ApplicationRevisionResponse", "ApplicationRevisionsLog", "ApplicationRevisionsResponse", "ApplicationVariant", "ApplicationVariantCreate", "ApplicationVariantEdit", "ApplicationVariantFlags", "ApplicationVariantFork", "ApplicationVariantResponse", "ApplicationVariantsResponse", "ApplicationsResponse", "BodyConfigsFetchVariantsConfigsFetchPost", "Bucket", "CollectStatusResponse", "ComparisonOperator", "Condition", "ConditionOperator", "ConditionOptions", "ConditionValue", "ConfigResponseModel", "CustomModelSettingsDto", "CustomProviderDto", "CustomProviderKind", "CustomProviderSettingsDto", "DictOperator", "DiscoverResponse", "DiscoverResponseMethodsValue", "EeSrcModelsApiOrganizationModelsOrganization", "EntityRef", "Environment", "EnvironmentCreate", "EnvironmentEdit", "EnvironmentFlags", "EnvironmentQueryFlags", "EnvironmentResponse", "EnvironmentRevision", "EnvironmentRevisionCommit", "EnvironmentRevisionCreate", "EnvironmentRevisionData", "EnvironmentRevisionDelta", "EnvironmentRevisionEdit", "EnvironmentRevisionResolveResponse", "EnvironmentRevisionResponse", "EnvironmentRevisionsLog", "EnvironmentRevisionsResponse", "EnvironmentVariant", "EnvironmentVariantCreate", "EnvironmentVariantEdit", "EnvironmentVariantResponse", "EnvironmentVariantsResponse", "EnvironmentsResponse", "ErrorPolicy", "EvaluationMetrics", "EvaluationMetricsCreate", "EvaluationMetricsIdsResponse", "EvaluationMetricsQuery", "EvaluationMetricsQueryScenarioIds", "EvaluationMetricsQueryTimestamps", "EvaluationMetricsRefresh", "EvaluationMetricsResponse", "EvaluationQueue", "EvaluationQueueCreate", "EvaluationQueueData", "EvaluationQueueEdit", "EvaluationQueueFlags", "EvaluationQueueIdResponse", "EvaluationQueueIdsResponse", "EvaluationQueueQuery", "EvaluationQueueQueryFlags", "EvaluationQueueResponse", "EvaluationQueueScenariosQuery", "EvaluationQueuesResponse", "EvaluationResult", "EvaluationResultCreate", "EvaluationResultIdResponse", "EvaluationResultIdsResponse", "EvaluationResultQuery", "EvaluationResultResponse", "EvaluationResultsResponse", "EvaluationRun", "EvaluationRunCreate", "EvaluationRunData", "EvaluationRunDataConcurrency", "EvaluationRunDataMapping", "EvaluationRunDataMappingColumn", "EvaluationRunDataMappingStep", "EvaluationRunDataStep", "EvaluationRunDataStepInput", "EvaluationRunDataStepOrigin", "EvaluationRunDataStepType", "EvaluationRunEdit", "EvaluationRunFlags", "EvaluationRunIdResponse", "EvaluationRunIdsRequest", "EvaluationRunIdsResponse", "EvaluationRunQuery", "EvaluationRunQueryFlags", "EvaluationRunResponse", "EvaluationRunsResponse", "EvaluationScenario", "EvaluationScenarioCreate", "EvaluationScenarioEdit", "EvaluationScenarioIdResponse", "EvaluationScenarioIdsResponse", "EvaluationScenarioQuery", "EvaluationScenarioResponse", "EvaluationScenariosResponse", "EvaluationStatus", "Evaluator", "EvaluatorArtifactFlags", "EvaluatorArtifactQueryFlags", "EvaluatorCatalogPreset", "EvaluatorCatalogPresetResponse", "EvaluatorCatalogPresetsResponse", "EvaluatorCatalogTemplate", "EvaluatorCatalogTemplateResponse", "EvaluatorCatalogTemplatesResponse", "EvaluatorCatalogType", "EvaluatorCatalogTypesResponse", "EvaluatorCreate", "EvaluatorEdit", "EvaluatorFlags", "EvaluatorFork", "EvaluatorQuery", "EvaluatorResponse", "EvaluatorRevision", "EvaluatorRevisionCommit", "EvaluatorRevisionCreate", "EvaluatorRevisionDataInput", "EvaluatorRevisionDataInputHeadersValue", "EvaluatorRevisionDataInputRuntime", "EvaluatorRevisionDataOutput", "EvaluatorRevisionDataOutputHeadersValue", "EvaluatorRevisionDataOutputRuntime", "EvaluatorRevisionEdit", "EvaluatorRevisionFlags", "EvaluatorRevisionFork", "EvaluatorRevisionQuery", "EvaluatorRevisionQueryFlags", "EvaluatorRevisionResolveResponse", "EvaluatorRevisionResponse", "EvaluatorRevisionsLog", "EvaluatorRevisionsResponse", "EvaluatorTemplate", "EvaluatorTemplatesResponse", "EvaluatorVariant", "EvaluatorVariantCreate", "EvaluatorVariantEdit", "EvaluatorVariantFlags", "EvaluatorVariantFork", "EvaluatorVariantResponse", "EvaluatorVariantsResponse", "EvaluatorsResponse", "Event", "EventQuery", "EventType", "EventsQueryResponse", "ExistenceOperator", "FilteringInput", "FilteringInputConditionsItem", "FilteringOutput", "FilteringOutputConditionsItem", "Focus", "Folder", "FolderCreate", "FolderEdit", "FolderIdResponse", "FolderKind", "FolderQuery", "FolderQueryKinds", "FolderResponse", "FoldersResponse", "Format", "Formatting", typing.Any, typing.Any, "Header", "HttpValidationError", "InviteRequest", "Invocation", "InvocationCreate", "InvocationCreateLinks", "InvocationEdit", "InvocationEditLinks", "InvocationLinkResponse", "InvocationLinks", "InvocationQuery", "InvocationQueryLinks", "InvocationResponse", "InvocationsResponse", "JsonSchemasInput", "JsonSchemasOutput", typing.Any, typing.Any, "LegacyLifecycleDto", "ListApiKeysResponse", "ListOperator", "ListOptions", "LogicalOperator", "MetricSpec", "MetricType", "MetricsBucket", "NumericOperator", "OTelEventInput", "OTelEventInputTimestamp", "OTelEventOutput", "OTelEventOutputTimestamp", "OTelHashInput", "OTelHashOutput", "OTelLinkInput", "OTelLinkOutput", "OTelLinksResponse", "OTelReferenceInput", "OTelReferenceOutput", "OTelSpanKind", "OTelStatusCode", "OTelTracingRequest", "OTelTracingResponse", "OldAnalyticsResponse", "OrganizationDetails", "OrganizationDomainResponse", "OrganizationProviderResponse", "OrganizationUpdate", "OssSrcModelsApiOrganizationModelsOrganization", "Permission", "ProjectsResponse", "QueriesResponse", "Query", "QueryCreate", "QueryEdit", "QueryFlags", "QueryQueryFlags", "QueryResponse", "QueryRevision", "QueryRevisionCommit", "QueryRevisionCreate", "QueryRevisionDataInput", "QueryRevisionDataOutput", "QueryRevisionEdit", "QueryRevisionQuery", "QueryRevisionResponse", "QueryRevisionsLog", "QueryRevisionsResponse", "QueryVariant", "QueryVariantCreate", "QueryVariantEdit", "QueryVariantQuery", "QueryVariantResponse", "QueryVariantsResponse", "Reference", "ReferenceRequestModelInput", "ReferenceRequestModelOutput", "RequestType", "ResolutionInfo", "RetrievalInfo", "RevisionFork", "SecretDto", "SecretDtoData", "SecretKind", "SecretResponseDto", "SecretResponseDtoData", "SessionIdsResponse", "SimpleApplication", "SimpleApplicationCreate", "SimpleApplicationDataInput", "SimpleApplicationDataInputHeadersValue", "SimpleApplicationDataInputRuntime", "SimpleApplicationDataOutput", "SimpleApplicationDataOutputHeadersValue", "SimpleApplicationDataOutputRuntime", "SimpleApplicationEdit", "SimpleApplicationFlags", "SimpleApplicationQuery", "SimpleApplicationQueryFlags", "SimpleApplicationResponse", "SimpleApplicationsResponse", "SimpleEnvironment", "SimpleEnvironmentCreate", "SimpleEnvironmentEdit", "SimpleEnvironmentQuery", "SimpleEnvironmentResponse", "SimpleEnvironmentsResponse", "SimpleEvaluation", "SimpleEvaluationCreate", "SimpleEvaluationData", "SimpleEvaluationDataApplicationSteps", "SimpleEvaluationDataApplicationStepsOneValue", "SimpleEvaluationDataEvaluatorSteps", "SimpleEvaluationDataEvaluatorStepsOneValue", "SimpleEvaluationDataQuerySteps", "SimpleEvaluationDataQueryStepsOneValue", "SimpleEvaluationDataTestsetSteps", "SimpleEvaluationDataTestsetStepsOneValue", "SimpleEvaluationEdit", "SimpleEvaluationIdResponse", "SimpleEvaluationQuery", "SimpleEvaluationResponse", "SimpleEvaluationsResponse", "SimpleEvaluator", "SimpleEvaluatorCreate", "SimpleEvaluatorDataInput", "SimpleEvaluatorDataInputHeadersValue", "SimpleEvaluatorDataInputRuntime", "SimpleEvaluatorDataOutput", "SimpleEvaluatorDataOutputHeadersValue", "SimpleEvaluatorDataOutputRuntime", "SimpleEvaluatorEdit", "SimpleEvaluatorFlags", "SimpleEvaluatorQuery", "SimpleEvaluatorQueryFlags", "SimpleEvaluatorResponse", "SimpleEvaluatorsResponse", "SimpleQueriesResponse", "SimpleQuery", "SimpleQueryCreate", "SimpleQueryEdit", "SimpleQueryQuery", "SimpleQueryResponse", "SimpleQueue", "SimpleQueueCreate", "SimpleQueueData", "SimpleQueueDataEvaluators", "SimpleQueueDataEvaluatorsOneValue", "SimpleQueueIdResponse", "SimpleQueueKind", "SimpleQueueQuery", "SimpleQueueResponse", "SimpleQueueScenariosQuery", "SimpleQueueScenariosResponse", "SimpleQueueSettings", "SimpleQueuesResponse", "SimpleTestset", "SimpleTestsetCreate", "SimpleTestsetEdit", "SimpleTestsetQuery", "SimpleTestsetResponse", "SimpleTestsetsResponse", "SimpleTrace", "SimpleTraceChannel", "SimpleTraceCreate", "SimpleTraceCreateLinks", "SimpleTraceEdit", "SimpleTraceEditLinks", "SimpleTraceKind", "SimpleTraceLinkResponse", "SimpleTraceLinks", "SimpleTraceOrigin", "SimpleTraceQuery", "SimpleTraceQueryLinks", "SimpleTraceReferences", "SimpleTraceResponse", "SimpleTracesResponse", "SimpleWorkflow", "SimpleWorkflowCreate", "SimpleWorkflowDataInput", "SimpleWorkflowDataInputHeadersValue", "SimpleWorkflowDataInputRuntime", "SimpleWorkflowDataOutput", "SimpleWorkflowDataOutputHeadersValue", "SimpleWorkflowDataOutputRuntime", "SimpleWorkflowEdit", "SimpleWorkflowFlags", "SimpleWorkflowQuery", "SimpleWorkflowQueryFlags", "SimpleWorkflowResponse", "SimpleWorkflowsResponse", "SpanInput", "SpanInputEndTime", "SpanInputStartTime", "SpanOutput", "SpanOutputEndTime", "SpanOutputStartTime", "SpanResponse", "SpanType", "SpansNodeInput", "SpansNodeInputEndTime", "SpansNodeInputSpansValue", "SpansNodeInputStartTime", "SpansNodeOutput", "SpansNodeOutputEndTime", "SpansNodeOutputSpansValue", "SpansNodeOutputStartTime", "SpansResponse", "SpansTreeInput", "SpansTreeInputSpansValue", "SpansTreeOutput", "SpansTreeOutputSpansValue", "SsoProviderDto", "SsoProviderInfo", "SsoProviderSettingsDto", "SsoProviders", "StandardProviderDto", "StandardProviderKind", "StandardProviderSettingsDto", "Status", "StringOperator", "TestcaseInput", "TestcaseOutput", "TestcaseResponse", "TestcasesResponse", "Testset", "TestsetCreate", "TestsetEdit", "TestsetFlags", "TestsetQuery", "TestsetResponse", "TestsetRevision", "TestsetRevisionCommit", "TestsetRevisionCreate", "TestsetRevisionDataInput", "TestsetRevisionDataOutput", "TestsetRevisionDelta", "TestsetRevisionDeltaColumns", "TestsetRevisionDeltaRows", "TestsetRevisionEdit", "TestsetRevisionQuery", "TestsetRevisionResponse", "TestsetRevisionsLog", "TestsetRevisionsResponse", "TestsetVariant", "TestsetVariantCreate", "TestsetVariantEdit", "TestsetVariantQuery", "TestsetVariantResponse", "TestsetVariantsResponse", "TestsetsResponse", "TextOptions", "ToolAuthScheme", "ToolCallData", "ToolCallFunction", "ToolCallResponse", "ToolCatalogAction", "ToolCatalogActionDetails", "ToolCatalogActionResponse", "ToolCatalogActionResponseAction", "ToolCatalogActionsResponse", "ToolCatalogActionsResponseActionsItem", "ToolCatalogIntegration", "ToolCatalogIntegrationDetails", "ToolCatalogIntegrationResponse", "ToolCatalogIntegrationResponseIntegration", "ToolCatalogIntegrationsResponse", "ToolCatalogIntegrationsResponseIntegrationsItem", "ToolCatalogProvider", "ToolCatalogProviderDetails", "ToolCatalogProviderResponse", "ToolCatalogProviderResponseProvider", "ToolCatalogProvidersResponse", "ToolCatalogProvidersResponseProvidersItem", "ToolConnection", "ToolConnectionCreate", "ToolConnectionCreateData", "ToolConnectionResponse", "ToolConnectionStatus", "ToolConnectionsResponse", "ToolProviderKind", "ToolResult", "ToolResultData", "TraceIdResponse", "TraceIdsResponse", "TraceInput", "TraceInputSpansValue", "TraceOutput", "TraceOutputSpansValue", "TraceRequest", "TraceResponse", "TraceType", "TracesRequest", "TracesResponse", "TracingQuery", "UserIdsResponse", "ValidationError", "ValidationErrorLocItem", "VariantFork", "WebhookDeliveriesResponse", "WebhookDelivery", "WebhookDeliveryCreate", "WebhookDeliveryData", "WebhookDeliveryQuery", "WebhookDeliveryResponse", "WebhookDeliveryResponseInfo", "WebhookEventType", "WebhookProviderDto", "WebhookProviderSettingsDto", "WebhookSubscription", "WebhookSubscriptionCreate", "WebhookSubscriptionData", "WebhookSubscriptionDataAuthMode", "WebhookSubscriptionEdit", "WebhookSubscriptionQuery", "WebhookSubscriptionResponse", "WebhookSubscriptionsResponse", "Windowing", "WindowingOrder", "Workflow", "WorkflowArtifactFlags", "WorkflowCatalogFlags", "WorkflowCatalogPreset", "WorkflowCatalogPresetResponse", "WorkflowCatalogPresetsResponse", "WorkflowCatalogTemplate", "WorkflowCatalogTemplateResponse", "WorkflowCatalogTemplatesResponse", "WorkflowCatalogType", "WorkflowCatalogTypeResponse", "WorkflowCatalogTypesResponse", "WorkflowCreate", "WorkflowEdit", "WorkflowFlags", "WorkflowFork", "WorkflowResponse", "WorkflowRevisionCommit", "WorkflowRevisionCreate", "WorkflowRevisionDataInput", "WorkflowRevisionDataInputHeadersValue", "WorkflowRevisionDataInputRuntime", "WorkflowRevisionDataOutput", "WorkflowRevisionDataOutputHeadersValue", "WorkflowRevisionDataOutputRuntime", "WorkflowRevisionEdit", "WorkflowRevisionFlags", "WorkflowRevisionFork", "WorkflowRevisionInput", "WorkflowRevisionOutput", "WorkflowRevisionResolveResponse", "WorkflowRevisionResponse", "WorkflowRevisionsLog", "WorkflowRevisionsResponse", "WorkflowVariant", "WorkflowVariantCreate", "WorkflowVariantEdit", "WorkflowVariantFlags", "WorkflowVariantFork", "WorkflowVariantResponse", "WorkflowVariantsResponse", "WorkflowsResponse", "Workspace", "WorkspaceMemberResponse", "WorkspacePermission", "WorkspaceResponse"]
diff --git a/clients/python/agenta_client/types/evaluation_metrics_edit.py b/clients/python/agenta_client/types/evaluation_metrics_edit.py
deleted file mode 100644
index 44de82e0c7..0000000000
--- a/clients/python/agenta_client/types/evaluation_metrics_edit.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# This file was auto-generated by Fern from our API Definition.
-
-from __future__ import annotations
-
-import typing
-
-import pydantic
-from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
-from .evaluation_status import EvaluationStatus
-
-
-class EvaluationMetricsEdit(UniversalBaseModel):
- flags: typing.Optional[typing.Dict[str, typing.Any]] = None
- tags: typing.Optional[typing.Dict[str, typing.Any]] = None
- meta: typing.Optional[typing.Dict[str, typing.Any]] = None
- id: typing.Optional[str] = None
- version: typing.Optional[str] = None
- status: typing.Optional[EvaluationStatus] = None
- data: typing.Optional[typing.Dict[str, typing.Any]] = None
-
- if IS_PYDANTIC_V2:
- model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
- else:
- class Config:
- frozen = True
- smart_union = True
- extra = pydantic.Extra.allow
-from .label_json_input import LabelJsonInput # noqa: E402, I001
-from .full_json_input import FullJsonInput # noqa: E402, I001
-update_forward_refs(EvaluationMetricsEdit, FullJsonInput=FullJsonInput, LabelJsonInput=LabelJsonInput)
diff --git a/clients/python/agenta_client/types/evaluation_queue_flags.py b/clients/python/agenta_client/types/evaluation_queue_flags.py
index 6aca799bc0..d6e5b3f603 100644
--- a/clients/python/agenta_client/types/evaluation_queue_flags.py
+++ b/clients/python/agenta_client/types/evaluation_queue_flags.py
@@ -8,6 +8,7 @@
class EvaluationQueueFlags(UniversalBaseModel):
is_sequential: typing.Optional[bool] = None
+ is_default: typing.Optional[bool] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
diff --git a/clients/python/agenta_client/types/evaluation_queue_query.py b/clients/python/agenta_client/types/evaluation_queue_query.py
index ac5095e78d..5d553524a4 100644
--- a/clients/python/agenta_client/types/evaluation_queue_query.py
+++ b/clients/python/agenta_client/types/evaluation_queue_query.py
@@ -15,6 +15,7 @@ class EvaluationQueueQuery(UniversalBaseModel):
meta: typing.Optional[typing.Dict[str, typing.Any]] = None
name: typing.Optional[str] = None
description: typing.Optional[str] = None
+ include_archived: typing.Optional[bool] = None
user_id: typing.Optional[str] = None
user_ids: typing.Optional[typing.List[str]] = None
run_id: typing.Optional[str] = None
diff --git a/clients/python/agenta_client/types/evaluation_queue_query_flags.py b/clients/python/agenta_client/types/evaluation_queue_query_flags.py
index 21a34f8379..b53163ca48 100644
--- a/clients/python/agenta_client/types/evaluation_queue_query_flags.py
+++ b/clients/python/agenta_client/types/evaluation_queue_query_flags.py
@@ -8,6 +8,7 @@
class EvaluationQueueQueryFlags(UniversalBaseModel):
is_sequential: typing.Optional[bool] = None
+ is_default: typing.Optional[bool] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
diff --git a/clients/python/agenta_client/types/evaluation_result_edit.py b/clients/python/agenta_client/types/evaluation_result_edit.py
deleted file mode 100644
index cc892e7f61..0000000000
--- a/clients/python/agenta_client/types/evaluation_result_edit.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# This file was auto-generated by Fern from our API Definition.
-
-from __future__ import annotations
-
-import typing
-
-import pydantic
-from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
-from .evaluation_status import EvaluationStatus
-
-
-class EvaluationResultEdit(UniversalBaseModel):
- flags: typing.Optional[typing.Dict[str, typing.Any]] = None
- tags: typing.Optional[typing.Dict[str, typing.Any]] = None
- meta: typing.Optional[typing.Dict[str, typing.Any]] = None
- id: typing.Optional[str] = None
- version: typing.Optional[str] = None
- hash_id: typing.Optional[str] = None
- trace_id: typing.Optional[str] = None
- testcase_id: typing.Optional[str] = None
- error: typing.Optional[typing.Dict[str, typing.Any]] = None
- status: typing.Optional[EvaluationStatus] = None
-
- if IS_PYDANTIC_V2:
- model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
- else:
- class Config:
- frozen = True
- smart_union = True
- extra = pydantic.Extra.allow
-from .label_json_input import LabelJsonInput # noqa: E402, I001
-from .full_json_input import FullJsonInput # noqa: E402, I001
-update_forward_refs(EvaluationResultEdit, FullJsonInput=FullJsonInput, LabelJsonInput=LabelJsonInput)
diff --git a/clients/python/agenta_client/types/evaluation_run_data.py b/clients/python/agenta_client/types/evaluation_run_data.py
index c71e05048b..19b1ded27e 100644
--- a/clients/python/agenta_client/types/evaluation_run_data.py
+++ b/clients/python/agenta_client/types/evaluation_run_data.py
@@ -4,6 +4,7 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .evaluation_run_data_concurrency import EvaluationRunDataConcurrency
from .evaluation_run_data_mapping import EvaluationRunDataMapping
from .evaluation_run_data_step import EvaluationRunDataStep
@@ -11,6 +12,7 @@
class EvaluationRunData(UniversalBaseModel):
steps: typing.Optional[typing.List[EvaluationRunDataStep]] = None
repeats: typing.Optional[int] = None
+ concurrency: typing.Optional[EvaluationRunDataConcurrency] = None
mappings: typing.Optional[typing.List[EvaluationRunDataMapping]] = None
if IS_PYDANTIC_V2:
diff --git a/clients/python/agenta_client/types/evaluation_run_data_concurrency.py b/clients/python/agenta_client/types/evaluation_run_data_concurrency.py
new file mode 100644
index 0000000000..25e259e1fc
--- /dev/null
+++ b/clients/python/agenta_client/types/evaluation_run_data_concurrency.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class EvaluationRunDataConcurrency(UniversalBaseModel):
+ batch_size: typing.Optional[int] = None
+ max_retries: typing.Optional[int] = None
+ retry_delay: typing.Optional[float] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/clients/python/agenta_client/types/evaluation_run_flags.py b/clients/python/agenta_client/types/evaluation_run_flags.py
index 86a37a6a9a..9558042685 100644
--- a/clients/python/agenta_client/types/evaluation_run_flags.py
+++ b/clients/python/agenta_client/types/evaluation_run_flags.py
@@ -15,6 +15,8 @@ class EvaluationRunFlags(UniversalBaseModel):
is_split: typing.Optional[bool] = None
has_queries: typing.Optional[bool] = None
has_testsets: typing.Optional[bool] = None
+ has_traces: typing.Optional[bool] = None
+ has_testcases: typing.Optional[bool] = None
has_evaluators: typing.Optional[bool] = None
has_custom: typing.Optional[bool] = None
has_human: typing.Optional[bool] = None
diff --git a/clients/python/agenta_client/types/evaluation_run_query_flags.py b/clients/python/agenta_client/types/evaluation_run_query_flags.py
index fd632af306..3afa6465b5 100644
--- a/clients/python/agenta_client/types/evaluation_run_query_flags.py
+++ b/clients/python/agenta_client/types/evaluation_run_query_flags.py
@@ -15,6 +15,8 @@ class EvaluationRunQueryFlags(UniversalBaseModel):
is_split: typing.Optional[bool] = None
has_queries: typing.Optional[bool] = None
has_testsets: typing.Optional[bool] = None
+ has_traces: typing.Optional[bool] = None
+ has_testcases: typing.Optional[bool] = None
has_evaluators: typing.Optional[bool] = None
has_custom: typing.Optional[bool] = None
has_human: typing.Optional[bool] = None
diff --git a/clients/python/agenta_client/types/simple_evaluation_data.py b/clients/python/agenta_client/types/simple_evaluation_data.py
index afcec7aab5..62b5723cc6 100644
--- a/clients/python/agenta_client/types/simple_evaluation_data.py
+++ b/clients/python/agenta_client/types/simple_evaluation_data.py
@@ -4,6 +4,7 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .evaluation_run_data_concurrency import EvaluationRunDataConcurrency
from .evaluation_status import EvaluationStatus
from .simple_evaluation_data_application_steps import SimpleEvaluationDataApplicationSteps
from .simple_evaluation_data_evaluator_steps import SimpleEvaluationDataEvaluatorSteps
@@ -18,6 +19,7 @@ class SimpleEvaluationData(UniversalBaseModel):
application_steps: typing.Optional[SimpleEvaluationDataApplicationSteps] = None
evaluator_steps: typing.Optional[SimpleEvaluationDataEvaluatorSteps] = None
repeats: typing.Optional[int] = None
+ concurrency: typing.Optional[EvaluationRunDataConcurrency] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
diff --git a/clients/python/agenta_client/types/simple_queue_kind.py b/clients/python/agenta_client/types/simple_queue_kind.py
index 0f4e53725b..373d6407cd 100644
--- a/clients/python/agenta_client/types/simple_queue_kind.py
+++ b/clients/python/agenta_client/types/simple_queue_kind.py
@@ -2,4 +2,4 @@
import typing
-SimpleQueueKind = typing.Union[typing.Literal["traces", "testcases"], typing.Any]
+SimpleQueueKind = typing.Union[typing.Literal["queries", "testsets", "traces", "testcases"], typing.Any]
diff --git a/clients/python/agenta_client/workspaces/client.py b/clients/python/agenta_client/workspaces/client.py
index d95c7f4b2e..1659e6f9db 100644
--- a/clients/python/agenta_client/workspaces/client.py
+++ b/clients/python/agenta_client/workspaces/client.py
@@ -203,7 +203,7 @@ def get_all_workspace_roles(self, *, request_options: typing.Optional[RequestOpt
Returns a list of all available workspace roles.
Returns:
- List[WorkspaceRoleResponse]: A list of WorkspaceRole objects representing the available workspace roles.
+ List[WorkspaceRoleResponse]: A list of DefaultRole objects representing the available workspace roles.
Raises:
HTTPException: If an error occurs while retrieving the workspace roles.
@@ -491,7 +491,7 @@ async def get_all_workspace_roles(self, *, request_options: typing.Optional[Requ
Returns a list of all available workspace roles.
Returns:
- List[WorkspaceRoleResponse]: A list of WorkspaceRole objects representing the available workspace roles.
+ List[WorkspaceRoleResponse]: A list of DefaultRole objects representing the available workspace roles.
Raises:
HTTPException: If an error occurs while retrieving the workspace roles.
diff --git a/clients/python/agenta_client/workspaces/raw_client.py b/clients/python/agenta_client/workspaces/raw_client.py
index 2f329cf079..5e5ccf4567 100644
--- a/clients/python/agenta_client/workspaces/raw_client.py
+++ b/clients/python/agenta_client/workspaces/raw_client.py
@@ -244,7 +244,7 @@ def get_all_workspace_roles(self, *, request_options: typing.Optional[RequestOpt
Returns a list of all available workspace roles.
Returns:
- List[WorkspaceRoleResponse]: A list of WorkspaceRole objects representing the available workspace roles.
+ List[WorkspaceRoleResponse]: A list of DefaultRole objects representing the available workspace roles.
Raises:
HTTPException: If an error occurs while retrieving the workspace roles.
@@ -556,7 +556,7 @@ async def get_all_workspace_roles(self, *, request_options: typing.Optional[Requ
Returns a list of all available workspace roles.
Returns:
- List[WorkspaceRoleResponse]: A list of WorkspaceRole objects representing the available workspace roles.
+ List[WorkspaceRoleResponse]: A list of DefaultRole objects representing the available workspace roles.
Raises:
HTTPException: If an error occurs while retrieving the workspace roles.
diff --git a/clients/python/uv.lock b/clients/python/uv.lock
index ca0ce1dac1..eb0b72ac57 100644
--- a/clients/python/uv.lock
+++ b/clients/python/uv.lock
@@ -87,11 +87,11 @@ wheels = [
[[package]]
name = "idna"
-version = "3.17"
+version = "3.18"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/b9/28/99c51f664567218d824af024c0251650fb27e4ca066df188dab0769c5b91/idna-3.17.tar.gz", hash = "sha256:5eb0cb53bc467c12eadcf6de83163ad8527cec9416f44b9b61b19caedad2b87f", size = 196048, upload-time = "2026-05-28T14:32:38.55Z" }
+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/de/a7/f76514cc40ad6234098ecdebda08732d75964776c51a42845b7da10649e2/idna-3.17-py3-none-any.whl", hash = "sha256:466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c", size = 65316, upload-time = "2026-05-28T14:32:37.035Z" },
+ { 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]]
diff --git a/docs/design/unified-eval-loops/sdk-vs-api.md b/docs/design/unified-eval-loops/sdk-vs-api.md
new file mode 100644
index 0000000000..0b3f979970
--- /dev/null
+++ b/docs/design/unified-eval-loops/sdk-vs-api.md
@@ -0,0 +1,123 @@
+# SDK vs API: evaluation subsystem comparison
+
+Snapshot **after** the unification + batching work (Option A: the API re-execute
+path now issues one `process_sources` call over all scenarios, matching the SDK
+and the design's `process_slice(all scenarios)`).
+
+The headline: **the engine is one shared code object, not two implementations.**
+The API package imports the SDK's `process_sources`, `EvaluationPlanner`,
+`runtime.models`, `runtime.topology`, and the adapter protocols directly. The
+question is therefore which *seams* each side fills the same, similarly, or
+differently — not "do they reimplement each other."
+
+Key files:
+- Engine (shared): `sdks/python/agenta/sdk/evaluations/runtime/{processor,planner,topology,models,executor}.py`
+- SDK driver: `sdks/python/agenta/sdk/evaluations/{preview/evaluate.py, runtime/executor.py, runtime/adapters.py}` + clients `{runs,scenarios,results,metrics}.py`
+- API driver: `api/oss/src/core/evaluations/{tasks/processor.py, tasks/run.py, runtime/adapters.py, runtime/tensor.py}`
+
+---
+
+## 1. EQUAL — one shared code object
+
+Imported from the SDK package; there is no API copy. A change here changes both
+paths at once.
+
+| Component | File |
+|---|---|
+| `process_sources` (the engine) — per-scenario `gather` + semaphore, cell planning/execution, retries, inline `refresh_metrics(scenario_id)` + end-of-slice `refresh_metrics(run_id, None)`, in-loop `edit_scenario` status write | `runtime/processor.py` |
+| `EvaluationPlanner.plan` — cell graph (scenario × step × repeat) | `runtime/planner.py` |
+| `scenario_status` / `run_status` — verdict ranking (ERRORS > PENDING > SUCCESS; run = ERRORS/RUNNING/SUCCESS) | `runtime/processor.py` |
+| `classify_steps_topology` | `runtime/topology.py` |
+| `ResolvedSourceItem`, `PlannedCell`, `EvaluationStep`, `TensorSlice`, `WorkflowExecution*`, `ResultLogRequest`, `ProcessSummary` | `runtime/models.py` |
+| `DEFAULT_BATCH_SIZE = 10` (default in-slice concurrency) | `runtime/processor.py` |
+| Adapter protocols: `ResultSetter.set`, `RefreshMetrics`, `EditScenario`, `CreateScenario`, `TraceLoader`, `WorkflowRunner` | `runtime/executor.py` |
+| **Engine call shape: ONE slice over all scenarios** (post-Option-A; was API-divergent) | both drivers |
+| **Scenario-factory shape: ordered, lock-guarded cursor** (`_PreMintedScenarios` / `_OrderedScenarios`) | both drivers |
+
+Consequence: lifecycle logging (`[SLICE]/[SCENARIO]/[STEP]/[METRICS]`), concurrency
+model, status computation, and metric-refresh *shape* are identical because they
+are the same code.
+
+---
+
+## 2. SIMILAR BUT DIFFERENT — mirrored adapters (same protocol, different backend)
+
+Each side injects a named adapter class implementing a shared protocol. **SDK
+adapters are HTTP clients; API adapters are in-process service calls.**
+
+| Seam (protocol) | SDK | API | Difference |
+|---|---|---|---|
+| Workflow runner | `SDKWorkflowRunner` → `invoke_application`/`invoke_evaluator` **decorators in-process** | `APIWorkflowRunner` → `workflows_service.invoke_workflow` **HTTP**, wrapped by `APICachedRunner` (hashed-trace reuse) | SDK runs the user's local Python; API calls the workflow service. **`execute_batch` is now concurrent + semaphore-bounded on BOTH** (the SDK was sequential pre-fix). |
+| Result setter (`.set`) | `SDKResultSetter` → `apopulate(results=[cell])` (`POST /simple/evaluations/{id}/populate`) | `APIResultSetter` → `evaluations_service.set_results([cell])` | Both **live per-cell**. API binds `timestamp`/`interval` at construction; SDK has no temporal axis. |
+| Metrics refresh | `SDKMetricsRefresher` → `arefresh(run_id, scenario_id?)` (`POST /evaluations/metrics/refresh`) | `APIMetricsRefresher` → `evaluations_service.refresh_metrics(...)` | Same two engine calls (variational per scenario, global at end). API adapter also handles **temporal** buckets (timestamps+interval) and rejects scenario+timestamp; SDK is scenario-or-global only. |
+| Scenario editor (`edit_scenario`) | `SDKScenarioEditor` → `aedit_scenario(scenario_id, status, tags, meta)` (`PATCH /evaluations/scenarios/{id}`) | `APIScenarioEditor` → `evaluations_service.edit_scenario(EvaluationScenarioEdit(...))` | Both carry `tags`/`meta` and tolerate a run closed mid-flight (SDK: HTTP 409 → None; API: `except EvaluationClosedConflict`). |
+| Trace fetcher (`fetch_trace`) | `SDKTraceFetcher` → `afetch_trace` | `APITraceFetcher` → `fetch_trace(tracing_service, ...)` | Same callable contract; different fetch backend. |
+| Scenario factory (`create_scenario`) | `_PreMintedScenarios` cursor over bulk-minted scenarios | `_OrderedScenarios` cursor over recovered scenarios | Same shape now (both ordered, lock-guarded cursors over a pre-collected list). |
+| Run create / close | `acreate`/`aclose` (HTTP) | `evaluations_service.create_run`/`edit_run` (in-process) | SDK is an HTTP client of the same endpoints the API serves internally. |
+
+Pattern: same protocol, SDK = HTTP-client / API = in-process-service. The
+`SDK*`/`API*` class names are intentional peers.
+
+---
+
+## 3. DIFFERENT — genuine structural divergence (mostly API-only capability)
+
+| Aspect | SDK | API |
+|---|---|---|
+| Driver | `process_run_locally` — value-resolved, single-shot, in-process `await` | `APISliceProcessor.process` — run-resolved, worker-driven |
+| Entity resolution | in the caller (`evaluate.py` → revision ids; `executor._retrieve_revisions` → objects) | inside `process` (`_resolve_runners_and_revisions`), from the persisted run graph |
+| Re-execution / retry | none (always mint fresh, run once) | first-class: `TensorSlice` (scenario_ids × step_keys × repeat_idxs), `process_mode: fill-missing\|force`, `seed_bindings`, reuse counting, `_cell_is_addressed`, per-scenario source recovery from input cells |
+| Run finalization | `aclose(status=run_status.value)` — single inline driver, no floor | `_finalize_run_after_slice` — re-fetch current run, severity-floor across concurrent slices, flip `is_active`, tolerate closed-run |
+| Liveness / temporal | absent (batch only) | `is_live`, scheduler re-ticks (`newest`/`oldest` windows), temporal metric buckets, run stays RUNNING |
+| Worker orchestration | none (library call) | Taskiq tasks, `_with_job_lock(allow_concurrency=...)` (singleton for `run_from_source`, per-job for `run_from_batch`/`rerun`), heartbeat |
+| Tensor ops | uses `populate` + `process` + `refresh` only | all five: `probe`, `populate`, `process`, `prune`, `refresh` |
+| Queue / online | none | `SimpleQueueSettings` / `EvaluationQueueData` — user assignment, `batch_size`/`batch_offset` |
+| Metrics read-back | `aquery_global` for the `aevaluate` return (`{run, scenarios, metrics}`) | none (worker writes only; consumed via UI/API) |
+| Aggregate refresh | engine's end-of-slice global only | `tensor.refresh`: variational + temporal-or-global by `is_live` |
+
+---
+
+## 4. Flow taxonomy — three orthogonal axes (API)
+
+"Live / batch / source / slice" are not one list; they are three independent axes
+that combine into the topology dispatches.
+
+| Axis | Values | Controls |
+|---|---|---|
+| **Source** | source-ingest (testset/query → mint) · direct-batch (explicit trace/testcase ids → mint) · slice-reexecute (existing scenarios, recover from cells) | where scenarios/inputs come from |
+| **Liveness** | batch (`is_live=False`: one-shot, global metrics, finalizes) · live (`is_live=True`: scheduler re-ticks, temporal buckets, stays RUNNING) | temporal semantics |
+| **Process mode** | `force` (ingest: fill all cells) · `fill-missing` (retry: only empty cells) | re-execution strategy |
+
+Entry points (`tasks/run.py`): `run_from_source` (topology-dispatched: `live_query`,
+`batch_query`, `batch_testset`, `batch_invocation`, `queue_*`), `run_from_batch`
+(direct id batches into open queue runs), `rerun` (slice re-execute by coordinate;
+owns the `tensor.refresh` boundary).
+
+**The SDK implements exactly one cell of this matrix:** `batch · source-ingest ·
+force` — the `batch_testset` shape (testset → app → evaluator), single-shot. Everything
+live, query, queue, retry, and worker-orchestration is API-only by design. The SDK
+is a thin in-process client of one flow, sharing the engine + planner + topology
+classifier + `TensorSlice` model but not the orchestration around them.
+
+---
+
+## 5. What Option A changed
+
+Before: the API looped per scenario into the engine on **every** path (ingest and
+re-execute), so cross-scenario concurrency never materialized (a 100-scenario run
+ran serially; each `process_sources` call got a fresh semaphore used only for one
+scenario's repeats).
+
+After: `APISliceProcessor.process` does a **recovery pass** (per scenario: resolve
+source, compute addressed/target cells + reuse, recover upstream context) then a
+**single** `_run_sdk_source_slice` over all scenarios with:
+- an ordered cursor `create_scenario` (`_OrderedScenarios`),
+- a per-`(scenario, cell)` `plan_cell_filter` (keyed by `cell.scenario_id`),
+- a per-scenario `initial_context_by_repeat` **callable** (lazy, memory-bounded —
+ the engine resolves each scenario's recovered context under the `gather`).
+
+This closed the last two SDK/API divergences in the shared cell (engine call shape,
+scenario factory) and gives the API cross-scenario concurrency, bounded by the same
+`batch_size` semaphore. `timestamp`/`interval` are constant per call (verified:
+ingest seeds one value; rerun passes None), so no per-scenario threading was needed
+for them.
diff --git a/docs/designs/access-controls-refactor-plan.md b/docs/designs/access-controls-refactor-plan.md
new file mode 100644
index 0000000000..ce557a1771
--- /dev/null
+++ b/docs/designs/access-controls-refactor-plan.md
@@ -0,0 +1,214 @@
+# Access / Entitlements / Permissions Refactor — Migration Plan
+
+Status: PROPOSED (no edits applied). For review before execution.
+
+## Goal (per user)
+
+Restructure the EE access surface so concerns are cleanly separated:
+
+- `core/access/controls.py` — **shared** build/orchestration: env loading,
+ `_build_controls()`, the singleton, `controls_hash`, shared validators/schemas.
+ **Depends on** `entitlements/controls.py` + `permissions/controls.py` (one-way,
+ downward — `access` is the composition layer on top).
+- `core/entitlements/controls.py` — **plans only**: plan/quota/counter/gauge/
+ throttle parsing + overlays + `get_plan*` accessors.
+- `core/permissions/controls.py` — **roles only**: role builders/parsers/overlays
+ + `get_role*` accessors.
+- Move `utils/entitlements.py` + `utils/permissions.py` into `core/` (they are
+ stateful service layers, not utils).
+
+Dependency direction (no cycles):
+```
+core/{entitlements,permissions}/types.py (leaf types)
+ ▲
+core/entitlements/controls.py (plans) core/permissions/controls.py (roles)
+ ▲ ▲
+ └───────────────┬────────────────────────┘
+ core/access/controls.py (shared build + singleton + hash)
+ ▲
+ utils/* (services) , apis/fastapi/access/router.py , db_manager_ee, ...
+```
+
+## Current `entitlements/controls.py` function inventory (single file today)
+
+PLAN cluster:
+- `_PlanOverride` (47), `_default_plans` (76), `_validate_flag_key` (82),
+ `_validate_counter_key` (89), `_validate_gauge_key` (96),
+ `_parse_plans_override` (103)
+- `_ThrottleOverlay` (565), `_DefaultPlanOverlay` (578), `_merge_quota` (591),
+ `_merge_throttle` (602), `_parse_default_plan_overlay` (614),
+ `_apply_default_plan_overlay` (646), `_resolve_default_plan_slug` (721)
+- accessors: `get_plans` (812), `get_plan` (817), `get_plan_entitlements` (824),
+ `get_plan_description` (831)
+- `_DEFAULT_PLAN_DESCRIPTIONS` (module-level, near _default_plans)
+
+ROLE cluster:
+- `_RoleOverride` (57), `_read_only_permissions` (165),
+ `_viewer_permissions_for_scope` (175), `_admin_permissions_for_scope` (186),
+ `_minima_for` (197), `_default_roles` (236), `_parse_roles_override` (280),
+ `_RoleOverlayEntry` (413), `_parse_roles_overlay` (426),
+ `_apply_roles_overlay` (506)
+- accessors: `get_roles` (838), `get_role` (845), `get_role_permissions` (853),
+ `get_role_description` (861)
+
+SHARED:
+- `_validate_permission` (270) — used by role parsers; depends on `Permission`.
+ (Move to permissions/controls.py — it is role/permission-only despite the name.)
+- `_build_controls` (740) — orchestrates plan+role parse+overlay, builds the
+ combined `controls_hash`, logs sources.
+- singleton: `_PLANS, _PLAN_DESCRIPTIONS, _ROLES, _CONTROLS_HASH = _build_controls()` (804)
+- `get_controls_hash` (868)
+- imports: `env`, `hashlib`, `dumps`, pydantic; `entitlements.types` (Tracker,
+ Flag, Counter, Gauge, DEFAULT_ENTITLEMENTS, DefaultPlan, OWNER_PERMISSIONS,
+ Quota, SCOPES, Throttle); `permissions.types` (Permission, DefaultRole, RequiredRole)
+
+Verdict: plan and role clusters have **zero cross-calls**. Only `_build_controls`
++ the shared `controls_hash` + `SCOPES` couple them. Clean to split.
+
+## Target module contents
+
+### `core/entitlements/controls.py` (plans)
+- All PLAN-cluster functions above.
+- New internal: `build_plan_controls() -> (plans, descriptions)` — does the
+ env-or-default + plan-overlay logic currently inlined in `_build_controls`
+ lines 746-766.
+- Public `get_plan*` accessors read a module-level `_PLANS`/`_PLAN_DESCRIPTIONS`
+ populated by `access/controls.py` via a registration hook (see "singleton"
+ below) OR keep accessors in access/controls.py. **Decision needed — see Q1.**
+- Imports `entitlements.types` only. No permissions import.
+
+### `core/permissions/controls.py` (roles)
+- All ROLE-cluster functions + `_validate_permission`.
+- New internal: `build_role_controls() -> roles` — env-or-default + role-overlay
+ logic currently inlined in `_build_controls` lines 768-779.
+- Public `get_role*` accessors. Same singleton question (Q1).
+- Imports `permissions.types` (+ `SCOPES`, `OWNER_PERMISSIONS` from
+ entitlements.types — note this is a small permissions→entitlements.types dep;
+ acceptable since types are leaf. Alternatively move `SCOPES`/`OWNER_PERMISSIONS`
+ to a neutral spot — see Q2).
+
+### `core/access/controls.py` (shared orchestration)
+- `_build_controls()` — calls `build_plan_controls()` + `build_role_controls()`,
+ computes the combined `controls_hash`, logs sources.
+- The singleton init.
+- `get_controls_hash()`.
+- Imports BOTH `entitlements.controls` and `permissions.controls`.
+
+### `utils/ → core/` service move
+- `utils/entitlements.py` → `core/entitlements/service.py`
+ (NOTE: an `entitlements/service.py` was just deleted — the dead
+ `EntitlementsService`. This new file is the *check_entitlements* service, a
+ different thing. Name ok, or use `core/entitlements/checks.py` — see Q3.)
+- `utils/permissions.py` → `core/permissions/service.py` (or `checks.py`).
+
+## The singleton question (Q1 — the crux)
+
+Today: `get_plans`/`get_roles` read module-level `_PLANS`/`_ROLES` built at import
+of `controls.py`. If plans/roles accessors live in their *own* modules but the
+build is orchestrated in `access/controls.py`, the accessor modules can't build
+their own singletons (they'd each only know their half, and env-override parsing
++ hashing is centralized).
+
+Two clean designs:
+
+- **(A) Accessors stay with the data, access registers into them.**
+ `entitlements/controls.py` owns `_PLANS` + `get_plan*`; `permissions/controls.py`
+ owns `_ROLES` + `get_role*`. Each exposes `build_*_controls()` (pure, no global)
+ AND a `register_*_controls(...)` setter. `access/controls.py` at import calls
+ build for both, computes hash, then registers each half into its module +
+ stores the hash. Accessors raise if not yet registered.
+ - Pro: accessors live with their domain; clean reads.
+ - Con: import order matters — *something* must import `access/controls.py` at
+ startup before any accessor is called. Today that is implicit (importing
+ controls.py runs the build). Need an explicit bootstrap call (mirrors how
+ `utils/entitlements.py` already does `register_entitlements_services`).
+
+- **(B) access/controls.py owns the singleton AND all accessors.**
+ `entitlements/controls.py` + `permissions/controls.py` are pure (build + parse,
+ no globals). `access/controls.py` builds, holds `_PLANS`/`_ROLES`/`_HASH`, and
+ exposes ALL accessors (`get_plans`, `get_roles`, ...). Every importer switches
+ to `from ee.src.core.access.controls import get_plans/get_roles/...`.
+ - Pro: one singleton, one build, no registration hook, no import-order trap
+ (importing access.controls runs the build, exactly like today).
+ - Con: accessors live in `access`, not in their domain module. But that is
+ arguably correct — they read the *combined effective* controls, which is an
+ access-layer concern. entitlements/permissions controls.py become pure
+ builder/parser libraries.
+
+**Recommendation: (B).** It preserves today's "import runs the build" semantics
+(no new bootstrap-order bug), keeps the split pure, and matches the existing
+`apis/fastapi/access/` framing (access = the combined surface). entitlements/
+permissions `controls.py` become stateless builders; `access/controls.py` is the
+stateful composition root. This is also the lowest-cycle-risk design.
+
+## Open questions for sign-off
+
+- **Q1 (singleton design):** A (register into domain modules) vs **B (access owns
+ singleton + all accessors)**. Recommend B.
+- **Q2 (`SCOPES`/`OWNER_PERMISSIONS` location):** they sit in `entitlements.types`
+ but are permission/role concepts. Leave (small types-level dep from permissions
+ → entitlements.types), or move to `permissions.types` / a neutral `access.types`?
+ Recommend: leave for now (types are leaf, no cycle); revisit later.
+- **Q3 (service file naming):** `core/{entitlements,permissions}/service.py` vs
+ `checks.py`. `service.py` collides conceptually with the just-deleted
+ EntitlementsService; `checks.py` is more descriptive (`check_entitlements`,
+ `check_action_access`). Recommend `service.py` (domain convention) — the
+ collision was a *deleted* file, so no real clash.
+- **Q4 (scope):** do utils→core move in the SAME change as the controls split, or
+ separate? The controls split is ~15 accessor importers; the utils move is
+ ~24 (entitlements) + ~30 (permissions) + worker entrypoints. Recommend
+ **two separate changes**: (1) controls split, (2) utils→core move.
+
+## Blast radius (importer rewrites)
+
+Controls split (design B — all accessors move to `access.controls`):
+- Plan-accessor importers (6): billing/router, tracing/service, subscriptions/
+ settings, events/service, throttling, utils/entitlements.
+- Role-accessor importers (5): oss workspace_router, oss organization_router,
+ ee workspace_router, utils/permissions, workspace_manager.
+- `get_plan_description` + `get_plans`/`get_roles` in access/router (1).
+- db_manager_ee (imports get_roles? — it imports from entitlements.controls; check).
+- `test_controls_env_override.py`: ~28 in-string imports (`from
+ ...entitlements.controls import get_plans/get_roles/...`) → rewrite to
+ `...access.controls`.
+
+utils→core move:
+- `utils/entitlements.py`: 24 importer files.
+- `utils/permissions.py`: 30 importer files.
+- plus worker entrypoints referencing `bootstrap_entitlements_services`.
+
+## Execution order (proposed)
+
+Change 1 — controls split (design B):
+1. Create `core/entitlements/controls.py` content = pure plan builder/parser
+ (`build_plan_controls`, `_parse_plans_override`, overlays, `_default_plans`,
+ `_DEFAULT_PLAN_DESCRIPTIONS`). No globals, no accessors.
+2. Create `core/permissions/controls.py` = pure role builder/parser
+ (`build_role_controls`, role parsers/overlays/minima, `_validate_permission`).
+ No globals, no accessors.
+3. Create `core/access/controls.py` = imports both, `_build_controls()`,
+ singleton, ALL accessors (`get_plans/get_plan*/get_roles/get_role*`),
+ `get_controls_hash`.
+4. Delete the role/plan logic from the old `entitlements/controls.py` (file
+ becomes the pure-plan module from step 1).
+5. Rewire ~15 accessor importers + the test's in-string imports → `access.controls`.
+6. Verify: ruff + per-file tests (test_access_controls, test_controls_env_override).
+
+Change 2 — utils→core service move (separate):
+1. `git mv utils/entitlements.py core/entitlements/service.py`,
+ `git mv utils/permissions.py core/permissions/service.py`.
+2. Rewire ~54 importers + worker entrypoints.
+3. Verify.
+
+## Risks
+
+- **Import-order / cycle:** design B avoids the bootstrap-order trap. Confirm
+ `access.controls` importing both domain controls creates no cycle (it won't:
+ domain controls import only `*.types`, which import nothing).
+- **The combined `controls_hash`** stays unified (computed in access) — no
+ behavior change.
+- **Large importer churn**, esp. the utils move (~54 files) and the test file's
+ 28 in-string imports — mechanical but wide; do with sed + per-file verify.
+- **Working tree already large/uncommitted** — recommend committing current
+ session work before Change 1, and doing Change 1 and Change 2 as separate
+ commits.
diff --git a/docs/designs/dynamic-access-and-billing/findings.md b/docs/designs/dynamic-access-and-billing/findings.md
index f0190cee35..bc420e1925 100644
--- a/docs/designs/dynamic-access-and-billing/findings.md
+++ b/docs/designs/dynamic-access-and-billing/findings.md
@@ -29,7 +29,7 @@ Initial scan surfaced 13 findings: one P0 (project-scope RBAC regression), four
- **Closed (sixth sync pass — Copilot review at `91a60dd6`):** FIND-030 (P3, `wontfix` — the every-minute echo is an intentional cron-alive heartbeat present in both `events.txt` and `spans.txt`, not a leftover; Copilot misread it as debug code), FIND-031 (P3, fixed — added explicit `if not plan:` guard in the Stripe webhook handler so missing metadata returns a clear "Missing plan metadata on Stripe event" 400 instead of `Unknown plan 'None'`), FIND-032 (P2, fixed — removed the two `AGENTA_BILLING_TRIAL_*` env-var rows + the "Trial vars" sub-section from `research.md` and replaced with the per-pricing-entry `{trial: N}` marker, matching what shipped), FIND-033 (P3, `wontfix` — the wildcard-discards-extras behavior is correct: `owner = ["*"]` means everything; mixed inputs would be redundant, and non-enum slugs are filtered upstream at the access-controls boundary), FIND-034 (P3, `wontfix` — Pydantic evaluates field defaults at class-body time; the resulting parsed dict is a singleton, but no code mutates `EnvironSettings` instances so the latent mutability concern is theoretical), FIND-035 (P3, fixed by adding a one-line comment documenting that the warn-once flags race-but-don't-break; Copilot's `lru_cache` / logging-filter alternatives are deferred — the actual once-per-process semantics already work).
- **Closed (docs style pass):** FIND-026 (P2, roles-overlay docs now lead with a deployment-wide root-slug shape instead of public `project` targeting), FIND-027 (P3, redundant default-plan overlay merge-semantics table removed), FIND-028 (P3, `Retention` enum reference table removed from operator docs), FIND-029 (P3, implementation-heavy reference section removed and the page trimmed toward the neighboring self-host how-to style).
- **Closed (PR #4330 + migration audit):** FIND-014 (P2, design-doc retention defaults updated to match shipped code), FIND-015 (P3, override-vs-overlay terminology tightened in MDX), FIND-016 (P1, acceptance tests fixed by renaming `member`→`viewer`), FIND-017 (P2, `assert` replaced with explicit `if/raise EventException` in trial-checkout), FIND-018 (P3, `_normalize_pricing_entry` now rejects empty `{}` with a slug-pointing error; covered by new unit test), FIND-019 (P3, `existing_type=sa.String()` threaded through both `alter_column` calls in the member→viewer migration), FIND-020 (P0, EE `core` migration tree fork resolved by chaining `a1b2c3d4e5f7` after `9d3e8f0a1b2c`).
-- **Closed (earlier sync passes):** FIND-021 (P1, `STRIPE_METER_NAMES` mapping added in `entitlements/types.py`; `meters/service.py` looks up event name + price via the mapping with a skip-path log; `subscriptions/settings.py` switched to flat pricing shape with operator-owned `traces` / `users` slot names plus reserved `free` / `trial` markers; `migrate_stripe_pricing.py` rewritten as an annotation helper for `free` / `trial`), FIND-022 (P3, mechanical `Counter.EVENTS` → `Counter.EVENTS_INGESTED` and `Counter.TRACES` → `Counter.TRACES_INGESTED` rename across `data-retention/README.md`, `data-retention/data-retention-periods.initial.specs.md`, and `ee-self-hosting/research.md`), FIND-023 (P2, `test_access_controls.py` fixture and tests migrated to `Counter.TRACES_INGESTED` / `Period.MONTHLY` / `Retention.MONTHLY` / `Flag.ACCESS`; 61/61 pass), FIND-024 (P3, Copilot-flagged stale `scripts/migrate_stripe_pricing.py` path in a validator error message — already resolved as a side-effect of the FIND-021 pricing rewrite; verified `grep` returns no matches), FIND-025 (P3, Copilot-flagged stale `Revises: e6f7a8b9c0d1` docstring header on `a1b2c3d4e5f7_unify_org_member_role_to_viewer.py` left over from the FIND-020 rebase — docstring updated to `Revises: 9d3e8f0a1b2c` to match `down_revision`).
+- **Closed (earlier sync passes):** FIND-021 (P1, `REPORTS` mapping added in `entitlements/types.py`; `meters/service.py` looks up event name + price via the mapping with a skip-path log; `subscriptions/settings.py` switched to flat pricing shape with operator-owned `traces` / `users` slot names plus reserved `free` / `trial` markers; `migrate_stripe_pricing.py` rewritten as an annotation helper for `free` / `trial`), FIND-022 (P3, mechanical `Counter.EVENTS` → `Counter.EVENTS_INGESTED` and `Counter.TRACES` → `Counter.TRACES_INGESTED` rename across `data-retention/README.md`, `data-retention/data-retention-periods.initial.specs.md`, and `ee-self-hosting/research.md`), FIND-023 (P2, `test_access_controls.py` fixture and tests migrated to `Counter.TRACES_INGESTED` / `Period.MONTHLY` / `Retention.MONTHLY` / `Flag.ACCESS`; 61/61 pass), FIND-024 (P3, Copilot-flagged stale `scripts/migrate_stripe_pricing.py` path in a validator error message — already resolved as a side-effect of the FIND-021 pricing rewrite; verified `grep` returns no matches), FIND-025 (P3, Copilot-flagged stale `Revises: e6f7a8b9c0d1` docstring header on `a1b2c3d4e5f7_unify_org_member_role_to_viewer.py` left over from the FIND-020 rebase — docstring updated to `Revises: 9d3e8f0a1b2c` to match `down_revision`).
EE unit suite green after the prior fixes: `test_access_controls.py` 61/61, `test_billing_settings.py` + `test_controls_env_override.py` 83/83. The three fixes from this pass (FIND-031 Stripe-event guard, FIND-032 doc cleanup, FIND-035 comment) are localized and don't change behavior beyond the failure messages.
@@ -325,7 +325,7 @@ _None._
# The Stripe-side names are operator-owned (configured once on the Stripe
# dashboard); changing an internal Counter value here does not require any
# Stripe-dashboard change.
- STRIPE_METER_NAMES: dict[str, str] = {
+ REPORTS: dict[str, str] = {
Counter.TRACES_INGESTED.value: "traces",
Gauge.USERS.value: "users",
# Add a row here when a new counter/gauge becomes Stripe-reportable
@@ -335,14 +335,14 @@ _None._
```
- Use the mapping in two places:
- 1. [meters/service.py:250](../../../api/ee/src/core/meters/service.py#L250) — `event_name = STRIPE_METER_NAMES[meter.key.value]` (with a clear `KeyError` → `[report] Skipping ... no Stripe meter mapping` log line that falls through the existing skipped-meter path).
- 2. [subscriptions/settings.py](../../../api/ee/src/core/subscriptions/settings.py) — change `_VALID_METER_KEYS` to use `set(STRIPE_METER_NAMES.values())` (the **Stripe-side** names) instead of `{c.value for c in Counter} | {g.value for g in Gauge}`. The operator's `AGENTA_BILLING_PRICING.stripe.meters..price` is then keyed on Stripe-side names (matching what they configured on Stripe), and `get_stripe_meter_price(plan, meter.key.value)` does the lookup via `STRIPE_METER_NAMES[meter.key.value]`.
+ 1. [meters/service.py:250](../../../api/ee/src/core/meters/service.py#L250) — `event_name = REPORTS[meter.key.value]` (with a clear `KeyError` → `[report] Skipping ... no Stripe meter mapping` log line that falls through the existing skipped-meter path).
+ 2. [subscriptions/settings.py](../../../api/ee/src/core/subscriptions/settings.py) — change `_VALID_METER_KEYS` to use `set(REPORTS.values())` (the **Stripe-side** names) instead of `{c.value for c in Counter} | {g.value for g in Gauge}`. The operator's `AGENTA_BILLING_PRICING.stripe.meters..price` is then keyed on Stripe-side names (matching what they configured on Stripe), and `get_stripe_meter_price(plan, meter.key.value)` does the lookup via `REPORTS[meter.key.value]`.
- Update the converter at [migrate_stripe_pricing.py](migrate_stripe_pricing.py) to be a no-op transform on the meter slot-names — it reads `"traces"` and writes `"traces"`, no remap needed because the schema now agrees with the Stripe-side names. Tighten the script's docstring to reflect this.
- - Update the operator docs at [04-dynamic-access-controls.mdx](../../docs/self-host/04-dynamic-access-controls.mdx) and [05-dynamic-billing-settings.mdx](../../docs/self-host/05-dynamic-billing-settings.mdx) to document that the `stripe.meters` keys are the **Stripe-side meter event names**, not the internal Counter slugs, and that the set of valid keys is determined by the `STRIPE_METER_NAMES` table.
+ - Update the operator docs at [04-dynamic-access-controls.mdx](../../docs/self-host/04-dynamic-access-controls.mdx) and [05-dynamic-billing-settings.mdx](../../docs/self-host/05-dynamic-billing-settings.mdx) to document that the `stripe.meters` keys are the **Stripe-side meter event names**, not the internal Counter slugs, and that the set of valid keys is determined by the `REPORTS` table.
- Alternatives:
- Rename the Stripe-side meters on every operator's Stripe dashboard to match the new internal slug (`"traces"` → `"traces_ingested"`). Rejected: operationally invasive, requires coordinated downtime per deployment, and any future internal rename would require the same dance again.
- Make the mapping operator-configurable per plan via an extra `stripe.meters..event_name` field. Could be added later as a layer on top of the global default if any deployment needs to override the canonical map; not required for the initial fix.
-- Resolution: Applied the user-suggested mapping plus the broader pricing reshape that fell out of the conversation. `STRIPE_METER_NAMES: dict[str, str]` added at module scope in [`entitlements/types.py`](../../../api/ee/src/core/entitlements/types.py) keying internal Counter/Gauge values to Stripe-side meter event names (`Counter.TRACES_INGESTED.value` → `"traces"`, `Gauge.USERS.value` → `"users"`). Runtime in [`meters/service.py`](../../../api/ee/src/core/meters/service.py) uses `STRIPE_METER_NAMES.get(meter.key.value)` for both `event_name` and the price-id lookup, with a clear skip-path log if a meter is not Stripe-reportable. [`subscriptions/settings.py`](../../../api/ee/src/core/subscriptions/settings.py) was rewritten to a flat pricing shape mirroring the original `STRIPE_PRICING` (`{slug: {free?, trial?, : {price, quantity?}}}`); slot names are operator-owned and no longer validated against an internal enum, so `"traces"` and `"users"` flow end-to-end. The `AGENTA_BILLING_TRIAL_PLAN` / `AGENTA_BILLING_TRIAL_DAYS` env vars were collapsed into a per-entry `{trial: N}` marker in the pricing dict, and the corresponding fields were dropped from `BillingSettings` in [`api/oss/src/utils/env.py`](../../../api/oss/src/utils/env.py). [`migrate_stripe_pricing.py`](migrate_stripe_pricing.py) was rewritten as a small annotation helper (`annotate(pricing, free_slug, trial)`) that adds the `free` / `trial` markers without touching slot names. Operator-facing billing docs (`05-dynamic-billing-settings.mdx`) were deleted per user direction; access-control docs (`04-dynamic-access-controls.mdx`, `02-configuration.mdx`, both `env.ee.*.example` files) were stripped of all billing / Stripe references.
+- Resolution: Applied the user-suggested mapping plus the broader pricing reshape that fell out of the conversation. `REPORTS: dict[str, str]` added at module scope in [`entitlements/types.py`](../../../api/ee/src/core/entitlements/types.py) keying internal Counter/Gauge values to Stripe-side meter event names (`Counter.TRACES_INGESTED.value` → `"traces"`, `Gauge.USERS.value` → `"users"`). Runtime in [`meters/service.py`](../../../api/ee/src/core/meters/service.py) uses `REPORTS.get(meter.key.value)` for both `event_name` and the price-id lookup, with a clear skip-path log if a meter is not Stripe-reportable. [`subscriptions/settings.py`](../../../api/ee/src/core/subscriptions/settings.py) was rewritten to a flat pricing shape mirroring the original `STRIPE_PRICING` (`{slug: {free?, trial?, : {price, quantity?}}}`); slot names are operator-owned and no longer validated against an internal enum, so `"traces"` and `"users"` flow end-to-end. The `AGENTA_BILLING_TRIAL_PLAN` / `AGENTA_BILLING_TRIAL_DAYS` env vars were collapsed into a per-entry `{trial: N}` marker in the pricing dict, and the corresponding fields were dropped from `BillingSettings` in [`api/oss/src/utils/env.py`](../../../api/oss/src/utils/env.py). [`migrate_stripe_pricing.py`](migrate_stripe_pricing.py) was rewritten as a small annotation helper (`annotate(pricing, free_slug, trial)`) that adds the `free` / `trial` markers without touching slot names. Operator-facing billing docs (`05-dynamic-billing-settings.mdx`) were deleted per user direction; access-control docs (`04-dynamic-access-controls.mdx`, `02-configuration.mdx`, both `env.ee.*.example` files) were stripped of all billing / Stripe references.
- Sources: User-direction ("the Stripe meters and prices are associated to 'traces' not 'traces_ingested'", "maybe add a mapping as a global var", "drop the docs about billing", "drop mentions to BILLING or STRIPE ENV VARS in mdx docs", "drop from .env.example files too"); PR #4330 Copilot review (comment id 3260473541, thread `PRRT_kwDOJbjazM6C5oCs`) flagged the converter-surface symptom of the same root cause.
### FIND-022 — [CLOSED] Stale `Counter.EVENTS.retention` / `Counter.TRACES.retention` references in data-retention design docs
diff --git a/docs/designs/dynamic-access-and-billing/summary.md b/docs/designs/dynamic-access-and-billing/summary.md
index 76589346c2..7bfa7d0f49 100644
--- a/docs/designs/dynamic-access-and-billing/summary.md
+++ b/docs/designs/dynamic-access-and-billing/summary.md
@@ -16,7 +16,7 @@ A second hard cut shipped alongside: **events retention split out of billing**.
**`settings.py` — the billing-settings builder.** `api/ee/src/core/subscriptions/settings.py` parses `AGENTA_BILLING_CATALOG` (list of `_CatalogEntry` Pydantic models with `extra="allow"` so operators can add display-only fields the frontend renders; `type ∈ {"standard", "custom"}` is enforced) and `AGENTA_BILLING_PRICING` (object keyed by plan slug — flat shape `{slug: {free?, trial?, : {price, quantity?}}}` that mirrors the original `STRIPE_PRICING` plus the two reserved markers). Reserved keys are `free` (bool) and `trial` (positive int days); every other key on a pricing entry is a Stripe-side slot name owned by the operator (the same names they used on the Stripe dashboard — typically `"traces"` and `"users"`) and is not validated against an internal enum. Cross-cutting validation runs in `_build_settings()`: every catalog `plan` slug must exist in the effective plan set, every pricing slug must exist in the effective plan set, at most one entry may carry `"free": true`, at most one entry may carry `"trial": N`, the free-plan fallback must be resolvable, and `AGENTA_ACCESS_DEFAULT_PLAN` (when set) must be in the effective plan set. Accessors `get_catalog()`, `get_catalog_plan(slug)`, `get_pricing()`, `get_pricing_plan(slug)`, `get_stripe_line_items(slug)`, `get_stripe_meter_price(plan, meter)`, `get_free_plan()`, `get_trial_plan()`, `get_trial_days()`, `trial_enabled()` are how the billing router, the meter reporting job, the subscription service, and the signup flow read the effective settings. `[billing-settings] catalog=defaults|env pricing=defaults|env free_plan=|None trial=/d|disabled` is logged at startup.
-**Stripe meter name mapping.** Internal `Counter` / `Gauge` slugs (code identifiers) and Stripe-side meter event names (external configuration the operator owns on the Stripe dashboard) are independent surfaces. `api/ee/src/core/entitlements/types.py` carries a single source of truth at module scope: `STRIPE_METER_NAMES: dict[str, str] = {Counter.TRACES_INGESTED.value: "traces", Gauge.USERS.value: "users"}`. The runtime in `meters/service.py` uses `STRIPE_METER_NAMES.get(meter.key.value)` for both the `stripe.billing.MeterEvent.create(event_name=...)` argument and the per-meter price-id lookup; meters not in the map fall through the existing skipped-meter log path with a clear message. The pricing-config slot names in `AGENTA_BILLING_PRICING` agree with the Stripe-side names (operator-owned), so an internal rename of `Counter.TRACES_INGESTED` does not require a coordinated Stripe-dashboard change or an env-var rewrite on every deployment. Adding a new Stripe-reportable counter or gauge requires exactly two edits: add the `Counter` / `Gauge` member to `REPORTS`, and add the row to `STRIPE_METER_NAMES`.
+**Stripe meter name mapping.** Internal `Counter` / `Gauge` slugs (code identifiers) and Stripe-side meter event names (external configuration the operator owns on the Stripe dashboard) are independent surfaces. `api/ee/src/core/entitlements/types.py` carries a single source of truth at module scope: `REPORTS: dict[str, str] = {Counter.TRACES_INGESTED.value: "traces", Gauge.USERS.value: "users"}`. The runtime in `meters/service.py` uses `REPORTS.get(meter.key.value)` for both the `stripe.billing.MeterEvent.create(event_name=...)` argument and the per-meter price-id lookup; meters not in the map fall through the existing skipped-meter log path with a clear message. The pricing-config slot names in `AGENTA_BILLING_PRICING` agree with the Stripe-side names (operator-owned), so an internal rename of `Counter.TRACES_INGESTED` does not require a coordinated Stripe-dashboard change or an env-var rewrite on every deployment. Adding a new Stripe-reportable counter or gauge requires exactly one edit: add the row to `REPORTS` (its key marks the meter reportable, its value is the Stripe-side name).
**Default-plan overlay.** `AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY` lets self-hosted operators tweak individual entitlement values on the default plan without restating the rest. The shape mirrors `_PlanOverride` (`description`, `flags`, `counters`, `gauges`, `throttles`) with one divergence: `throttles` is a map keyed by category slug instead of a list, so per-category patches don't require restating the whole throttle list. Merge semantics — `description` replaces, `flags` per-key replace, `counters`/`gauges` field-merge inside each quota (overlay-set fields replace, omitted fields keep the base; pass `null` to clear), and `throttles[category]` looks up the existing single-category throttle on the base plan and field-merges its `bucket`. Operators who need multi-category or endpoint-keyed throttle changes use `AGENTA_ACCESS_PLANS` instead. Resolution happens after the base plan map is built but before the public dicts are frozen, so all downstream accessors see the merged state.
diff --git a/docs/designs/eval-loops/desired-architecture.md b/docs/designs/eval-loops/desired-architecture.md
deleted file mode 100644
index 56d38165bd..0000000000
--- a/docs/designs/eval-loops/desired-architecture.md
+++ /dev/null
@@ -1,1227 +0,0 @@
-# Evaluation System - Desired Architecture
-
-**Created:** 2026-02-16
-**Status:** Design Proposal
-**Related:** [Current State - Iteration Patterns](./iteration-patterns.md)
-
----
-
-## Executive Summary
-
-This document outlines the desired architecture for the evaluation system, focusing on:
-
-1. **Unification** - SDK loops become the canonical implementation used by both SDK and backend
-2. **Separation of Concerns** - Clear boundaries between graph management, execution, tensor population, and interpretation
-3. **Ports & Adapters** - Dependency injection for persistence, enabling different adapters (API, DAO, JSON) for the same core logic
-4. **Consistency** - Same loops and patterns across human evaluations, auto evaluations, and live evaluations
-
----
-
-## Table of Contents
-
-- [Guiding Principles](#guiding-principles)
-- [Four Concerns](#four-concerns)
-- [Architectural Goals](#architectural-goals)
-- [Ports & Adapters Design](#ports--adapters-design)
-- [Loop Unification Strategy](#loop-unification-strategy)
-- [Execution Modes](#execution-modes)
-- [Migration Path](#migration-path)
-- [Open Questions](#open-questions)
-
----
-
-## Guiding Principles
-
-### 1. Single Source of Truth for Iteration Logic
-
-**Current Problem:**
-- SDK has one set of loops (`sdk/agenta/sdk/evaluations/preview/evaluate.py`)
-- API has different loops (`api/oss/src/core/evaluations/tasks/legacy.py`, `live.py`)
-- Logic duplication and divergence over time
-- Changes must be made in multiple places
-
-**Desired State:**
-- **SDK loops become the canonical implementation**
-- Backend uses the same loops via dependency injection
-- One place to modify iteration logic
-- Guaranteed consistency between SDK and API
-
----
-
-### 2. Separation of Concerns
-
-The evaluation system has **four distinct concerns** that should not be conflated:
-
-| Concern | Responsibility | Should NOT |
-|---------|---------------|------------|
-| **Graph Management** | Create, modify steps (`add_step` / `remove_step`) | Execute the graph or populate results |
-| **Orchestration (`process`)** | Drive execution across a `TensorSlice` | Manage the graph structure or directly store results |
-| **Tensor Interface (`populate` / `probe` / `prune`)** | Write, read, and delete results in the tensor | Execute workflows or interpret data |
-| **Tensor Interpretation** | Analyze and aggregate metrics | Modify the tensor or execute workflows |
-
-**Current Problem:**
-- These concerns are mixed in the same functions
-- Graph execution code also handles persistence
-- Tensor population is tightly coupled to execution
-
-**Desired State:**
-- Clean interfaces between concerns
-- Each concern is independently testable
-- Can swap implementations without affecting others
-
----
-
-### 3. Dependency Injection via Ports & Adapters
-
-**Current Problem:**
-- SDK and API have hardcoded persistence mechanisms
-- SDK makes HTTP calls directly
-- API writes to database directly
-- No way to test without external dependencies
-
-**Desired State:**
-- Core iteration logic is pure (no I/O)
-- Persistence is injected via interfaces (ports)
-- Different adapters for different contexts:
- - **SDK Context:** Adapter calls remote API
- - **Backend Context:** Adapter calls DAO layer
- - **Test Context:** Adapter writes to JSON or in-memory store
-
----
-
-### 4. Consistency Across Evaluation Types
-
-**Current Problem:**
-- Human evaluations use different code than auto evaluations
-- Live evaluations have separate iteration logic
-- Batch evaluations have different patterns
-
-**Desired State:**
-- **Same core loops** for all evaluation types
-- Differences handled through:
- - Configuration (which evaluators to run)
- - Execution mode (batch, live, sliced)
- - Data source (testset, live traces)
-- Consistency reduces bugs and improves maintainability
-
----
-
-## Four Concerns
-
-### 1. Graph Management
-
-**What:** Define and modify the evaluation graph structure
-
-**Responsibilities:**
-- Add/remove steps (`add_step` / `remove_step`) with `type` (input / invocation / annotation) and `origin` (human / custom / auto)
-- Validate graph structure
-- Persist step list in `run.data.steps`
-
-**Operations:**
-```python
-# Graph Management Interface
-class EvaluationGraphManager(Protocol):
- async def add_step(
- self,
- *,
- type: Literal["input", "invocation", "annotation"],
- origin: Literal["human", "custom", "auto"],
- references: dict,
- ) -> Step
-
- async def remove_step(self, *, step_key: str) -> None
- async def get_steps(self, *, run_id: UUID) -> list[Step]
-```
-
-**Impacts on Tensor:**
-- Adding a step adds a column dimension to the tensor
-- Removing a step should be followed by `prune(TensorSlice(steps=[step_key]))` to delete stale results
-- Steps are immutable by reference once added — change = `remove_step` + `add_step`
-
-**Examples:**
-- User adds a new evaluator → `add_step(type="annotation", origin="auto", ...)`
-- User removes an evaluator → `remove_step(step_key=...)` then `prune` stale results
-- User changes evaluator config → new revision = new `step_key`
-
----
-
-### 2. Orchestration (`process`)
-
-**What:** Drive execution across a `TensorSlice` — the implementation of `process`
-
-**Responsibilities:**
-- Resolve which cells of the tensor need work (guided by `TensorSlice` + optional `probe`)
-- Invoke steps in the correct order (topological sort of the step list)
-- Call `populate` for each result produced
-- Handle errors by recording them in results (collect-errors mode — see Decisions)
-- Concurrency model is up to the implementor (sequential, parallel, distributed)
-
-**Operations:**
-```python
-# Orchestration Interface
-class EvaluationOrchestrator(Protocol):
- async def process(
- self,
- *,
- run: EvaluationRun,
- slice: TensorSlice,
- persistence: EvaluationPersistence, # provides populate/probe/prune
- ) -> ProcessSummary
-```
-
-**Execution modes** (all expressed as `process(TensorSlice(...))`):
-- **Full run:** `TensorSlice(scenarios="all", steps="all", repeats="all")`
-- **Live (temporal):** `TensorSlice` scoped to scenarios derived from a trace query window
-- **Targeted re-run:** `TensorSlice(scenarios=[id1, id2], steps=["evaluator-x"])`
-
-**Does NOT:**
-- Persist results directly — delegates to `populate`
-- Modify graph structure
-- Aggregate metrics (delegates to tensor interpretation)
-
----
-
-### 3. Tensor Interface (`populate` / `probe` / `prune`)
-
-**What:** The three primitive operations on tensor cells — the persistence port that `process` depends on
-
-**Responsibilities:**
-- `populate` — write a result for a `(scenario, step, repeat)` cell; result holds a `trace_id` reference and/or an `error` by value
-- `probe` — read results for a `TensorSlice`; used by `process` to skip already-successful cells
-- `prune` — delete results for a `TensorSlice`; used after step removal or to clear stale data
-
-**Operations:**
-```python
-# Tensor Interface (persistence port)
-class EvaluationPersistence(Protocol):
- async def populate(
- self,
- *,
- run_id: UUID,
- scenario_id: UUID,
- step_key: str,
- repeat_idx: int,
- trace_id: Optional[UUID] = None,
- testcase_id: Optional[UUID] = None,
- error: Optional[str] = None,
- ) -> EvaluationResult
-
- async def probe(
- self,
- *,
- run_id: UUID,
- slice: TensorSlice,
- ) -> list[EvaluationResult]
-
- async def prune(
- self,
- *,
- run_id: UUID,
- slice: TensorSlice,
- ) -> int # number of results deleted
-```
-
-**Storage Adapters:**
-- **Remote API Adapter (SDK):** POSTs/queries `/evaluations/results`
-- **DAO Adapter (Backend):** Writes/reads `evaluation_results` table
-- **In-Memory Adapter (Testing):** Stores in dict
-
-**Does NOT:**
-- Execute workflows
-- Aggregate metrics (that's interpretation)
-- Modify graph structure
-
----
-
-### 4. Tensor Interpretation
-
-**What:** Analyze and aggregate results from the tensor
-
-**Responsibilities:**
-- Aggregate metrics across scenarios (mean, p95, etc.)
-- Compute derived metrics
-- Generate metrics tensors (aggregated view)
-- Support different aggregation scopes (run, scenario, temporal)
-
-**Operations:**
-```python
-# Tensor Interpretation Interface
-class EvaluationTensorInterpreter(Protocol):
- async def aggregate_metrics(
- self,
- run_id: Optional[UUID],
- scenario_id: Optional[UUID],
- timestamp: Optional[datetime],
- step_keys: list[str],
- ) -> MetricsBucket
-
- async def get_metrics(
- self,
- scope: AggregationScope,
- ) -> EvaluationMetrics
-
- async def compute_derived_metric(
- self,
- metric_name: str,
- results: list[EvaluationResult],
- ) -> Any
-```
-
-**Aggregation Scopes:**
-- **Run-level:** Aggregate across all scenarios in a run
-- **Scenario-level:** Metrics for a single scenario
-- **Temporal:** Aggregate across time windows (e.g., last hour)
-- **Step-level:** Metrics for a specific step across scenarios
-
-**Does NOT:**
-- Execute workflows
-- Modify results
-- Change graph structure
-
----
-
-## Architectural Goals
-
-### Goal 1: SDK Loops as Canonical Implementation
-
-**Rationale:**
-- SDK loops in `evaluate.py` are cleaner and more recent
-- Better structured with clear separation of testsets → testcases → apps → evaluators
-- Already handles multiple testset revisions, application variants, and evaluators
-- More maintainable than legacy API loops
-
-**Approach:**
-1. Extract SDK loops into a **shared core module**
-2. Make loops **pure functions** (no I/O, side effects injected)
-3. Backend imports and uses the same loops
-4. Persistence injected via adapters
-
-**Example Structure:**
-```
-agenta/
-├── core/
-│ └── evaluations/
-│ ├── engine/
-│ │ ├── graph.py # Graph management
-│ │ ├── executor.py # Graph execution (canonical loops)
-│ │ ├── tensor.py # Tensor population
-│ │ └── metrics.py # Tensor interpretation
-│ └── interfaces/
-│ ├── persistence.py # Ports (protocols)
-│ └── adapters/
-│ ├── api.py # API adapter (SDK uses this)
-│ ├── dao.py # DAO adapter (backend uses this)
-│ └── json.py # JSON adapter (testing uses this)
-```
-
----
-
-### Goal 2: Clean Interfaces via Ports & Adapters
-
-**Port:** Interface (protocol) defining operations
-**Adapter:** Implementation of the port for a specific context
-
-#### Example: Persistence Port
-
-```python
-# Port (interface)
-class EvaluationPersistence(Protocol):
- """Port for persisting evaluation results."""
-
- async def save_scenario(self, scenario: ScenarioCreate) -> Scenario:
- """Save a scenario and return with ID."""
- ...
-
- async def save_result(self, result: ResultCreate) -> EvaluationResult:
- """Save a single result."""
- ...
-
- async def save_results_batch(
- self,
- results: list[ResultCreate],
- ) -> list[EvaluationResult]:
- """Save multiple results in a batch."""
- ...
-
- async def get_result(
- self,
- run_id: UUID,
- scenario_id: UUID,
- step_key: str,
- ) -> Optional[EvaluationResult]:
- """Retrieve a specific result."""
- ...
-```
-
-#### Adapter 1: Remote API (for SDK)
-
-```python
-class RemoteAPIPersistence:
- """Adapter that persists via HTTP calls to backend API."""
-
- def __init__(self, api_client: AgentaAPIClient):
- self.client = api_client
-
- async def save_scenario(self, scenario: ScenarioCreate) -> Scenario:
- response = await self.client.post(
- "/evaluations/scenarios",
- json=scenario.model_dump(),
- )
- return Scenario(**response.json())
-
- async def save_results_batch(
- self,
- results: list[ResultCreate],
- ) -> list[EvaluationResult]:
- response = await self.client.post(
- "/evaluations/results/batch",
- json=[r.model_dump() for r in results],
- )
- return [EvaluationResult(**r) for r in response.json()]
-
- # ... other methods
-```
-
-#### Adapter 2: DAO (for Backend)
-
-```python
-class DAOPersistence:
- """Adapter that persists directly to database via DAO."""
-
- def __init__(self, evaluations_dao: EvaluationsDAO):
- self.dao = evaluations_dao
-
- async def save_scenario(self, scenario: ScenarioCreate) -> Scenario:
- return await self.dao.create_scenario(scenario=scenario)
-
- async def save_results_batch(
- self,
- results: list[ResultCreate],
- ) -> list[EvaluationResult]:
- return await self.dao.create_results(results=results)
-
- # ... other methods
-```
-
-#### Adapter 3: JSON (for Testing)
-
-```python
-class JSONPersistence:
- """Adapter that persists to JSON file for testing."""
-
- def __init__(self, file_path: Path):
- self.file_path = file_path
- self.data = {"scenarios": [], "results": []}
-
- async def save_scenario(self, scenario: ScenarioCreate) -> Scenario:
- scenario_with_id = Scenario(
- id=uuid4(),
- **scenario.model_dump(),
- )
- self.data["scenarios"].append(scenario_with_id.model_dump())
- self._write_to_file()
- return scenario_with_id
-
- async def save_results_batch(
- self,
- results: list[ResultCreate],
- ) -> list[EvaluationResult]:
- results_with_ids = [
- EvaluationResult(id=uuid4(), **r.model_dump())
- for r in results
- ]
- self.data["results"].extend([r.model_dump() for r in results_with_ids])
- self._write_to_file()
- return results_with_ids
-
- def _write_to_file(self):
- with open(self.file_path, "w") as f:
- json.dump(self.data, f, indent=2, default=str)
-
- # ... other methods
-```
-
----
-
-### Goal 3: Loop Unification and Refactoring
-
-#### Current State Analysis
-
-From [iteration-patterns.md](./iteration-patterns.md), we have:
-
-| Component | Loops | Pattern |
-|-----------|-------|---------|
-| SDK | Testsets → Testcases → Apps → Evaluators | 4-level nesting |
-| Legacy API | Testcases → Evaluators | 2-level nesting |
-| Live API | Query Steps → Traces → Evaluators | 3-level nesting |
-
-#### Desired State: Unified Loop Structure
-
-**Single canonical loop structure** that handles all cases:
-
-```python
-async def process(
- *,
- run: EvaluationRun,
- slice: TensorSlice,
- persistence: EvaluationPersistence, # provides populate/probe/prune
-) -> ProcessSummary:
- """
- Canonical process implementation.
-
- Used by:
- - SDK (with RemoteAPIPersistence adapter)
- - Backend batch evaluation (with DAOPersistence adapter)
- - Backend live evaluation (with DAOPersistence adapter)
- - Tests (with InMemoryPersistence adapter)
- """
-
- # 1. Resolve scenarios from slice
- scenarios = await _resolve_scenarios(run, slice)
-
- # 2. For each scenario
- for scenario in scenarios:
- node_outputs = {}
-
- # 3. Execute steps in topological order
- for step in run.data.steps:
- if slice.steps != "all" and step.key not in slice.steps:
- continue
-
- for repeat_idx in _resolve_repeats(slice):
- # Optionally probe to skip already-successful cells
- # (idempotency — collect-errors mode means errors are not skipped)
-
- # Invoke the step (app/evaluator call)
- output = await _invoke_step(step, scenario, node_outputs)
-
- # Populate result
- await persistence.populate(
- run_id=run.id,
- scenario_id=scenario.id,
- step_key=step.key,
- repeat_idx=repeat_idx,
- trace_id=output.trace_id,
- error=output.error,
- )
-
- node_outputs[step.key] = output
-
- return ProcessSummary(...)
-```
-
-**Key Benefits:**
-- **Same loop** for batch, live, sliced execution
-- **Persistence injected** → works in SDK, backend, tests
-- **Graph-based** → supports arbitrary node structures
-- **Clean separation** → execution logic independent of I/O
-
----
-
-#### Refactoring Required
-
-To achieve unification, we need to:
-
-##### 1. **Split Loops**
-
-**Current:** SDK has monolithic loop that does execution + persistence + aggregation
-
-**Desired:** Split into:
-- `execute_evaluation()` - Pure execution logic
-- `persist_results()` - Delegated to adapter
-- `aggregate_metrics()` - Separate interpreter
-
----
-
-##### 2. **Merge Loops**
-
-**Current:** Legacy and Live have separate, similar loops
-
-**Desired:** Single `execute_evaluation()` that handles both via `execution_mode`:
-- `ExecutionMode.BATCH` → iterate over testset
-- `ExecutionMode.LIVE` → iterate over trace query results
-- `ExecutionMode.SLICED` → iterate over subset
-
----
-
-##### 3. **Change Loop Structure**
-
-**Current:** Some loops iterate by index (`for idx in range(nof_testcases)`)
-
-**Desired:** Iterate by object (`for scenario in scenarios`)
-- More Pythonic
-- Easier to slice/filter
-- Better error handling
-
----
-
-##### 4. **Extract Pure Functions**
-
-**Current:** Loops have side effects (DB writes, API calls) inline
-
-**Desired:** Extract to pure functions:
-```python
-# Pure function (no I/O)
-def prepare_evaluator_inputs(
- testcase: Testcase,
- app_output: dict,
- trace: Trace,
-) -> dict:
- """Prepare inputs for evaluator invocation."""
- return {
- "inputs": testcase.inputs,
- "output": app_output,
- "expected_output": testcase.expected_output,
- "trace": trace,
- }
-
-# Execution loop calls pure function, then injects I/O
-evaluator_inputs = prepare_evaluator_inputs(testcase, app_output, trace)
-result = await persistence.save_result(...)
-```
-
----
-
-### Goal 4: Support Multiple Execution Modes via `TensorSlice`
-
-All execution modes are expressed as `process(slice)` — the `TensorSlice` determines what subset of the tensor to work on.
-
-#### TensorSlice
-
-```python
-@dataclass
-class TensorSlice:
- """Defines which cells of the tensor to target."""
-
- scenarios: Literal["all", "none"] | list[UUID] = "all"
- steps: Literal["all", "none"] | list[str] = "all"
- repeats: Literal["all", "none"] | list[int] = "all"
-```
-
-#### Examples
-
-**Full run (all scenarios × all steps × all repeats):**
-```python
-await orchestrator.process(
- run=run,
- slice=TensorSlice(), # defaults to "all" on every dimension
- persistence=dao_persistence,
-)
-```
-
-**Live evaluation (scenarios derived from a trace query window):**
-```python
-trace_scenario_ids = await resolve_live_scenarios(run, start_time, end_time)
-await orchestrator.process(
- run=run,
- slice=TensorSlice(scenarios=trace_scenario_ids, steps="all", repeats="all"),
- persistence=dao_persistence,
-)
-```
-
-**Targeted re-run (specific scenarios and evaluators):**
-```python
-await orchestrator.process(
- run=run,
- slice=TensorSlice(
- scenarios=[scenario_1_id, scenario_2_id],
- steps=["evaluator-accuracy", "evaluator-hallucination"],
- repeats="all",
- ),
- persistence=dao_persistence,
-)
-```
-
-**Fill missing results (probe first, then process gaps):**
-```python
-existing = await persistence.probe(run_id=run.id, slice=TensorSlice())
-missing_slice = compute_missing(full_tensor, existing)
-await orchestrator.process(run=run, slice=missing_slice, persistence=dao_persistence)
-```
-```
-
----
-
-## Loop Unification Strategy
-
-### Phase 1: Extract Core Execution Logic
-
-**Goal:** Create pure, testable execution functions
-
-**Steps:**
-1. Identify common iteration patterns across SDK and API loops
-2. Extract pure functions (no I/O, no side effects)
-3. Create `agenta/core/evaluations/engine/executor.py` with canonical loops
-4. Add comprehensive unit tests (no DB, no API required)
-
-**Example Pure Function:**
-```python
-def build_execution_plan(
- graph: EvaluationGraph,
- scenarios: list[Scenario],
-) -> list[ExecutionStep]:
- """
- Build execution plan: which nodes to run for which scenarios.
-
- Pure function - no I/O, fully deterministic.
- """
- plan = []
- for scenario in scenarios:
- for node in graph.topological_order():
- plan.append(
- ExecutionStep(
- scenario_id=scenario.id,
- node_id=node.id,
- depends_on=[...],
- )
- )
- return plan
-```
-
----
-
-### Phase 2: Define Ports (Interfaces)
-
-**Goal:** Define clean contracts for I/O operations
-
-**Steps:**
-1. Create `agenta/core/evaluations/interfaces/persistence.py` with protocols
-2. Create `agenta/core/evaluations/interfaces/invocation.py` for app/evaluator calls
-3. Create `agenta/core/evaluations/interfaces/data_sources.py` for testsets/traces
-
-**Example Invocation Port:**
-```python
-class WorkflowInvoker(Protocol):
- """Port for invoking applications and evaluators."""
-
- async def invoke(
- self,
- workflow_id: UUID,
- inputs: dict[str, Any],
- ) -> InvocationResult:
- """Invoke a workflow (app or evaluator) with inputs."""
- ...
-```
-
----
-
-### Phase 3: Implement Adapters
-
-**Goal:** Create concrete implementations for each context
-
-**Steps:**
-1. Implement `RemoteAPIPersistence` (SDK uses this)
-2. Implement `DAOPersistence` (backend uses this)
-3. Implement `JSONPersistence` (tests use this)
-4. Implement `InMemoryPersistence` (fast tests use this)
-
----
-
-### Phase 4: Migrate SDK to Use Core Loops
-
-**Goal:** SDK uses canonical implementation with remote adapter
-
-**Steps:**
-1. Update `sdk/agenta/sdk/evaluations/preview/evaluate.py`
-2. Import `execute_evaluation` from core
-3. Pass `RemoteAPIPersistence` adapter
-4. Remove duplicate loop logic
-5. Ensure backward compatibility (same API surface)
-
-**Before:**
-```python
-# sdk/agenta/sdk/evaluations/preview/evaluate.py
-async def aevaluate(...):
- # 300+ lines of loop logic + HTTP calls
- for testset in testsets:
- for testcase in testcases:
- # ... execute ...
- await api_client.post("/results", ...) # Hardcoded API call
-```
-
-**After:**
-```python
-# sdk/agenta/sdk/evaluations/preview/evaluate.py
-from agenta.core.evaluations.engine.executor import process
-from agenta.core.evaluations.interfaces.adapters.api import RemoteAPIPersistence
-from agenta.core.evaluations.types import TensorSlice
-
-async def aevaluate(...):
- # Create persistence adapter
- persistence = RemoteAPIPersistence(api_client=agenta_api)
-
- # Execute using canonical process
- summary = await process(
- run=run,
- slice=TensorSlice(), # all scenarios × all steps × all repeats
- persistence=persistence,
- )
-
- return summary
-```
-
----
-
-### Phase 5: Migrate Backend to Use Core Loops
-
-**Goal:** Backend uses same loops with DAO adapter
-
-**Steps:**
-1. Update `api/oss/src/core/evaluations/tasks/legacy.py`
-2. Import `execute_evaluation` from core (shared module)
-3. Pass `DAOPersistence` adapter
-4. Remove duplicate loop logic
-5. Maintain same task API for worker
-
-**Before:**
-```python
-# api/oss/src/core/evaluations/tasks/legacy.py
-async def evaluate_batch_testset(...):
- # 700+ lines of loop logic + DAO calls
- for idx in range(nof_testcases):
- for jdx in range(nof_annotations):
- # ... execute ...
- await dao.create_result(...) # Hardcoded DAO call
-```
-
-**After:**
-```python
-# api/oss/src/core/evaluations/tasks/legacy.py
-from agenta.core.evaluations.engine.executor import process
-from agenta.core.evaluations.interfaces.adapters.dao import DAOPersistence
-from agenta.core.evaluations.types import TensorSlice
-
-async def evaluate_batch_testset(...):
- # Create persistence adapter
- persistence = DAOPersistence(evaluations_dao=evaluations_dao)
-
- # Execute using canonical process
- summary = await process(
- run=run,
- slice=TensorSlice(), # all scenarios × all steps × all repeats
- persistence=persistence,
- )
-
- # Update run status
- await update_run_status(run.id, summary)
-```
-
----
-
-### Phase 6: Consolidate Live and Batch
-
-**Goal:** Same loop handles live and batch via execution mode
-
-**Steps:**
-1. Merge `live.py` and `legacy.py` into single task
-2. Use `ExecutionMode.BATCH` vs `ExecutionMode.LIVE`
-3. Data source (testset vs traces) resolved by mode
-4. Remove code duplication
-
-**Example:**
-```python
-# api/oss/src/core/evaluations/tasks/evaluate.py
-async def evaluate(
- run_id: UUID,
- slice: TensorSlice,
-):
- """
- Universal evaluation task.
-
- Handles:
- - Batch testset evaluation: TensorSlice()
- - Live trace evaluation: TensorSlice(scenarios=[...derived from trace query...])
- - Targeted re-run: TensorSlice(scenarios=[...], steps=[...])
- """
- run = await runs_dao.get(run_id)
- persistence = DAOPersistence(evaluations_dao=evaluations_dao)
-
- summary = await process(
- run=run,
- slice=slice,
- persistence=persistence,
- )
-
- return summary
-```
-
----
-
-## Execution Modes
-
-All modes are expressed as `process(run, TensorSlice(...), persistence)`.
-
-### Full Run (Testset Evaluation)
-
-**Data Source:** Testset scenarios already in the tensor
-**Slice:** `TensorSlice()` — all scenarios × all steps × all repeats
-**Use Case:** Evaluate a full testset against applications/evaluators
-
-**Step structure:**
-```
-input step (testset)
- → invocation step (application)
- → annotation step (evaluator 1)
- → annotation step (evaluator 2)
-```
-
----
-
-### Live Mode (Trace Evaluation)
-
-**Data Source:** Trace query result (temporal window → scenario IDs)
-**Slice:** `TensorSlice(scenarios=[...trace-derived ids...], steps="all", repeats="all")`
-**Use Case:** Continuously evaluate production traces
-
-**Step structure:**
-```
-input step (query/traces)
- → annotation step (evaluator 1)
- → annotation step (evaluator 2)
-```
-
----
-
-### Targeted Re-run (Partial Execution)
-
-**Data Source:** Existing scenarios in the tensor
-**Slice:** `TensorSlice(scenarios=[id1, id2], steps=["evaluator-x"], repeats="all")`
-**Use Case:** Re-run specific evaluators on specific scenarios (e.g., after evaluator update)
-
----
-
-### Fill Gaps (Idempotent Completion)
-
-**Slice:** Computed from `probe` result — the set of missing or failed cells
-**Use Case:** Resume an interrupted run; fill in cells that errored
-
-```python
-existing = await persistence.probe(run_id=run.id, slice=TensorSlice())
-gap_slice = compute_missing(expected_full_tensor, existing)
-await process(run=run, slice=gap_slice, persistence=persistence)
-```
-
----
-
-## Migration Path
-
-### Stage 1: Foundation (Weeks 1-2)
-
-**Goal:** Establish core architecture without breaking existing code
-
-**Tasks:**
-1. ✅ Document current state ([iteration-patterns.md](./iteration-patterns.md))
-2. ✅ Document desired state (this document)
-3. Create `agenta/core/evaluations/engine/` module structure
-4. Define ports (protocols) in `interfaces/`
-5. Extract pure functions from SDK loops
-6. Write unit tests for pure functions (no I/O)
-
-**Deliverables:**
-- Core module structure in place
-- Ports defined and documented
-- Pure execution logic extracted and tested
-- No changes to existing SDK or API code yet
-
----
-
-### Stage 2: Adapters (Weeks 3-4)
-
-**Goal:** Implement persistence adapters
-
-**Tasks:**
-1. Implement `DAOPersistence` adapter
-2. Implement `RemoteAPIPersistence` adapter
-3. Implement `InMemoryPersistence` adapter (for tests)
-4. Write integration tests for each adapter
-5. Document adapter usage patterns
-
-**Deliverables:**
-- All adapters implemented and tested
-- Adapter selection guide documented
-- Integration tests passing
-- Still no changes to existing SDK/API code
-
----
-
-### Stage 3: SDK Migration (Weeks 5-6)
-
-**Goal:** Migrate SDK to use core loops
-
-**Tasks:**
-1. Update `sdk/agenta/sdk/evaluations/preview/evaluate.py`
-2. Replace loop logic with `execute_evaluation()` call
-3. Use `RemoteAPIPersistence` adapter
-4. Maintain backward compatibility (same API surface)
-5. Run full SDK test suite
-6. Update SDK documentation
-
-**Deliverables:**
-- SDK uses canonical loops
-- All SDK tests passing
-- Backward compatible (no breaking changes)
-- SDK documentation updated
-
----
-
-### Stage 4: Backend Migration - Batch (Weeks 7-8)
-
-**Goal:** Migrate backend batch evaluation to use core loops
-
-**Tasks:**
-1. Update `api/oss/src/core/evaluations/tasks/legacy.py`
-2. Replace loop logic with `execute_evaluation()` call
-3. Use `DAOPersistence` adapter
-4. Maintain same task API for workers
-5. Run full API test suite
-6. Performance benchmarking
-
-**Deliverables:**
-- Backend batch evaluation uses canonical loops
-- All API tests passing
-- Performance meets or exceeds baseline
-- Task API unchanged (backward compatible)
-
----
-
-### Stage 5: Backend Migration - Live (Weeks 9-10)
-
-**Goal:** Migrate backend live evaluation to use core loops
-
-**Tasks:**
-1. Update `api/oss/src/core/evaluations/tasks/live.py`
-2. Replace loop logic with `execute_evaluation()` call
-3. Use `DAOPersistence` adapter
-4. Use `ExecutionMode.LIVE` with temporal scope
-5. Run full API test suite
-6. Performance benchmarking
-
-**Deliverables:**
-- Backend live evaluation uses canonical loops
-- All API tests passing
-- Performance meets or exceeds baseline
-- Temporal execution working correctly
-
----
-
-### Stage 6: Consolidation (Weeks 11-12)
-
-**Goal:** Merge batch and live into single task
-
-**Tasks:**
-1. Create unified `evaluate()` task
-2. Handle batch/live via `ExecutionMode` parameter
-3. Deprecate `evaluate_batch_testset` and `evaluate_live_query`
-4. Update all callers to use new unified task
-5. Remove deprecated code after migration period
-6. Update documentation
-
-**Deliverables:**
-- Single evaluation task handles all modes
-- Deprecated tasks removed (or marked for removal)
-- All callers migrated
-- Documentation complete
-
----
-
-### Stage 7: Metrics & Interpretation (Weeks 13-14)
-
-**Goal:** Apply same architecture to metrics aggregation
-
-**Tasks:**
-1. Extract metrics aggregation into `TensorInterpreter`
-2. Define `MetricsPort` interface
-3. Implement adapters for different analytics backends
-4. Migrate `refresh_metrics()` to use interpreter
-5. Add support for custom aggregation functions
-
-**Deliverables:**
-- Metrics aggregation uses ports & adapters
-- Custom aggregations supported
-- All metrics tests passing
-- Performance validated
-
----
-
-## Decisions
-
-### 1. Graph Representation
-
-**Decided: Declarative configuration** — `run.data.steps` is a list of steps with `type`, `origin`, and `references`. The execution engine derives topology from this list. No explicit nodes+edges graph object.
-
----
-
-### 2. Error Handling
-
-**Decided: Collect errors** — execution continues across all cells; failures are recorded as error-valued results.
-
-This is a natural fit for the data model: every `EvaluationResult` holds either a `trace_id` (reference to a successful trace) or an `error` stored by value — or both if a trace partially succeeded. Errors are visible in the tensor alongside successes without stopping the run.
-
----
-
-### 3. Concurrency
-
-**Decided: Implementation concern for `process`** — the architecture does not mandate sequential vs. parallel vs. distributed execution. The `TensorSlice` contract specifies _what_ to run; each `process` implementation (SDK, Taskiq worker, future distributed executor) chooses its own concurrency model. The persistence port (`populate`/`probe`/`prune`) must be safe to call concurrently.
-
----
-
-### 4. Tensor Sparsity
-
-**Decided: Handled by `process` and `populate`** — missing cells are a natural outcome of partial runs, failures, or slice-targeted execution. The mechanism for filling gaps is `process(TensorSlice(...))` targeting the missing subset, with `probe` used to discover what is missing. No separate sparsity-handling primitive is needed.
-
----
-
-### 5. Shared Module Packaging
-
-**Decided: Monorepo shared module for now.** Revisit if/when the canonical loop is stable and independent versioning becomes necessary.
-
----
-
-### 6. Backward Compatibility
-
-**Strategy:**
-- Keep old task signatures; delegate to new implementation internally
-- New stack ships under `/preview/*` while old endpoints remain mounted
-- Remove old loops only after both SDK and backend are migrated and tested
-
----
-
-## Success Criteria
-
-### Technical Metrics
-
-- [ ] **Single Source of Truth:** SDK and API use same execution loops
-- [ ] **Test Coverage:** >90% coverage for core execution logic
-- [ ] **Performance:** New implementation matches or exceeds current performance
-- [ ] **Modularity:** Can swap persistence adapters without changing execution logic
-- [ ] **Consistency:** Same loops used for batch, live, sliced, incremental modes
-
-### Code Quality Metrics
-
-- [ ] **Reduced Duplication:** <10% code duplication between SDK and API evaluation logic
-- [ ] **Pure Functions:** >80% of execution logic is pure (no I/O)
-- [ ] **Interface Adherence:** All I/O goes through defined ports
-- [ ] **Documentation:** All ports, adapters, and execution modes documented
-
-### Functional Metrics
-
-- [ ] **Backward Compatibility:** All existing SDK and API tests pass
-- [ ] **Feature Parity:** New implementation supports all current features
-- [ ] **Error Handling:** Graceful handling of failures with clear error messages
-- [ ] **Observability:** Execution progress and errors are logged/traced
-
----
-
-## Related Documentation
-
-- [Current State - Iteration Patterns](./iteration-patterns.md)
-- [API Architecture Patterns](../../../AGENTS.md#api-architecture-patterns-oss--ee)
-- [Testing Documentation](../testing/README.md)
-
----
-
-## Appendix: Example End-to-End Flow
-
-### Before (Current State)
-
-**SDK:**
-```python
-# sdk/agenta/sdk/evaluations/preview/evaluate.py
-async def aevaluate(...):
- for testset in testsets:
- for testcase in testcases:
- for app in apps:
- result = await invoke_app(...)
- await agenta_api.post("/results", result) # Direct API call
- for evaluator in evaluators:
- result = await invoke_evaluator(...)
- await agenta_api.post("/results", result) # Direct API call
-```
-
-**Backend:**
-```python
-# api/oss/src/core/evaluations/tasks/legacy.py
-async def evaluate_batch_testset(...):
- for idx in range(nof_testcases):
- for jdx in range(nof_annotations):
- result = await invoke_evaluator(...)
- await dao.create_result(result) # Direct DAO call
-```
-
-**Problems:**
-- Duplicate loop logic (SDK and backend)
-- Hardcoded persistence (API calls vs DAO)
-- Different iteration patterns (objects vs indices)
-- Hard to test without external dependencies
-
----
-
-### After (Desired State)
-
-**Core Module (Shared):**
-```python
-# agenta/core/evaluations/engine/executor.py
-async def process(
- *,
- run: EvaluationRun,
- slice: TensorSlice,
- persistence: EvaluationPersistence, # Injected — provides populate/probe/prune
-) -> ProcessSummary:
- scenarios = await resolve_scenarios(run, slice)
-
- for scenario in scenarios:
- node_outputs = {}
-
- for step in run.data.steps:
- for repeat_idx in resolve_repeats(slice):
- output = await invoke_step(step, scenario, node_outputs)
-
- await persistence.populate(
- run_id=run.id,
- scenario_id=scenario.id,
- step_key=step.key,
- repeat_idx=repeat_idx,
- trace_id=output.trace_id,
- error=output.error,
- )
- node_outputs[step.key] = output
-
- return ProcessSummary(...)
-```
-
-**SDK:**
-```python
-# sdk/agenta/sdk/evaluations/preview/evaluate.py
-from agenta.core.evaluations.engine.executor import process
-from agenta.core.evaluations.interfaces.adapters.api import RemoteAPIPersistence
-from agenta.core.evaluations.types import TensorSlice
-
-async def aevaluate(...):
- persistence = RemoteAPIPersistence(agenta_api)
- return await process(run=run, slice=TensorSlice(), persistence=persistence)
-```
-
-**Backend:**
-```python
-# api/oss/src/core/evaluations/tasks/evaluate.py
-from agenta.core.evaluations.engine.executor import process
-from agenta.core.evaluations.interfaces.adapters.dao import DAOPersistence
-from agenta.core.evaluations.types import TensorSlice
-
-async def evaluate(run_id: UUID, slice: TensorSlice):
- run = await runs_dao.get(run_id)
- persistence = DAOPersistence(evaluations_dao)
- return await process(run=run, slice=slice, persistence=persistence)
-```
-
-**Benefits:**
-- ✅ Single source of truth (shared `process`)
-- ✅ Persistence injected via `populate`/`probe`/`prune` port
-- ✅ Same iteration pattern (objects, not indices)
-- ✅ Testable without external dependencies (use `InMemoryPersistence`)
-- ✅ Consistent across SDK, backend, tests
-
----
-
-**Document Status:** Draft for review and discussion
-**Next Steps:** Review with team, refine based on feedback, begin Stage 1 implementation
diff --git a/docs/designs/eval-loops/evaluation-operations.md b/docs/designs/eval-loops/evaluation-operations.md
deleted file mode 100644
index ac12edf59f..0000000000
--- a/docs/designs/eval-loops/evaluation-operations.md
+++ /dev/null
@@ -1,540 +0,0 @@
-# Evaluation Operations
-
-**Created:** 2026-02-17
-**Purpose:** Document the supported operations on an evaluation — graph mutations, tensor interface, and orchestration
-**Related:**
-- [Evaluation Structure](./evaluation-structure.md)
-- [Iteration Patterns](./iteration-patterns.md)
-- [Desired Architecture](./desired-architecture.md)
-
----
-
-## Table of Contents
-
-- [Design Principle: Everything is a Mutation](#design-principle-everything-is-a-mutation)
-- [Layer Model](#layer-model)
-- [Step Model](#step-model)
-- [Creation](#creation)
-- [Graph Mutations](#graph-mutations)
- - [add_step](#add_step)
- - [remove_step](#remove_step)
- - [Edit Step (via Remove + Add)](#edit-step-via-remove--add)
-- [Tensor Mutations](#tensor-mutations)
- - [add_scenario / remove_scenario](#add_scenario--remove_scenario)
- - [increase_repeats / decrease_repeats](#increase_repeats--decrease_repeats)
- - [populate / prune](#populate--prune)
- - [probe](#probe)
-- [Metrics](#metrics)
- - [refresh_metrics](#refresh_metrics)
-- [Flag Operations](#flag-operations)
- - [get_flags / set_flags](#get_flags--set_flags)
- - [set_flag](#set_flag)
-- [Orchestration: process](#orchestration-process)
-- [TensorSlice](#tensorslice)
-- [Operation Summary](#operation-summary)
-
----
-
-## Design Principle: Everything is a Mutation
-
-**Creation with a graph definition is sugar for: create empty + apply mutations.**
-
-```
-create(graph_definition)
-≡
-create_empty()
-+ add_step(type="input", ...) [for each data source in graph]
-+ add_step(type="invocation", ...) [for each application in graph]
-+ add_step(type="annotation", ...) [for each evaluator in graph]
-```
-
-This makes the operation model explicit:
-- If a mutation is supported, it is supported at creation time
-- If a mutation is not supported (or gated by a flag), that applies at creation time too
-- There are no "creation-only" special cases
-
----
-
-## Layer Model
-
-Operations are organized into two symmetric layers, plus an orchestration layer above both:
-
-```
-┌─────────────────────────────────────────────────────────┐
-│ Orchestration │
-│ process(slice) │
-│ SDK | Backend | Frontend — each impl. │
-│ All converge on the tensor layer below ↓ │
-└─────────────────────────────────────────────────────────┘
-
-┌──────────────────────────┐ ┌──────────────────────────┐
-│ Graph Layer │ │ Tensor Layer │
-│ │ │ │
-│ add_step │ │ add_scenario │
-│ remove_step ───────────┼─►│ remove_scenario │
-│ │ │ │
-│ (steps define the │ │ increase_repeats │
-│ shape of the tensor) │ │ decrease_repeats │
-│ │ │ │
-│ │ │ populate (write) │
-│ │ │ prune (delete) │
-│ │ │ probe (read) │
-└──────────────────────────┘ └──────────────────────────┘
-```
-
-**Graph layer** defines the structure: which steps exist, what they reference.
-**Tensor layer** operates on the data: scenarios, repeats, and result cells.
-**Cross-layer cascade:** `remove_step` triggers tensor-level operations (`remove_scenario` for input steps, `prune` for results of that step).
-
-**Tensor interface** (`probe` / `prune` / `populate`) is the shared contract. `process` is not a single implementation but a role: the SDK, the backend task runner, and the frontend each implement it differently, but all call `populate` to commit results.
-
----
-
-## Step Model
-
-All graph nodes are **steps**. A step has a `type` and an `origin`.
-
-### Step type
-
-**Field:** `type: Literal["input", "invocation", "annotation"]`
-**Source:** `api/oss/src/core/evaluations/types.py:27`
-
-| Type | Meaning | Examples |
-|------|---------|---------|
-| `"input"` | Data source — provides inputs | Testset, Query |
-| `"invocation"` | Invokes a workflow, produces a trace | Application/variant |
-| `"annotation"` | Evaluates/scores, produces a trace | Evaluator/judge |
-
-### Step origin
-
-**Field:** `origin: Literal["human", "custom", "auto"]`
-**Source:** `api/oss/src/core/evaluations/types.py:28`
-
-| Origin | Who populates results | Web behavior | Backend behavior |
-|--------|----------------------|--------------|-----------------|
-| `"auto"` | Backend | Transparent | Runs step automatically |
-| `"human"` | A person via the UI | Prompts user for data | Waits — does not run |
-| `"custom"` | External / programmatic | Transparent | Does not run |
-
-**Key rule:** `process` only runs `"auto"` steps. `"human"` and `"custom"` steps are populated via direct `populate` calls from outside the process orchestration.
-
-### Step definition (from codebase)
-
-```python
-class EvaluationRunDataStep(BaseModel):
- key: str # step_key — unique per run
- type: Literal["input", "invocation", "annotation"]
- origin: Literal["human", "custom", "auto"]
- references: Dict[str, Reference] # points to specific revision
- inputs: Optional[List[EvaluationRunDataStepInput]] = None
-```
-
-**Source:** `api/oss/src/core/evaluations/types.py:113-118`
-
-Nodes are **immutable by reference** — `references` points to a specific revision. It cannot be changed once set.
-
----
-
-## Creation
-
-### `create_empty()`
-
-Creates an evaluation with no graph and no tensor. All flags at defaults.
-
-```
-EvaluationRun:
- steps: []
- tensor: { scenarios: [], results: [], metrics: [] }
- flags: { is_live: false, is_active: true, repeat_target: "application",
- reuse_traces: false, is_closed: false,
- allow_decrease_repeats: false }
-```
-
-### `create(graph_definition?)`
-
-Equivalent to `create_empty()` followed by `add_step(...)` for each step in the definition. All the same mutation rules apply.
-
----
-
-## Graph Mutations
-
----
-
-### `add_step`
-
-**Operation:** `add_step(type, origin, references, key?, inputs?)`
-
-Adds a step to the graph. Multiple steps of the same type are supported.
-
-```python
-add_step(
- type: Literal["input", "invocation", "annotation"],
- origin: Literal["human", "custom", "auto"],
- references: Dict[str, Reference],
- key: Optional[str] = None, # auto-generated if not provided
- inputs: Optional[List[StepInput]] = None,
-)
-```
-
-**Compatibility check:** `is_live = true` rejects `type = "input"` steps backed by a testset.
-
-**Effect on tensor:** None immediately. Data is created during process or via direct populate.
-
-**Allowed when `is_closed`:** No.
-
----
-
-### `remove_step`
-
-**Operation:** `remove_step(step_key: str)`
-
-Removes a step and all its associated tensor data.
-
-**Effect:**
-1. Remove step from graph
-2. `prune(TensorSlice(steps=[step_key], scenarios="all", repeats="all"))` — results
-3. Flush metrics referencing `step_key`
-4. If `type = "input"`: also prune scenarios sourced exclusively from this step
-
-**Allowed when `is_closed`:** No.
-
----
-
-### Edit Step (via Remove + Add)
-
-**There is no `edit_step` operation.** References are immutable.
-
-Changing a reference = `remove_step(old_key)` + `add_step(new_references)`. The flush cost is intentional and visible.
-
----
-
-## Tensor Mutations
-
-Tensor operations work on the data inside the evaluation — scenarios, repeats, and result cells. They are organized as symmetric pairs plus a read operation.
-
----
-
-### `add_scenario` / `remove_scenario`
-
-**`add_scenario(source: TestcaseRef | TraceRef)`** — adds a row to the tensor.
-
-```python
-class TestcaseRef:
- testcase_id: UUID
-
-class TraceRef:
- trace_id: UUID
- timestamp: Optional[datetime] # required for is_live=true
- interval: Optional[str] # required for is_live=true
-```
-
-Normally created automatically during `process`. Direct `add_scenario` supports manual or incremental construction.
-
----
-
-**`remove_scenario(scenario_id: UUID)`** — removes a row and all its results.
-
-Equivalent to:
-```python
-prune(TensorSlice(scenarios=[scenario_id], steps="all", repeats="all"))
-# + delete the scenario row itself
-```
-
-Triggered automatically by `remove_step` when the removed step was the sole input source for a scenario.
-
-**Both allowed when `is_closed`:** No.
-
----
-
-### `increase_repeats` / `decrease_repeats`
-
-**`increase_repeats(new_count: int)`** — expands the repeat dimension. `new_count > current`. Non-destructive: no data is deleted. New slots are empty until filled by `populate` or `process`.
-
----
-
-**`decrease_repeats(new_count: int)`** — shrinks the repeat dimension. `new_count < current`.
-
-**Effect:**
-1. `prune(TensorSlice(scenarios="all", steps="all", repeats=[n, ..., old_count-1]))`
-2. Full metrics flush — recompute with `refresh_metrics()`
-
-**Gated by flag:** `allow_decrease_repeats: bool` (default `false`).
-
-**Both allowed when `is_closed`:** No.
-
----
-
-### `populate` / `prune`
-
-**`populate(slice: TensorSlice, results: List[ResultData])`** — writes result cells. Creates or overwrites.
-
-```python
-class ResultData:
- scenario_id: UUID
- step_key: str
- repeat_idx: int
- trace_id: Optional[UUID] # reference to execution trace
- error: Optional[str] # set if the step failed
-```
-
-**This is the convergence point.** All `process` implementations — SDK, backend, frontend — call `populate` to commit results, regardless of how they produced them:
-- Backend `process`: calls `populate` after running `auto` steps
-- Frontend `process`: calls `populate` after a human submits an annotation
-- External `process`: calls `populate` after a custom/programmatic step completes
-
-Does not automatically refresh metrics — call `refresh_metrics()` after bulk populate.
-
----
-
-**`prune(slice: TensorSlice)`** — deletes result cells within the slice and flushes affected metrics.
-
-```python
-# All results for a specific step
-prune(TensorSlice(steps=["eval-rev-abc"], scenarios="all", repeats="all"))
-
-# High repeat indices (after decrease_repeats)
-prune(TensorSlice(steps="all", scenarios="all", repeats=[3, 4, 5]))
-
-# All results for specific scenarios
-prune(TensorSlice(steps="all", scenarios=[sid1, sid2], repeats="all"))
-```
-
-Metrics are always flushed conservatively — recompute with `refresh_metrics()`.
-
-**Both allowed when `is_closed`:** No.
-
----
-
-### `probe`
-
-**`probe(slice: TensorSlice, status: StatusFilter) → List[ResultRef]`** — read-only. Returns all cells within the slice that match the status.
-
-```python
-StatusFilter = Literal["missing", "success", "failure", "any"]
-```
-
-| Status | Meaning |
-|--------|---------|
-| `"missing"` | Cell in slice has no result yet |
-| `"success"` | Result exists with no error and a valid `trace_id` |
-| `"failure"` | Result exists with a non-null `error` |
-| `"any"` | All cells in the slice |
-
-**Returns:** List of `(scenario_id, step_key, repeat_idx)` composite keys.
-
-**Primary use:** Determine what to (re-)process, or audit completeness before closing.
-
-**Allowed when `is_closed`:** Yes.
-
----
-
-## Metrics
-
-Metrics are derived from results. They are not part of the core tensor interface but follow the same slice-scoped pattern.
-
-### `refresh_metrics`
-
-**Operation:** `refresh_metrics(scope?: GlobalScope | VariationalScope | TemporalScope)`
-
-Recomputes metrics from current results.
-
-```
-1. Fetch results matching scope
-2. Extract trace_ids
-3. Run SQL aggregations over trace data
-4. Write metrics entities
-```
-
-**When to call:**
-- After `process` completes
-- After `decrease_repeats`
-- After `remove_step`
-- After bulk `populate`
-- On user-initiated recalculate
-
-**Allowed when `is_closed`:** Yes (metrics are derived, not structural).
-
----
-
-## Flag Operations
-
-Flags are properties of the `EvaluationRun` that control behavior. At the storage level there is no per-flag update — flags are always read as a set and written as a set. The user-facing API provides `set_flag` which wraps that read-modify-write cycle.
-
----
-
-### `get_flags` / `set_flags`
-
-**`get_flags(run_id) → EvaluationFlags`** — returns all current flag values.
-
-```python
-class EvaluationFlags:
- is_live: bool # online vs offline execution
- is_active: bool # pause/resume (only meaningful when is_live=true)
- repeat_target: Literal["application", "evaluator"]
- reuse_traces: bool
- is_closed: bool # lock evaluation against mutations
- allow_decrease_repeats: bool # gate on destructive repeat reduction
-```
-
----
-
-**`set_flags(run_id, flags: EvaluationFlags)`** — low-level write of the full flags object. Replaces all flags atomically.
-
-This is the primitive. Not intended to be called directly in most contexts — use `set_flag` instead.
-
----
-
-### `set_flag`
-
-**`set_flag(run_id, name: str, value: Any)`** — set a single flag. Internally performs:
-
-```
-flags = get_flags(run_id)
-flags[name] = value
-set_flags(run_id, flags)
-```
-
-**Available flags and their constraints:**
-
-| Flag | Type | Constraint on set |
-|------|------|-------------------|
-| `is_live` | `bool` | Setting `true` when testset input steps exist → rejected |
-| `is_active` | `bool` | Only meaningful when `is_live = true` |
-| `repeat_target` | `"application" \| "evaluator"` | Changing after results exist → requires `prune` first (or explicit override) |
-| `reuse_traces` | `bool` | No structural constraint |
-| `is_closed` | `bool` | Setting `true` gates all subsequent mutations; setting `false` reopens |
-| `allow_decrease_repeats` | `bool` | Safety gate — must be set `true` before calling `decrease_repeats` |
-
-**Allowed when `is_closed`:**
-- `is_closed` itself: Yes — you must be able to set it to `false` to reopen
-- All other flags: No — closed evaluation is read-only
-
----
-
-## Orchestration: process
-
-**Operation:** `process(slice: TensorSlice)`
-
-Drives `auto`-origin steps within the slice, in graph-topological order.
-
-`process` is **not a single implementation** — it is a role. The SDK, the backend task runner, and the frontend each implement it differently. What they share is the contract: read from the graph, produce results, call `populate`.
-
-```
-process(slice):
- for each scenario in slice:
- ensure scenario exists (add_scenario if needed)
- for each auto step in slice (topological order):
- for each repeat in slice:
- if probe({scenario}, {step}, {repeat}, "success"):
- skip (already done)
- run step → trace_id or error
- populate({scenario, step, repeat, trace_id, error})
- refresh_metrics()
-```
-
-**What it does NOT do:**
-- Does not touch `human` or `custom` steps — those are populated from outside
-- Does not run steps outside the slice
-
-**Common patterns:**
-
-```python
-# Full run
-process(TensorSlice(scenarios="all", steps="all", repeats="all"))
-
-# Retry all failures
-failed = probe(TensorSlice(scenarios="all", steps="all", repeats="all"), status="failure")
-process(TensorSlice(
- scenarios=[r.scenario_id for r in failed],
- steps="all",
- repeats="all",
-))
-
-# Fill missing results for one evaluator
-process(TensorSlice(scenarios="all", steps=["eval-rev-abc"], repeats="all"))
-
-# Fill new repeat slots after increase_repeats
-process(TensorSlice(scenarios="all", steps="all", repeats=[3, 4]))
-```
-
-**Allowed when `is_closed`:** No.
-
----
-
-## TensorSlice
-
-A `TensorSlice` specifies a subset of the tensor along all three dimensions. Used by `probe`, `prune`, `populate`, and `process`.
-
-```python
-class TensorSlice:
- scenarios: Literal["all", "none"] | List[UUID] # scenario_ids
- steps: Literal["all", "none"] | List[str] # step_keys
- repeats: Literal["all", "none"] | List[int] # repeat_idx values
-```
-
-| Value | Meaning |
-|-------|---------|
-| `"all"` | Every item in this dimension |
-| `"none"` | Nothing (empty slice — no-op for write operations) |
-| `[...]` | Only the listed items |
-
----
-
-## Operation Summary
-
-### Graph Mutations
-
-| Operation | Flushes Results | Flushes Metrics | Allowed when `is_closed` |
-|-----------|-----------------|-----------------|--------------------------|
-| `add_step(...)` | No | No | No |
-| `remove_step(key)` | Yes — for `key` | Yes — for `key` | No |
-| ~~`edit_step`~~ | — | — | Not supported; use remove + add |
-
-### Tensor Mutations
-
-| Operation | Pair | Deletes Data | Flushes Metrics | Gated by Flag | Allowed when `is_closed` |
-|-----------|------|--------------|-----------------|---------------|--------------------------|
-| `add_scenario(...)` | ↕ | No | No | No | No |
-| `remove_scenario(id)` | ↕ | Yes — scenario + its results | Yes — for scenario | No | No |
-| `increase_repeats(n)` | ↕ | No | No | No | No |
-| `decrease_repeats(n)` | ↕ | Yes — pruned repeats | Yes — full flush | `allow_decrease_repeats` | No |
-| `populate(slice, results)` | ↕ | No (overwrites) | No | No | No |
-| `prune(slice)` | ↕ | Yes — per slice | Yes — per scope | No | No |
-| `probe(slice, status)` | — | No | No | No | Yes |
-
-### Metrics
-
-| Operation | Allowed when `is_closed` |
-|-----------|--------------------------|
-| `refresh_metrics(scope?)` | Yes |
-
-### Flag Operations
-
-| Operation | Effect | Allowed when `is_closed` |
-|-----------|--------|--------------------------|
-| `get_flags(run_id)` | Read all flags | Yes |
-| `set_flags(run_id, flags)` | Write all flags atomically (low-level) | Only for `is_closed` itself |
-| `set_flag(run_id, name, value)` | Read-modify-write a single flag | Only for `is_closed` itself |
-
-### Orchestration
-
-| Operation | Calls | Respects `origin` | Allowed when `is_closed` |
-|-----------|-------|-------------------|--------------------------|
-| `process(slice)` | probe + populate + refresh_metrics | Yes — only runs `auto` steps | No |
-
-### Invariants
-
-1. **Steps are immutable by reference.** Use remove + add to change a reference. The flush is intentional.
-2. **Graph and tensor are symmetric.** Graph has `add_step` / `remove_step`; tensor has matching add/remove pairs for scenarios, repeats, and cells.
-3. **`remove_step` cascades to the tensor.** It triggers `remove_scenario` (for input steps) and `prune` (for results of that step).
-4. **Closed evaluations are read-only for structure and results.** `probe` and `refresh_metrics` work when closed; all mutations do not.
-5. **Decreasing repeats is destructive.** Gated by `allow_decrease_repeats`.
-6. **Metrics are always derived.** Flushing is cache invalidation, not data loss.
-7. **`process` only touches `auto` steps.** `human` and `custom` steps are populated from outside via direct `populate` calls.
-8. **`populate` is the convergence point.** All process implementations — SDK, backend, frontend — call `populate` to commit results.
-9. **Creation is mutation.** No operation available at creation is unavailable afterward, and vice versa.
-
----
-
-**Document Status:** Draft
-**Next Action:** Review layer model and tensor interface contract with team
diff --git a/docs/designs/eval-loops/evaluation-structure.md b/docs/designs/eval-loops/evaluation-structure.md
deleted file mode 100644
index 2edcdc2dde..0000000000
--- a/docs/designs/eval-loops/evaluation-structure.md
+++ /dev/null
@@ -1,1983 +0,0 @@
-# Evaluation Structure
-
-**Created:** 2026-02-16
-**Purpose:** Document the evaluation structure — graph, tensor, flags, and constraints
-**Related:**
-- [Current State - Iteration Patterns](./iteration-patterns.md)
-- [Desired Architecture](./desired-architecture.md)
-- [Refactoring Analysis](./refactoring-analysis.md)
-- [Evaluation Operations](./evaluation-operations.md)
-
----
-
-## Table of Contents
-
-- [Overview](#overview)
-- [Graph Components](#graph-components)
-- [Execution Flags](#execution-flags)
-- [Data Source Types](#data-source-types)
-- [Compatibility Constraints](#compatibility-constraints)
-- [Tensor Structure](#tensor-structure)
- - [Five Entities](#five-entities)
- - [Tensor Dimensions](#tensor-dimensions)
- - [EvaluationResult: the Cell](#evaluationeresult-the-cell)
- - [Tensor Population Flow](#tensor-population-flow)
- - [Metrics](#metrics)
-- [Current Graph Structures](#current-graph-structures)
-- [Future Graph Structures](#future-graph-structures)
-
----
-
-## Overview
-
-An evaluation graph defines:
-1. **Data sources** (what to evaluate)
-2. **Execution steps** (applications, evaluators)
-3. **Execution mode** (online vs offline, batch vs sliced)
-4. **Constraints** (compatibility rules between components)
-
-The graph structure determines:
-- What can be executed together
-- How data flows between steps
-- When and how often execution occurs
-- What results are collected
-
----
-
-## Graph Components
-
-### Node Types
-
-#### 1. Query Node (Data Source)
-**Purpose:** Load traces from the tracing system
-
-**Properties:**
-- `type: "query"`
-- `query_spec`: Query criteria (filters, time window, etc.)
-- `time_window`: Optional time bounds (start_time, end_time)
-
-**Behavior:**
-- **Offline mode:** Executes once, returns snapshot of matching traces
-- **Online mode:** Executes periodically, windowed by current interval
-
-**Example:**
-```json
-{
- "type": "query",
- "query_spec": {
- "filters": {
- "status": "success",
- "application_id": "app-123"
- },
- "time_window": {
- "start_time": "2026-02-16T00:00:00Z",
- "end_time": "2026-02-16T23:59:59Z"
- }
- }
-}
-```
-
----
-
-#### 2. Testset Node (Data Source)
-**Purpose:** Load test cases from a testset revision
-
-**Properties:**
-- `type: "testset"`
-- `testset_id`: UUID
-- `testset_revision_id`: UUID
-- `testset_variant_id`: Optional UUID
-
-**Behavior:**
-- **Offline mode:** Returns all test cases from the testset revision
-- **Online mode:** ❌ Not compatible (re-execution yields same data)
-
-**Example:**
-```json
-{
- "type": "testset",
- "testset_id": "ts-123",
- "testset_revision_id": "rev-456",
- "testset_variant_id": "var-789"
-}
-```
-
----
-
-#### 3. Application Node (Execution Step)
-**Purpose:** Invoke an application workflow with inputs
-
-**Properties:**
-- `type: "application"`
-- `application_id`: UUID
-- `application_revision_id`: UUID
-- `application_variant_id`: Optional UUID
-
-**Inputs:**
-- From data source node: `testcase.data` or `trace inputs`
-
-**Outputs:**
-- `trace_id`: Execution trace
-- `outputs`: Application outputs (extracted from trace)
-
-**Example:**
-```json
-{
- "type": "application",
- "application_id": "app-123",
- "application_revision_id": "rev-456"
-}
-```
-
----
-
-#### 4. Evaluator Node (Execution Step)
-**Purpose:** Invoke an evaluator workflow to score/judge outputs
-
-**Properties:**
-- `type: "evaluator"`
-- `evaluator_id`: UUID
-- `evaluator_revision_id`: UUID
-- `evaluator_variant_id`: Optional UUID
-
-**Inputs:**
-- From data source node: `testcase` or `trace`
-- From application node: `outputs`, `trace`
-
-**Outputs:**
-- `trace_id`: Evaluation trace
-- `metrics`: Evaluation scores/judgments
-
-**Example:**
-```json
-{
- "type": "evaluator",
- "evaluator_id": "eval-123",
- "evaluator_revision_id": "rev-456"
-}
-```
-
----
-
-## Execution Flags
-
-### Current Flags
-
-#### 1. `is_live` - Online vs Offline Evaluation
-
-**Type:** `boolean`
-**Default:** `false`
-**Location:** `EvaluationRun.is_live` (or similar field)
-
-**Purpose:** Determines execution mode
-
-##### `is_live = false` (Offline / Batch Evaluation)
-- **Execution:** One-time, on-demand or scheduled
-- **Scenarios:** Created once for all inputs
-- **Data sources:** Testsets OR Queries (snapshot)
-- **Use case:** Evaluate a specific dataset or time window
-
-**Behavior:**
-```
-1. Load data source (testset or query)
-2. Create scenarios (one per input)
-3. Execute graph for all scenarios
-4. Complete run
-```
-
----
-
-##### `is_live = true` (Online / Live Evaluation)
-- **Execution:** Periodic, runs on interval (e.g., every hour)
-- **Scenarios:** Include `timestamp` and `interval` fields
-- **Data sources:** Queries ONLY (windowed by interval)
-- **Use case:** Continuously evaluate production traffic
-
-**Behavior:**
-```
-For each interval (e.g., hourly):
-1. Overwrite query time window with current interval
- Example: interval = "2026-02-16T10:00:00Z to 2026-02-16T11:00:00Z"
-2. Execute query → get traces from that window
-3. Create scenarios (one per trace) with timestamp + interval
-4. Execute graph for scenarios
-5. Wait for next interval
-```
-
-**Scenario fields:**
-```python
-class EvaluationScenario:
- id: UUID
- run_id: UUID
- timestamp: Optional[datetime] # Only for is_live=true
- interval: Optional[str] # Only for is_live=true (e.g., "1h")
- status: EvaluationStatus
-```
-
----
-
-#### Why Testsets are Incompatible with Online Evaluation
-
-**Constraint:** `is_live = true` → Data source MUST be Query
-
-**Reason:**
-- **Testsets are static:** Re-executing a testset always yields the same test cases
-- **Queries are dynamic:** Re-executing a query with different time windows yields different traces
-
-**Example:**
-
-```
-Testset (static):
- Interval 1 (10:00-11:00): [testcase_1, testcase_2, testcase_3]
- Interval 2 (11:00-12:00): [testcase_1, testcase_2, testcase_3] ← Same data!
- Interval 3 (12:00-13:00): [testcase_1, testcase_2, testcase_3] ← Same data!
-
-Query (dynamic):
- Interval 1 (10:00-11:00): [trace_a, trace_b] from 10:00-11:00
- Interval 2 (11:00-12:00): [trace_c, trace_d, trace_e] from 11:00-12:00 ← Different!
- Interval 3 (12:00-13:00): [trace_f] from 12:00-13:00 ← Different!
-```
-
-**Implication:**
-- Online evaluation with testsets would create duplicate scenarios for the same test cases every interval
-- No new information would be gained
-- Wasteful and confusing
-
----
-
-### Compatibility Matrix
-
-| Data Source | `is_live = false` (Offline) | `is_live = true` (Online) |
-|-------------|-----------------------------|---------------------------|
-| **Testset** | ✅ Compatible | ❌ Not compatible |
-| **Query** | ✅ Compatible (snapshot) | ✅ Compatible (windowed) |
-
----
-
-#### Companion Flag: `is_active` (Works with `is_live`)
-
-**Type:** `boolean`
-**Default:** `true` (when `is_live = true`)
-**Location:** `EvaluationRun.is_active` (or similar field)
-
-**Purpose:** Controls whether online evaluation should actually execute on periodic ticks
-
-**Interaction with `is_live`:**
-
-| `is_live` | `is_active` | Behavior |
-|-----------|-------------|----------|
-| `false` | N/A | Offline evaluation (not periodic) |
-| `true` | `true` | Online evaluation **running** (executes on ticks) |
-| `true` | `false` | Online evaluation **paused** (skipped on ticks) |
-
-**Use cases:**
-- **Pause online evaluation:** Set `is_active = false` to temporarily stop execution without deleting the run
-- **Resume online evaluation:** Set `is_active = true` to restart execution
-- **Debugging:** Pause problematic evaluations without losing configuration
-
-**Behavior on periodic tick:**
-```python
-# Periodic scheduler (e.g., every hour)
-for run in get_online_evaluations():
- if run.is_live and run.is_active:
- # Execute this online evaluation
- await execute_live_evaluation(run)
- elif run.is_live and not run.is_active:
- # Skip - evaluation is paused
- continue
-```
-
-**Status:** Likely implemented (needs verification)
-
----
-
-### Graph Configuration Flags
-
-These are the key flags that control evaluation behavior:
-
----
-
-#### 2. `repeat_target` (CRITICAL - Currently Implicit)
-**Current state:** Hardcoded (location TBD in code)
-**Current value:** Unknown (needs investigation)
-**Type:** `Literal["application", "evaluator"]`
-
-**Purpose:** Determines where repeats are applied in the graph
-
-This is a **critical degree of freedom** that fundamentally changes:
-- What variability is being measured
-- Tensor structure (rows vs columns)
-- Execution order
-- Cost (app invocations vs evaluator invocations)
-
----
-
-##### `repeat_target = "application"` (Test Application Variability)
-
-**Fanout location:** Between inputs and application invocations
-
-**What's being tested:** Variability/consistency of the application under test
-
-**Graph structure:**
-```
-Input 1 → Application (repeat 1) → Evaluator 1
- → Evaluator 2
- → Application (repeat 2) → Evaluator 1
- → Evaluator 2
- → Application (repeat 3) → Evaluator 1
- → Evaluator 2
-
-Input 2 → Application (repeat 1) → Evaluator 1
- → Evaluator 2
- → Application (repeat 2) → Evaluator 1
- → Evaluator 2
- ...
-```
-
-**Execution flow:**
-```python
-for testcase in testcases:
- for repeat_idx in range(repeats): # REPEAT HERE
- scenario = create_scenario(
- testcase=testcase,
- repeat_idx=repeat_idx,
- )
-
- # Invoke application (different each repeat)
- outputs = invoke_application(testcase.inputs)
-
- # Invoke evaluators (once per app repeat)
- for evaluator in evaluators:
- metrics = invoke_evaluator(testcase, outputs)
-```
-
-**Tensor structure:**
-```
-Rows: Scenarios (Input × Repeat)
-Cols: Steps (Testset, Applications, Evaluators)
-
- Testset App-1 App-2 Eval-1 Eval-2 Eval-3
-Input-1-r1 ✓ ✓ ✓ ✓ ✓ ✓
-Input-1-r2 ✓ ✓ ✓ ✓ ✓ ✓
-Input-1-r3 ✓ ✓ ✓ ✓ ✓ ✓
-Input-2-r1 ✓ ✓ ✓ ✓ ✓ ✓
-Input-2-r2 ✓ ✓ ✓ ✓ ✓ ✓
-Input-2-r3 ✓ ✓ ✓ ✓ ✓ ✓
-
-Each row = one scenario (input + repeat index)
-Each column = one step (evaluators run once per row)
-```
-
-**Use cases:**
-- Testing LLM temperature/sampling variability: "How consistent is GPT-4 at temp=0.7?"
-- Testing RAG retrieval variability: "Do we get different docs each time?"
-- A/B testing with random assignment: "Does feature flag affect results?"
-- Measuring baseline noise: "What's the natural variation in our application?"
-
-**Cost implications:**
-- Application invoked: `num_inputs × repeats` times
-- Evaluators invoked: `num_inputs × repeats × num_evaluators` times
-- Example: 100 inputs, 3 repeats, 2 evaluators = 300 app calls, 600 evaluator calls
-
----
-
-##### `repeat_target = "evaluator"` (Test Evaluator Variability)
-
-**Fanout location:** Between application outputs and evaluator invocations
-
-**What's being tested:** Variability/consistency of the evaluators
-
-**Graph structure:**
-```
-Input 1 → Application (once) → Evaluator 1 (repeat 1)
- → Evaluator 1 (repeat 2)
- → Evaluator 1 (repeat 3)
- → Evaluator 2 (repeat 1)
- → Evaluator 2 (repeat 2)
- → Evaluator 2 (repeat 3)
-
-Input 2 → Application (once) → Evaluator 1 (repeat 1)
- → Evaluator 1 (repeat 2)
- ...
-```
-
-**Execution flow:**
-```python
-for testcase in testcases:
- scenario = create_scenario(testcase=testcase)
-
- # Invoke application (ONCE per input)
- outputs = invoke_application(testcase.inputs)
-
- # Invoke evaluators (REPEAT HERE)
- for evaluator in evaluators:
- for repeat_idx in range(repeats):
- metrics = invoke_evaluator(testcase, outputs)
- log_result(
- scenario=scenario,
- step_key=f"{evaluator.id}-r{repeat_idx}",
- metrics=metrics,
- )
-```
-
-**Tensor structure:**
-```
-Rows: Scenarios (Input only, no repeat dimension)
-Cols: Steps (Testset, Applications, Evaluators × Repeats)
-
- Testset App-1 Eval-1-r1 Eval-1-r2 Eval-1-r3 Eval-2-r1 Eval-2-r2 Eval-2-r3
-Input-1 ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
-Input-2 ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
-Input-3 ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
-
-Each row = one scenario (input only)
-Each column = one step (evaluators have repeat dimension)
-```
-
-**Use cases:**
-- Testing human evaluator agreement: "Do 3 humans agree on quality score?"
-- Testing LLM-as-judge consistency: "How stable is GPT-4 as an evaluator?"
-- Ensemble evaluation: "Get multiple independent judgments, aggregate later"
-- Inter-rater reliability: "Measure Cohen's kappa across evaluator repeats"
-
-**Cost implications:**
-- Application invoked: `num_inputs` times (no repeat multiplier!)
-- Evaluators invoked: `num_inputs × num_evaluators × repeats` times
-- Example: 100 inputs, 3 repeats, 2 evaluators = 100 app calls, 600 evaluator calls
-
-**Key difference:** Much cheaper when applications are expensive (e.g., long-running workflows, API costs)
-
----
-
-##### Comparison Table
-
-| Aspect | `repeat_target = "application"` | `repeat_target = "evaluator"` |
-|--------|----------------------------------|-------------------------------|
-| **Fanout location** | Input → Application | Application → Evaluator |
-| **What's tested** | Application variability | Evaluator variability |
-| **Scenario dimension** | Input × Repeat | Input only |
-| **Step dimension** | Evaluators (no repeat) | Evaluators × Repeat |
-| **Tensor rows** | `num_inputs × repeats` | `num_inputs` |
-| **Tensor cols** | `num_steps` | `num_steps × repeats` |
-| **App invocations** | `inputs × repeats` | `inputs` |
-| **Eval invocations** | `inputs × repeats × evals` | `inputs × evals × repeats` |
-| **Typical use case** | LLM consistency, RAG variability | Human agreement, LLM-judge stability |
-
----
-
-##### Current Implementation Status
-
-**Status:** HARDCODED (exact mode needs investigation)
-
-**Likely location in code:**
-- SDK: `sdk/agenta/sdk/evaluations/preview/evaluate.py` (check where `repeats` is used)
-- API: May not be implemented yet
-
-**Questions to answer:**
-1. ✅ Is `repeats` currently implemented?
-2. ✅ If yes, which mode is hardcoded? (`application` or `evaluator`)
-3. ✅ Where in the loop does the repeat happen?
-4. ✅ How does it affect scenario creation?
-5. ✅ How does it affect the tensor structure in practice?
-
-**Future requirement:**
-- Make `repeat_target` an explicit flag in graph definition
-- Support both modes
-- Default to `application` for backward compatibility (if that's current behavior)
-- Add validation: `repeat_target = "application"` requires application nodes in graph
-
----
-
-#### 3. `reuse_traces` (CRITICAL - Currently Implicit)
-**Current state:** Hardcoded (location TBD in code)
-**Current value:** Unknown (likely `false` - needs investigation)
-**Type:** `boolean`
-
-**Purpose:** Avoid re-computing expensive workflows by reusing existing traces with matching inputs
-
-This is a **critical optimization** that enables:
-- Cost savings (reuse expensive LLM calls, long-running workflows)
-- Reproducibility (use same outputs across evaluations)
-- Faster iteration (skip computation, reuse results)
-
----
-
-##### Trace Reuse Mechanism
-
-**1. Compute stable hash:**
-```python
-hash = compute_hash(
- node_config=node.config,
- inputs=inputs,
- references=references,
- links=links,
-)
-```
-
-**Utility location:** `compute_hash()` (exists in codebase - needs verification)
-
-**Hash represents:** "What this computation means" - deterministic based on:
-- Node configuration (workflow, parameters)
-- Inputs (testcase data, upstream outputs)
-- References (testset, application, evaluator IDs/versions)
-- Links (upstream trace IDs, span IDs)
-
----
-
-**2. Hash-based trace lookup:**
-
-**Key property:** Hash is **NOT a primary key** (one-to-many relationship)
-- Multiple traces can share the same hash (from different runs, repeats)
-- Fetch traces by hash index
-- Filter out failed traces (with exceptions/errors)
-
-**Lookup logic:**
-```python
-if reuse_traces:
- hash = compute_hash(node, inputs, references, links)
-
- # Fetch all traces matching this hash
- existing_traces = fetch_traces_by_hash(
- hash=hash,
- exclude_errors=True, # Only successful traces
- )
-
- if existing_traces:
- # Reuse existing trace
- trace = select_trace(existing_traces)
- return trace
- else:
- # No existing trace, compute fresh
- trace = invoke_workflow(node, inputs)
- return trace
-else:
- # Always compute fresh (ignore hash)
- trace = invoke_workflow(node, inputs)
- return trace
-```
-
----
-
-##### Critical Interaction with `repeat_target`
-
-The `reuse_traces` flag behaves differently depending on `repeat_target`:
-
----
-
-###### Case 1: `repeat_target = "application"` + `reuse_traces = true`
-
-**Constraint:** **CANNOT reuse same trace across repeats** within the same evaluation
-
-**Reason:** Testing application variability requires different outputs for each repeat
-
-**Behavior:**
-```python
-for testcase in testcases:
- hash = compute_hash(testcase, application_config, ...)
- existing_traces = fetch_traces_by_hash(hash, exclude_errors=True)
-
- for repeat_idx in range(repeats):
- if existing_traces and len(existing_traces) > repeat_idx:
- # Reuse DIFFERENT trace for each repeat
- trace = existing_traces[repeat_idx]
- else:
- # Need to compute fresh trace
- trace = invoke_application(testcase.inputs)
-
- # Create scenario with this trace
- scenario = create_scenario(
- testcase=testcase,
- trace_id=trace.id,
- repeat_idx=repeat_idx,
- )
-```
-
-**Requirements:**
-- Fetch **multiple different traces** from hash index (one per repeat)
-- If not enough traces cached, compute additional ones
-- Each repeat gets a different trace (even if inputs are identical)
-
-**Example:**
-```
-Evaluation run 1 (reuse_traces=false):
- Input-1, repeat-1: Compute trace_a
- Input-1, repeat-2: Compute trace_b
- Input-1, repeat-3: Compute trace_c
- → All 3 traces stored with same hash
-
-Evaluation run 2 (reuse_traces=true):
- Input-1, repeat-1: Reuse trace_a (from hash)
- Input-1, repeat-2: Reuse trace_b (from hash)
- Input-1, repeat-3: Reuse trace_c (from hash)
- → No computation needed!
-```
-
----
-
-###### Case 2: `repeat_target = "evaluator"` + `reuse_traces = true`
-
-**Constraint:** **MUST reuse same trace across evaluator repeats** within the same evaluation
-
-**Reason:** Testing evaluator variability requires the same app output for all repeats
-
-**Behavior:**
-```python
-for testcase in testcases:
- hash = compute_hash(testcase, application_config, ...)
- existing_traces = fetch_traces_by_hash(hash, exclude_errors=True)
-
- if existing_traces:
- # Reuse SAME trace for all evaluator repeats
- trace = existing_traces[0] # Pick any one
- else:
- # Compute fresh trace
- trace = invoke_application(testcase.inputs)
-
- # Create single scenario (no repeat dimension)
- scenario = create_scenario(
- testcase=testcase,
- trace_id=trace.id,
- )
-
- # All evaluator repeats use this same trace
- for evaluator in evaluators:
- for repeat_idx in range(repeats):
- metrics = invoke_evaluator(
- testcase=testcase,
- outputs=trace.outputs, # Same for all repeats
- )
-```
-
-**Requirements:**
-- Fetch **single trace** from hash index
-- All evaluator repeats use this same trace
-- If multiple traces available (from previous runs), pick any one
-
-**Example:**
-```
-Evaluation run 1 (reuse_traces=false):
- Input-1: Compute trace_a
- Evaluator-1, repeat-1: Evaluate trace_a
- Evaluator-1, repeat-2: Evaluate trace_a (same!)
- Evaluator-1, repeat-3: Evaluate trace_a (same!)
- → Only 1 trace computed, evaluated 3 times
-
-Evaluation run 2 (reuse_traces=true):
- Input-1: Reuse trace_a (from hash)
- Evaluator-1, repeat-1: Evaluate trace_a (same!)
- Evaluator-1, repeat-2: Evaluate trace_a (same!)
- Evaluator-1, repeat-3: Evaluate trace_a (same!)
- → No computation needed!
-```
-
----
-
-##### Comparison Table
-
-| Aspect | `repeat_target = "application"` | `repeat_target = "evaluator"` |
-|--------|----------------------------------|-------------------------------|
-| **Trace reuse constraint** | Different trace per repeat | Same trace across repeats |
-| **Traces fetched per input** | `repeats` traces | `1` trace |
-| **Trace selection** | `existing_traces[repeat_idx]` | `existing_traces[0]` (any) |
-| **Variability source** | Application (different traces) | Evaluator (same trace) |
-| **Scenario creation** | One per repeat (with trace_id) | One per input (reused trace_id) |
-
----
-
-##### Scenario Creation with Trace Reuse
-
-Even when reusing traces, scenarios are still created:
-
-**Case 1: `repeat_target = "application"`**
-```python
-# Multiple scenarios (one per repeat), each with different trace
-scenario_1 = Scenario(
- testcase_id=testcase.id,
- trace_id=trace_a.id, # Reused or fresh
- repeat_idx=0,
-)
-
-scenario_2 = Scenario(
- testcase_id=testcase.id,
- trace_id=trace_b.id, # Different trace
- repeat_idx=1,
-)
-
-scenario_3 = Scenario(
- testcase_id=testcase.id,
- trace_id=trace_c.id, # Different trace
- repeat_idx=2,
-)
-```
-
-**Case 2: `repeat_target = "evaluator"`**
-```python
-# Single scenario, same trace reused across evaluator repeats
-scenario = Scenario(
- testcase_id=testcase.id,
- trace_id=trace_a.id, # Reused or fresh, but same for all evals
-)
-
-# Evaluators reference this same scenario/trace
-result_1 = EvaluationResult(
- scenario_id=scenario.id,
- step_key="evaluator-1-r0",
- trace_id=evaluator_trace_1.id,
-)
-
-result_2 = EvaluationResult(
- scenario_id=scenario.id, # Same scenario!
- step_key="evaluator-1-r1",
- trace_id=evaluator_trace_2.id,
-)
-```
-
----
-
-##### Filtering and Selection
-
-**Filter failed traces:**
-```python
-existing_traces = fetch_traces_by_hash(
- hash=hash,
- exclude_errors=True, # Only successful traces
-)
-```
-
-**Selection when multiple available:**
-- Order doesn't matter (everything is stochastic)
-- Can pick traces in any order (e.g., by creation time, random)
-- As long as different traces are used for different application repeats
-
-**Example:**
-```python
-# Fetch traces by hash
-traces = [trace_a, trace_b, trace_c, trace_d] # All have same hash
-
-# Application repeats: Use different traces
-repeat_0_trace = traces[0] # trace_a
-repeat_1_trace = traces[1] # trace_b
-repeat_2_trace = traces[2] # trace_c
-
-# Evaluator repeats: Use same trace
-all_repeats_trace = traces[0] # trace_a (any one is fine)
-```
-
----
-
-##### Use Cases
-
-**With `repeat_target = "application"`:**
-- Caching expensive app runs: "Run GPT-4 once, reuse across evaluations"
-- A/B testing with fixed outputs: "Test different evaluators on same app outputs"
-- Debugging: "Fix evaluator bug, re-evaluate without re-running app"
-
-**With `repeat_target = "evaluator"`:**
-- Measuring human evaluator agreement: "Same output judged by multiple humans"
-- LLM-as-judge stability: "Same output scored by LLM multiple times"
-- Cost optimization: "Run app once, test evaluator variability cheaply"
-
----
-
-##### Current Implementation Status
-
-**Status:** Unknown - needs investigation
-
-**Likely locations in code:**
-- Hash computation: Utility function `compute_hash()` or similar
-- Trace lookup: Tracing service or DAO with hash index
-- SDK: May not be implemented yet
-- API: May exist in some form
-
-**Questions to answer:**
-1. ✅ Is trace reuse currently implemented?
-2. ✅ Where is `compute_hash()` located?
-3. ✅ Is there a hash index on traces table?
-4. ✅ How are traces fetched by hash?
-5. ✅ Does it filter out failed traces?
-6. ✅ How does it interact with repeats?
-
-**Future requirements:**
-- Make `reuse_traces` an explicit flag in graph definition
-- Implement hash-based trace lookup if not present
-- Add validation: `repeat_target = "application"` + `reuse_traces = true` requires enough cached traces
-- Document hash computation algorithm
-
----
-
-#### 4. `is_closed` (State Management - Likely Implemented)
-**Current state:** Likely implemented
-**Current value:** `false` by default, set to `true` when evaluation is finalized
-**Type:** `boolean`
-
-**Purpose:** Controls whether the evaluation graph and tensor are editable
-
-**Behavior:**
-
-##### When `is_closed = false` (Open - Default)
-- ✅ Can modify graph structure
-- ✅ Can add/edit/delete scenarios
-- ✅ Can add/edit/delete results
-- ✅ Can re-run evaluation
-- ✅ Can edit metadata (name, description)
-
-##### When `is_closed = true` (Closed - Finalized)
-- ❌ **Cannot** modify graph structure
-- ❌ **Cannot** add/edit/delete scenarios
-- ❌ **Cannot** add/edit/delete results
-- ❌ **Cannot** re-run evaluation (execution blocked)
-- ✅ **Can still** edit metadata (name, description)
-- ✅ **Can** reopen (with appropriate permissions/operations)
-
-**Enforcement:**
-- **DAO level:** Database operations fail for closed evaluations
-- **API level:** Returns error (e.g., 409 Conflict, 403 Forbidden)
-- **UI level:** Disable edit buttons, show read-only mode
-
-**Reopening:**
-```python
-# Some operations can reopen a closed evaluation
-await evaluations_dao.update_run(
- run_id=run_id,
- is_closed=False, # Reopen
-)
-```
-
-**Use cases:**
-- **Finalize results:** Prevent accidental modification after review
-- **Archival:** Mark completed evaluations as read-only
-- **Compliance:** Lock evaluations for audit trail
-- **Versioning:** Freeze evaluation state at specific point in time
-
-**Metadata operations (allowed when closed):**
-- Update run name
-- Update run description
-- Add tags/labels
-- Change visibility/permissions
-
-**Status:** Likely implemented (needs verification)
-
----
-
-## Summary: Confirmed Flags
-
-| Flag | Type | Purpose | Status |
-|------|------|---------|--------|
-| `is_live` | `boolean` | Online (periodic) vs offline (one-time) execution | ✅ Explicit |
-| `is_active` | `boolean` | Pause/resume online evaluations | ✅ Explicit (companion to `is_live`) |
-| `repeat_target` | `"application" \| "evaluator"` | Where repeats fan out (critical for tensor structure) | ⚠️ Currently implicit |
-| `reuse_traces` | `boolean` | Cost optimization via trace caching | ⚠️ Currently implicit |
-| `is_closed` | `boolean` | Lock evaluation to prevent edits | ✅ Explicit (state management) |
-
----
-
-## Future Considerations (Not Confirmed as Flags)
-
-The following behaviors may need to be configurable in the future, but are not currently discussed as flags:
-
-### Execution Behavior
-- **Concurrency:** Sequential vs parallel scenario execution
-- **Error handling:** Fail fast vs collect all errors
-- **Application invocation:** Whether to invoke apps (currently determined by graph structure)
-
-### Metrics Computation
-- **Timing:** Immediate vs deferred vs on-demand
-- **Scope:** Per-scenario vs per-run
-- **Current behavior:** SDK computes immediately, API defers to separate task
-
-These should be documented separately if/when they become explicit configuration options.
-
----
-
-## Data Source Types
-
-### 1. Testset Data Source
-
-**Structure:**
-```python
-class TestsetDataSource:
- type: Literal["testset"]
- testset_id: UUID
- testset_revision_id: UUID
- testset_variant_id: Optional[UUID]
-```
-
-**Resolution:**
-```python
-async def resolve_testset_scenarios(
- data_source: TestsetDataSource,
-) -> list[Scenario]:
- """
- Load test cases from testset revision.
-
- Returns one scenario per test case.
- """
- testset_revision = await testsets_dao.get_revision(
- testset_revision_id=data_source.testset_revision_id,
- )
-
- scenarios = []
- for testcase in testset_revision.testcases:
- scenarios.append(
- Scenario(
- data_source_type="testset",
- testcase=testcase,
- )
- )
-
- return scenarios
-```
-
-**Properties:**
-- **Static:** Same test cases every execution
-- **Bounded:** Known size (number of test cases)
-- **Versioned:** Tied to specific revision
-- **Portable:** Can be shared across projects
-
-**Compatible with:**
-- ✅ Offline evaluation
-- ❌ Online evaluation
-
----
-
-### 2. Query Data Source
-
-**Structure:**
-```python
-class QueryDataSource:
- type: Literal["query"]
- query_spec: QuerySpec
- time_window: Optional[TimeWindow]
-
-class QuerySpec:
- filters: dict[str, Any]
- limit: Optional[int]
- order_by: Optional[str]
-
-class TimeWindow:
- start_time: datetime
- end_time: datetime
-```
-
-**Resolution (Offline):**
-```python
-async def resolve_query_scenarios_offline(
- data_source: QueryDataSource,
-) -> list[Scenario]:
- """
- Execute query once, return snapshot of traces.
-
- Returns one scenario per trace.
- """
- traces = await tracing_service.query_traces(
- filters=data_source.query_spec.filters,
- start_time=data_source.time_window.start_time,
- end_time=data_source.time_window.end_time,
- limit=data_source.query_spec.limit,
- )
-
- scenarios = []
- for trace in traces:
- scenarios.append(
- Scenario(
- data_source_type="query",
- trace=trace,
- )
- )
-
- return scenarios
-```
-
-**Resolution (Online):**
-```python
-async def resolve_query_scenarios_online(
- data_source: QueryDataSource,
- interval_start: datetime,
- interval_end: datetime,
-) -> list[Scenario]:
- """
- Execute query for current interval window.
-
- Overwrites data_source.time_window with interval bounds.
- Returns one scenario per trace.
- """
- traces = await tracing_service.query_traces(
- filters=data_source.query_spec.filters,
- start_time=interval_start, # Overwritten!
- end_time=interval_end, # Overwritten!
- limit=data_source.query_spec.limit,
- )
-
- scenarios = []
- for trace in traces:
- scenarios.append(
- Scenario(
- data_source_type="query",
- trace=trace,
- timestamp=interval_start, # Online-specific
- interval=f"{interval_end - interval_start}", # Online-specific
- )
- )
-
- return scenarios
-```
-
-**Properties:**
-- **Dynamic:** Different traces every execution (if time window changes)
-- **Unbounded:** Size depends on query results (use `limit` for safety)
-- **Temporal:** Can be windowed by time
-- **Live:** Reflects current system state
-
-**Compatible with:**
-- ✅ Offline evaluation (snapshot)
-- ✅ Online evaluation (windowed)
-
----
-
-## Tensor Structure
-
-The evaluation tensor is the data structure that holds all results produced by running a graph. It is a 3D table indexed by **scenarios × steps × repeats**, stored as five related entities.
-
----
-
-### Five Entities
-
-```
-EvaluationRun
-└── EvaluationScenario (one per row)
- └── step_key (column label — string, not an entity)
- └── repeat_idx (depth label — integer, not an entity)
- └── EvaluationResult (the cell)
-```
-
-| Entity | Nature | Description |
-|--------|--------|-------------|
-| `EvaluationRun` | Entity (DB row) | The evaluation job. Owns the graph definition and all flag values. |
-| `EvaluationScenario` | Entity (DB row) | One row in the tensor. Represents one input × (optionally) one application repeat. |
-| `step_key` | String label | Column label — identifies which graph step produced the result (e.g. `"app-123"`, `"eval-456"`, `"eval-456-r2"`). |
-| `repeat_idx` | Integer label | Depth label — which evaluator repeat this result belongs to (0-based). |
-| `EvaluationResult` | Entity (DB row) | The cell. Identified by `(scenario_id, step_key, repeat_idx)`. |
-
-**There is no dedicated "Step" or "Repeat" entity** — `step_key` and `repeat_idx` are fields on the result row, forming a composite key together with `scenario_id`.
-
----
-
-### Tensor Dimensions
-
-#### Rows: Scenarios
-
-Each `EvaluationScenario` is one row. Its meaning depends on `repeat_target`:
-
-| `repeat_target` | Row = |
-|-----------------|-------|
-| `"application"` | One input × one application repeat (repeat dimension is in the row) |
-| `"evaluator"` | One input (repeat dimension is in the column) |
-
-For online evaluations (`is_live = true`), each scenario also carries:
-- `timestamp`: The start of the interval that produced it
-- `interval`: The interval duration (e.g. `"1h"`)
-
-#### Columns: Steps
-
-Each distinct `step_key` is one logical column. Step keys are stable strings derived from the graph node identity:
-
-```
-"testset-{testset_id}" ← testset node result
-"app-{application_revision_id}" ← application node result
-"eval-{evaluator_revision_id}" ← evaluator node result (no repeat)
-"eval-{evaluator_revision_id}-r{repeat_idx}" ← evaluator repeat (repeat_target="evaluator")
-```
-
-#### Depth: Repeats
-
-`repeat_idx` is the 0-based repeat index. Its role depends on `repeat_target`:
-
-| `repeat_target` | `repeat_idx` in result |
-|-----------------|------------------------|
-| `"application"` | Always `0` (repeats are rows, not depth) |
-| `"evaluator"` | `0..N-1` across evaluator repeats |
-
-In practice, for `repeat_target = "application"`, the scenario itself carries the repeat index, and results within a scenario have `repeat_idx = 0`.
-
----
-
-### EvaluationResult: the Cell
-
-**Composite key:** `(scenario_id, step_key, repeat_idx)`
-
-There is no dedicated UUID primary key for a result — the three-field composite uniquely identifies the cell.
-
-#### Result Content: By Reference Only
-
-Results do **not** copy values inline. They store references:
-
-```python
-class EvaluationResult:
- # Identity
- scenario_id: UUID
- step_key: str
- repeat_idx: int
-
- # References (no inline values)
- testcase_id: Optional[UUID] # Reference to the testcase used as input
- trace_id: Optional[UUID] # Reference to the execution trace (app or evaluator)
- error: Optional[str] # Error message if the step failed
-
- # Status
- status: EvaluationStatus # pending | running | completed | failed
-```
-
-**Key principle:** To read the actual inputs or outputs of a result, you follow the reference to the trace and read it there. The result row is only a pointer.
-
-**Why by reference:**
-- Traces are already stored in the tracing system with full span detail
-- Copying data into results would duplicate storage and create drift
-- Metrics computation reads trace IDs from results and queries the tracing system directly
-
----
-
-### Tensor Population Flow
-
-The tensor is populated in three stages that correspond to the execution lifecycle:
-
-```
-1. Create EvaluationRun → Defines graph, flags, metadata
- (tensor shape is implied by graph + inputs)
-
-2. Create EvaluationScenario → Adds a row
- Happens as inputs are enumerated
- (one per testcase for offline; one per trace for online)
-
-3. Create/Update EvaluationResult → Populates a cell
- Happens as each step completes
- (one per scenario × step × repeat)
-```
-
-**Example: Offline testset evaluation (2 testcases, 1 application, 2 evaluators, 1 repeat)**
-
-```
-Stage 1: Create run
- run_id = "run-abc"
-
-Stage 2: Create scenarios (2 rows)
- scenario_1 = Scenario(run_id="run-abc", testcase_id="tc-1")
- scenario_2 = Scenario(run_id="run-abc", testcase_id="tc-2")
-
-Stage 3: Populate cells
- # Application step
- result(scenario_1, step_key="app-rev-1", repeat_idx=0) = { trace_id: "trace-a1" }
- result(scenario_2, step_key="app-rev-1", repeat_idx=0) = { trace_id: "trace-a2" }
-
- # Evaluator steps
- result(scenario_1, step_key="eval-rev-1", repeat_idx=0) = { trace_id: "trace-e1" }
- result(scenario_1, step_key="eval-rev-2", repeat_idx=0) = { trace_id: "trace-e2" }
- result(scenario_2, step_key="eval-rev-1", repeat_idx=0) = { trace_id: "trace-e3" }
- result(scenario_2, step_key="eval-rev-2", repeat_idx=0) = { trace_id: "trace-e4" }
-```
-
-Resulting tensor:
-
-```
- app-rev-1 eval-rev-1 eval-rev-2
-scenario_1 trace-a1 trace-e1 trace-e2
-scenario_2 trace-a2 trace-e3 trace-e4
-```
-
----
-
-### Metrics
-
-Metrics are **separate entities** from the tensor cells. They are computed after results are collected, by fetching trace IDs from results and running SQL aggregations over the traces.
-
-#### Metrics Computation
-
-```
-1. Fetch results for the run (or scenario)
-2. Extract trace_ids from those results
-3. Query the tracing system for those trace IDs
-4. Run SQL aggregations over the trace data
-5. Write metrics entity
-```
-
-This means metrics are always **derived, not stored inline**. They can be recomputed at any time by repeating steps 1–5.
-
-#### Three Metrics Types
-
-| Type | Scope | Compatible with | Description |
-|------|-------|-----------------|-------------|
-| **Global** | Entire run (all scenarios × all repeats) | `is_live = false` (offline only) | Aggregate statistics across the full evaluation |
-| **Variational** | Per scenario (across all repeats for that scenario) | Both | Per-input statistics, showing variation across repeats |
-| **Temporal** | Per interval / timestamp | `is_live = true` (online only) | Global statistics binned by time interval |
-
----
-
-#### Global Metrics (Offline Only)
-
-**Scope:** All scenarios × all repeats in the run.
-
-**Structure:** Per step → per output key → statistics.
-
-```python
-class GlobalMetrics:
- run_id: UUID
-
- # Nested: step → output_key → stats
- steps: dict[str, dict[str, MetricStats]]
- # step_key output_key
-
-class MetricStats:
- # Numeric outputs
- mean: Optional[float]
- std: Optional[float]
- min: Optional[float]
- max: Optional[float]
- p50: Optional[float]
- p95: Optional[float]
- count: int
-
- # Categorical / score outputs
- distribution: Optional[dict[str, int]] # value → count
-```
-
-**Example:**
-```python
-GlobalMetrics(
- run_id="run-abc",
- steps={
- "eval-rev-1": {
- "score": MetricStats(mean=0.72, std=0.15, p50=0.75, count=50),
- "category": MetricStats(distribution={"pass": 38, "fail": 12}),
- },
- "eval-rev-2": {
- "latency_ms": MetricStats(mean=320, p95=850, count=50),
- },
- }
-)
-```
-
-**Not available for online evaluations** — there is no well-defined "total" population for a continuously-running evaluation; use Temporal metrics instead.
-
----
-
-#### Variational Metrics (Both Modes)
-
-**Scope:** Per scenario, across all repeats for that scenario.
-
-**Purpose:** Show how variable the results are for a given input. For `repeat_target = "application"` this reveals application stochasticity; for `repeat_target = "evaluator"` it reveals evaluator disagreement.
-
-**Structure:** Same nested structure as Global, but one entity per scenario.
-
-```python
-class VariationalMetrics:
- scenario_id: UUID
-
- # Nested: step → output_key → stats (across repeats for this scenario)
- steps: dict[str, dict[str, MetricStats]]
- # step_key output_key
-```
-
-**Example:**
-```python
-VariationalMetrics(
- scenario_id="scenario-1", # Input: "What is 2+2?"
- steps={
- "eval-rev-1": {
- # 3 repeats scored this input as: 0.8, 0.7, 0.9
- "score": MetricStats(mean=0.8, std=0.082, min=0.7, max=0.9, count=3),
- },
- }
-)
-```
-
-**Available for both offline and online evaluations.**
-
----
-
-#### Temporal Metrics (Online Only)
-
-**Scope:** Per time interval (aggregated across all scenarios in that interval).
-
-**Purpose:** Show how quality changes over time in a live evaluation.
-
-**Structure:** Same as Global, but keyed by interval.
-
-```python
-class TemporalMetrics:
- run_id: UUID
- interval_start: datetime
- interval_end: datetime
-
- # Nested: step → output_key → stats (all scenarios in this interval)
- steps: dict[str, dict[str, MetricStats]]
- # step_key output_key
-```
-
-**Example:**
-```python
-TemporalMetrics(
- run_id="run-abc",
- interval_start=datetime(2026, 2, 17, 10, 0),
- interval_end=datetime(2026, 2, 17, 11, 0),
- steps={
- "eval-rev-1": {
- "score": MetricStats(mean=0.68, count=42),
- },
- }
-)
-```
-
-**Not available for offline evaluations** — offline runs have no meaningful interval breakdown; use Global metrics instead.
-
----
-
-#### Metrics Compatibility Summary
-
-| Metrics Type | Offline (`is_live = false`) | Online (`is_live = true`) |
-|--------------|-----------------------------|-----------------------------|
-| **Global** | ✅ Primary aggregate view | ❌ Not applicable |
-| **Variational** | ✅ Per-input variation | ✅ Per-input variation |
-| **Temporal** | ❌ Not applicable | ✅ Primary time-series view |
-
----
-
-#### Metrics Entity Relationship
-
-```
-EvaluationRun
-├── GlobalMetrics (1 per run, offline only)
-├── TemporalMetrics (N per run, online only — one per interval)
-└── EvaluationScenario (N per run)
- ├── VariationalMetrics (1 per scenario)
- └── EvaluationResult (M per scenario — one per step × repeat)
- └── → trace_id (reference into tracing system)
-```
-
----
-
-## Current Graph Structures
-
-### Structure 1: Batch Testset Evaluation (SDK)
-
-**Current implementation:** `sdk/agenta/sdk/evaluations/preview/evaluate.py`
-
-**Graph:**
-```
-Testset → Application(s) → Evaluator(s)
-```
-
-**Nodes:**
-- 1 Testset node
-- N Application nodes
-- M Evaluator nodes
-
-**Execution:**
-```
-For each testcase in testset:
- scenario = create_scenario()
-
- For each application:
- outputs = invoke_application(testcase.inputs)
- log_result(scenario, application, outputs)
-
- For each evaluator:
- metrics = invoke_evaluator(testcase, application.outputs)
- log_result(scenario, evaluator, metrics)
-
- compute_metrics(scenario)
-```
-
-**Flags:**
-- `is_live = false` (offline)
-- `application_required = true` (implicit)
-- `concurrent_execution = false` (implicit)
-
----
-
-### Structure 2: Batch Testset Evaluation (API Legacy)
-
-**Current implementation:** `api/oss/src/core/evaluations/tasks/legacy.py`
-
-**Graph:**
-```
-Testset → [Applications already invoked] → Evaluator(s)
-```
-
-**Nodes:**
-- 1 Testset node
-- N Application nodes (invoked separately, before this task)
-- M Evaluator nodes
-
-**Execution:**
-```
-# Applications already invoked, results available as "invocations"
-
-For each testcase:
- scenario = scenarios[idx] # Already created
- invocation = invocations[idx] # Already executed
-
- If invocation has error:
- skip evaluators
-
- trace = fetch_trace(invocation.trace_id)
-
- For each evaluator:
- metrics = invoke_evaluator(testcase, invocation.outputs)
- log_result(scenario, evaluator, metrics)
-
-# Metrics computed later via separate task
-```
-
-**Flags:**
-- `is_live = false` (offline)
-- `application_required = true` (but invoked separately)
-- `concurrent_execution = false` (implicit)
-- `metrics_computation_mode = "deferred"` (implicit)
-
----
-
-### Structure 3: Live Query Evaluation (API)
-
-**Current implementation:** `api/oss/src/core/evaluations/tasks/live.py`
-
-**Graph:**
-```
-Query → Evaluator(s)
-```
-
-**Nodes:**
-- 1 Query node
-- M Evaluator nodes
-- **No application nodes** (evaluates existing traces)
-
-**Execution:**
-```
-For each interval (e.g., hourly):
- # Overwrite query time window with current interval
- traces = query_traces(
- filters=query_spec.filters,
- start_time=interval_start, # Overwritten
- end_time=interval_end, # Overwritten
- )
-
- scenarios = create_scenarios(
- nof_scenarios=len(traces),
- timestamp=interval_start,
- interval=interval_duration,
- )
-
- For each trace:
- scenario = scenarios[idx]
-
- For each evaluator:
- metrics = invoke_evaluator(trace, trace.outputs)
- log_result(scenario, evaluator, metrics)
-
-# Metrics computed later via separate task
-```
-
-**Flags:**
-- `is_live = true` (online)
-- `application_required = false` (implicit - no apps invoked)
-- `concurrent_execution = false` (implicit)
-- `metrics_computation_mode = "deferred"` (implicit)
-
----
-
-## Future Graph Structures
-
-### Structure 4: Multi-Application Comparison (Future)
-
-**Use case:** Compare multiple application variants on the same testset
-
-**Graph:**
-```
-Testset → Application A → Evaluator 1
- → Application B → Evaluator 1
- → Application C → Evaluator 1
-```
-
-**Challenge:**
-- Current implementation evaluates all evaluators against each application
-- Need to support: All applications evaluated by the same evaluators
-
-**Desired execution:**
-```
-For each testcase:
- scenario = create_scenario()
-
- outputs_by_app = {}
- For each application:
- outputs = invoke_application(testcase.inputs)
- outputs_by_app[application.id] = outputs
- log_result(scenario, application, outputs)
-
- For each evaluator:
- For each application:
- metrics = invoke_evaluator(testcase, outputs_by_app[application.id])
- log_result(scenario, f"{evaluator.id}-{application.id}", metrics)
-```
-
-**New requirement:**
-- Evaluators need access to ALL application outputs for comparison
-- Graph edges must specify which app outputs go to which evaluators
-
----
-
-### Structure 5: Chained Applications (Future)
-
-**Use case:** Multi-step workflows (e.g., retrieval → generation → verification)
-
-**Graph:**
-```
-Testset → Retrieval App → Generation App → Verification App → Evaluator
-```
-
-**Challenge:**
-- Current implementation assumes applications are independent
-- Need to support: Application B takes Application A's outputs as inputs
-
-**Desired execution:**
-```
-For each testcase:
- scenario = create_scenario()
-
- # Step 1: Retrieval
- retrieval_outputs = invoke_application(retrieval_app, testcase.inputs)
-
- # Step 2: Generation (uses retrieval outputs)
- generation_inputs = {
- **testcase.inputs,
- "context": retrieval_outputs["documents"],
- }
- generation_outputs = invoke_application(generation_app, generation_inputs)
-
- # Step 3: Verification (uses generation outputs)
- verification_inputs = {
- **testcase.inputs,
- "generated_text": generation_outputs["text"],
- }
- verification_outputs = invoke_application(verification_app, verification_inputs)
-
- # Step 4: Evaluate final output
- metrics = invoke_evaluator(testcase, verification_outputs)
-```
-
-**New requirements:**
-- Graph edges must specify input/output mappings
-- Topological sort to determine execution order
-- Support for partial failures (if step 2 fails, skip step 3)
-
----
-
-### Structure 6: Conditional Evaluation (Future)
-
-**Use case:** Run different evaluators based on outputs
-
-**Graph:**
-```
-Testset → Application → [if output.type == "chat"] → Chat Evaluator
- → [if output.type == "completion"] → Completion Evaluator
-```
-
-**Challenge:**
-- Current implementation runs all evaluators for all scenarios
-- Need to support: Conditional evaluator invocation based on outputs
-
-**Desired execution:**
-```
-For each testcase:
- scenario = create_scenario()
-
- outputs = invoke_application(testcase.inputs)
-
- # Conditional evaluator selection
- if outputs.get("type") == "chat":
- evaluators = [chat_evaluator_1, chat_evaluator_2]
- elif outputs.get("type") == "completion":
- evaluators = [completion_evaluator_1]
- else:
- evaluators = [generic_evaluator]
-
- For each evaluator in evaluators:
- metrics = invoke_evaluator(testcase, outputs)
-```
-
-**New requirements:**
-- Graph edges can have conditions
-- Evaluator selection based on runtime data
-- Support for dynamic graph execution
-
----
-
-### Structure 7: Human-in-the-Loop Evaluation (Future)
-
-**Use case:** Mix automated and human evaluation
-
-**Graph:**
-```
-Testset → Application → Auto Evaluator 1
- → Auto Evaluator 2
- → Human Evaluator (async)
-```
-
-**Challenge:**
-- Current implementation expects synchronous evaluator responses
-- Human evaluation is asynchronous (can take hours/days)
-
-**Desired execution:**
-```
-For each testcase:
- scenario = create_scenario()
-
- outputs = invoke_application(testcase.inputs)
-
- # Automated evaluators (synchronous)
- For each auto_evaluator:
- metrics = invoke_evaluator(testcase, outputs)
- log_result(scenario, auto_evaluator, metrics)
-
- # Human evaluator (asynchronous)
- task = create_human_evaluation_task(testcase, outputs)
- log_result(scenario, human_evaluator, status="pending")
-
-# Later, when human completes evaluation:
-update_result(scenario, human_evaluator, metrics=human_metrics)
-```
-
-**New requirements:**
-- Support for async/pending results
-- Ability to update results after initial execution
-- Separate "automated complete" vs "fully complete" states
-
----
-
-### Structure 8: Iterative Refinement (Future)
-
-**Use case:** Evaluate, refine, re-evaluate in a loop
-
-**Graph:**
-```
-Testset → Application v1 → Evaluator → [if score < threshold] → Application v2 → Evaluator
-```
-
-**Challenge:**
-- Current implementation is single-pass
-- Need to support: Conditional re-execution based on results
-
-**Desired execution:**
-```
-For each testcase:
- scenario = create_scenario()
-
- version = 1
- max_iterations = 3
-
- While version <= max_iterations:
- outputs = invoke_application(app[version], testcase.inputs)
- metrics = invoke_evaluator(testcase, outputs)
-
- if metrics["score"] >= threshold:
- break # Success!
-
- version += 1
-
- log_final_result(scenario, version, metrics)
-```
-
-**New requirements:**
-- Support for loops in graph
-- Conditional loop exit
-- Tracking iterations in results
-
----
-
-## Graph Representation
-
-### Current Representation (Implicit)
-
-**Location:** Embedded in execution logic, not explicit data structure
-
-**Example (SDK):**
-```python
-# Implicit graph in loop structure
-for testset_revision in testsets:
- for testcase in testcases:
- for application in applications:
- # Edge: testset → application
- invoke_application(testcase.inputs)
-
- for evaluator in evaluators:
- # Edge: application → evaluator
- invoke_evaluator(application.outputs)
-```
-
-**Problems:**
-- Graph structure is code, not data
-- Can't serialize/visualize graph
-- Hard to validate before execution
-- No way to query "what will this evaluation do?"
-
----
-
-### Desired Representation (Explicit)
-
-**Goal:** Represent graph as data structure
-
-**Example:**
-```python
-class EvaluationGraph:
- """Explicit graph representation."""
-
- nodes: list[GraphNode]
- edges: list[GraphEdge]
-
-class GraphNode:
- id: str
- type: Literal["testset", "query", "application", "evaluator"]
- config: dict[str, Any]
-
-class GraphEdge:
- from_node_id: str
- to_node_id: str
- port_mapping: dict[str, str] # Maps output ports to input ports
- condition: Optional[str] # Optional condition (future)
-
-# Example graph for batch testset evaluation
-graph = EvaluationGraph(
- nodes=[
- GraphNode(
- id="testset-1",
- type="testset",
- config={
- "testset_id": "ts-123",
- "testset_revision_id": "rev-456",
- }
- ),
- GraphNode(
- id="app-1",
- type="application",
- config={
- "application_id": "app-789",
- "application_revision_id": "rev-abc",
- }
- ),
- GraphNode(
- id="eval-1",
- type="evaluator",
- config={
- "evaluator_id": "eval-xyz",
- "evaluator_revision_id": "rev-def",
- }
- ),
- ],
- edges=[
- GraphEdge(
- from_node_id="testset-1",
- to_node_id="app-1",
- port_mapping={
- "testcase.data": "inputs", # testcase data → app inputs
- }
- ),
- GraphEdge(
- from_node_id="app-1",
- to_node_id="eval-1",
- port_mapping={
- "outputs": "outputs", # app outputs → eval outputs
- "trace": "trace", # app trace → eval trace
- }
- ),
- GraphEdge(
- from_node_id="testset-1",
- to_node_id="eval-1",
- port_mapping={
- "testcase": "testcase", # testcase → eval testcase
- }
- ),
- ],
-)
-```
-
-**Benefits:**
-- Serializable (can save/load)
-- Validatable (check before execution)
-- Visualizable (render as diagram)
-- Queryable (analyze without executing)
-
----
-
-## Validation Rules
-
-### Rule 1: Data Source Compatibility
-**Constraint:** `is_live = true` → Data source MUST be Query
-
-**Validation:**
-```python
-def validate_live_data_source(graph: EvaluationGraph, is_live: bool) -> None:
- """Validate data source is compatible with is_live flag."""
- data_source_node = graph.get_data_source_node()
-
- if is_live and data_source_node.type == "testset":
- raise ValidationError(
- "Live evaluation (is_live=true) requires Query data source, "
- "not Testset. Testsets yield the same data every interval."
- )
-```
-
----
-
-### Rule 2: Graph Connectivity
-**Constraint:** All non-source nodes must be reachable from a source node
-
-**Validation:**
-```python
-def validate_graph_connectivity(graph: EvaluationGraph) -> None:
- """Validate all nodes are reachable from data source."""
- source_nodes = [n for n in graph.nodes if n.type in ["testset", "query"]]
-
- if not source_nodes:
- raise ValidationError("Graph must have at least one data source node")
-
- reachable = set()
- to_visit = [n.id for n in source_nodes]
-
- while to_visit:
- current = to_visit.pop()
- if current in reachable:
- continue
- reachable.add(current)
-
- # Add downstream nodes
- for edge in graph.edges:
- if edge.from_node_id == current:
- to_visit.append(edge.to_node_id)
-
- unreachable = set(n.id for n in graph.nodes) - reachable
-
- if unreachable:
- raise ValidationError(
- f"Nodes {unreachable} are not reachable from data source"
- )
-```
-
----
-
-### Rule 3: No Cycles (Current - may relax in future)
-**Constraint:** Graph must be a DAG (Directed Acyclic Graph)
-
-**Validation:**
-```python
-def validate_no_cycles(graph: EvaluationGraph) -> None:
- """Validate graph has no cycles."""
- visited = set()
- in_path = set()
-
- def has_cycle(node_id: str) -> bool:
- if node_id in in_path:
- return True # Cycle detected
- if node_id in visited:
- return False
-
- visited.add(node_id)
- in_path.add(node_id)
-
- for edge in graph.edges:
- if edge.from_node_id == node_id:
- if has_cycle(edge.to_node_id):
- return True
-
- in_path.remove(node_id)
- return False
-
- for node in graph.nodes:
- if has_cycle(node.id):
- raise ValidationError(
- f"Graph contains a cycle involving node {node.id}"
- )
-```
-
-**Note:** This rule may be relaxed in the future to support iterative refinement (Structure 8)
-
----
-
-### Rule 4: Valid Port Mappings
-**Constraint:** Edge port mappings must reference valid ports
-
-**Validation:**
-```python
-def validate_port_mappings(graph: EvaluationGraph) -> None:
- """Validate edge port mappings reference valid ports."""
-
- # Define valid ports for each node type
- PORT_DEFINITIONS = {
- "testset": {
- "outputs": ["testcase", "testcase.data", "testcase.id"]
- },
- "query": {
- "outputs": ["trace", "trace.id", "trace.inputs", "trace.outputs"]
- },
- "application": {
- "inputs": ["inputs"],
- "outputs": ["outputs", "trace", "trace_id", "span_id"]
- },
- "evaluator": {
- "inputs": ["testcase", "inputs", "outputs", "trace"],
- "outputs": ["metrics", "trace", "trace_id"]
- },
- }
-
- for edge in graph.edges:
- from_node = graph.get_node(edge.from_node_id)
- to_node = graph.get_node(edge.to_node_id)
-
- from_ports = PORT_DEFINITIONS[from_node.type]["outputs"]
- to_ports = PORT_DEFINITIONS[to_node.type]["inputs"]
-
- for from_port, to_port in edge.port_mapping.items():
- if from_port not in from_ports:
- raise ValidationError(
- f"Node {from_node.id} ({from_node.type}) "
- f"has no output port '{from_port}'"
- )
-
- if to_port not in to_ports:
- raise ValidationError(
- f"Node {to_node.id} ({to_node.type}) "
- f"has no input port '{to_port}'"
- )
-```
-
----
-
-## Summary
-
-### Current State
-- **3 graph structures** currently supported (testset batch, testset batch API, query live)
-- **1 explicit flag** (`is_live`)
-- **5 implicit flags** (hardcoded behaviors)
-- **Implicit graph** representation (embedded in code)
-- **Tensor model:** 5 entities — EvaluationRun → EvaluationScenario → EvaluationResult (keyed by `step_key`, `repeat_idx`)
-- **Results:** By reference only (testcase_id, trace_id, error — no inline values)
-- **Metrics:** 3 types — Global (offline), Variational (both), Temporal (online); computed via SQL over trace IDs from results
-
-### Key Constraints
-- **Live evaluation requires Query data source** (testsets yield same data)
-- **Graphs must be DAGs** (no cycles, for now)
-- **All nodes must be reachable** from data source
-
-### Future Evolution
-- **Explicit graph representation** (nodes + edges as data)
-- **More complex structures** (multi-app comparison, chained apps, conditionals)
-- **Additional flags** (concurrency, error handling, metrics mode)
-- **Relaxed constraints** (cycles for iterative refinement, async evaluators)
-
-### Next Steps
-1. Define explicit graph data structure
-2. Implement graph validation rules
-3. Support serialization/deserialization
-4. Add graph visualization
-5. Extend to support future structures
-
----
-
-**Document Status:** Draft - covers graph structure, confirmed flags, tensor model, and metrics types
-**Next Action:** Review flag taxonomy, tensor entity schemas, and metrics computation with team
diff --git a/docs/designs/eval-loops/gap-analysis.md b/docs/designs/eval-loops/gap-analysis.md
deleted file mode 100644
index 909418b2b7..0000000000
--- a/docs/designs/eval-loops/gap-analysis.md
+++ /dev/null
@@ -1,267 +0,0 @@
-# Evaluation Gap Analysis
-
-**Created:** 2026-02-17
-**Purpose:** Map the current codebase (SDK, backend API, frontend) to the desired operation model, identifying what exists, what is named differently, and what is missing
-**Related:**
-- [Evaluation Structure](./evaluation-structure.md)
-- [Evaluation Operations](./evaluation-operations.md)
-- [Desired Architecture](./desired-architecture.md)
-- [Refactoring Analysis](./refactoring-analysis.md)
-
----
-
-## Table of Contents
-
-- [Document Coherence Notes](#document-coherence-notes)
-- [Terminology Mapping](#terminology-mapping)
-- [Current Implementation by Layer](#current-implementation-by-layer)
- - [SDK](#sdk)
- - [Backend API](#backend-api)
- - [Frontend](#frontend)
-- [Operation Model Coverage](#operation-model-coverage)
-- [Flag Coverage](#flag-coverage)
-- [Structural Gaps](#structural-gaps)
-
----
-
-## Document Coherence Notes
-
-The five design documents are broadly coherent. Minor inconsistencies to be aware of:
-
-| Document | Note |
-|----------|------|
-| `iteration-patterns.md` | Uses "applications/evaluators" terminology; predates the `type: input/invocation/annotation` vocabulary from `evaluation-operations.md` |
-| `desired-architecture.md` | Uses "ports & adapters / RemoteAPIPersistence" framing; SDK analysis shows no such abstraction exists yet — it is all direct HTTP |
-| `refactoring-analysis.md` | Identifies 4-level SDK loop vs 2/3-level API loops — still accurate; the `TensorSlice` / `process` vocabulary in `evaluation-operations.md` is the intended reconciliation |
-| `evaluation-structure.md` | Tensor entity model (composite key, by-reference results) is consistent with the DB schema (`unique on (project_id, run_id, scenario_id, step_key, repeat_idx)`) |
-| `evaluation-operations.md` | `repeat_target`, `reuse_traces`, `allow_decrease_repeats` flags are **not yet in the codebase** — documented as desired state |
-
----
-
-## Terminology Mapping
-
-| Desired term | SDK term | Backend term | Frontend term |
-|--------------|----------|--------------|---------------|
-| `add_step` | Implicit in `acreate_run()` payload | Built inside `setup_evaluation()` | Implicit in creation wizard (evaluator + testset selection) |
-| `remove_step` | — | — | — |
-| `add_scenario` | `aadd_scenario()` | `create_scenario()` / `POST /scenarios/` | — (backend-driven) |
-| `remove_scenario` | — | `delete_scenario()` / `DELETE /scenarios/{id}` | — |
-| `populate` | `alog_result()` | `create_result()` / `POST /results/` | `upsertStepResultWithAnnotation()` |
-| `prune` | — | `delete_result[s]()` / `DELETE /results/` | — |
-| `probe` | — | `query_results()` / `POST /results/query` | `queryStepResults()` |
-| `process` | `aevaluate()` (the whole loop) | `SimpleEvaluationsService.start()` → Taskiq worker | "Run" button → triggers backend |
-| `refresh_metrics` | `acompute_metrics()` | `refresh_metrics()` / `POST /metrics/refresh` | — (backend-driven) |
-| `get_flags` | — | `GET /runs/{run_id}` (returns full run) | — |
-| `set_flag` | — | `PATCH /runs/{run_id}` with `flags` in body | Implicit (is_live via online eval creation) |
-| `TensorSlice` | Not implemented | Not implemented | Not implemented |
-| `step.type = "input"` | Implicit (testset data) | `type: "input"` in `EvaluationRunDataStep` | `type: "input"` in step meta |
-| `step.type = "invocation"` | `"application-{slug}"` step_key | `type: "invocation"` | `kind: "invocation"` |
-| `step.type = "annotation"` | `"evaluator-{slug}"` step_key | `type: "annotation"` | `kind: "annotation"` |
-| `step.origin = "auto"` | Origin enum exists in models | `origin: "auto"` in step | `origin: "automated"` ⚠️ (inconsistent spelling) |
-| `step.origin = "human"` | Origin enum exists in models | `origin: "human"` | `origin: "human"` |
-| `step.origin = "custom"` | Origin enum exists in models | `origin: "custom"` | Not explicitly exposed |
-
-**Note:** Frontend uses `"automated"` where backend/SDK use `"auto"`. This is a naming inconsistency to fix.
-
----
-
-## Current Implementation by Layer
-
-### SDK
-
-**File:** `sdk/agenta/sdk/evaluations/preview/evaluate.py`
-
-The SDK implements the `process` role in a single `aevaluate()` function. All operations are direct HTTP calls to the backend — no abstraction layer.
-
-#### What exists
-
-| Operation | SDK function | Endpoint |
-|-----------|-------------|---------|
-| Create run | `acreate_run()` | `POST /preview/simple/evaluations/` |
-| Add scenario | `aadd_scenario()` | `POST /preview/evaluations/scenarios/` |
-| Populate (log result) | `alog_result()` | `POST /preview/evaluations/results/` |
-| Refresh metrics | `acompute_metrics()` | `POST /preview/evaluations/metrics/refresh` |
-| Close run | `aclose_run()` | `POST /preview/evaluations/runs/{id}/close/{status}` |
-
-#### What is missing / gaps
-
-- **No `probe`** — SDK does not query existing results before writing. It always writes (no idempotency check / skip-if-success).
-- **No `prune`** — SDK cannot delete results or scenarios.
-- **No `TensorSlice`** — SDK always processes the full tensor (all scenarios, all steps, all repeats).
-- **No `process(slice)` API** — `aevaluate()` is monolithic; there is no way to re-run a subset.
-- **No ports & adapters** — `desired-architecture.md` describes `RemoteAPIPersistence`; the SDK currently has direct HTTP with no abstraction boundary.
-- **No `repeat_target` or `reuse_traces`** — repeats not implemented in SDK loop.
-- **Step keys use short slugs** (`"application-{uuid[:8]}"`) rather than full revision IDs — may cause collisions.
-- **4-level nesting** (testset → testcase → application → evaluator) is tightly coupled; cannot be decomposed into slice-based execution.
-
-#### Desired SDK state
-
-The SDK loop becomes canonical `process(slice)`, with:
-- Injected `RemoteAPIPersistence` implementing `populate`, `prune`, `probe`
-- `probe` to skip already-successful cells
-- `TensorSlice` to target re-runs or partial execution
-
----
-
-### Backend API
-
-**Files:**
-- `api/oss/src/core/evaluations/service.py`
-- `api/oss/src/core/evaluations/tasks/legacy.py`
-- `api/oss/src/core/evaluations/tasks/live.py`
-- `api/oss/src/apis/fastapi/evaluations/router.py`
-- `api/oss/src/tasks/taskiq/evaluations/worker.py`
-
-#### What exists
-
-| Operation | Backend function | HTTP endpoint |
-|-----------|----------------|--------------|
-| Create run | `create_run()` | `POST /runs/` |
-| Add scenario | `create_scenario[s]()` | `POST /scenarios/` |
-| Remove scenario | `delete_scenario()` | `DELETE /scenarios/{id}` |
-| Populate | `create_result[s]()` | `POST /results/` |
-| Probe | `query_results()` | `POST /results/query` |
-| Prune | `delete_result[s]()` | `DELETE /results/` |
-| Refresh metrics | `refresh_metrics()` | `POST /metrics/refresh` |
-| Close run | `close_run()` | `POST /runs/{id}/close` |
-| Open run | `open_run()` | `POST /runs/{id}/open` |
-| Start processing | `start()` → Taskiq worker | (internal dispatch, no HTTP endpoint) |
-| Stop processing | `stop()` | (internal, no HTTP endpoint) |
-
-**DB unique constraint:** `(project_id, run_id, scenario_id, step_key, repeat_idx)` — matches the composite key in our tensor model. ✅
-
-#### What is missing / gaps
-
-**Steps (critical gap):**
-- **No `add_step` endpoint.** Steps are constructed inside `setup_evaluation()` (legacy.py) — the graph is assembled as a single blob and stored. There is no API to add or remove steps after creation.
-- **No `remove_step` endpoint.**
-- Steps are in `run.data.steps` (a list in a JSON column), not a normalized table. This makes adding/removing expensive (read-modify-write the whole blob).
-
-**Processing control:**
-- **No `POST /runs/{id}/process` endpoint.** Processing is triggered by `start()` internally, which dispatches a Taskiq task. There is no slice parameter.
-- **No slice-aware re-run.** `evaluate_batch_testset` and `evaluate_live_query` tasks always re-process the full run.
-
-**Flags:**
-- **`repeat_target` not in `EvaluationRunFlags`.** The current flags model has `is_live`, `is_active`, `is_closed`, `has_queries`, `has_testsets`, `has_evaluators`, `has_custom`, `has_human`, `has_auto`. Missing: `repeat_target`, `reuse_traces`, `allow_decrease_repeats`.
-- **No dedicated `set_flag` endpoint.** Flags are set via `PATCH /runs/{id}` with the whole flags object. The desired `set_flag(name, value)` (read-modify-write) is not yet a first-class operation.
-
-**TensorSlice:**
-- **Not implemented anywhere.** All CRUD operations use individual IDs or full-table queries. No slice-based multi-dimension targeting.
-
-**`process` dispatch:**
-- `SimpleEvaluationsService.start()` dispatches either `evaluate_batch_testset` or `evaluate_live_query` based on whether the run has `query_steps` or `testset_steps`. This is the current equivalent of `process`, but:
- - It's hardcoded logic in the service, not a general slice executor
- - No HTTP endpoint to trigger it externally (used via internal dispatch only)
- - No idempotency (no `probe`-before-write to skip successful cells)
-
----
-
-### Frontend
-
-**Key files:**
-- `web/oss/src/services/evaluations/api/index.ts` — core evaluation CRUD
-- `web/oss/src/services/evaluations/results/api.ts` — step results + annotation linkage
-- `web/oss/src/services/onlineEvaluations/api.ts` — live evaluation + queries
-- `web/oss/src/services/annotations/api/index.ts` — annotation CRUD
-- `web/oss/src/components/pages/evaluations/NewEvaluation/` — creation wizard
-- `web/oss/src/components/EvalRunDetails/` — legacy results display
-
-#### What exists
-
-| Feature | Status | Notes |
-|---------|--------|-------|
-| Step `type` tracking | ✅ | `type: "invocation" \| "annotation" \| "input"` in step meta |
-| Step `origin` tracking | ⚠️ | Uses `"automated"` instead of `"auto"` |
-| Human annotation workflow | ✅ | Dedicated Annotate drawer; `upsertStepResultWithAnnotation()` |
-| Populate (frontend) | ✅ | `upsertStepResultWithAnnotation()` → `POST /preview/evaluations/results/` |
-| Probe (frontend) | ✅ | `queryStepResults()` → `POST /results/query` |
-| Live evaluations | ✅ | Online eval drawer with `is_live` flag, query definition, sampling rate |
-| Result display | ✅ | Metrics table, spider chart, temporal chart, scenario focus drawer |
-| Evaluation creation | ✅ | 5-step wizard: app → variant → testset → evaluators → settings |
-
-#### What is missing / gaps
-
-- **No graph builder.** The graph (which steps, in what order) is assembled implicitly by the creation wizard (testset + evaluators = the graph). There is no DAG visualization or explicit step management UI.
-- **`origin = "automated"` vs `"auto"`.** The frontend uses `"automated"` in step metadata filtering (`ActionCell.tsx`) while backend uses `"auto"`. This must be aligned.
-- **No TensorSlice UI.** No way to select a subset of scenarios/steps/repeats to re-run or prune.
-- **No `prune` operation in UI.** Users cannot delete specific results or scenarios.
-- **No flag management UI** (beyond implicit toggles like start/stop for `is_active`, close for `is_closed`).
-- **No `repeat_target`, `reuse_traces` in UI.** These flags don't exist in the codebase yet.
-
----
-
-## Operation Model Coverage
-
-Summary of coverage across all three layers:
-
-| Operation | SDK | Backend | Frontend | TensorSlice-aware |
-|-----------|-----|---------|----------|-------------------|
-| `add_step` | ⚠️ Implicit at creation | ❌ No endpoint | ⚠️ Implicit in wizard | — |
-| `remove_step` | ❌ | ❌ | ❌ | — |
-| `add_scenario` | ✅ `aadd_scenario` | ✅ `POST /scenarios/` | — | ❌ |
-| `remove_scenario` | ❌ | ✅ `DELETE /scenarios/{id}` | — | ❌ |
-| `increase_repeats` | ❌ | ❌ | ❌ | — |
-| `decrease_repeats` | ❌ | ❌ | ❌ | — |
-| `populate` | ✅ `alog_result` | ✅ `POST /results/` | ✅ `upsertStepResult...` | ❌ |
-| `prune` | ❌ | ✅ `DELETE /results/` | ❌ | ❌ |
-| `probe` | ❌ | ✅ `POST /results/query` | ✅ `queryStepResults` | ❌ |
-| `refresh_metrics` | ✅ `acompute_metrics` | ✅ `POST /metrics/refresh` | — | — |
-| `get_flags` | ❌ | ⚠️ Via `GET /runs/{id}` | — | — |
-| `set_flag` | ❌ | ⚠️ Via `PATCH /runs/{id}` | ⚠️ Implicit only | — |
-| `process` | ✅ `aevaluate()` (monolithic) | ⚠️ Internal only (Taskiq) | ⚠️ "Run" button triggers it | ❌ |
-
-Legend: ✅ Exists · ⚠️ Partial/implicit · ❌ Missing
-
----
-
-## Flag Coverage
-
-| Flag | In `EvaluationRunFlags` | Set by whom | Gaps |
-|------|------------------------|-------------|------|
-| `is_live` | ✅ | Frontend (online eval creation) | — |
-| `is_active` | ✅ | Backend (`start()` / `stop()`) | No HTTP endpoint to toggle directly |
-| `is_closed` | ✅ | Backend (`close_run()` / `open_run()`) | — |
-| `has_queries` | ✅ | Backend (derived at creation) | Derived, not user-set |
-| `has_testsets` | ✅ | Backend (derived at creation) | Derived, not user-set |
-| `has_evaluators` | ✅ | Backend (derived at creation) | Derived, not user-set |
-| `has_custom` | ✅ | Backend (derived at creation) | Derived, not user-set |
-| `has_human` | ✅ | Backend (derived at creation) | Derived, not user-set |
-| `has_auto` | ✅ | Backend (derived at creation) | Derived, not user-set |
-| `repeat_target` | ❌ | — | Not implemented anywhere |
-| `reuse_traces` | ❌ | — | Not implemented anywhere |
-| `allow_decrease_repeats` | ❌ | — | Not implemented anywhere |
-
----
-
-## Structural Gaps
-
-### Priority 1 — Critical for the operation model
-
-1. **`add_step` / `remove_step` endpoints.** Steps need to be first-class entities with their own lifecycle, not a blob inside `run.data`. This is the foundation for the graph mutation model.
-
-2. **`repeat_target`, `reuse_traces`, `allow_decrease_repeats` flags.** Not in the data model at all. Needed before implementing repeat and trace-reuse behaviors.
-
-3. **`increase_repeats` / `decrease_repeats`.** No concept of repeat count as a mutable run property. Currently hardcoded per-run at creation.
-
-### Priority 2 — Important for operational correctness
-
-4. **`process(slice)` HTTP endpoint.** Processing is currently internal-only (Taskiq dispatch). To support re-runs of failed/missing results, process needs to be externally triggerable with a slice parameter.
-
-5. **`TensorSlice` in `probe` / `prune` / `populate`.** Current operations are per-entity (single ID) or full-table. Slice-based multi-dimensional targeting is not implemented.
-
-6. **Idempotent `process` (probe-before-write).** SDK and backend tasks always write results without checking if a successful result already exists. This means re-running overwrites correct data.
-
-### Priority 3 — Naming and consistency
-
-7. **Frontend `"automated"` → `"auto"`.** One-line fix in `ActionCell.tsx` and any other frontend files that filter on origin.
-
-8. **SDK step key format.** Currently `"application-{uuid[:8]}"` — short slugs risk collision and don't match the design's `step_key = revision_id`-based format.
-
-9. **`set_flag` as a first-class endpoint.** Currently flags are set via `PATCH /runs/{id}` with an arbitrary body. A dedicated `POST /runs/{id}/flags/{flag_name}` (or similar) would match the operation model and make constraints explicit.
-
-10. **`RemoteAPIPersistence` abstraction in SDK.** The `desired-architecture.md` calls for injecting a persistence adapter. Currently all HTTP calls are inlined in `evaluate.py`. Extracting them into an adapter class would decouple orchestration from transport.
-
----
-
-**Document Status:** Draft — reflects codebase state as of 2026-02-17
-**Next Action:** Prioritize gaps and assign to refactoring phases
diff --git a/docs/designs/scope-only-routers-plan.md b/docs/designs/scope-only-routers-plan.md
new file mode 100644
index 0000000000..f6eda2a0fb
--- /dev/null
+++ b/docs/designs/scope-only-routers-plan.md
@@ -0,0 +1,106 @@
+# Scope-Only Routers + Access Router Migration — Plan
+
+Status: PROPOSED (no edits applied). For review before execution.
+
+## Goal (per user)
+
+Make `oss/src/routers/` and `ee/src/routers/` (and the matching `services/`)
+**scope-only**: organizations, workspaces, projects, users, api_keys. Everything
+else moves out or is removed.
+
+Non-scope things currently in `routers/`:
+1. **health** (`oss/src/routers/health_router.py`) — inline into entrypoints.
+2. **permissions** (`oss/src/routers/permissions_router.py`) — move to the new
+ `oss/src/apis/fastapi/access/` structure, mirroring EE's `access` router, and
+ change the path `/permissions/verify` → `/access/permissions/check`.
+
+Decisions locked:
+- **Path: new only, no alias.** Update all in-repo callers in the same change.
+- **Fern client + API reference regeneration: handled by the user**, not here.
+ So we do NOT touch `web/packages/agenta-api-client` generated files.
+
+## Scope of THIS change (API side)
+
+### 1. Health → inline into entrypoints
+- Add `@app.get("/health/", ...)` (or `/health`) directly in
+ `entrypoints/routers.py` returning `{"status": "ok"}` (status 200,
+ operation_id `health_check`, tag `Status`).
+- Remove the `health_router` import + its `include_router` mount
+ (entrypoints/routers.py:1139).
+- Delete `oss/src/routers/health_router.py`.
+- (9-line file, zero deps — trivial.)
+
+### 2. Permissions → OSS `apis/fastapi/access/` + new path
+- Create `oss/src/apis/fastapi/access/router.py` with an `AccessRouter` class
+ (mirror EE's `AccessRouter`: `self.router = APIRouter()`,
+ `add_api_route(...)`, `@intercept_exceptions()`).
+ - Route: `GET /permissions/check` (operation_id `check_permissions`), so
+ mounted under the `/access` prefix it becomes **`/access/permissions/check`**.
+ - Move the `Allow`/`Deny` classes + the `verify_permissions` handler body
+ (rename handler → `check_permissions`) verbatim; keep the `is_oss()` →
+ Allow / `is_ee()` → real-check behavior unchanged.
+ - Keep the conditional EE imports (`check_action_access`, `check_entitlements`,
+ `Permission`, `Counter`) exactly as today — handler works OSS-standalone.
+ - Add `__init__.py` to `oss/src/apis/fastapi/access/`.
+- Mount in `entrypoints/routers.py`: instantiate `AccessRouter()` and
+ `app.include_router(access_router.router, prefix="/access", tags=["Access"])`.
+ - **Coexistence:** EE's `extend_main` also mounts its `access_router` at
+ `/access` (`/access/plans`, `/access/roles`). FastAPI merges routers on the
+ same prefix, so OSS `/access/permissions/check` + EE `/access/plans|roles`
+ all coexist when EE runs; OSS-only has just `/access/permissions/check`.
+ (No collision: distinct subpaths.)
+- Remove the old `permissions_router` import + mount
+ (entrypoints/routers.py:1145, prefix `/permissions`).
+- Delete `oss/src/routers/permissions_router.py`.
+
+### 3. In-repo callers of the old path (update to new path)
+- **Throttle map** `ee/src/core/access/entitlements/types.py:174`:
+ `(Method.ANY, "/permissions/verify")` → `(Method.ANY, "/access/permissions/check")`
+ (keep it in the SERVICES_FAST category, same as today).
+- **Python SDK** (in-repo):
+ - `sdks/python/agenta/sdk/middlewares/running/vault.py:130,173` — the
+ `{host}/api/permissions/verify` call + its docstring →
+ `{host}/api/access/permissions/check`.
+ - `sdks/python/agenta/sdk/middlewares/routing/auth.py:141` — same path update.
+ - NOTE: confirm the SDK sends the same query params (`action`,
+ `resource_type`, …) and reads `effect`/`credentials` from the response — the
+ handler contract is unchanged, only the path moves.
+- **Do NOT touch** `web/packages/agenta-api-client/*` (Fern-generated) or
+ `web/_reference/*` — user regenerates these.
+
+### 4. Verify
+- ruff on touched api files.
+- Runtime: OSS app import (`/access/permissions/check` route present); EE
+ extend mounts both. Confirm OSS-only path returns Allow.
+- SDK: `sdks/python` — ruff format + check on the two middleware files; run any
+ SDK unit tests that touch these middlewares.
+- Throttle: the ENDPOINTS entry resolves (no test asserts the old literal? check
+ `test_*throttl*`).
+
+## Deferred (NOT in this change — flagged for later)
+
+- **Services `admin_manager.py` + `commoners.py`** are non-scope (platform/
+ onboarding helpers) but are genuinely service-layer; moving them to a `core/`
+ home is a separate, lower-priority cleanup. Leave for now.
+- **EE routers** (`ee/src/routers/organization_router.py`,
+ `workspace_router.py`) are already scope-only — no change.
+- The 6 pre-existing eval-loop test failures (UEL-017/021/022/023) are unrelated.
+
+## Open questions for sign-off
+
+- **Q1 — route path/op:** `GET /access/permissions/check`, operation_id
+ `check_permissions`? (EE uses `fetch_access_plans`/`fetch_access_roles`; this
+ would be `check_permissions` under the same `/access` group.) OK?
+- **Q2 — health path:** keep trailing slash `/health/` (current) or `/health`?
+ Inline vs a tiny `entrypoints/health.py`? Recommend: inline `@app.get("/health/")`
+ in routers.py (matches current path exactly, no new file).
+- **Q3 — SDK path:** the SDK calls `{host}/api/permissions/verify` (note the
+ `/api` prefix). New path `{host}/api/access/permissions/check`. Confirm the
+ `/api` mount prefix is unchanged (only the sub-path moves).
+
+## Blast radius
+- Delete 2 router files; edit `entrypoints/routers.py` (imports + mounts + inline
+ health); new `apis/fastapi/access/` package (2 files).
+- Update throttle map (1 line) + 2 SDK middleware files (2-3 lines).
+- No EE router changes; EE `access` router untouched (keeps adding plans/roles).
+- Generated client + API ref: user-handled.
diff --git a/docs/designs/third-party-subsystem-access.md b/docs/designs/third-party-subsystem-access.md
new file mode 100644
index 0000000000..878ba6268c
--- /dev/null
+++ b/docs/designs/third-party-subsystem-access.md
@@ -0,0 +1,125 @@
+# Third-Party Subsystem Access Patterns
+
+How `api/` code should reach external subsystems (Postgres, Redis, Stripe, PostHog,
+SuperTokens, SendGrid, …), why the patterns differ, and what the current state is.
+
+Authored 2026-05-21 from a read-only audit of the `api/` tree plus the decisions
+made while fixing UEL-024 and UEL-027 (see
+`docs/designs/unified-eval-loops/findings.md`).
+
+## Intent
+
+There is **no single DI story**, and that is deliberate. Forcing one uniform
+pattern across every subsystem fights both the libraries (some are module
+singletons, some are instantiated clients) and the call shape (some deps are
+required on every request, some are optional one-liners). Instead, the access
+pattern is chosen by classifying each subsystem along **two axes**:
+
+1. **Required vs optional** — is the dependency needed for the app to function on
+ every request, or is it an optional integration that may be disabled/absent?
+2. **Per-request client vs boot-time framework vs shared-orchestration** — how is
+ the dependency used at the call site?
+
+The goal: testability (a swappable seam), no eager work at import time for
+optional deps, and not duplicating orchestration that several callers share.
+
+## The model (decision table)
+
+| Subsystem | Required? | Call shape | Pattern | Rationale |
+|-----------|-----------|------------|---------|-----------|
+| **Postgres / SQLAlchemy** | required | per-request client | **Lazy singleton factory + constructor injection** | Modern DAOs take `engine=None` and fall back to `get_transactions_engine()`. The factory is a lazy singleton; the constructor param is the test seam. |
+| **Redis / cache** | required-ish | per-request, but always behind helpers | **Lazy singleton factory + util wrapper** | Callers never touch the Redis client — they call `get_cache`/`set_cache` in `caching.py`, backed by a module-global lazy engine. |
+| **Stripe** | optional | one-liner direct calls (`stripe.Customer.create`) | **Lazy loader, direct use** | `_load_stripe()` returns the module (with `api_key` set), or `None`. No shared orchestration → no util wrapper; callers use it directly and null-check. |
+| **PostHog** | optional | one-liner direct calls (`posthog.capture`) | **Lazy loader, direct use** | Same as Stripe. `_load_posthog()` returns the module or `None`. |
+| **SendGrid (email)** | optional | shared orchestration (load template → format → validate sender → send) | **Lazy loader + util wrapper** | Email callers share real glue, so it belongs behind a util like Redis behind `caching.py`. `_load_sendgrid()` returns a client instance; `emailing.send_email(...)` is the public entry. |
+| **Loops (marketing contacts)** | optional | single HTTP POST | **Util wrapper, direct HTTP (no client to load)** | Not an SDK — a raw `httpx` call to the Loops API. Nothing to lazy-load; lives in `emailing.py` as `add_contact(...)` (same outbound surface as email), enabled-guarded on `env.loops.enabled`. |
+| **SuperTokens** | required | boot-time framework | **Eager conditional init at startup** | Not a per-request client — a framework that registers global middleware/recipes. Initialized once via `init_supertokens()` at app boot. DI/lazy would add nothing. |
+
+### The three loader/access shapes, concretely
+
+- **Constructor injection (Postgres):**
+ ```python
+ class MetersDAO:
+ def __init__(self, engine: TransactionsEngine = None):
+ self.engine = engine or get_transactions_engine()
+ # tests: MetersDAO(engine=mock_engine)
+ ```
+- **Lazy loader, direct use (Stripe / PostHog):**
+ ```python
+ stripe = _load_stripe() # None if disabled/unavailable
+ if stripe is None: return
+ stripe.Customer.create(...)
+ # tests: monkeypatch the loader, e.g. _load_posthog
+ ```
+- **Lazy loader + util wrapper (Redis, SendGrid):**
+ ```python
+ # callers never see the client:
+ await get_cache(...) ; await set_cache(...) # caching.py
+ await emailing.send_email(to_email=..., subject=...) # emailing.py
+ ```
+
+## Cross-cutting rules (decided)
+
+1. **Each `lazy.py` loader owns its enabled-check** and returns `None` when the
+ subsystem is disabled/unavailable; callers null-check the result. (SendGrid
+ does this now. Stripe/PostHog still gate `if env.X.enabled` at call sites — see
+ "Known gaps" — but the intended direction is loader-owns-it.)
+2. **Loaders return whatever the library is designed for.** `stripe`/`posthog`
+ return the module (global `api_key`); `sendgrid` returns a client instance. Do
+ **not** force uniformity against the library's own shape.
+3. **Optional deps must not do work at import time.** No module-global client
+ construction (the UEL-027 anti-pattern). Build on first use via the loader.
+4. **Wrap in a util only when callers share orchestration.** One-liner deps
+ (Stripe/PostHog) use the loader directly. Deps with shared glue (Redis, email)
+ get a util so the glue isn't duplicated across call sites.
+5. **Don't add production "proxy globals" just to satisfy tests.** Patch the real
+ seam (constructor, or the loader/factory function). This is the UEL-024 lesson.
+
+## Current state (2026-05-21)
+
+- **Postgres:** consistent. Modern DAOs (`MetersDAO`, `SecretsDAO`, `ToolsDAO`,
+ `EvaluationsDAO`, `GitDAO`, `IdentitiesDAO`, EE `EventsDAO`/`OrganizationsDAO`/
+ `SubscriptionsDAO`, `TracingDAO` on `AnalyticsEngine`) all use constructor
+ injection with factory fallback. Engines wired once at
+ `api/entrypoints/routers.py` (~lines 398-401). Legacy `db_manager`/
+ `db_manager_ee` call `get_transactions_engine()` inline per-function (factory
+ lookup, no injectable seam) — acceptable for legacy that is being replaced.
+- **Redis:** `caching.py` module-global lazy engine + helper functions. Clean
+ isolation; no DAO takes Redis as a constructor param.
+- **Stripe / PostHog:** `_load_stripe` / `_load_posthog` in
+ `oss/src/utils/lazy.py`; used directly in services (`subscriptions/service.py`,
+ `meters/service.py`, `auth/helper.py`, `auth/supertokens/overrides.py`,
+ `analytics_service.py`).
+- **SendGrid:** fixed in UEL-027. `_load_sendgrid()` added to `lazy.py`;
+ `oss/src/utils/emailing.py` is the util (public `send_email`, private
+ `_read_email_template` / `_render_email_template`); template at
+ `oss/src/utils/templates/send_email.html`. The old
+ `oss/src/services/email_service.py` and the dead eager `sg` in `db_manager_ee.py`
+ were removed. Four call sites migrated to `emailing.send_email(...)`.
+- **SuperTokens:** `init_supertokens()` at startup (`routers.py` ~line 189).
+
+## Known gaps / follow-ups (not yet done)
+
+- **Stripe/PostHog enabled-check still at call sites.** Per rule 1 it should move
+ into the loaders (return `None` when disabled). ~5 call sites; not migrated to
+ avoid unprompted churn.
+- **Email render-per-recipient.** The EE `notify_org_admin_invitation` loop calls
+ `emailing.send_email` per admin, re-rendering identical HTML each time. Cheap;
+ could split render-once if it ever matters.
+- **Legacy `db_manager_ee` has no injectable seam.** Fine while it is slated for
+ replacement; if it survives, class-ify it or thread `engine` through.
+
+## Tradeoffs considered (and rejected)
+
+- **One uniform DI everywhere.** Rejected: fights library shapes (module vs
+ client) and over-engineers optional one-liner deps.
+- **Fully unpacking `email_service` to inline `sg.send` at every call site (to
+ match Stripe/PostHog).** Rejected: the four email callers share template +
+ format + sender-validation glue; inlining would duplicate ~10 lines ×4. Email is
+ a caching-style boundary, not a one-liner dep.
+- **Forcing Stripe/PostHog loaders to return wrapped client objects** for surface
+ uniformity. Rejected: works against how those libraries are built (module
+ singletons with a global `api_key`).
+- **Adding module-level proxy globals so existing tests' `monkeypatch` targets
+ keep working (UEL-024).** Rejected: hides the real seam and degrades production
+ code; tests were updated to patch the actual seam instead.
diff --git a/docs/designs/unified-eval-loops/breakdown.md b/docs/designs/unified-eval-loops/breakdown.md
new file mode 100644
index 0000000000..d908a9628f
--- /dev/null
+++ b/docs/designs/unified-eval-loops/breakdown.md
@@ -0,0 +1,341 @@
+# Unified Eval Loops — Branch Breakdown
+
+Diff base: `release/v0.100.9`
+
+This branch is not a clean PR stack. It is a feature branch with several rounds
+of implementation, refactors, follow-up fixes, and test backfills. The earlier
+`breakdown.md` tried to impose a speculative split that does not line up well
+with the actual diff.
+
+This version is grounded in the current branch contents and groups changes by
+reviewable change-cluster rather than by an idealized incremental history.
+
+## Scope excluded from this breakdown
+
+These changed files are auto-generated and should not drive the review split:
+
+- Fern / generated API clients
+- `docs/docs/reference/api/**`
+
+Those files should be regenerated after the code-facing API is settled.
+
+## Size, excluding generated churn
+
+The full branch touches 595 files, but the biggest bucket is generated output:
+
+- `docs/docs/reference/api/**`: 291 files
+- Fern / generated clients: large follow-on churn across `clients/` and `web/packages/agenta-api-client/`
+
+What remains is still a substantial branch centered on four real code streams:
+
+1. Unified eval loops core: OSS runtime, evaluation API/persistence, and Python SDK parity
+2. Access-control refactor and scope/auth wiring
+3. EE admin/org/events follow-ons
+4. Small web UI and local infra adjustments
+
+## Chunk 1 — Unified eval loops core: OSS runtime, evaluation API, persistence, and SDK parity
+
+This is the core of the branch.
+
+The old evaluation execution path is replaced with a new runtime-oriented
+structure in the OSS API, the evaluation domain model and queue semantics are
+reworked around that runtime, and the Python SDK gains a parallel runtime so
+local `evaluate()` and server-side execution use the same concepts.
+
+What actually changed:
+
+- OSS runtime package:
+ - `api/oss/src/core/evaluations/runtime/models.py`
+ - `api/oss/src/core/evaluations/runtime/topology.py`
+ - `api/oss/src/core/evaluations/runtime/planner.py`
+ - `api/oss/src/core/evaluations/runtime/tensor.py`
+ - `api/oss/src/core/evaluations/runtime/sources.py`
+ - `api/oss/src/core/evaluations/runtime/adapters.py`
+ - `api/oss/src/core/evaluations/runtime/executor.py`
+ - `api/oss/src/core/evaluations/runtime/cache.py`
+ - `api/oss/src/core/evaluations/runtime/runner.py`
+ - `api/oss/src/core/evaluations/runtime/locks.py`
+- Task orchestration rewritten around:
+ - `api/oss/src/core/evaluations/tasks/run.py`
+ - `api/oss/src/core/evaluations/tasks/processor.py`
+ - `api/oss/src/core/evaluations/tasks/query.py`
+- Legacy task paths removed or hollowed out:
+ - `api/oss/src/core/evaluations/tasks/legacy.py` deleted
+ - `api/oss/src/core/evaluations/tasks/live.py` largely replaced
+ - `api/oss/src/core/evaluations/tasks/batch.py` reduced
+- Core service contracts updated:
+ - `api/oss/src/core/evaluations/interfaces.py`
+ - `api/oss/src/core/evaluations/types.py`
+ - `api/oss/src/core/evaluations/utils.py`
+ - `api/oss/src/core/evaluations/service.py`
+- Worker wiring updated:
+ - `api/oss/src/tasks/taskiq/evaluations/worker.py`
+ - `api/entrypoints/worker_evaluations.py`
+- Evaluation API layer:
+ - `api/oss/src/apis/fastapi/evaluations/models.py`
+ - `api/oss/src/apis/fastapi/evaluations/router.py`
+ - `api/oss/src/apis/fastapi/evaluations/utils.py`
+- Evaluation persistence:
+ - `api/oss/src/dbs/postgres/evaluations/dbes.py`
+ - `api/oss/src/dbs/postgres/evaluations/dao.py`
+ - `api/oss/src/dbs/postgres/evaluations/utils.py`
+- Default queue migrations:
+ - `api/oss/databases/postgres/migrations/core/versions/a1d2e3f4a5b6_add_default_evaluation_queues.py`
+ - `api/oss/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py`
+ - EE mirror migrations under `api/ee/databases/postgres/migrations/core/versions/`
+- Service-level behavior changes visible from commits and tests:
+ - default queue creation/backfill
+ - one active default queue invariant
+ - archive/unarchive rules
+ - closed-run conflict handling
+ - run/queue query flags
+ - refresh-metrics dispatch behavior
+ - batch query to evaluator finalization fixes
+ - concurrency data on runs
+
+The branch history shows this was not a single clean implementation. It was
+implemented, then corrected by several follow-up fixes:
+
+- default queue lifecycle/policy
+- closed-run 409 behavior
+- evaluator-run finalization
+- refresh metrics dispatch
+- exact source-family resolution
+
+Tests backing this cluster:
+
+- `api/oss/tests/pytest/acceptance/evaluations/_flow_helpers.py`
+- `api/oss/tests/pytest/acceptance/evaluations/test_closed_run_guard.py`
+- `api/oss/tests/pytest/acceptance/evaluations/test_default_queue_lifecycle.py`
+- `api/oss/tests/pytest/acceptance/evaluations/test_default_queue_policy.py`
+- `api/oss/tests/pytest/acceptance/evaluations/test_evaluation_flows_modify.py`
+- `api/oss/tests/pytest/acceptance/evaluations/test_evaluation_flows_run.py`
+- `api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_flow.py`
+- `api/oss/tests/pytest/acceptance/evaluations/test_evaluation_metrics_refresh.py`
+- `api/oss/tests/pytest/acceptance/evaluations/test_simple_evaluations_workflows.py`
+- `api/oss/tests/pytest/acceptance/evaluations/test_simple_queues_basics.py`
+- `api/oss/tests/pytest/unit/evaluations/test_cache_split_utils.py`
+- `api/oss/tests/pytest/unit/evaluations/test_query_eval_loops.py`
+- `api/oss/tests/pytest/unit/evaluations/test_queue_dao_serialization.py`
+- `api/oss/tests/pytest/unit/evaluations/test_run_flag_matrix.py`
+- `api/oss/tests/pytest/unit/evaluations/test_run_flags.py`
+- New SDK runtime package:
+ - `sdks/python/agenta/sdk/evaluations/runtime/__init__.py`
+ - `sdks/python/agenta/sdk/evaluations/runtime/models.py`
+ - `sdks/python/agenta/sdk/evaluations/runtime/topology.py`
+ - `sdks/python/agenta/sdk/evaluations/runtime/planner.py`
+ - `sdks/python/agenta/sdk/evaluations/runtime/adapters.py`
+ - `sdks/python/agenta/sdk/evaluations/runtime/executor.py`
+ - `sdks/python/agenta/sdk/evaluations/runtime/processor.py`
+- Preview evaluation path updated:
+ - `sdks/python/agenta/sdk/evaluations/preview/evaluate.py`
+ - `sdks/python/agenta/sdk/evaluations/results.py`
+ - `sdks/python/agenta/sdk/models/evaluations.py`
+- Supporting runtime/engine adjustments:
+ - `sdks/python/agenta/sdk/engines/running/errors.py`
+ - `sdks/python/agenta/sdk/engines/running/handlers.py`
+ - `sdks/python/agenta/sdk/engines/running/interfaces.py`
+ - `sdks/python/agenta/sdk/engines/running/utils.py`
+ - `sdks/python/agenta/sdk/middlewares/running/vault.py`
+ - `sdks/python/agenta/sdk/middlewares/routing/auth.py`
+ - `sdks/python/agenta/sdk/managers/applications.py`
+ - `sdks/python/agenta/sdk/managers/evaluators.py`
+ - `sdks/python/agenta/sdk/litellm/mocks/__init__.py`
+
+Tests added or expanded:
+
+- `sdks/python/oss/tests/pytest/acceptance/evaluations/test_evaluate_flow.py`
+- `sdks/python/oss/tests/pytest/integration/test_evaluate_orchestration.py`
+- `sdks/python/oss/tests/pytest/unit/test_evaluate_specs.py`
+- `sdks/python/oss/tests/pytest/unit/test_evaluations_runtime.py`
+- `sdks/python/oss/tests/pytest/utils/test_mock_v0.py`
+- `sdks/python/oss/tests/pytest/acceptance/integrations/test_vault_secrets.py`
+
+Review note:
+This is not three independent chunks. The OSS runtime, evaluation API/queue
+behavior, and SDK runtime are one feature stream and should be reviewed
+together. If anyone ever needs to split it further, the only sensible seam is:
+
+- runtime internals and task orchestration
+- product-facing evaluation API/persistence semantics
+- SDK parity and test coverage
+
+## Chunk 2 — Access-control refactor and scope/auth wiring
+
+Separate from evaluations, the branch also refactors access control and pushes
+more explicit scope/auth wiring through OSS and EE.
+
+This stream is real, but it is not the main story of the branch.
+
+What actually changed:
+
+- New EE access package:
+ - `api/ee/src/core/access/controls.py`
+ - `api/ee/src/core/access/entitlements/*`
+ - `api/ee/src/core/access/permissions/*`
+- Old EE entitlement code removed or reduced:
+ - `api/ee/src/core/entitlements/controls.py`
+ - `api/ee/src/core/entitlements/service.py`
+- OSS access endpoint added:
+ - `api/oss/src/apis/fastapi/access/router.py`
+- EE access endpoint override:
+ - `api/ee/src/apis/fastapi/access/router.py`
+- Auth/helper wiring updates:
+ - `api/oss/src/core/auth/helper.py`
+ - `api/oss/src/core/auth/service.py`
+ - `api/oss/src/core/auth/supertokens/overrides.py`
+ - `api/oss/src/core/auth/turnstile.py`
+- Broad router touch-ups consistent with scope/auth propagation:
+ - multiple files in `api/oss/src/apis/fastapi/*/router.py`
+- Related DAO/service touch-ups:
+ - `api/oss/src/dbs/postgres/blobs/dao.py`
+ - `api/oss/src/dbs/postgres/events/dao.py`
+ - `api/oss/src/dbs/postgres/folders/dao.py`
+ - `api/oss/src/dbs/postgres/git/dao.py`
+ - `api/oss/src/dbs/postgres/secrets/*`
+ - `api/oss/src/dbs/postgres/tools/dao.py`
+ - `api/oss/src/dbs/postgres/tracing/dao.py`
+ - `api/oss/src/dbs/postgres/users/dao.py`
+ - `api/oss/src/dbs/postgres/webhooks/dao.py`
+ - `api/oss/src/dbs/postgres/shared/dbas.py`
+
+EE follow-on files tied to the new access package:
+
+- `api/ee/src/core/meters/*`
+- `api/ee/src/core/subscriptions/*`
+- `api/ee/src/dbs/postgres/meters/dao.py`
+- `api/ee/src/dbs/postgres/subscriptions/dao.py`
+- `api/ee/src/apis/fastapi/billing/router.py`
+- `api/ee/src/middlewares/throttling.py`
+
+Tests:
+
+- `api/ee/tests/pytest/unit/test_access_controls.py`
+- `api/ee/tests/pytest/unit/test_controls_env_override.py`
+- `api/ee/tests/pytest/unit/test_billing_router.py`
+- `api/ee/tests/pytest/unit/test_billing_settings.py`
+- `api/ee/tests/pytest/unit/test_compute_meter_id.py`
+- `api/ee/tests/pytest/unit/test_meters_dao_fetch.py`
+- `api/ee/tests/pytest/unit/test_meters_dao_strict_soft.py`
+- `api/ee/tests/pytest/unit/test_meters_types.py`
+- `api/ee/tests/pytest/unit/test_period_from.py`
+- `api/ee/tests/manual/test_billing_period.py`
+
+Review note:
+This stream can be reviewed independently from unified eval loops, but the branch
+interleaves it with the evaluation work.
+
+## Chunk 3 — EE org/events/admin cleanup and service-layer drift correction
+
+There is a smaller EE-focused stream that cleans up admin/event/organization
+paths and updates some legacy service code while the branch was open.
+
+What actually changed:
+
+- EE API/service/DAO changes:
+ - `api/ee/src/apis/fastapi/events/router.py`
+ - `api/ee/src/apis/fastapi/organizations/router.py`
+ - `api/ee/src/apis/fastapi/spans/router.py`
+ - `api/ee/src/core/events/service.py`
+ - `api/ee/src/core/tracing/service.py`
+ - `api/ee/src/core/workspaces/types.py`
+ - `api/ee/src/dbs/postgres/events/dao.py`
+ - `api/ee/src/dbs/postgres/organizations/dao.py`
+ - `api/ee/src/dbs/postgres/tracing/dao.py`
+ - `api/ee/src/main.py`
+- Legacy EE service churn:
+ - `api/ee/src/services/admin_manager.py`
+ - `api/ee/src/services/commoners.py`
+ - `api/ee/src/services/db_manager_ee.py`
+ - `api/ee/src/services/organization_service.py`
+ - `api/ee/src/services/workspace_manager.py`
+ - `api/ee/src/services/converters.py` deleted
+ - `api/ee/src/services/db_manager.py` deleted
+ - `api/ee/src/services/email_helper.py` deleted
+ - `api/ee/src/services/selectors.py` deleted
+ - `api/ee/src/services/templates/send_email.html` removed
+
+This cluster also has a small OSS-parity trail in old routers/services:
+
+- `api/oss/src/routers/*`
+- `api/oss/src/services/*`
+- `api/oss/src/models/api/workspace_models.py`
+
+Review note:
+This is the noisiest non-evaluation chunk because it mixes cleanup, naming,
+deletions, and parity fixes. It is better described as branch hygiene plus EE
+admin follow-ons than as a single intentional feature.
+
+## Chunk 4 — Local infra, worker, and web follow-ons
+
+The branch also includes a set of supporting changes that are real but smaller.
+
+Infra and worker support:
+
+- `api/oss/src/utils/lazy.py`
+- `api/oss/src/utils/caching.py`
+- `api/oss/src/utils/emailing.py`
+- `api/oss/src/utils/env.py`
+- `api/oss/src/dbs/postgres/shared/engine.py`
+- `api/oss/src/dbs/redis/shared/engine.py`
+- `api/oss/src/middlewares/analytics.py`
+- `api/oss/src/middlewares/auth.py`
+- `api/oss/src/tasks/asyncio/events/worker.py`
+- `api/oss/src/tasks/asyncio/tracing/worker.py`
+- `api/oss/src/tasks/asyncio/webhooks/dispatcher.py`
+- `api/entrypoints/routers.py`
+- `api/entrypoints/worker_events.py`
+- `api/entrypoints/worker_tracing.py`
+- `api/entrypoints/worker_webhooks.py`
+- `services/entrypoints/main.py`
+- `services/oss/src/managed.py`
+- `hosting/docker-compose/oss/docker-compose.dev.yml`
+- `hosting/docker-compose/ee/docker-compose.dev.yml`
+
+Frontend follow-ons:
+
+- `web/oss/src/components/pages/evaluations/NewEvaluation/Components/AdvancedSettings.tsx`
+- `web/oss/src/components/pages/evaluations/NewEvaluation/Components/NewEvaluationModalInner.tsx`
+- `web/oss/src/components/pages/evaluations/NewEvaluation/assets/constants.ts`
+- `web/oss/src/components/pages/evaluations/NewEvaluation/types.ts`
+- `web/oss/src/services/evaluations/api/index.ts`
+- `web/packages/agenta-entities/src/secret/api/api.ts`
+- package/lockfile churn under `web/`
+
+The frontend part is small and clearly downstream of the evaluation API changes:
+it exposes advanced evaluation settings, including concurrency-related fields,
+and updates the request payload shape.
+
+## Docs in this branch
+
+Non-generated design docs are a separate stream and should be reviewed as docs,
+not as evidence of the implementation split:
+
+- `docs/designs/unified-eval-loops/**`
+- `docs/designs/unify-evals-and-queues/**`
+- `docs/designs/eval-loops/**`
+- `docs/designs/access-controls-refactor-plan.md`
+- `docs/designs/scope-only-routers-plan.md`
+- `docs/designs/third-party-subsystem-access.md`
+
+## Recommended review order
+
+If someone needs to review this branch as it exists today, this is the least
+confusing order:
+
+1. Chunk 1: Unified eval loops core
+2. Chunk 2: Access-control refactor and scope/auth wiring
+3. Chunk 3: EE org/events/admin cleanup and service-layer drift correction
+4. Chunk 4: Local infra, worker, and web follow-ons
+5. Design docs
+
+## Bottom line
+
+The branch is mostly not “many small independent features.” It is:
+
+- one large unified-eval-loops stream spanning OSS runtime, evaluation API/persistence, and SDK parity
+- one medium access-control/scope stream
+- one smaller EE/admin cleanup stream
+- one thin frontend/infra follow-on stream
+
+That is the shape the breakdown should reflect.
diff --git a/docs/designs/unified-eval-loops/findings.md b/docs/designs/unified-eval-loops/findings.md
new file mode 100644
index 0000000000..440cfab458
--- /dev/null
+++ b/docs/designs/unified-eval-loops/findings.md
@@ -0,0 +1,924 @@
+# Unified Eval Loops Findings
+
+Review scope: full `feat/unified-eval-loops` branch diff against `main`, with emphasis on the most recent `evals<>queues implementation` commit (`603820f5a`).
+
+Sources:
+
+- Fresh deep scan of code, docs, tests, and migrations on the active checkout.
+- 2026-06-01 deep scan of the current `feat/unified-eval-loops` checkout, focused on the new `TensorSlice` execution path (`runtime/tensor.py` -> `tasks/processor.py` -> SDK runtime planner/logger).
+- User-provided full pytest failure output from the API suite: 41 failed, 1344 passed, 8 skipped.
+- Full reread of every document in `docs/designs/unified-eval-loops/` during the current applicability audit.
+- Targeted local checks:
+ - `pytest -q ee/tests/pytest/unit/test_controls_env_override.py::TestNoOverride::test_billing_pricing_accepts_legacy_agenta_pricing_alias ee/tests/pytest/unit/test_controls_env_override.py::TestNoOverride::test_billing_pricing_accepts_legacy_stripe_pricing_alias` passed locally.
+ - Targeted auth/meters/db-manager tests reproduced the stale monkeypatch failures from UEL-024.
+ - Targeted evaluation-runtime tests could not collect in the local shell because `agenta.sdk.evaluations.runtime` was not importable from that invocation; the user-provided full-suite output remains the validation source for those failures.
+- Design references: `docs/designs/unified-eval-loops/{proposal,plan,gap,research,step-removal-semantics}.md`.
+- Extension references: `docs/designs/unify-evals-and-queues/{proposal,plan,gap,unify-evals-extension-synthesis,unify-evals-extension-verbatim,research}.md`.
+- Existing closed findings (UEL-001..UEL-006) retained below for history; reviewed only after the independent pass.
+
+## Summary
+
+- Status: no open findings from the 2026-06-01 tensor-slice scan remain after the 2026-06-02 slice-processing fix.
+- Focus area: the newly wired `TensorSlice` re-execution path for existing scenarios.
+- Closed in the current pass:
+ - `UEL-032`: result persistence now has explicit slice execution modes via `TensorSlice.process_mode` (`fill-missing` default, `force` opt-in), so existing addressed cells no longer force the old collision behavior.
+ - `UEL-033`: requested `scenario_ids` and `repeat_idxs` now shape execution, and missing addressed cells on an explicit scenario no longer silently no-op.
+
+## Notes
+
+- 2026-05-20 re-audit: re-scanned current code against every OPEN finding without applying fixes. Status/diagnosis corrections recorded inline under each finding's `Re-audit (2026-05-20)` block. Net result: UEL-021 and UEL-022 share a single confirmed root cause (source-backed evaluator origin default) that is more precise than the original "kind conflation" diagnosis; UEL-021's claimed expected `kind` values are wrong; UEL-017's failing assertion is a flag-gate bug, not the multi-batch race the finding describes; UEL-023's `interface`/`configuration` sub-issue is stale (closed via UEL-003) and the actual failing assertion is unfiltered `inputs`.
+- No local full-suite test execution was performed while auditing these findings; findings marked `reproduced` either come from the user-provided full-suite output or from the targeted local checks listed above.
+- Findings below were re-checked against current code. Where runtime confirmation is still missing, the finding flags it and may need handoff to `test-codebase`.
+- The branch carries two intertwined design tracks: unified evaluation loops (planner / source resolvers / tensor slice / runnable executor) and the evals×queues unification (default queue lifecycle + flag redefinitions). Findings cover both.
+- Do not fix test-hook drift by adding broad production proxy objects. Prefer direct test injection/patching where the code already supports it, or add narrow compatibility helpers with a clear production purpose.
+
+## Open Questions
+
+- ~~Should the legacy migration that mass-creates default queues for all existing runs gate on `has_human`/policy in a single pass, or is the runtime "first-edit reconciles" lag acceptable?~~ **Resolved (2026-05-21):** the migration now mirrors the runtime create policy in a single pass — it creates default queues only for `has_human=true` runs, archives stale active default queues for runs that no longer qualify, and carries the run's own status instead of a hardcoded `running`. No reconcile lag. See UEL-010 (closed).
+- ~~Is destructive `remove_step` + `prune` still the chosen lifecycle per `step-removal-semantics.md`? If so, when is the missing implementation expected?~~ **Resolved (2026-05-21):** destructive remove + prune is confirmed and implemented. Rather than a separate `remove_step` endpoint, the prune cascade is folded into the shared create/edit reconcile path (`EvaluationsService._reconcile_run`): `create_run` is "edit from an empty graph" (`prior_step_keys=set()`, prune is a no-op), and `edit_run` diffs the prior graph and prunes cells + input-only orphan scenarios + flushes metrics for any dropped step. See UEL-014 (closed).
+- ~~For source-backed queues, should the public `SimpleQueueData.kind` report the source family (`queries` / `testsets`) or the executable scenario family (`traces` / `testcases`)?~~ **Resolved by 2026-05-20 re-audit:** the failing tests assert the *source* family (`kind="queries"` / `kind="testsets"`), so the current mapping is correct and the real bug is the `is_queue=False` / evaluator-origin default. See UEL-021 re-audit.
+- ~~Should legacy unit tests keep monkeypatching module-level `posthog` / `engine` symbols, or should they be updated to patch dependency factories / constructor injection?~~ **Resolved by 2026-05-20 re-audit:** update the tests to patch the current seam (`_load_posthog`, `get_transactions_engine`, or constructor-injected engine) — production proxy globals are explicitly disallowed by the Notes guidance. See UEL-024 re-audit.
+
+## Open Findings
+
+None.
+
+## Closed Findings
+
+### [CLOSED] UEL-032: Existing-scenario `process(slice)` needed explicit fill-missing vs force rerun semantics
+
+- ID: `UEL-032`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Correctness`
+- Summary: Existing-scenario slice processing now has an explicit execution mode. `TensorSlice.process_mode` defaults to `fill-missing`, which skips already-populated addressed cells and counts them as reused, and `force` reruns addressed cells through the result setter path.
+- Resolution (2026-06-02):
+ - Added `process_mode` to `TensorSlice` with `fill-missing` as the default and `force` as the opt-in overwrite mode.
+ - `BackendSliceProcessor` now computes the addressed cell set up front and only sends those coordinates into the SDK loop.
+ - Fill-missing skips addressed existing cells (`summary.reused`), while force reruns them.
+ - Result persistence remains keyed by `(run_id, scenario_id, step_key, repeat_idx)` through the setter path, so reruns no longer depend on the removed edit-by-id surface.
+ - Unit coverage now asserts the distinction between fill-missing and force.
+
+### [CLOSED] UEL-033: `BackendSliceProcessor` ignored explicit scenario/repeat targeting for sparse slices
+
+- ID: `UEL-033`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Completeness`
+- Summary: Sparse tensor slices are now honored. Explicit `scenario_ids` remain authoritative even when the addressed cells are missing, and repeat targeting is enforced before execution rather than being lost inside the full-run planner surface.
+- Resolution (2026-06-02):
+ - `BackendSliceProcessor` now uses caller-provided `tensor_slice.scenario_ids` directly instead of deriving scenario scope from already-existing addressed cells.
+ - Added a planning/filter seam to the SDK slice processor so the backend can constrain execution to the addressed cell coordinates, including `repeat_idxs`.
+ - Added seeded invocation context from existing scenario cells so evaluator-only reruns can reuse upstream invocation outputs without rerunning the whole scenario.
+ - Unit coverage now asserts that a missing addressed cell on an explicit scenario still executes, and that repeat-specific targeting is enforced.
+
+### [CLOSED] UEL-015: `TensorSliceOperations.process` only refreshes metrics; the documented `process(slice)` contract is unimplemented
+
+- ID: `UEL-015`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Completeness`
+- Summary: `TensorSliceOperations.process` is the only in-process implementation of the design's central `process(slice)` operation. It does not plan, execute, or populate cells — it only calls `evaluations_service.refresh_metrics(...)` and returns an empty `ProcessSummary`. The actual planner/executor pipeline runs only through `tasks/source_slice.py` and `tasks/run.py`, which are full-batch entrypoints rather than slice-aware.
+- Evidence:
+ - `api/oss/src/core/evaluations/runtime/tensor.py:151-169`: `process` body is `await refresh_metrics(...)` then `return ProcessSummary()`. No planner/runner invocation.
+ - `docs/designs/unified-eval-loops/proposal.md:160-208` describes `process(run, slice)` as the full plan-and-execute loop.
+ - `tasks/source_slice.py:174-566` implements something close to the contract but is keyed on `run_id`/`source_items`/`testcase_ids`/`trace_ids`, not on the canonical `TensorSlice` shape.
+- Impact:
+ - Slice-aware retries, partial re-execution by `(scenario_ids, step_keys, repeat_idxs)`, and the "probe-before-write" workflow described in `gap.md` §"Execution Gaps" are not yet possible.
+ - The current `process` reads like a complete implementation (it does mutate metrics) but silently does almost nothing. Callers may believe they have executed a slice when they have only refreshed metrics.
+- Files:
+ - `api/oss/src/core/evaluations/runtime/tensor.py`
+ - `api/oss/src/core/evaluations/tasks/source_slice.py`
+- Cause: The slice operation surface was scaffolded ahead of the planner/runner wiring needed to make `process(slice)` operational.
+- Suggested Fix:
+ - Either route `process(slice)` through the source-slice processor by translating `TensorSlice` into the parameters that `process_evaluation_source_slice` already accepts, or rename `TensorSliceOperations.process` to clarify that it is only a metrics refresh.
+ - Add a unit test that asserts the documented behavior (execute auto cells in the slice, populate result cells, return a non-empty `ProcessSummary`).
+- Alternatives:
+ - Mark this method explicitly as `metrics-refresh-only` and provide a separate `execute(slice)` method when planner integration lands. Keep the contract honest.
+- Re-audit (2026-05-20): **Still reproduces.** `runtime/tensor.py` `process` (def at line 151) early-returns `ProcessSummary()` (line 159), calls `refresh_metrics(...)` (line 161), and returns an empty `ProcessSummary()` (line 169). No planner/runner invocation. Diagnosis and severity unchanged.
+- Resolution (2026-05-22): made `process(slice)` an honest plan->execute->populate->refresh op via the design's "same executor, different adapters" seam, rather than faking it or renaming it down. Two parts:
+ - **Seam (`runtime/tensor.py`).** Added a `SliceProcessor` protocol and an optional `slice_processor` dep on `TensorSliceOperations`. `process` now short-circuits empty slices, then delegates to the injected processor; with no processor wired it raises `NotImplementedError` instead of silently refreshing metrics and returning an empty summary (the actual bug — it "silently does almost nothing"). The seam is adapter-free so `runtime/` does not depend on `tasks/`; the concrete impl is injected at the composition root.
+ - **Backend executor (`tasks/processor.py`).** Added `BackendSliceProcessor`, the real slice re-executor for the canonical `TensorSlice` (existing scenarios x steps x repeats — the retry / fill-missing / re-run-one-evaluator axis). For each scenario it rebuilds the source binding from the stored input result cell (`trace_id` for trace/query sources, `testcase_id` for testcase/testset sources), re-hydrates trace/testcase context via `resolve_direct_source_items`, plans from the run's CURRENT graph (so modified steps re-run with freshly resolved revisions), and reuses the SDK `process_evaluation_source_slice` engine with an existing-scenario `create_scenario` adapter — so cells populate against the addressed scenario, not a new one. Hashed-trace handling is correct because the runners are `BackendCachedRunner`s (cache lookup by step references/links before invoking), shared with the ingest path via the extracted `_resolve_runners_and_revisions` helper.
+ - This is the design distinction the finding's "Suggested Fix" missed: `process_evaluation_source_slice` is an INGEST loop (one source item -> one freshly CREATED scenario), so it could not be a thin translation target for a `TensorSlice` that addresses EXISTING cells. The re-executor bridges the two by reconstructing bindings from stored cells.
+ - Tests (`api/oss/tests/pytest/unit/evaluations/test_runtime_topology_planner.py`): existing tensor-ops test now asserts `process` raises without a processor (was: returns empty summary + refreshes metrics); added `test_tensor_slice_process_delegates_to_injected_processor` and `test_backend_slice_processor_reexecutes_existing_scenario` (rebuilds source from input cell, reuses the existing scenario, wires the auto evaluator runner). Full api suite green via `py-run-tests`.
+
+### [CLOSED] UEL-009: Inferred-flag derivation is shared between migration and runtime, with brittle heuristics
+
+- ID: `UEL-009`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P2`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Soundness`
+- Summary: The DAO-side helper `_make_run_flags` (`api/oss/src/dbs/postgres/evaluations/utils.py:73-138`) is the canonical place that derives the eight `has_*` flags from `run.data.steps`. It is invoked from `create_run_flags` / `edit_run_flags`, which the DAO calls inside `create_run` / `create_runs` / `edit_run` / `edit_runs`. The data migration (`a2b3c4d5e6f8`) duplicates the same heuristic in SQL. Both rely on two fragile rules: (1) substring matching of reference keys for `has_queries` / `has_testsets`, and (2) hardcoded step.key literals `{"traces", "query-direct", "testcases", "testset-direct"}` with empty references for `has_traces` / `has_testcases`.
+- Evidence:
+ - `api/oss/src/dbs/postgres/evaluations/utils.py:104-136` walks `run.data.steps`, resets the eight `has_*` flags, and recomputes them from step shape.
+ - Lines 113-116 set `has_traces=True` if `step.key.lower() in {"traces", "query-direct"}` and refs are empty; same idiom for `has_testcases` with `{"testcases", "testset-direct"}`.
+ - Lines 118-124 set `has_queries=True` if any reference key contains the substring `"query"`; `has_testsets=True` if it contains `"testset"`. A reference key like `query_anchor`, `subquery`, or `testset_metadata` would falsely trigger either flag.
+ - `api/oss/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py:24-39` uses the same literals to backfill `has_traces` / `has_testcases` on existing rows.
+ - `docs/designs/unified-eval-loops/research.md:316-323` and `docs/designs/unify-evals-and-queues/unify-evals-extension-synthesis.md:30-33` explicitly identify "synthetic step-key inspection" as a target for removal under the new model.
+ - `api/oss/tests/pytest/unit/evaluations/test_run_flags.py:61-111` locks in the current heuristic (steps named `"traces"` / `"testcases"` with empty refs are expected to produce `has_traces=True` / `has_testcases=True`).
+- Impact:
+ - Runtime and migration agree on the heuristic, so the backfill is internally consistent with new inserts. The risk is structural, not immediate.
+ - Any caller that constructs a direct-source input step with a non-matching `step.key` (e.g. `"my_traces_source"`) will silently produce `has_traces=False`. Downstream dispatch checks (`SimpleQueuesService._get_kind`, `dispatch_trace_slice`, `dispatch_testcase_slice`) will then misclassify or refuse the run.
+ - Any future reference key containing the substring `"query"` or `"testset"` (e.g. a hypothetical `query_anchor` or `testset_metadata` ref on an unrelated step) would incorrectly flip `has_queries` / `has_testsets` to `True`.
+ - The two heuristics live in two languages (Python and SQL). A future change to the rule must be applied in both places to keep backfilled and runtime rows consistent.
+- Files:
+ - `api/oss/src/dbs/postgres/evaluations/utils.py`
+ - `api/oss/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py`
+ - `api/oss/tests/pytest/unit/evaluations/test_run_flags.py`
+- Cause: There is no structural marker on a step that identifies its source family. Until one exists, both the migration and the DAO must infer from `step.key` / `step.references` shape.
+- Suggested Fix:
+ - Introduce a structured marker on `EvaluationRunDataStep` for source family (e.g. a `source_kind: Literal["query","testset","trace","testcase"]` field, or a sentinel reference `{"direct_source": Reference(...)}`) and have both the DAO and the migration read it.
+ - Until then, harden the substring match by enforcing exact reference-key membership (`"query_revision" in references` rather than substring-on-key) and lock the direct-source step keys in a single shared constant referenced from both Python and the migration.
+ - Add a unit test that asserts `has_queries` does NOT trigger for a fake reference key like `"some_query_anchor"`.
+- Alternatives:
+ - Accept the heuristic as the persistent rule and document it as a contract; gate any future step-key changes through a versioning check.
+- Re-audit (2026-05-20): **Still reproduces.** Confirmed in `oss/src/dbs/postgres/evaluations/utils.py`: hardcoded direct-source step keys `{"traces", "query-direct"}` / `{"testcases", "testset-direct"}` at lines 113-116, and substring matching `"query" in step_key` / `"testset" in step_key` at lines 121-124 (refs in finding cited 104-136 / 118-124; logic unchanged, lines shifted to ~94-124). Diagnosis and severity unchanged.
+- Resolution (2026-05-22): adopted the "harden to exact membership" path. `_make_run_flags` now keys `has_queries` / `has_testsets` on EXACT reference-key presence (`query_revision` / `testset_revision`) instead of substring matching, with the key sets pulled into module constants; direct-source keys stay in `DIRECT_TRACE_STEP_KEYS` / `DIRECT_TESTCASE_STEP_KEYS`. The backfill in `a2b3c4d5e6f8` was updated to match (JSONB `?` key-presence, not substring). Unit tests assert `query_anchor` / `testset_metadata` do NOT trigger the flags and that the exact key still triggers among other refs. The duplication across Python + SQL remains (two languages), and the heuristic-vs-structural-marker tradeoff is unchanged — a `source_kind` marker on the step is still the longer-term option but was not needed to remove the substring fragility.
+
+### [CLOSED] UEL-011: No tests cover default-queue reconciliation, archive/unarchive, or `_validate_default_queue_data`
+
+- ID: `UEL-011`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Testing`
+- Summary: The evals×queues unification adds a lot of new behavior — `_reconcile_default_queue`, `archive_queue`, `unarchive_queue`, `_validate_default_queue_data`, `_sync_run_queue_flag_for_default_queue`, default-queue lookup, partial unique index — but pytest coverage is zero.
+- Evidence:
+ - `grep -rn "default queue\|default_queue\|is_default" api/oss/tests/pytest/` returns no relevant hits (matches are all unrelated workspace/project `is_default`).
+ - `grep -rn "reconcile_default_queue\|archive_queue\|unarchive_queue\|fetch_default_queue\|EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS" api/oss/tests/` returns nothing.
+ - Existing acceptance tests in `test_simple_queues_basics.py` cover queue creation and source-family resolution but do not exercise default-queue lifecycle.
+- Impact:
+ - The entire unified-queues lifecycle is unverified. UEL-008/UEL-009/UEL-010/UEL-013 in particular would have been caught by basic coverage.
+ - Future refactors of `_reconcile_default_queue` have no safety net.
+- Files:
+ - `api/oss/tests/pytest/` (no relevant tests)
+ - `api/oss/tests/pytest/unit/evaluations/test_run_flags.py` (covers other flag aspects but not queue reconciliation)
+- Cause: The implementation was prioritized over tests; the design (`unify-evals-and-queues/gap.md` §Tests) lists exactly these as required test cases.
+- Suggested Fix:
+ - Add unit tests for `_reconcile_default_queue` under all four state transitions (`required+missing`, `required+archived`, `required+active`, `not required+active`).
+ - Add tests for `archive_queue`/`unarchive_queue` returning `None` when the queue is missing, raising for closed runs, and syncing `run.flags.is_queue`.
+ - Add tests for `_validate_default_queue_data` rejecting `user_ids`, `scenario_ids`, `step_keys`, `batch_size`, `batch_offset` on `is_default=True` queues, both in create and edit paths.
+ - Add a DAO/integration test asserting that the partial unique index `ux_evaluation_queues_default_per_run` prevents two default queues per run (including archived rows).
+ - Add a regression test for `delete_queue`/`delete_queues` raising "default queues must be archived, not hard deleted".
+- Alternatives:
+ - Cover the same surface through acceptance tests over the HTTP routes (`/queues/{id}/archive`, `/runs/{id}/default-queue`). Reduces unit-level reach but covers HTTP wiring at the same time.
+- Resolution (2026-05-22): coverage added via the HTTP-route alternative. `test_default_queue_lifecycle.py` exercises all four reconcile transitions (required+missing → create, not-required+active → archive, required+archived → unarchive, required+active → no-op) plus the non-human (no default queue) case, asserting `is_queue` sync each time; `test_default_queue_policy.py` covers `_validate_default_queue_data` rejection of `user_ids`/`scenario_ids`/`step_keys`/`batch_size`/`batch_offset` (create + edit), demotion/deletion-forbidden, and the partial-unique-index uniqueness (reject second active default, recreate after archive, allow across runs — see UEL-030). The planted-`is_queue` reconcile-back regression (UEL-020) is also here. Default-queue lifecycle is no longer untested.
+
+### [CLOSED] UEL-020: `is_queue` is recomputed only at the service layer; the DAO neither resets nor derives it
+
+- ID: `UEL-020`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P2`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Soundness`
+- Summary: The DAO helper `_make_run_flags` resets the eight `has_*` flags on every `create_run` / `edit_run` and re-derives them from `run.data.steps`. It does not touch `is_queue`, which is computed only by `_reconcile_default_queue` and `_sync_run_queue_flag_for_default_queue` at the service layer. Any caller that bypasses the service and writes to the DAO directly (or any future caller that constructs `EvaluationRunFlags(is_queue=True)` and calls `edit_run`) can plant a stale `is_queue` value that survives until reconciliation runs again. The same asymmetry means the DAO has no invariant to detect or correct a desynced `is_queue` on read.
+- Evidence:
+ - `api/oss/src/dbs/postgres/evaluations/utils.py:94-102` resets only `has_queries`, `has_testsets`, `has_traces`, `has_testcases`, `has_evaluators`, `has_custom`, `has_human`, `has_auto`. `is_queue` is left to whatever the caller passed (or the row already had).
+ - `api/oss/src/core/evaluations/service.py:440-447` writes `is_queue` based on `has_human AND default_queue.deleted_at IS NULL`, only inside `_reconcile_default_queue`.
+ - `api/oss/src/core/evaluations/service.py:1818-1849` writes `is_queue` only when the changed queue is `is_default=True`.
+ - `api/oss/src/core/evaluations/service.py:511-533` and `587-635` are the only paths that chain reconcile after a run write. A caller using `evaluations_dao.edit_run` directly will skip reconcile entirely.
+ - Design contract: `is_queue` is "active default queue exists AND active human evaluator work exists" (`docs/designs/unify-evals-and-queues/unify-evals-extension-synthesis.md:40-55`). This is a derived fact that should not be persistable by the DAO without re-derivation.
+- Impact:
+ - In the current codebase, every write path goes through the service, so reconcile fires. The persisted value is correct in practice.
+ - Any new code that writes via the DAO (background jobs, EE extensions, future operations like `add_step`/`remove_step`) must remember to call reconcile or it will leave `is_queue` stale.
+ - There is no DAO-layer invariant test that flags a desynced row, so a regression can go unnoticed.
+- Files:
+ - `api/oss/src/dbs/postgres/evaluations/utils.py`
+ - `api/oss/src/core/evaluations/service.py`
+- Cause: `is_queue` depends on facts outside `run.data.steps` (the existence and lifecycle of a default queue), which the DAO does not load. Service-layer reconciliation was added later as the single source of truth.
+- Suggested Fix:
+ - Document the invariant in `utils.py` (`# is_queue is service-derived; do not write directly`) and add a service-layer regression test that calls `edit_run` with `is_queue=True` on a run that should not be queue-eligible and asserts reconciliation flips it back.
+ - Alternatively, move `is_queue` out of the persisted flag and compute it on read in the service layer, so it cannot be wrong.
+- Alternatives:
+ - Keep `is_queue` persisted but enforce reconciliation as part of every `edit_run` call (e.g. wrap the DAO call inside a service decorator that always runs reconcile afterward).
+- Resolution (2026-05-22): adopted the Suggested Fix. The invariant is now documented in `_make_run_flags` (`is_queue` is service-derived, owned by `_reconcile_default_queue`; do not write via the DAO without running reconcile). A regression test (`test_default_queue_lifecycle.py::test_planted_is_queue_flag_is_reconciled_back`) PATCHes `is_queue=True` onto a non-human (non-eligible) run and asserts the edit path reconciles it back to `False` with no default queue. Kept `is_queue` persisted (the compute-on-read alternative was not needed); every write still routes through the service reconcile.
+
+### [CLOSED] UEL-017: Source-aware queue runs may transiently flip run status during multi-batch dispatch
+
+- ID: `UEL-017`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P2`
+- Confidence: `medium`
+- Status: `not-a-bug`
+- Category: `Correctness`
+- Summary: `process_evaluation_source_slice` writes the run status (`RUNNING`/`SUCCESS`/`ERRORS`/`FAILURE`) at the end of each invocation when `update_run_status=True`. For source-aware queues that dispatch multiple batches (`_dispatch_source_batches` triggers several slice runs), each batch can flip the status before subsequent batches arrive, producing a `SUCCESS` -> `RUNNING` -> `SUCCESS` thrash.
+- Evidence:
+ - `api/oss/src/core/evaluations/tasks/source_slice.py:527-563` writes `run.status = run_status` after the slice, gated only by `severity` ordering against the **current** persisted value (not against in-flight slice arrivals).
+ - `api/oss/src/core/evaluations/tasks/run.py:109-148` and `tasks/source_slice.py:174-205` are invoked once per slice, not once per run.
+ - Source-aware queue creation in `SimpleQueuesService._dispatch_source_batches` (referenced at `service.py:3730-3743`) ships multiple slices for a single run.
+- Impact: Operators observing a run during multi-batch dispatch may see status oscillate. Idempotent observers and frontend status displays may flicker. The severity rule at line 543-547 floors at the higher status, but only against the previously persisted status — not against still-pending parallel slices.
+- Files:
+ - `api/oss/src/core/evaluations/tasks/source_slice.py`
+- Cause: Status update logic was written for the single-slice case and re-used for multi-slice dispatch without coordination.
+- Suggested Fix:
+ - Pass an explicit `expected_total_slices` / `slice_index` (or a "this is the last slice" flag) into `process_evaluation_source_slice`, and only update the run status on the final slice.
+ - Alternatively, move run-status reconciliation out of the slice loop into a separate run-finalize task that aggregates across slices.
+- Alternatives:
+ - Document the thrash and accept it. Cheaper but degrades the UX promise of the unified loop.
+- Re-audit (2026-05-20): **A concrete, test-failing sub-bug exists that this finding does not capture; promote to `reproduced`.** The failing test `test_source_slice_processor_preserves_higher_queue_status` (pytest dump) is not about the multi-batch race this finding describes — it fails because the severity-floor block in `process_evaluation_source_slice` is gated on `run.flags.has_traces or run.flags.has_testcases` (`tasks/source_slice.py:566-571`). The test's run is `EvaluationRunFlags(is_queue=True, has_queries=True)` (query-backed), so `has_traces`/`has_testcases` are both False, the floor is skipped, and `run_status` stays `SUCCESS` instead of being floored up to the persisted `ERRORS` — hence `assert ... == ERRORS` got `SUCCESS`.
+ - So there are now two distinct issues under the "status preservation" umbrella: (1) **this finding's** multi-slice thrash race (still `medium`/un-reproduced as a *race*), and (2) the severity-floor flag gate excluding `has_queries`/`has_testsets` runs (reproduced, test-failing). They share `source_slice.py:566-586`.
+ - Corrected suggested fix for (2): include `has_queries`/`has_testsets` (or simply gate on `run.flags.is_queue`) in the severity-floor condition at line 569 so source-backed queue runs preserve their higher persisted status. This is the same `source_slice.py:569` gate referenced in UEL-022's re-audit.
+- Resolution (2026-05-21) — **partial; item (2) fixed, item (1) still OPEN.** The severity-floor flag gate (`tasks/processor.py`) was widened from `has_traces or has_testcases` to also include `has_queries or has_testsets`, so source-backed (query/testset) queue runs now preserve their higher persisted status. The test-failing sub-bug `test_source_slice_processor_preserves_higher_queue_status` passes (resolved together with UEL-022).
+- Resolution (2026-05-22) — **item (1) is NOT a bug; closing.** Re-analysed the multi-slice (`_dispatch_source_batches` ships one slice per input step) case under the *current* severity order (`FAILURE:4 > ERRORS:3 > SUCCESS:2 > RUNNING:1 > PENDING:0`):
+ - Each slice computes its status from its OWN processed subset: all-done → a terminal status, only its own pending items → RUNNING. A slice that finishes never computes RUNNING for already-done work, and the floor only keeps a *more severe* stored status. So a later all-success slice can never floor the run back UP to RUNNING — the `SUCCESS -> RUNNING -> SUCCESS` thrash the finding described cannot occur with this ordering. (The thrash was an artifact of the OLD ordering where RUNNING outranked SUCCESS; that was the real UEL-028 single-slice pin, since fixed by the reorder.)
+ - The only residual is cosmetic: with concurrent slices the first to finish writes the run's terminal status (and clears `is_active`) slightly before its siblings finish. The final resting state is still correct (the last write lands the right terminal status), and **liveness is not read from `status`** — it lives in `is_active`, which only *acts* via `fetch_live_runs` (DAO), gated on `is_live=True`. Source-batch/queue runs are dispatched as `queue_traces` / `queue_testcases` topologies, never `live_query` (`classify_steps_topology` returns a single dispatch), so `is_active` never gates them and the early write cannot cut off a sibling slice (each slice is an already-queued, independent taskiq task). The glitch is a transient readout only.
+ - Therefore no last-slice-finalize flag is warranted (it would thread a signal through ~6 dispatch hops including the taskiq boundary for a self-correcting cosmetic glitch on a field nobody gates on for these runs).
+- Architectural note (root cause of the whole confusion): `status` overloads two orthogonal axes — liveness (running vs done) and outcome (success/errors/failure). The severity-floor exists only to reconstruct the axis that the single enum throws away. The clean model splits them: liveness = `is_active` (already a flag), outcome = a separate terminal value; then there is no floor and no severity map. Tracked as a future cleanup, not required for correctness now.
+
+### [CLOSED] UEL-018: SDK runtime drops extra runner outputs silently when batch is longer than planned cells
+
+- ID: `UEL-018`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P3`
+- Confidence: `medium`
+- Status: `fixed`
+- Category: `Correctness`
+- Summary: `process_evaluation_source_slice` zips `batch_cells` with `executions` and only handles the case where there are fewer executions than cells (closed UEL-004). When the runner returns **more** executions than planned cells (a contract violation in the other direction), the trailing executions are silently discarded.
+- Evidence:
+ - `sdks/python/agenta/sdk/evaluations/runtime/source_slice.py:182-204` iterates `zip(batch_cells, executions)`, naturally truncating to the shorter sequence.
+ - Lines 216-230 handle only `len(executions) < len(batch_cells)` (`batch_cells[len(executions):]`).
+ - The mismatch flag at line 216 still sets `scenario_has_errors=True`, but no per-extra-cell logging happens.
+- Impact: Low — the contract violation is "extra outputs from the runner," which should be rare. But the silent drop means there is no audit trail for the extra outputs. Closed UEL-004 fixed only the under-return direction.
+- Files:
+ - `sdks/python/agenta/sdk/evaluations/runtime/source_slice.py`
+- Cause: The fix for UEL-004 covered the under-count case explicitly; the over-count case was not added.
+- Suggested Fix:
+ - When `len(executions) > len(batch_cells)`, log a structured warning that includes the extra outputs' summaries.
+ - Optionally, persist a marker result row for the unused executions or surface them in the `ProcessedScenario.metrics`.
+- Alternatives:
+ - Treat extra outputs as a hard error (raise). More aggressive but symmetric with UEL-004.
+- Resolution (2026-05-22): the mismatch branch in `processor.py` (SDK runtime) now splits under-count vs over-count. Over-count logs a structured warning with the dropped executions' summaries (`trace_id` / `span_id` / `status` / `error`) and still flags the scenario as having errors; the planned cells are logged from the first executions. Chose the structured-warning path over hard-raise to stay consistent with the soft-worker stance. Unit test `test_sdk_source_slice_handles_over_count_runner_batch` covers it.
+
+### [CLOSED] UEL-019: Source-resolver `query_revision` lookup ignores resolver returning `None` and falls through to the next resolver
+
+- ID: `UEL-019`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P3`
+- Confidence: `medium`
+- Status: `fixed`
+- Category: `Soundness`
+- Summary: `resolve_queue_source_batches` iterates resolvers in order and stops as soon as one returns a non-empty batch. If a `query_revision` reference resolves to zero trace IDs, the function returns `None` and the loop tries the testset resolver next, which silently does the wrong thing if the same step (somehow) had both refs.
+- Evidence:
+ - `api/oss/src/core/evaluations/runtime/sources.py:229-244` iterates `[QueryRevisionTraceResolver, TestsetRevisionTestcaseResolver]` and `break`s on the first truthy batch.
+ - A step has either a `query_revision` or a `testset_revision` reference under current design, so the fall-through is harmless in practice — but if a future step carries both refs (a possibility under mixed-source planning), the second resolver would win silently.
+ - The first resolver returns `None` whenever `trace_ids` is empty (line 106-107) instead of returning an empty batch, which conflates "no traces" with "wrong resolver".
+- Impact: Low today (single-ref steps), but the resolver chain is brittle to future graph extensions and to legitimately empty query results.
+- Files:
+ - `api/oss/src/core/evaluations/runtime/sources.py`
+- Cause: The resolver chain was modeled as "first-match wins" rather than "first-applicable wins".
+- Suggested Fix:
+ - Split the resolver protocol into `applies(step)` and `resolve(step)`; iterate until `applies` returns `True`, and treat empty results as a real empty batch (or a structured error).
+ - Return `ResolvedSourceBatch(kind=..., step_key=..., trace_ids=[])` for empty query results so the loop sees the resolver applied.
+- Alternatives:
+ - Document the assumption "exactly one source reference per input step" and add a planner-level validator that rejects steps violating it.
+- Resolution (2026-05-22): combined both directions of the Suggested Fix. Each resolver now declares its exact `source_reference_key` and an `applies(step)` check; `resolve_queue_source_batches` selects the resolver whose key is present (first-applicable, not first non-empty), so an empty query result is a real empty batch for that resolver and never falls through to the testset resolver. The "exactly one source reference per input step" rule is enforced: a step carrying both `query_revision` and `testset_revision` raises `SourceResolutionError`. Unit tests cover the no-fall-through and multi-ref-rejection cases.
+
+
+### [CLOSED] UEL-030: "one default queue per run" is not enforced — unique index absent and no code-level guard
+
+- ID: `UEL-030`
+- Origin: `test`
+- Lens: `validation`
+- Severity: `P2`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Soundness`
+- Summary: The design relies on the partial unique index `ux_evaluation_queues_default_per_run` to guarantee at most one default queue per run, and `_reconcile_default_queue` assumes `fetch_default_queue` returns a single row. But the index is **absent from the running dev DB** and `create_queue` has **no code-level guard**, so creating two `is_default=True` queues for the same run succeeds — both become active default queues.
+- Evidence:
+ - `POST /evaluations/queues/` with `flags.is_default=True` twice for the same `run_id` both return `count=1` (test `test_default_queue_policy.py::test_second_default_queue_for_same_run_is_rejected`, currently xfail).
+ - `pg_indexes` for `evaluation_queues` lists only `pkey`, `run_id`, `project_id`, `flags`, `tags`, `user_ids` — **no** `ux_evaluation_queues_default_per_run`, even though `alembic_version` is at `b2c3d4e5f7a8` (past `a1b2c3d4e5f6`, which creates it) and no later migration drops it.
+ - Model declares the index in `api/oss/src/dbs/postgres/evaluations/dbes.py:290-296` with `postgresql_where=text("(flags ->> 'is_default')::boolean = true")` — note this counts **archived** rows (no `deleted_at IS NULL`), which conflicts with the reconcile flow that archives then later unarchives/recreates a default queue.
+ - Migration `a1b2c3d4e5f6` creates the index with the same `WHERE (flags ->> 'is_default')::boolean = true` (no `deleted_at` predicate).
+- Impact:
+ - Duplicate active default queues per run are possible, breaking the `fetch_default_queue` "single row" assumption used throughout `_reconcile_default_queue` / `_sync_run_queue_flag_for_default_queue`.
+ - If the index *were* applied as written (`is_default=true` without `deleted_at IS NULL`), the archive→recreate path in reconcile would hit a unique violation against the archived row. So the index predicate is also likely wrong.
+- Files:
+ - `api/oss/src/dbs/postgres/evaluations/dbes.py`
+ - `api/oss/databases/postgres/migrations/core/versions/a1b2c3d4e5f6_add_default_evaluation_queues.py`
+ - `api/oss/src/core/evaluations/service.py` (create_queue path)
+- Cause: The uniqueness guarantee was specified as a DB index but (a) the index is not present in the environment, and (b) its predicate omits `deleted_at IS NULL`, so it cannot both enforce one *active* default and allow archive→recreate.
+- Suggested Fix:
+ - Correct the index predicate to `(flags ->> 'is_default')::boolean = true AND deleted_at IS NULL` (one *active* default per run, archived rows excluded) in both the model and a new migration; confirm it actually applies in the dev/prod DBs.
+ - Add a code-level guard in `create_queue` (reject/▸no-op a second active default for a run) so the invariant holds even if the index is missing, and surface it as `EntityCreationConflict`.
+ - Flip `test_second_default_queue_for_same_run_is_rejected` from xfail to a passing assertion.
+- Notes:
+ - Surfaced while writing default-queue policy coverage (UEL-011).
+- Resolution (2026-05-21):
+ - **Root cause was a duplicate alembic revision id.** `add_default_evaluation_queues` shared the revision id `a1b2c3d4e5f6` with `drop_corrupted_metrics_for_some_runs`, so alembic resolved to one file and silently skipped the index migration — which is why the index was absent from the DB despite `alembic_version` being past `a1b2c3d4e5f6`.
+ - Renamed the index migration to revision `a1d2e3f4a5b6` and chained both new branch migrations (`a1d2e3f4a5b6` add-index, `a2b3c4d5e6f8` backfill) linearly after each environment's head — OSS after `e6f7a8b9c0d1`, EE after `b2c3d4e5f7a8` (EE carries three extra meter/role migrations past the shared OSS head). Both graphs now resolve to a single head `a2b3c4d5e6f8` (verified with `find_head.py core`). Migrations are mirrored in both `api/oss/.../core/versions/` and `api/ee/.../core/versions/`.
+ - Corrected the index predicate to `(flags ->> 'is_default')::boolean = true AND deleted_at IS NULL` in both the model (`dbes.py`) and the migration, so it enforces one *active* default per run while allowing archive→recreate.
+ - Fixed two SQL type bugs in the backfill (`evaluation_runs.data` / `evaluation_queues.data` are `json`, not `jsonb`): cast `data::jsonb` before `jsonb_array_elements`, and insert `'{}'::json` into the `data` column.
+ - Verified end to end on a `--nuke` rebuild: fresh DB lands at head `a2b3c4d5e6f8` and `ux_evaluation_queues_default_per_run` exists with the corrected predicate.
+ - **No separate code-level guard was added.** A pre-emptive SELECT guard was prototyped while the index was missing, but it never worked (it didn't block the second insert) and was not race-safe (separate SELECT/INSERT sessions). It was removed: the partial unique index is the real enforcement, and the existing `check_entity_creation_conflict` in `create_queue`/`create_queues` already translates the index's unique-violation `IntegrityError` into `EntityCreationConflict` (HTTP 409).
+ - `test_second_default_queue_for_same_run_is_rejected` is now a passing assertion (xfail removed). Full `test_default_queue_policy.py` suite: 16 passed, including the three `TestDefaultQueueUniqueness` cases (reject second active default, recreate after archive, allow across different runs).
+
+### [CLOSED] UEL-031: Closed-run lock was silently ineffective — `EvaluationClosedConflict` swallowed by `@suppress_exceptions` on 21 DAO mutations
+
+- ID: `UEL-031`
+- Origin: `test`
+- Lens: `validation`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Correctness`
+- Summary: Closing a run (`POST /runs/{id}/close`) is meant to lock it: subsequent content mutations should fail with 409. 21 DAO methods raise `EvaluationClosedConflict` when `flags.is_closed`, and 20 user-facing routes carry `@handle_evaluation_closed_exception()` (which converts it to 409) — but every DAO method's `@suppress_exceptions(...)` swallowed the conflict **before** it reached the router, so closed-run mutations silently returned 200/empty instead of 409. The lock was effectively a no-op at the HTTP layer.
+- Evidence:
+ - All 21 raising methods used `@suppress_exceptions()` (or `exclude=[EntityCreationConflict]`) — **none** excluded `EvaluationClosedConflict` (`api/oss/src/dbs/postgres/evaluations/dao.py`).
+ - `test_closed_run_guard.py`: editing a closed run / creating a scenario / creating a result returned 200 (count 0), not 409.
+ - The 3 run routes (`create_runs`, `edit_runs`, `edit_run`) additionally lacked `@handle_evaluation_closed_exception()`, so even once the DAO raised, `edit_run` returned a generic 500.
+- Worker hazard (why a blanket fix was unsafe): `process_evaluation_source_slice` calls `edit_run`/`edit_scenario` at finalization **without** checking `is_closed`. If a user closes a run mid-flight, making those raise would turn benign finalization into a crash/FAILURE.
+- Resolution (2026-05-21) — harden user-facing, keep worker soft:
+ - Added `EvaluationClosedConflict` to the `exclude` of the 20 user-facing mutation DAO methods that raise it (edit_run/edit_runs, create/edit/delete scenario(s)/result(s), edit/delete metrics, create/edit queue(s)); the metric setter path already had no suppression so it propagates. Now the decorated routes return 409.
+ - Added `@handle_evaluation_closed_exception()` to the `create_runs`/`edit_runs`/`edit_run` routes (`api/oss/src/apis/fastapi/evaluations/router.py`).
+ - Made the worker tolerant: `process_evaluation_source_slice` wraps its finalization `edit_run` and per-item `edit_scenario` in `try/except EvaluationClosedConflict` (log + skip) — closing is a lock, not a failure.
+- Files:
+ - `api/oss/src/dbs/postgres/evaluations/dao.py`
+ - `api/oss/src/apis/fastapi/evaluations/router.py`
+ - `api/oss/src/core/evaluations/tasks/source_slice.py`
+- Regression coverage: `test_closed_run_guard.py` (5 tests) — close→is_closed, edit/scenario/result blocked with 409, open→edits allowed again. Existing flow tests confirm non-closed runs still finalize.
+- Notes:
+ - Distinct from UEL-012 (which deliberately makes queue archive/unarchive NOT raise on a closed run — those paths were left unguarded on purpose). Surfaced while writing closed-run coverage.
+
+### [CLOSED] UEL-028: Batch (non-queue) source runs never finalize run status — stuck `running` after all scenarios succeed
+
+- ID: `UEL-028`
+- Origin: `test`
+- Lens: `validation`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Correctness`
+- Summary: A batch (non-queue) source-backed run (testset → application → auto evaluator) processed every scenario to `success` and refreshed metrics, but the run-level `status` never rolled up — it stayed `running` with `flags.is_active=true` indefinitely. Reproduced end-to-end against the dev stack with the new `mock_v0` (LLM-free, sandbox-free) workflow.
+- Evidence:
+ - Worker logs: `[SLICE] Complete processed=2 has_errors=False`, `scenarios_with_pending=0`, `scenarios_with_auto_results=2`. Both scenarios reached `success` in the DB.
+ - Targeted diagnostic logging proved the chain: the per-item computation correctly produced `run_status=SUCCESS` (`has_errors=[False,False]`, `has_pending=[False,False]`), but the value entering the terminal `edit_run` was `RUNNING`.
+ - Root cause: the severity-floor block in `process_evaluation_source_slice` (`api/oss/src/core/evaluations/tasks/source_slice.py`) ranked `RUNNING` (2) **above** `SUCCESS` (1). Across slices it floors the persisted status up to the more-severe value — so a run whose stored status was `RUNNING` could never transition to `SUCCESS`; it pinned at `running` forever. The transient `RUNNING`/`PENDING` states were incorrectly treated as outranking the terminal `SUCCESS`.
+ - Prevalence on the dev DB before the fix (batch/`is_live=false` runs): `success=35` vs `running=114`, `pending=211`.
+ - Not a caching issue: there is no cache layer on the evaluation-run service/DAO, and the stale value was confirmed directly in Postgres.
+- Resolution (2026-05-21) — Option B from `docs/designs/unified-eval-loops/run-status-finalization.md` (no run-wide scenario aggregation):
+ - **Corrected the severity floor** so terminal statuses outrank the transient ones: `FAILURE(4) > ERRORS(3) > SUCCESS(2) > RUNNING(1) > PENDING(0)`. A freshly computed terminal status (incl. `SUCCESS`) now replaces a stale `RUNNING`, while a prior `FAILURE`/`ERRORS` still floors over a later SUCCESS-only slice (UEL-017's intent). `test_source_slice_processor_preserves_higher_queue_status` still passes.
+ - **Reset `status=RUNNING` on every (re)dispatch** in the activation flow (`service.py` `_activate_evaluation_run`), not just on creation. This makes the **extended-finished** case correct: extending a `success` run flips it back to `running` while the new work executes, then the slice re-finalizes it. (Previously it kept `run.status` on re-activation, so an extended finished run stayed `success`.)
+ - Hardening: the terminal `edit_run` clears `flags.is_active` for terminal statuses; `dao.edit_run` writes `status` via `status.value` + `flag_modified` (mirroring `close_run`), since `edit_dbe_from_dto` dumped the DTO without `mode="json"` and left an enum that did not persist reliably.
+ - **Scope note:** only the `batch_testset` / `batch_invocation` dispatch (`update_run_status=True`) finalizes; `live_query` / `batch_query` pass `update_run_status=False` and are untouched. Batch testset/invocation runs are **single-slice** today (`process_testset_source_run` issues exactly one `process_evaluation_source_slice` call), so the multi-slice early-finalize race (Option C / UEL-017 item 1) does not apply here yet.
+ - Regression coverage: `api/oss/tests/pytest/acceptance/evaluations/test_evaluation_flows_run.py` runs a full testset → `mock_v0` app → `mock_v0` auto-evaluator evaluation end-to-end through the real worker and asserts `status=success`. Passes (~4s). DB row after the fix: `status=success`, `is_active=false`.
+- Files:
+ - `api/oss/src/core/evaluations/tasks/source_slice.py`
+ - `api/oss/src/core/evaluations/service.py`
+ - `api/oss/src/dbs/postgres/evaluations/dao.py`
+- Notes:
+ - Surfaced by the new `agenta:custom:mock:v0` test workflow (deterministic, no LLM, no code sandbox), which lets evaluation runs execute end-to-end in acceptance tests.
+ - Full analysis + rejected alternatives: `docs/designs/unified-eval-loops/run-status-finalization.md`.
+
+### [CLOSED] UEL-029: Batch query→evaluator runs never finalize run status (dispatched with `update_run_status=False`)
+
+- ID: `UEL-029`
+- Origin: `test`
+- Lens: `validation`
+- Severity: `P2`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Correctness`
+- Summary: The `batch_query` topology (query → evaluator, no application, not live) dispatched through `process_query_source_run` with `update_run_status=False`, so — like UEL-028 on the testset path — it never rolled its status up to a terminal value. The `live_query` topology shares the same function and *must* stay running, so the two cases needed to be distinguished.
+- Resolution (2026-05-21):
+ - `process_query_source_run` already receives `use_windowing` (True for `batch_query`, False for `live_query`). Set `update_run_status = use_windowing`, so batch query runs finalize while live runs keep polling.
+ - Zero-traces batch case: `process_evaluation_source_slice` rejects empty input (raises "no source items"), so an empty batch query is finalized **directly** via `evaluations_service.edit_run(status=SUCCESS, is_active=False)` rather than through the slice. (A batch query with no matching traces is complete, not failed.)
+ - With UEL-028's finalization in place, non-empty batch query slices finalize via the same severity-floor path.
+- Files:
+ - `api/oss/src/core/evaluations/tasks/query.py`
+- Regression coverage: `test_evaluation_flows_run.py::test_batch_query_to_evaluator_runs_to_success` now asserts `status=success` + `is_active=false` (previously xfail). E1 suite: 4 passed.
+- Notes:
+ - Surfaced while building the run-to-completion flow suite with the `mock_v0` harness.
+
+### [CLOSED] UEL-012: archive/unarchive a queue must be allowed on a closed run (was: `@suppress_exceptions()` swallows `EvaluationClosedConflict`)
+
+- ID: `UEL-012`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P2`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Correctness`
+- Summary: `archive_queue`/`unarchive_queue` raised `EvaluationClosedConflict` when the parent run was closed; the bare `@suppress_exceptions()` swallowed it, returning `count=0` instead of a 409. The original finding proposed surfacing the 409.
+- Resolution (2026-05-21) — **policy decision: allow both.** Archiving/unarchiving a queue is a worklist/lifecycle action, not a content edit of the run, so it must succeed even on a closed (locked) run. The `is_closed` guard was **removed** from both `archive_queue` and `unarchive_queue` in `api/oss/src/dbs/postgres/evaluations/dao.py` (no `EvaluationClosedConflict` is raised on these paths anymore, so there is nothing left to swallow). This supersedes the "surface a 409" suggestion.
+- Files:
+ - `api/oss/src/dbs/postgres/evaluations/dao.py`
+- Regression coverage: `api/oss/tests/pytest/acceptance/evaluations/test_evaluation_flows_modify.py::test_unarchive_and_archive_default_queue_on_closed_run` — closes a human-queue run, then asserts archive + unarchive do **not** return 409.
+
+### [CLOSED] UEL-016: Service raises bare `ValueError` for default-queue policy violations instead of typed domain exceptions
+
+- ID: `UEL-016`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P3`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Consistency`
+- Summary: `_validate_default_queue_data`, the demotion guards, and `delete_queue`/`delete_queues` raised bare `ValueError` for default-queue policy violations, against the `AGENTS.md` rule that domain exceptions be typed in the core layer and converted at the API boundary.
+- Resolution (2026-05-21):
+ - Added a `DefaultQueueError` base + `DefaultQueueDataInvalid`, `DefaultQueueDemotionForbidden`, `DefaultQueueDeletionForbidden` (with structured `queue_id` context) in `api/oss/src/core/evaluations/types.py`.
+ - Replaced the bare `ValueError` raises in `service.py` (`_validate_default_queue_data`, the two demotion guards, both delete paths) with these typed exceptions.
+ - Added HTTP exception classes (`DefaultQueueDataInvalidException` → 422, `DefaultQueueEditingForbiddenException` → 409) in `apis/fastapi/evaluations/models.py`, and extended the `handle_evaluation_closed_exception` decorator (`apis/fastapi/evaluations/utils.py`) to convert the domain exceptions on the queue routes.
+- Files:
+ - `api/oss/src/core/evaluations/types.py`
+ - `api/oss/src/core/evaluations/service.py`
+ - `api/oss/src/apis/fastapi/evaluations/models.py`
+ - `api/oss/src/apis/fastapi/evaluations/utils.py`
+
+### [CLOSED] UEL-021: Source-backed simple queues are classified as `queries` / `testsets`, but runtime and tests expect `traces` / `testcases`
+
+- ID: `UEL-021`
+- Origin: `test`
+- Lens: `validation`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Area: `Evaluations / Simple Queues`
+- Summary: Query-backed and testset-backed simple queues currently keep `SimpleQueueKind.QUERIES` / `SimpleQueueKind.TESTSETS` as their queue kind, while the runtime dispatch works on resolved trace/testcase scenario items. The provided test run shows both unit and acceptance failures where query-backed queues are expected to expose `kind="traces"` and dispatch trace slices, and testset-backed queues are expected to expose `kind="testcases"` and dispatch testcase slices.
+- Evidence:
+ - `oss/tests/pytest/unit/evaluations/test_query_eval_loops.py::test_simple_queue_create_dispatches_each_query_source_with_step_key` observed `created_queue.data.kind == "queries"` but expected `"traces"`.
+ - `oss/tests/pytest/acceptance/evaluations/test_simple_queues_basics.py::test_create_source_backed_queue_preserves_repeats_and_assignments` observed `"testsets"` but expected `"testcases"`.
+ - Acceptance tests for creating source-backed queues returned zero queued items where one was expected.
+ - `api/oss/src/core/evaluations/service.py` maps queue data with `_get_source_kind()` returning `SimpleQueueKind.QUERIES` for `queue.data.queries` and `SimpleQueueKind.TESTSETS` for `queue.data.testsets`.
+ - `SimpleQueuesService._parse_queue()` reports `kind=self._get_kind(run)`, so the source family leaks into the public simple-queue response.
+- Files:
+ - `api/oss/src/core/evaluations/service.py`
+ - `api/oss/src/core/evaluations/types.py`
+ - `api/oss/tests/pytest/unit/evaluations/test_query_eval_loops.py`
+ - `api/oss/tests/pytest/acceptance/evaluations/test_simple_queues_basics.py`
+- Cause: The model conflates two different concepts: source declaration family (`queries` / `testsets`) and resolved executable item family (`traces` / `testcases`). Source-backed queue creation preserves source revision IDs correctly, but public queue kind and downstream dispatch checks are using the source family where tests expect the resolved family.
+- Explanation: A query-backed queue is created from query revisions, but the work assigned to reviewers/evaluators is trace scenarios. Similarly, a testset-backed queue resolves testset revisions into testcase scenarios. The API needs to preserve both facts without using one field for both.
+- Suggested Fix:
+ - Keep `queries` / `testsets` fields as source references.
+ - Return `kind="traces"` for query-backed queues and `kind="testcases"` for testset-backed queues, or introduce an explicit `source_kind` field if the source family must be exposed.
+ - Ensure source-backed queue runs are marked/queryable consistently so `query(kind="traces")` and `query(kind="testcases")` include them.
+ - Add regression tests for query-backed and testset-backed queue creation, fetch, query, and add-source rejection behavior.
+- Alternatives:
+ - If product wants `kind` to mean source family, update the tests and API docs. That would be a deliberate contract change and should not be inferred from the current implementation.
+- Sources:
+ - Provided pytest output.
+ - Local inspection of `SimpleQueuesService`.
+- Re-audit (2026-05-20): **Diagnosis corrected; severity unchanged (P1); confidence raised to high.** The "kind conflation" framing is inaccurate, and two evidence claims are wrong:
+ - The acceptance tests do NOT expect `kind="traces"`/`kind="testcases"`. `test_create_simple_queue_from_queries` asserts `queue["data"]["kind"] == "queries"` (`test_simple_queues_basics.py:173`) and `test_create_simple_queue_from_testsets` asserts `"testsets"` (line 199). They expect the source family preserved, plus `queries`/`testsets` arrays echoed back. The current `_get_source_kind` mapping to `QUERIES`/`TESTSETS` is therefore *correct*, not the bug.
+ - The real failure is upstream: the `KeyError: 'queue'` / `count == 0` happen because `_parse_queue` returns `None`. Trace: `SimpleQueuesService.create` source-backed branch calls `simple_evaluations_service._make_evaluation_run_data(...)` (`service.py:3636`). That builder defaults list-shaped evaluators to `DEFAULT_ORIGIN_EVALUATORS = "custom"` (`service.py:124`, applied at `3045-3049`), so `has_human=False` → `_reconcile_default_queue` leaves `is_queue=False` → `_get_kind` short-circuits to `None` at `service.py:4224` (`not run.flags.is_queue`) → `_parse_queue` returns `None` at `4271-4272` → router emits empty envelope.
+ - Contrast: the non-source `_make_run_data` (`service.py:4087`) defaults list evaluators to `origin="human"` (`4093-4099`), so direct trace/testcase queues get `has_human=True` → `is_queue=True` and parse correctly. This asymmetry between the two builders is the single root cause shared with UEL-022.
+ - Corrected suggested fix: align the source-backed evaluator-origin default with the non-source builder (default list-shaped evaluators to `"human"` in `_make_evaluation_run_data`), OR decouple `_get_kind`/`_parse_queue` from `is_queue` so a created queue is always parseable. Do NOT change `_get_source_kind`'s family mapping. Keep `kind` reporting the source family per the tests.
+- Resolution (2026-05-21): **Fixed via the evaluator-origin default, scoped to the queue path only.** Confirmed the re-audit's root cause: the source builder defaulted bare-list evaluators to `custom` → `has_human=False` → `is_queue=False` → `_parse_queue` returned `None` → empty envelope.
+ - Added a keyword-only `default_evaluator_origin: Origin = DEFAULT_ORIGIN_EVALUATORS` param to `_make_evaluation_run_data` and used it in the list-coercion. Only `SimpleQueuesService.create` passes `"human"`; the two `SimpleEvaluationsService` callers (create/edit) keep the `custom` default, so simple-evaluation behavior is unchanged. The shared run builder stays general — this is a queue-path default, not a run-layer rule.
+ - **Explicit origins are always honored:** the `"human"` default applies only to a bare list (origin-less). A dict like `{id: "auto"}` is passed through verbatim — the default never overrides it.
+ - **New simple-queue constraint** (per user): a queue must resolve to **at least one human evaluator**. A human evaluator is one that is origin-less (defaults to human) or explicitly `"human"`. So a bare list is always valid; an explicit dict is valid only if at least one value is `"human"` — a dict whose values are all non-human (all `auto`, all `custom`, or any `auto`/`custom` mix) is rejected. Enforced as a `SimpleQueueData.validate_sources` model-validator rule ("simple queues must have at least one human evaluator", 422) at request parse — before any run/default-queue is created. The underlying evaluation run has no such restriction.
+ - `_get_source_kind` family mapping unchanged; `kind` still reports the source family per the tests.
+ - Tests: `test_simple_queues_basics.py` adds `test_source_backed_queue_with_bare_evaluator_list_is_human_queue` (bare list → `has_human`/`is_queue` true), `test_simple_queue_rejects_evaluator_dicts_with_no_human` (all-auto, all-custom, and auto+custom mix → all 422), `test_simple_queue_allows_human_mixed_with_non_human_evaluators` (human+auto and human+custom → valid queue, both origins honored). Full file 20 passed.
+
+### [CLOSED] UEL-022: Source-backed queue dispatch enters the source-slice processor with `has_queries` / `has_testsets`, but the processor accepts only direct-source flags
+
+- ID: `UEL-022`
+- Origin: `test`
+- Lens: `validation`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Area: `Evaluations / Simple Queues`
+- Summary: Source-backed queue creation resolves query revisions into trace batches and testset revisions into testcase batches, then dispatches those batches through the same source-slice processor used by direct trace/testcase queues. The dispatch wrapper accepts source-backed flags (`has_queries` / `has_testsets`), but `process_evaluation_source_slice()` still treats `require_queue=True` as requiring direct-source flags only (`has_traces` / `has_testcases`). Query-backed and testset-backed queues can therefore pass the first dispatch gate and fail inside the slice processor.
+- Evidence:
+ - `oss/tests/pytest/acceptance/evaluations/test_simple_queues_basics.py::test_create_simple_queue_from_queries` failed with `assert 0 == 1`.
+ - `oss/tests/pytest/acceptance/evaluations/test_simple_queues_basics.py::test_create_simple_queue_from_testsets` failed with `assert 0 == 1`.
+ - `oss/tests/pytest/unit/evaluations/test_runtime_topology_planner.py::test_simple_evaluation_queue_batches_dispatch_through_slice_processor` failed because a queue-shaped run fixture with source-backed input was rejected by dispatch.
+ - `SimpleEvaluationsService.dispatch_trace_slice()` permits `run.flags.has_traces or run.flags.has_queries`.
+ - `SimpleEvaluationsService.dispatch_testcase_slice()` permits `run.flags.has_testcases or run.flags.has_testsets`.
+ - `api/oss/src/core/evaluations/tasks/source_slice.py` rejects `require_queue=True` unless `run.flags.has_traces or run.flags.has_testcases`; it does not accept `has_queries` / `has_testsets`.
+ - `SimpleQueuesService._dispatch_source_batches()` resolves query/testset-backed source batches and calls `dispatch_trace_slice()` / `dispatch_testcase_slice()` with `input_step_key=batch.step_key`, so those batches eventually reach the stricter source-slice guard.
+- Files:
+ - `api/oss/src/core/evaluations/service.py`
+ - `api/oss/src/core/evaluations/tasks/source_slice.py`
+ - `api/oss/tests/pytest/unit/evaluations/test_runtime_topology_planner.py`
+ - `api/oss/tests/pytest/acceptance/evaluations/test_simple_queues_basics.py`
+- Cause: The queue dispatch layer was partially updated for source-backed queues, but the source-slice processor still equates "queue batch" with direct trace/testcase source flags.
+- Explanation: A query-backed source batch is executable as trace items, but the run still carries `has_queries` because the input step references a query revision. A testset-backed source batch is executable as testcase items, but the run still carries `has_testsets`. The source-slice processor needs to validate the actual batch request plus input step, not only the direct-source family flags.
+- Suggested Fix:
+ - Update `process_evaluation_source_slice()` queue validation so source-backed queue batches are allowed when `input_step_key` points to a `query_revision` or `testset_revision` input step and the concrete `trace_ids` / `testcase_ids` are present.
+ - Alternatively, pass `require_queue=False` for source-backed queue dispatches after validating the source batch in `SimpleQueuesService._dispatch_source_batches()`.
+ - Keep direct ad-hoc trace/testcase queues guarded by `has_traces` / `has_testcases`.
+ - Add tests for query-backed and testset-backed source batch dispatch through the actual source-slice processor.
+- Alternatives:
+ - Persist additional resolved-source flags (`has_traces` for query-backed queues and `has_testcases` for testset-backed queues) alongside source-family flags. This would make the current guard pass, but it blurs the design's separation between source family and resolved executable item family.
+- Sources:
+ - Provided pytest output.
+ - Local inspection of `SimpleEvaluationsService.dispatch_*`, `SimpleQueuesService._dispatch_source_batches()`, and `tasks/source_slice.py`.
+- Re-audit (2026-05-20): **Partially confirmed; shares root cause with UEL-021.** The source-slice processor's `has_traces`/`has_testcases`-only gate is real and reproduced (see UEL-017 re-audit for the exact line — `tasks/source_slice.py:569` gates on `run.flags.has_traces or run.flags.has_testcases`, excluding `has_queries`/`has_testsets`). However, the *primary* reason the acceptance tests see `assert 0 == 1` is the same `is_queue=False` / evaluator-origin-default issue documented in UEL-021's re-audit — the queue never reaches a parseable state, so no scenarios are reported. The processor-gate gap (this finding) is the *secondary* defect that surfaces once UEL-021's origin default is fixed. Fix UEL-021 first, then re-run the source-backed dispatch tests to isolate whether the `source_slice.py:569` gate still blocks query/testset-backed batches. Keep this finding OPEN as the second-order fix.
+- Resolution (2026-05-21): **Fixed.** Two parts, as the re-audit predicted:
+ - The `require_queue` dispatch gate in `process_evaluation_source_slice` (`tasks/source_slice.py:283-326`) had already been updated on the branch to accept `has_queries`+`query_revision` and `has_testsets`+`testset_revision` source batches — verified, no change needed there.
+ - The remaining offender was the run-status severity-floor block (`source_slice.py:566`), gated on `has_traces or has_testcases` only. Widened it to also accept `has_queries`/`has_testsets` so source-backed queue runs are covered. (This is the same gate as UEL-017 item #2.)
+ - With UEL-021's origin default fixed (queues now reach a parseable state), the source-backed dispatch tests pass: `test_simple_queues_basics.py` 20 passed, `test_query_eval_loops.py` + `test_runtime_topology_planner.py` all green (including `test_source_slice_processor_preserves_higher_queue_status`).
+
+### [CLOSED] UEL-023: Backend runtime adapter does not project source inputs onto the revision's declared input schema
+
+- ID: `UEL-023`
+- Origin: `test`
+- Lens: `validation`
+- Severity: `P2`
+- Confidence: `high`
+- Status: `fixed`
+- Area: `Evaluations / Runtime Adapters`
+- Summary: Two adapter tests fail for separate compatibility reasons. `BackendWorkflowRunner` now puts `interface` and `configuration` on the outer `WorkflowServiceRequest`, while the unit test expects them on `workflow_request.data`. `BackendCachedRunner` always forwards `semaphore=...` to the wrapped runner, but simple runner implementations may expose `execute_batch(requests)` only.
+- Evidence:
+ - `test_backend_workflow_runner_invokes_application_through_workflow_service` fails with `AttributeError: 'WorkflowRequestData' object has no attribute 'interface'`.
+ - `test_backend_cached_runner_preserves_partial_hit_order` fails with `TypeError: BatchRunner.execute_batch() got an unexpected keyword argument 'semaphore'`.
+ - Local inspection confirms `WorkflowServiceRequestData` is constructed with only `revision`, `parameters`, `testcase`, `inputs`, `trace`, and `outputs`.
+ - Local inspection confirms `BackendCachedRunner.execute_batch()` calls `self.runner.execute_batch(missing, semaphore=semaphore)` unconditionally.
+- Files:
+ - `api/oss/src/core/evaluations/runtime/adapters.py`
+ - `api/oss/tests/pytest/unit/evaluations/test_runtime_topology_planner.py`
+- Cause: The adapter boundary is not using a single explicit protocol. Some callers/tests still expect the older request data shape and a simpler batch runner signature.
+- Explanation: These are not the same bug. The request-shape issue needs a contract decision with the workflow service DTOs. The `semaphore` issue can be fixed either by standardizing the runner protocol or by making `BackendCachedRunner` only wrap runners that implement the full protocol.
+- Suggested Fix:
+ - Define the expected `WorkflowServiceRequest` shape once and update either the test or the adapter to match it. Avoid mutating Pydantic DTOs ad hoc to add fields that the model does not declare.
+ - Define a runner protocol for `execute_batch(requests, semaphore=None)` and update test runners to implement it, or make `BackendCachedRunner` tolerant of wrapped runners that do not accept `semaphore`.
+ - Add a small protocol-focused unit test for cached partial-hit order and semaphore forwarding.
+- Alternatives:
+ - If the outer `interface` / `configuration` fields are canonical, close the data-shape assertion as stale and update the test to assert `workflow_request.interface` and `workflow_request.configuration`.
+- Sources:
+ - Provided pytest output.
+ - Local inspection of `BackendWorkflowRunner` and `BackendCachedRunner`.
+- Re-audit (2026-05-20): **Evidence stale; real failing assertion is different.** The pytest dump's actual failure for `test_backend_workflow_runner_invokes_application_through_workflow_service` is `assert workflow_request.data.inputs == {"input": "hello"}` — got all four source keys (`correct_answer`, `testcase_id`, `testcase_dedup_id`, `input`). It is NOT the `AttributeError: 'WorkflowRequestData' object has no attribute 'interface'` this finding's Evidence cites; that `interface`/`configuration` assertion was already removed when UEL-003 was closed (the test now asserts via `workflow_request.data.revision[...]`/`parameters`). So this finding's part (a) is stale.
+ - Confirmed real defect: `BackendWorkflowRunner.execute` sets `inputs=request.source.inputs` verbatim (`adapters.py:309`) with no projection onto the revision's declared input schema (`revision["data"]["schemas"]["inputs"]["properties"]`). The test supplies a schema declaring only `input`, so the adapter should project `request.source.inputs` down to declared properties and drop `correct_answer`/`testcase_id`/`testcase_dedup_id`.
+ - The `semaphore` sub-issue (`BackendCachedRunner.execute_batch` forwarding `semaphore=` unconditionally) was not re-verified in this pass; left as-is pending a targeted check.
+ - Corrected suggested fix: in `BackendWorkflowRunner.execute`, filter `request.source.inputs` to the keys present in `revision["data"]["schemas"]["inputs"]["properties"]` before assigning to `WorkflowServiceRequestData.inputs`. Update the finding title to drop the `WorkflowServiceRequestData.interface` shape sub-issue (closed via UEL-003) and add the input-projection sub-issue.
+- Resolution (2026-05-21): **Fixed; both sub-issues confirmed closed.** Reproduced the suite: `test_backend_workflow_runner_invokes_application_through_workflow_service` failed exactly per the re-audit (`workflow_request.data.inputs` carried `correct_answer`/`testcase_id`/`testcase_dedup_id`); `test_backend_cached_runner_preserves_partial_hit_order` already **passed** (the `semaphore` sub-issue is stale, no change needed).
+ - Added `_project_inputs(inputs, data)` in `api/oss/src/core/evaluations/runtime/adapters.py` and applied it at the `inputs=` assignment in `BackendWorkflowRunner.execute`. It filters `request.source.inputs` to the keys declared in `data.schemas.inputs.properties`; revisions with no declared input schema pass through unchanged so untyped/legacy revisions are not broken.
+ - Verified: the failing test passes; the full `test_runtime_topology_planner.py` file is now 39 passed / 1 failed, where the remaining failure is the separate `test_source_slice_processor_preserves_higher_queue_status` (UEL-017/UEL-022 severity-floor gate), not this finding.
+
+### [CLOSED] UEL-024: Unit tests patch legacy module globals that no longer exist after dependency lookup refactors
+
+- ID: `UEL-024`
+- Origin: `test`
+- Lens: `validation`
+- Severity: `P2`
+- Confidence: `high`
+- Status: `fixed`
+- Area: `Compatibility / Tests`
+- Summary: Several unit tests fail before exercising behavior because they patch module-level globals (`auth_helper.posthog`, `meters.dao.engine`, `db_manager_ee.engine`) that no longer exist. The production code now lazy-loads or constructor-loads dependencies through `_load_posthog()` / `get_transactions_engine()`.
+- Evidence:
+ - Auth helper tests fail with `AttributeError: module 'oss.src.core.auth.helper' has no attribute 'posthog'`.
+ - Meter DAO tests fail with `AttributeError: module 'ee.src.dbs.postgres.meters.dao' has no attribute 'engine'`.
+ - Workspace invitation removal test fails with `AttributeError: module 'ee.src.services.db_manager_ee' has no attribute 'engine'`.
+ - Local inspection shows `auth.helper` imports `_load_posthog()` and assigns no module-level `posthog`.
+ - Local inspection shows `MetersDAO.__init__()` accepts `engine: TransactionsEngine = None` and defaults to `get_transactions_engine()`, so tests can inject a mock engine directly.
+ - Local inspection shows `remove_user_from_workspace()` calls `get_transactions_engine()` locally, and the same test file already has helper coverage that patches that function in earlier tests.
+- Files:
+ - `api/oss/src/core/auth/helper.py`
+ - `api/ee/src/dbs/postgres/meters/dao.py`
+ - `api/ee/src/services/db_manager_ee.py`
+ - `api/oss/tests/pytest/unit/auth/test_helper.py`
+ - `api/ee/tests/pytest/unit/test_meters_dao_strict_soft.py`
+ - `api/ee/tests/pytest/unit/services/test_db_manager_ee.py`
+- Cause: Test monkeypatch targets drifted after implementation changed dependency lookup style. The tests still patch old module-level handles instead of the current seam.
+- Explanation: This is a test compatibility problem unless the module-level globals are part of an intentional public contract. Adding broad production proxy globals just to satisfy monkeypatches makes the code worse and hides the real dependency seam.
+- Suggested Fix:
+ - Update auth tests to patch `_load_posthog()` or a small `_get_posthog_client()` helper if one is introduced.
+ - Update meter DAO tests to pass `MetersDAO(engine=mock_engine)` where `mock_engine.session()` returns the fake context.
+ - Update `db_manager_ee` pending-invite test to patch `get_transactions_engine()` consistently with the existing `_patch_core_session()` helper in the same file.
+ - Do not add broad module-level engine proxy objects to production DAO/service code.
+- Alternatives:
+ - Add narrow compatibility aliases only if external code, not just tests, imports those module globals. No evidence of that exists in the provided failures.
+- Sources:
+ - Provided pytest output.
+ - Local inspection of the affected modules and tests.
+- Re-audit (2026-05-20): **Fully confirmed, all three module seams reproduce.** Verified directly:
+ - `oss/src/core/auth/helper.py` has no module-level `posthog`; it calls `_load_posthog()` inside `_get_posthog_string_entries` (line 63, imported at line 8). Tests patching `auth_helper.posthog` raise `AttributeError`.
+ - `ee/src/dbs/postgres/meters/dao.py` injects via `MetersDAO.__init__(self, engine: TransactionsEngine = None)` defaulting to `get_transactions_engine()` (lines 96-99); no module-level `engine`. Tests patching `dao_module.engine` raise `AttributeError`. Fix: construct `MetersDAO(engine=mock_engine)`.
+ - `ee/src/services/db_manager_ee.py` calls `get_transactions_engine()` per-function (lines 82, 103, 125, 147, …); no module-level `engine`. Tests patching `db_manager_ee.engine` raise `AttributeError`. Fix: patch `db_manager_ee.get_transactions_engine`.
+ - This is the cleanest fix candidate of the failing-test findings — test-only changes, no production code touched, consistent with the "do not add proxy globals" note. Open Question on monkeypatch strategy can be resolved as "update tests to patch the current seam."
+- Resolution (2026-05-21): **Already fixed on this branch; verified by running the suite (30 passed, 0 failed).** All three test files now patch the current seam exactly as prescribed:
+ - `oss/tests/pytest/unit/auth/test_helper.py` patches `_load_posthog` (3 sites), not `auth_helper.posthog`.
+ - `ee/tests/pytest/unit/test_meters_dao_strict_soft.py` constructs `MetersDAO(engine=_mock_engine(session))`, not module-global `engine`.
+ - `ee/tests/pytest/unit/services/test_db_manager_ee.py` patches `get_transactions_engine` where it is called, not `db_manager_ee.engine`.
+ - No production code touched; consistent with the "do not add proxy globals" note.
+
+### [CLOSED] UEL-025: Legacy billing pricing alias tests are environment-sensitive because the subprocess helper inherits canonical pricing env
+
+- ID: `UEL-025`
+- Origin: `test`
+- Lens: `validation`
+- Severity: `P3`
+- Confidence: `medium`
+- Status: `fixed`
+- Area: `Environment / Billing Settings`
+- Summary: Tests that set legacy `AGENTA_PRICING` or `STRIPE_PRICING` expected those values to populate `env.billing.pricing`, but the user-provided suite output observed a canonical/default Stripe price instead. Local inspection shows `BillingSettings.pricing` already honors legacy aliases after `AGENTA_BILLING_PRICING`, and targeted local execution of both legacy alias tests passed when no canonical pricing env was present. The remaining issue is test isolation: the subprocess helper starts from `dict(os.environ)`, so inherited `AGENTA_BILLING_PRICING` can legitimately mask legacy aliases.
+- Evidence:
+ - `test_billing_pricing_accepts_legacy_agenta_pricing_alias` observed `price_1QmIwGB54aDbaYx3xE5J7WHA` instead of `price_agenta`.
+ - `test_billing_pricing_accepts_legacy_stripe_pricing_alias` observed the same default/canonical price instead of `price_stripe`.
+ - `api/oss/src/utils/env.py` uses `_load_json_env_dict_first("AGENTA_BILLING_PRICING", "AGENTA_PRICING", "STRIPE_PRICING")`.
+ - `api/ee/tests/pytest/unit/test_controls_env_override.py::_run()` copies the full parent environment before applying `env_extra`.
+ - Targeted local run of the two alias tests passed with `2 passed`, confirming the production alias order works when canonical env is absent.
+- Files:
+ - `api/oss/src/utils/env.py`
+ - `api/ee/tests/pytest/unit/test_controls_env_override.py`
+- Cause: The code path gives canonical env precedence by design, and the test helper does not scrub canonical env when validating legacy fallback.
+- Explanation: The production precedence appears correct: canonical `AGENTA_BILLING_PRICING` should beat legacy aliases. The test helper should isolate env vars if it wants to validate legacy alias fallback.
+- Suggested Fix:
+ - In `_run()` / `_ok()` test helpers, explicitly remove `AGENTA_BILLING_PRICING` when a legacy-alias test is running, or construct the subprocess env from a controlled minimal baseline.
+ - Add one explicit test that canonical env wins when both canonical and legacy aliases are present.
+- Alternatives:
+ - If product wants legacy aliases to override canonical pricing, change `_load_json_env_dict_first()` order. This would contradict the existing canonical precedence test.
+- Sources:
+ - Provided pytest output.
+ - Local inspection of `BillingSettings`.
+ - Targeted local pytest run.
+- Resolution (2026-05-21): **Already fixed on this branch; verified (13 pricing tests pass).** `ee/tests/pytest/unit/test_controls_env_override.py` now isolates env for the legacy-alias tests exactly as prescribed: `test_billing_pricing_accepts_legacy_agenta_pricing_alias` and `..._stripe_pricing_alias` pass `"AGENTA_BILLING_PRICING": ""` in `env_extra` to clear the inherited canonical var so the legacy alias is consulted. A new `test_billing_pricing_prefers_canonical_env_over_legacy_aliases` locks in canonical-wins precedence. Production precedence (`_load_json_env_dict_first("AGENTA_BILLING_PRICING", "AGENTA_PRICING", "STRIPE_PRICING")`) is unchanged and correct.
+
+### [CLOSED] UEL-026: Events acceptance tests hit the EE audit permission/entitlement gate and need fixture alignment
+
+- ID: `UEL-026`
+- Origin: `test`
+- Lens: `validation`
+- Severity: `P2`
+- Confidence: `medium`
+- Status: `fixed`
+- Area: `Events / Acceptance`
+- Summary: Four events acceptance tests expected HTTP 200 but received 403. Current code shows `POST /events/query` is gated in EE by both `Permission.VIEW_EVENTS` and the `Flag.AUDIT` entitlement. The acceptance fixture uses `cls_account["credentials"]` without asserting that account has event-view permission and audit entitlement, so the failures are likely fixture/plan setup unless response bodies or logs show a different 403 source.
+- Evidence:
+ - `oss/tests/pytest/acceptance/events/test_events_basics.py::TestEventsBasics::test_query_events_returns_valid_response` failed with `assert 403 == 200`.
+ - The same 403 pattern appears for event type, unknown event type, and windowing-limit query tests.
+ - `api/oss/src/apis/fastapi/events/router.py` calls `check_action_access(... permission=Permission.VIEW_EVENTS)` and raises `FORBIDDEN_EXCEPTION` when false.
+ - The same route calls `check_entitlements(key=Flag.AUDIT)` and returns `NOT_ENTITLED_RESPONSE(Tracker.FLAGS)` when false.
+ - `api/oss/tests/pytest/unit/events/test_events_router_audit.py` already encodes allow/deny behavior for this gate.
+- Files:
+ - `api/oss/tests/pytest/acceptance/events/test_events_basics.py`
+ - `api/oss/src/apis/fastapi/events/router.py`
+ - `api/oss/tests/pytest/unit/events/test_events_router_audit.py`
+- Cause: Acceptance account setup likely does not guarantee the event-view permission and audit entitlement required by the route.
+- Explanation: This is not evidence of an events DAO/service bug. It is a mismatch between acceptance expectations and the route's current EE access policy.
+- Suggested Fix:
+ - Update the acceptance fixture to use an account/plan with `VIEW_EVENTS` and `AUDIT`, or assert 403 when the fixture lacks audit access.
+ - Log or assert the response body in the acceptance tests so permission denial and entitlement denial are distinguishable.
+ - Keep the existing unit coverage for audit allow/deny behavior.
+- Alternatives:
+ - If OSS acceptance runs should bypass EE audit gating, ensure the test environment is actually OSS or conditionally skip/adjust the events acceptance tests under EE without audit entitlement.
+- Sources:
+ - Provided pytest output.
+ - Local inspection of events router and unit tests.
+- Resolution (2026-05-21): **Already fixed on this branch; verified.** The four OSS acceptance tests in `oss/tests/pytest/acceptance/events/test_events_basics.py` are now skipped with reason "Endpoint is plan/role-gated under EE; covered by the EE events suite" (5 skipped), matching the Alternatives fix. The plan/role-gated path is covered by `ee/tests/pytest/acceptance/events/test_events_basics.py` (5 passed). No 403-vs-200 mismatch remains.
+
+### [CLOSED] UEL-010: Backfill creates default queues for every existing run, bypassing the conditional policy
+
+- ID: `UEL-010`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P2`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Migration`
+- Summary: The backfill migration inserts a `flags.is_default=true` queue for every existing run that does not already have one, regardless of `has_human` or `EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS`. The runtime policy in `_reconcile_default_queue` archives default queues for runs that should not have them, but it only fires on the next `create_run`/`edit_run`. Until then the database contains stale active default queues.
+- Evidence:
+ - `api/oss/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py:43-71` inserts unconditionally, only checking the absence of an existing default queue.
+ - `api/oss/src/core/evaluations/service.py:408` policy is `should_exist = EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS or has_human`. With the env constant hardcoded `False` (UEL-007), the steady-state policy requires `has_human=True` for auto-only runs to retain a default queue.
+ - `api/oss/src/core/evaluations/service.py:433-438` archives default queues that should not exist, but only on run edits.
+- Impact:
+ - For environments where `has_human=False` is the majority, the migration creates many auto-only default queues that will only get archived on the next edit. Until then, `fetch_default_queue` returns active queues that the runtime would not have created.
+ - Queue analytics, "queues with no work" views, and simple-queue eligibility checks will see inconsistent state across the fleet during the lag window.
+ - The backfilled rows also default to `status='running'` regardless of run status, which is misleading for `success`/`failure` runs.
+- Files:
+ - `api/oss/databases/postgres/migrations/core/versions/a2b3c4d5e6f8_backfill_default_evaluation_queues.py`
+- Cause: The migration favors symmetry (every run gets a queue) over conformance with the runtime policy.
+- Suggested Fix:
+ - Mirror the runtime policy in the migration: only insert default queues for runs that satisfy `has_human OR `. Archive existing default queues for runs that no longer qualify.
+ - Alternatively, run a one-shot data fix immediately after the migration that calls `_reconcile_default_queue` for each run.
+ - Set `status` to a more neutral value (e.g., `pending`) or carry over the run's status when creating queues during backfill.
+- Alternatives:
+ - Keep the unconditional behavior and document the lag explicitly. This is acceptable if `EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS` is going to be flipped `True` in deployment, but the constant is currently `False`.
+- Resolution (2026-05-21): **Fixed.** `a2b3c4d5e6f8_backfill_default_evaluation_queues.py` now mirrors the runtime create policy (`_reconcile_default_queue`) in a single pass:
+ - The INSERT is gated on `COALESCE((r.flags ->> 'has_human')::boolean, false) = true`, matching `should_exist = EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS or has_human` with the env toggle hardcoded `False`.
+ - A new reconcile-the-other-direction UPDATE archives (`deleted_at = now`, `deleted_by_id = r.created_by_id`) any stale active default queue on a run that no longer qualifies (`has_human = false`), so there is no "first-edit reconciles" lag.
+ - Created queues carry `COALESCE(r.status, 'running')` instead of a hardcoded `'running'`, so closed/success/failure runs are not misrepresented.
+ - The final `is_queue` recompute is unchanged (already `has_human AND active default queue exists`).
+
+### [CLOSED] UEL-014: Step lifecycle operations (`add_step`, `remove_step`, `prune`) are absent
+
+- ID: `UEL-014`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P2`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Completeness`
+- Summary: `docs/designs/unified-eval-loops/step-removal-semantics.md` chose **destructive** `remove_step` + `prune` as the lifecycle policy and listed `add_step`, `remove_step`, `add_scenario`, `remove_scenario`, `probe(slice)`, `populate(slice, results)`, `prune(slice)`, `process(slice)`, `refresh_metrics`, `set_flag` as the canonical operation surface (`proposal.md:367-381`). None of these exist in the API or service.
+- Evidence:
+ - `api/oss/src/apis/fastapi/evaluations/router.py` (verified through subagent map) has no `add_step`, `remove_step`, `probe`, `prune`, `populate`, `process`, `set_flag` route. The closest in-process method is `TensorSliceOperations` (see UEL-015).
+ - `api/oss/src/core/evaluations/service.py` exposes `set_results`, `query_results`, `delete_results`, `refresh_metrics`, run/queue CRUD, but no graph-mutation API.
+ - `docs/designs/unified-eval-loops/step-removal-semantics.md:1-20` declares destructive remove+prune as the chosen model.
+- Impact: Without the operation surface, graph evolution still requires recreating runs or in-place edits without prune cascades, which is the very fragmentation the design was meant to resolve. UI/API affordances for managing steps after creation cannot be built.
+- Files:
+ - `api/oss/src/apis/fastapi/evaluations/router.py`
+ - `api/oss/src/core/evaluations/service.py`
+- Cause: Implementation prioritized planner/runtime/queue plumbing; the operation API surface remains future work per the plan, but is not labeled as deferred in this branch.
+- Suggested Fix:
+ - Track the operation API as an explicit follow-up. Either ship it in this branch or extend `gap.md` to mark it as a known-pending item.
+ - When implementing, follow the AGENTS.md domain conventions (`apis/fastapi//router.py` + `core//service.py` + `dbs/postgres//dao.py`).
+- Alternatives:
+ - Resolve as `needs-user-decision` if the team prefers to land the unification without the operation surface and ship it as a follow-up PR.
+- Resolution (2026-05-21): **Fixed for the `remove_step` + `prune` lifecycle (the part `step-removal-semantics.md` actually mandates).** Per user decision, graph mutation is not exposed as separate `add_step`/`remove_step` endpoints. Instead, since `create_run` is conceptually "edit from an empty graph", create and edit now funnel through one shared post-write reconciler, `EvaluationsService._reconcile_run`:
+ - `_reconcile_run(run, prior_step_keys)` runs `_prune_removed_steps(run, prior_step_keys - current_step_keys)` then `_reconcile_default_queue(run)`.
+ - `create_run` / `create_runs` pass `prior_step_keys=set()`, so prune is a guaranteed no-op (no prior cells) — preserving the "create = edit from scratch" property.
+ - `edit_run` / `edit_runs` fetch the prior run, capture its step keys, and after the DAO write prune the cells of any dropped step. Adding/keeping a step needs no special path: omitting a step from `data.steps` *is* a destructive removal.
+ - `_prune_removed_steps` implements the documented cascade: delete result cells for removed steps across scenarios/repeats; remove scenarios left with zero remaining cells (i.e. sourced only from a removed input step); flush metrics for surviving affected scenarios. Closed runs are rejected by the existing DAO `edit_run` guard.
+ - Files: `api/oss/src/core/evaluations/service.py` (`_reconcile_run`, `_prune_removed_steps`, `_step_keys`, rewired create/edit). Tests: `api/oss/tests/pytest/acceptance/evaluations/test_evaluation_step_removal.py` (non-input drop prunes only its cells; input drop prunes orphan scenarios; create does not prune; queue eligibility re-derived). 12/12 targeted acceptance tests pass; 52/54 evaluations unit tests pass (the 2 failures are pre-existing UEL-017/UEL-022/UEL-023, unrelated).
+ - Still open as separate findings: the slice-level `process(slice)` execution contract (UEL-015) and the other documented ops (`add_step`/`add_scenario`/`set_flag`/etc.) are not part of the remove+prune lifecycle and remain out of scope here. The full operation surface and per-op status (done / partial / deferred) is now catalogued in [`operations.md`](./operations.md); the deferred ops will be implemented later.
+
+### [CLOSED] UEL-027: SendGrid client is an eager import-time module-global, inconsistent with the lazy-loader pattern used for other optional third-party subsystems
+
+- ID: `UEL-027`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P3`
+- Confidence: `high`
+- Status: `fixed`
+- Area: `Utils / Third-party subsystem access`
+- Summary: A 2026-05-21 audit of how `api/` accesses third-party subsystems found that optional dependencies are otherwise reached through once-checked lazy loaders in `oss/src/utils/lazy.py` (`_load_stripe`, `_load_posthog`), but SendGrid was the odd one out: two separate module-level eager initializations at import time. This is the same drift trap as UEL-024 (module-globals are hard to swap in tests) and means SendGrid client construction runs at import regardless of whether email is ever sent.
+- Evidence (pre-fix, files since changed/removed):
+ - `oss/src/services/email_service.py:13-22` (now deleted) constructed `sg = sendgrid.SendGridAPIClient(...)` at module import time, guarded only by `if env.sendgrid.enabled`, and referenced it directly in `send_email` (`sg.send(message)`).
+ - `ee/src/services/db_manager_ee.py:5,65-66` imported `sendgrid` and constructed `sg = sendgrid.SendGridAPIClient(api_key=env.sendgrid.api_key)` at import time **unconditionally** (no `enabled` guard). Grep confirmed `sg` was assigned and never read anywhere in that module — dead code.
+ - By contrast, Stripe and PostHog use `oss/src/utils/lazy.py` once-checked loaders that return `None` when disabled/unavailable, and callers null-check the result.
+ - No external module imports `email_service.sg` or `db_manager_ee.sg` directly; all email goes through `email_service.send_email()` / `read_email_template()` (consumers: `oss/src/services/user_service.py`, `oss/src/services/organization_service.py`, `ee/src/services/organization_service.py`).
+- Cause: The audit's "two axes" model (required-vs-optional × per-request-client-vs-boot-time-framework) explains every other subsystem: required per-request deps (Postgres/Redis) get a lazy singleton factory plus constructor-injection on modern DAOs; optional per-call deps (Stripe/PostHog) get `lazy.py` loaders; the boot-time framework (SuperTokens) is initialized once at startup. SendGrid is an optional per-call client and should have been a `lazy.py` loader, but was instead two eager module-globals.
+- Resolution (2026-05-21):
+ - Added `_load_sendgrid()` to `oss/src/utils/lazy.py`, mirroring `_load_stripe`/`_load_posthog` but returning a configured `SendGridAPIClient` instance (not a module — accepted per the "module-vs-client" decision below), or `None` when disabled/unavailable. Owns its own enabled-check and preserves the prior log lines (enabled / missing-sender / disabled).
+ - `ee/src/services/db_manager_ee.py`: removed the dead `sg = SendGridAPIClient(...)` global and its `import sendgrid` (the symbol was never used).
+ - **Boundary decision (per user):** email is a *caching-style* subsystem (callers share real orchestration: load template -> format placeholders -> validate sender -> send), unlike Stripe/PostHog which are one-liner direct calls (`stripe.Customer.create`, `posthog.capture`) with no shared glue. So email belongs behind a util like Redis behind `caching.py`, NOT inlined. Created `oss/src/utils/emailing.py` with a single public function `send_email(*, to_email, subject, username, action, workspace, call_to_action, from_email=None)` plus two private helpers (`_read_email_template`, `_render_email_template`). The loader's enabled-check + sender validation + `Mail` construction + `sg.send` all live inside the util; only `send_email` is part of the public surface.
+ - Deleted `oss/src/services/email_service.py` and moved its template `git mv oss/src/services/templates/send_email.html -> oss/src/utils/templates/send_email.html` (so path resolution relative to the module still works).
+ - Migrated all four call sites (`oss/src/services/organization_service.py`, `oss/src/services/user_service.py`, `ee/src/services/organization_service.py` x2) from the repeated `read_email_template().format(...)` + `email_service.send_email(...)` dance to a single `emailing.send_email(...)` call. Removed the now-duplicated `if not env.sendgrid.from_address: raise ValueError(...)` guard from call sites (the util owns it). Callers that short-circuit on a disabled mailer with a non-bool return (invite link / reset link) keep their own `if not env.sendgrid.enabled` early-return.
+ - No production behavior change: disabled SendGrid is still a logged no-op; enabled builds the client on first send instead of at import.
+ - Follow-up (same session): also folded the Loops marketing-contact helper into `emailing.py`. The former `ee/src/services/email_helper.py::add_contact_to_loops` was a stateless `httpx` POST to the Loops API (no SDK/client, so nothing to lazy-load) but had no enabled-guard. Moved it to `oss/src/utils/emailing.py::add_contact(email, ...)` (the method is edition-agnostic — just an HTTP call — so it lives in OSS utils; the `is_ee()` gate stays at the call site in `ee/src/services/commoners.py`), added an `if not env.loops.enabled: return None` no-op guard mirroring `send_email`, and deleted `email_helper.py`. `emailing.py` is now the single outbound email/contact surface: public `send_email` (transactional via SendGrid) + `add_contact` (Loops audience); helpers stay `_`-prefixed.
+ - ruff format + check clean; import smoke test passes; template loads from new location.
+- Decisions captured during the audit (apply to future subsystem work):
+ - **Enabled-check placement:** each `lazy.py` loader owns its enabled-check and returns `None` when off; callers null-check. (Stripe/PostHog still gate at call sites today; not migrated in this pass but the intended direction.)
+ - **Module vs client:** loaders return whatever the library is designed for — `stripe`/`posthog` return the module (global `api_key`), `sendgrid` returns a client instance. Do not force uniformity against the library shape.
+ - **Boundary:** required per-request deps (Postgres/Redis) -> lazy singleton factory + constructor injection on modern DAOs; optional deps with shared orchestration (email) -> util wrapper (caching-style); optional one-liner deps (Stripe/PostHog) -> direct lazy use; boot-time framework (SuperTokens) -> eager conditional init at startup.
+- Alternatives:
+ - Leave SendGrid eager and accept the inconsistency. Rejected: it was the only optional subsystem not using the `lazy.py` seam, and the EE copy was eager-unconditional dead code.
+ - Fully unpack `email_service` and inline `_load_sendgrid()` + `sg.send(Mail(...))` at every call site (to match Stripe/PostHog). Rejected: the four callers share template/format/validate orchestration, so inlining would duplicate ~10 lines x4; email is a caching-style boundary, not a one-liner.
+- Sources:
+ - 2026-05-21 read-only subsystem-access audit (Explore agent) covering Postgres, Redis, Stripe, PostHog, SuperTokens, SendGrid.
+ - Local inspection of the (now-removed) `email_service.py`, `db_manager_ee.py`, `lazy.py`, and the four email call sites.
+
+### [CLOSED] UEL-008: `has_traces`/`has_testcases` flags are never set on run creation
+
+- ID: `UEL-008`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `stale`
+- Category: `Correctness`
+- Summary: Original claim was that the runtime never writes `has_traces`/`has_testcases`/`has_human`/etc. on run creation.
+- Resolution:
+ - Retracted. A deeper trace of the DAO showed that `EvaluationsDAO.create_run`, `create_runs`, `edit_run`, and `edit_runs` all call `create_run_flags(_run)` / `edit_run_flags(run, base_flags=...)`, which delegate to `_make_run_flags` in `api/oss/src/dbs/postgres/evaluations/utils.py:73-138`. That helper resets the eight `has_*` flags and recomputes them from `run.data.steps` on every write that carries a step graph.
+ - The service-layer `_make_evaluation_run_flags` (3308-3337) does pass all eight `has_*` as explicit `False`, but the DAO overrides them with the derived values. The derived values are correct for the canonical step shapes used by `_make_evaluation_run_data` and `SimpleQueuesService._make_run_data`.
+ - The reported runtime symptom (`dispatch_trace_slice` short-circuit, `_get_kind` returning `None`) does not occur, because by the time those checks run, the DAO has already populated `has_traces` / `has_testcases` / `has_queries` / `has_testsets` correctly.
+ - Existing coverage in `api/oss/tests/pytest/unit/evaluations/test_run_flags.py:13-111` locks in the inference for the four families.
+ - The residual concerns about the inference's brittleness (synthetic step-key + substring matching) are tracked in the rewritten UEL-009.
+
+### [CLOSED] UEL-013: `SimpleQueuesService.create` forces `is_queue=False` and never re-derives via reconciliation
+
+- ID: `UEL-013`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P1`
+- Confidence: `medium`
+- Status: `stale`
+- Category: `Correctness`
+- Summary: Original claim was that `SimpleQueuesService.create` would leave `is_queue=False` because `has_human` was never set, so `_reconcile_default_queue` would never create a default queue.
+- Resolution:
+ - Retracted. The DAO `create_run` runs `_make_run_flags`, which walks the constructed annotation steps and sets `has_human=True` when any annotation step has `origin="human"`. `SimpleQueuesService._make_run_data` defaults list-shaped evaluator inputs to `origin="human"` (service.py:4096-4099). For dict-shaped inputs, the explicit origin is honored.
+ - `EvaluationsService.create_run` then runs `_reconcile_default_queue(run=created_run)` with the DAO-derived `has_human`. When `has_human=True`, the default queue is created and `is_queue=True` is written via a follow-up `edit_run`.
+ - The explicit `EvaluationRunFlags(is_queue=False)` the service passes on create is consumed by `_make_run_flags`'s explicit-update merge and then reconciled, so the persisted value is correct.
+ - End-state: human-evaluator simple queues do reach `is_queue=True`; auto-only "queues" intentionally do not, per design (`unify-evals-extension-synthesis.md:174-181`).
+ - The layering question — that `is_queue` is service-only and the DAO does not enforce it — is split out as UEL-020.
+
+### [CLOSED] UEL-007: `EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS` ships as `False` for local-dev UX
+
+- ID: `UEL-007`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P2`
+- Confidence: `high`
+- Status: `wontfix`
+- Category: `Consistency`
+- Summary: The global default-queue policy toggle is a Python module-level constant (`False`) inside `service.py`, not an environment variable through `oss/src/utils/env.py`.
+- Files:
+ - `api/oss/src/core/evaluations/service.py`
+- Resolution:
+ - Wontfix per user decision: the constant is intentionally shipped as `False` so local development exercises the human-evaluator-conditional default-queue UX path. The `env` wiring (and the matching unit test) can be revisited when product flips the policy.
+
+### [CLOSED] UEL-004: Runnable batch length mismatches can silently drop planned cells
+
+- ID: `UEL-004`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Correctness`
+- Summary: The shared source-slice loop zipped planned cells with runner results and did not verify that the runner returned one execution per requested cell.
+- Files:
+ - `sdks/python/agenta/sdk/evaluations/runtime/source_slice.py`
+ - `sdk/tests/pytest/unit/test_evaluations_runtime.py`
+- Resolution:
+ - Fixed by making `process_evaluation_source_slice` treat runner result-count mismatches as explicit scenario errors.
+ - Missing trailing planned cells are now logged as failed result cells with a contract-violation message instead of disappearing from persistence.
+ - Added focused SDK unit coverage for a two-repeat auto evaluator batch where the runner returns only one execution.
+- Sources:
+ - The over-return direction is now tracked separately as UEL-018.
+
+### [CLOSED] UEL-005: Trace-backed queue slices do not load trace context before evaluator execution
+
+- ID: `UEL-005`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Correctness`
+- Summary: Direct trace batches entered the unified runtime as `ResolvedSourceItem(trace_id=...)` only, so auto evaluators could receive no source trace, inputs, outputs, or span link.
+- Files:
+ - `api/oss/src/core/evaluations/runtime/sources.py`
+ - `api/oss/src/core/evaluations/tasks/source_slice.py`
+ - `api/oss/tests/pytest/unit/evaluations/test_runtime_topology_planner.py`
+- Resolution:
+ - Fixed by hydrating direct trace source items through `tracing_service` before converting them to SDK source items.
+ - The resolver now populates `trace`, root `span_id`, `inputs`, and `outputs` from `ag.data` when the source trace is available.
+ - Added focused unit coverage for direct source resolution and for `process_evaluation_source_slice(trace_ids=[...])` forwarding hydrated source context to the SDK runtime.
+
+### [CLOSED] UEL-006: Source-trace links are hard-coded as `invocation`
+
+- ID: `UEL-006`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P2`
+- Confidence: `medium`
+- Status: `wontfix`
+- Category: `Consistency`
+- Summary: The SDK runtime emits upstream links under the key `invocation`.
+- Files:
+ - `sdks/python/agenta/sdk/evaluations/runtime/source_slice.py`
+ - `api/oss/src/core/evaluations/runtime/adapters.py`
+- Resolution:
+ - Wontfix per user decision: the invocation link key is the workflow contract, and the key for the invocation step should be `invocation`.
+
+### [CLOSED] UEL-003: Dict-revision regression test asserts fields that the request model drops
+
+- ID: `UEL-003`
+- Origin: `mixed`
+- Lens: `verification`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Testing`
+- Summary: The staged unit test for dict-shaped evaluator revisions fails because it asserts `workflow_request.interface` and `workflow_request.configuration`, but the active `WorkflowServiceRequest` alias is `WorkflowInvokeRequest`, whose declared payload surface is `data`.
+- Resolution:
+ - Fixed by updating the regression test to assert preserved evaluator metadata through `workflow_request.data.revision["data"]` and `workflow_request.data.parameters`, matching the current SDK request model.
+
+### [CLOSED] UEL-001: Backend evaluator runner receives dumped revisions but reads them like DTOs
+
+- ID: `UEL-001`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P1`
+- Confidence: `high`
+- Status: `fixed`
+- Category: `Correctness`
+- Summary: Backend auto-annotation execution can invoke evaluators with an empty `interface` and `configuration` because the shared runtime dumps revisions to dictionaries before handing them to `BackendEvaluatorRunner`.
+- Resolution:
+ - Fixed by making `BackendEvaluatorRunner` read revision, nested `data`, and `flags` from both dict-shaped and DTO-shaped objects.
+ - Added a focused unit case for dict-shaped evaluator revisions in `api/oss/tests/pytest/unit/evaluations/test_runtime_topology_planner.py`.
+
+### [CLOSED] UEL-002: Startup instrumentation uses raw prints in the FastAPI module
+
+- ID: `UEL-002`
+- Origin: `scan`
+- Lens: `verification`
+- Severity: `P3`
+- Confidence: `high`
+- Status: `wontfix`
+- Category: `Compatibility`
+- Summary: `api/entrypoints/routers.py` now emits startup timing with top-level `print()` calls during module import.
+- Resolution:
+ - Wontfix per user decision.
diff --git a/docs/designs/unified-eval-loops/gap.md b/docs/designs/unified-eval-loops/gap.md
new file mode 100644
index 0000000000..1e67168470
--- /dev/null
+++ b/docs/designs/unified-eval-loops/gap.md
@@ -0,0 +1,404 @@
+# Gap Analysis
+
+## Summary
+
+The current system has many pieces of a unified evaluation model, but they are split across setup surfaces, worker loops, SDK code, queue code, and frontend assumptions.
+
+The largest gaps are:
+
+- no first-class planner that turns run graph + sources + flags into tensor cells
+- source resolution exists in several paths but not behind one resolver interface
+- repeat-aware execution exists in current backend loops but not behind one execution planner
+- pending/manual lifecycle exists in key loops but is still duplicated and topology-specific
+- no slice-aware `process` operation
+- no single slice-shaped operation boundary across process/probe/populate/prune
+- source-family classification and simple-queue eligibility are still entangled through `is_queue`
+- destructive step removal and archival step lifecycle are not yet separated
+
+## Already Implemented
+
+Current code already includes several capabilities that older design docs listed as missing or speculative:
+
+- `EvaluationRunFlags.is_cached`
+- `EvaluationRunFlags.is_split`
+- `EvaluationRunFlags.is_queue`
+- `EvaluationRunData.repeats`
+- `EvaluationResult.repeat_idx`
+- `EvaluationResultQuery.repeat_idx` / `repeat_idxs`
+- repeat helpers: `build_repeat_indices`, `required_traces_for_step`, `effective_is_split`
+- cache helpers: `make_hash`, `fetch_traces_by_hash`, `select_traces_for_reuse`, `plan_missing_traces`
+- source-aware queue creation from query/testset-backed sources
+- source-backed queue dispatch to concrete trace/testcase batches
+- human/custom evaluator pending behavior in live query and batch item paths
+- repeat-aware input/evaluator result creation in live query
+- repeat-aware input/application/evaluator result creation in batch testset
+- repeat-aware input/application result creation in batch inference / batch invocation
+- repeat-aware source/evaluator result creation in batch trace/testcase items
+
+## Setup Gaps
+
+Current setup is fragmented:
+
+- auto testset evaluation setup builds one specific graph shape
+- human evaluation setup builds a related but separate testset shape
+- live query setup has separate query semantics
+- queue setup accepts direct trace/testcase IDs but not source revisions
+- SDK/local setup has its own assumptions
+
+Still missing or incomplete:
+
+- canonical graph-oriented create request
+- shared validation for input source combinations
+- one canonical setup request model used by all wrappers
+- wrapper-to-canonical translation for every existing setup API
+- one place to enforce step origin semantics
+- annotation queue convenience APIs that hide backing run/scenario/result setup while using the same canonical setup path
+
+## Source Resolution Gaps
+
+There is no shared abstraction for resolving source descriptors into concrete scenario items, even though source resolution now exists in several code paths.
+
+Resolver behavior that exists but should be extracted:
+
+- query revision -> trace refs for live windows
+- query revision -> trace refs for source-backed queues
+- testset revision -> testcase refs for source-backed queues
+- testset revision -> testcase payloads for batch testset/invocation
+- direct trace IDs -> trace refs
+- direct testcase IDs -> testcase refs
+
+Current consequences:
+
+- scenario creation is repeated in each loop
+- each loop owns part of source resolution itself
+- live and batch query semantics are harder to compare
+- unsupported mixed-source cases fail implicitly rather than through clear validation
+
+
+## Source-Family Flag Gaps
+
+The current runtime still overloads `is_queue` in places where the concern is source family or queue-style ingestion.
+
+Missing from the target model:
+
+- explicit inferred `has_traces`
+- explicit inferred `has_testcases`
+- one place to prevent mixed source families using the source-family flags
+- one topology contract that does not need synthetic step-name inspection to distinguish direct traces/testcases from query/testset sources
+
+## Default Queue Integration Gaps
+
+The queue layer should be a human-work view over the tensor, but the current runtime/docs still blur several concerns.
+
+Missing from the target model:
+
+- default queue as the canonical persisted view over active human work
+- `queue.flags.is_default`
+- queue lifecycle semantics that can drive simple-queue eligibility
+- redefined persisted `run.flags.is_queue` as “active default queue + active human work”
+- explicit separation between queue view semantics and source-family classification
+
+## Step Lifecycle Gaps
+
+The current mutation model still leans toward:
+
+```text
+remove_step -> prune tensor cells
+```
+
+That is incomplete if product semantics require evaluator/step archival and retention of historical results.
+
+Needs explicit decision:
+
+- whether ordinary evaluator removal is archival/deactivation rather than destructive deletion
+- whether active versus archived step state belongs in the graph model
+- whether `process` defaults to active steps only
+- whether queue eligibility is based on active human steps only
+- when hard remove/prune is appropriate
+
+## Planner Gaps
+
+The system lacks an execution planner that can materialize these concepts once:
+
+- scenario cells
+- input result cells
+- auto executable cells
+- human/custom pending cells
+- repeat slots
+- cache reuse plans
+- upstream bindings between steps
+
+Current loops encode planning inline. This makes it difficult to support new combinations or change semantics consistently.
+
+- multiple input steps with consistent result slots
+- repeat fan-out at different graph boundaries
+- partial retries by tensor slice
+
+## Execution Gaps
+
+Current execution was specialized:
+
+- SDK preview evaluation had its own nested loop
+- backend legacy batch testset had another loop
+- backend live query had another loop
+- queue batch evaluation had another loop
+
+Current backend implementation direction:
+
+- live query, batch query, direct trace queues, direct testcase queues, batch inference, and testset -> application -> evaluator resolve source items and call one backend source-slice processor
+- batch inference is the application-only testset application graph shape
+- API-internal task handlers have been collapsed to run and slice processors
+- trace/testcase batch task helpers are no longer needed because the slice processor can call the source-slice processor directly
+- specialized helper names may remain as wrappers while web/API compatibility is preserved
+
+Current SDK implementation direction:
+
+- SDK preview/local evaluation now routes through SDK-owned `process_evaluation_source_slice`
+- SDK runner, result logging, trace loading, and metrics work are adapters around the shared SDK runtime contract
+- backend execution now delegates to the SDK processor through backend-specific scenario, result, cache, status, trace, and workflow adapters
+
+Still missing:
+
+- unified `process(run, slice)` role exposed as a public API or service operation
+- topological execution over planned cells
+- idempotent probe-before-write behavior
+- consistent error-as-result behavior
+- shared metrics refresh policy after processing
+- clear separation between execution and persistence adapters
+- public API/service operation shape for invoking the SDK-owned source-slice processor by tensor slice
+
+## Runnable Execution Gaps
+
+The current worker loops still call step-specific invocation helpers directly.
+
+Known debt:
+
+- application execution still uses legacy batch invocation helper paths
+- evaluator execution assembles workflow invocation requests separately
+- cache lookup, trace validation, link/reference construction, and error-to-result conversion are repeated around those calls
+- there is no single runnable-step executor that can handle application and evaluator steps through the same contract
+
+Needed:
+
+- `RunnableStepExecutor` interface for any auto runnable step
+- application-step adapter that can initially wrap the current application invocation path
+- evaluator-step adapter that can initially wrap workflow invocation
+- shared request/context builder for references, links, inputs, trace, outputs, and parameters
+- shared trace validation and result normalization
+- migration path to deprecate legacy LLM app batch helper functions after parity is proven
+
+This should be treated as part of unification, not as a later cleanup. Otherwise the new loop would only centralize iteration while preserving the most brittle execution boundary.
+
+## Tensor Operation Gaps
+
+The intended tensor identity exists in storage and query models, but the operation model is incomplete.
+
+Missing or partial:
+
+- `TensorSlice` model across backend, SDK, and frontend
+- slice-aware `probe`
+- slice-aware `populate`
+- slice-aware `prune`
+- slice-aware `process`
+- partial retry/fill-missing workflows
+- repeat slot materialization as a shared planner primitive
+
+Existing APIs are mostly per-entity or full-run oriented.
+
+## Repeat And Fan-Out Gaps
+
+`repeat_idx` exists in result identity and current backend loops now expand it in the inspected paths.
+
+Current gaps:
+
+- repeat expansion is duplicated across loops
+- queue repeats still also carry assignment semantics, so execution repeats and assignment lanes need an explicit shared contract
+- `is_split` is enforced through helpers in some paths, but topology validation is still dispatch-specific
+- no shared planner decides whether application or evaluator steps fan out
+
+Needed:
+
+- repeat-aware result-slot planner
+- topology-specific fan-out validation
+- deterministic repeat-slot binding for reused traces
+- tests for full, partial, and zero cache hits under repeats
+
+## Cache Gaps
+
+Hash-based trace reuse is implemented in current backend worker paths, but not centralized.
+
+Still missing:
+
+- one shared cache-resolution stage used by every runnable step
+- one explicit per-slot cache binding object
+- parity tests proving all loops use the same cache rules
+- a documented project-scoped cross-run reuse policy
+
+The current code uses `is_cached`; older docs that say `reuse_traces` should be treated as stale terminology unless an external compatibility need exists.
+
+## Origin Gaps
+
+`auto`, `human`, and `custom` origins exist in the current backend model, and human/custom pending behavior is present in several loops.
+
+Still missing or incomplete:
+
+- common pending/manual result lifecycle
+- consistent frontend/backend origin naming
+- external custom-populate contract for custom steps
+- annotation queue progress/status semantics layered over evaluation results without duplicating task state
+
+Verify frontend/generated-client naming before changing UI code; backend type truth is `auto`.
+
+## Annotation Queue Layer Gaps
+
+Annotation Queue v2 identifies product/API gaps adjacent to unified loop execution:
+
+- convenience API for queue creation from traces and testsets
+- annotator inbox/list view across queues
+- per-item progress computed from evaluation results
+- explicit export/write-back flow for testset-sourced annotation queues
+- clear distinction between backing infrastructure status and consumer-facing task status
+- UI that uses queue assignment instead of allowing annotators to annotate any scenario
+
+These should be built on top of the unified planner/source resolver/tensor result model, not as a separate runtime.
+
+## Graph Mutation Gaps
+
+Steps are stored in run data, but graph operations are not first-class enough.
+
+Missing:
+
+- `add_step` endpoint/service operation
+- `remove_step` endpoint/service operation
+- graph validation outside setup functions
+- tensor pruning cascade when removing a step
+- explicit immutable-reference policy in code paths
+- UI/API affordances for managing steps after creation
+
+Without these, graph changes require specialized setup edits or recreation.
+
+## Flag Gaps
+
+Flags are consistently modeled in the current backend types, but old docs and possibly callers still use stale names.
+
+Current canonical backend flags include:
+
+- `is_live`
+- `is_active`
+- `is_cached`
+- `is_split`
+- `is_queue`
+- `repeats`
+- `is_closed`
+
+Compatibility names to reconcile:
+
+- `reuse_traces` vs `is_cached`
+- `repeat_target` vs `is_split`
+- `allow_decrease_repeats` if repeat count becomes mutable
+
+Still missing:
+
+- first-class constrained `set_flag`
+- validation when flags conflict with topology
+- end-to-end propagation through setup, run fetch, queue creation, SDK/local execution, and frontend state
+
+## Topology Gaps
+
+Supported topologies are implicit in dispatch logic.
+
+Missing:
+
+- explicit topology validation table in code
+- structured error messages for unsupported combinations
+- explicit rejection for not-planned shapes such as multiple application steps, mixed-source queues, and live testset runs
+- future extension point for query -> application flows
+- future extension point for testset -> evaluator flows
+
+Potentially useful future shapes:
+
+- `query -> application -> evaluator`, with query traces adapted as input data rather than application links
+- `testset -> evaluator`, with an explicit evaluator testcase-only input contract
+
+Not planned for now:
+
+- multiple application steps in one worker-dispatched run
+- mixed query/testset source families in one queue
+- live testset evaluation
+
+The immediate goal should not be to support every theoretical graph. It should be to reject unsupported graphs through one planner, and make adding support localized.
+
+## API Gaps
+
+> The full operation surface and the implementation status of each op
+> (done / partial / deferred) is catalogued in [`operations.md`](./operations.md).
+
+Missing or incomplete API surface:
+
+- graph-oriented create request
+- `process(slice)`
+- `probe(slice)`
+- `prune(slice)`
+- `populate(slice, results)` for bulk/slice writes
+- `set_flag`
+- response payloads that expose resolved source items and pending cells consistently
+
+Existing APIs should remain as compatibility wrappers while the canonical surface is introduced.
+
+## SDK Gaps
+
+The SDK should own the shared runtime contract. The preview loop can keep its
+public setup API, but orchestration should move behind SDK runtime planning and
+SDK-specific execution/persistence adapters. Backend workers should consume the
+same SDK runtime models through backend-specific adapters.
+
+Missing:
+
+- remote API persistence adapter
+- slice-aware processing
+- probe-before-write
+- cache parity with backend
+- stable step key strategy aligned with backend graph steps
+- removal of duplicate backend planner/topology logic once migration coverage is sufficient
+
+The desired state is not "SDK calls backend worker for everything." It is "SDK and backend share the same loop contract with different persistence/execution adapters."
+
+## Frontend Gaps
+
+Missing:
+
+- explicit graph builder/step management model
+- TensorSlice UI concepts for retry, prune, and fill missing
+- unified origin naming
+- flag editing beyond current implicit flows
+- display of pending human/custom cells across query, testset, and queue runs
+- source-aware queue creation UI if that product path is enabled
+
+Frontend work can follow backend planner/API stabilization.
+
+## Testing Gaps
+
+Needed test coverage:
+
+- source resolver outputs for query, testset, trace IDs, testcase IDs
+- topology validation success and failure cases
+- repeat slot materialization for every supported topology
+- `is_split=true` and `is_split=false` on testset -> application -> evaluator
+- evaluator-only repeat fan-out for query and queue runs
+- cache full hit, partial hit, and miss
+- cross-run trace reuse
+- human/custom pending cells in query-backed runs
+- source-aware queues preserving query/testset revision references
+- existing direct queue behavior remains unchanged
+- SDK/backend parity for the same planned graph
+
+## Documentation Gaps
+
+Needed docs after implementation starts:
+
+- canonical source matrix
+- topology validation matrix
+- flag semantics and compatibility names
+- manual/custom origin lifecycle
+- cache and repeat behavior
+- migration guide from specialized setup APIs to canonical graph creation
diff --git a/docs/designs/eval-loops/iteration-patterns.md b/docs/designs/unified-eval-loops/legacy-iteration-patterns.md
similarity index 97%
rename from docs/designs/eval-loops/iteration-patterns.md
rename to docs/designs/unified-eval-loops/legacy-iteration-patterns.md
index c2991bf2ff..b6526a67f6 100644
--- a/docs/designs/eval-loops/iteration-patterns.md
+++ b/docs/designs/unified-eval-loops/legacy-iteration-patterns.md
@@ -1,5 +1,12 @@
# Evaluation Iteration Patterns
+> **Status: Frozen legacy analysis (2026-02-16).** Moved here from the now-removed
+> `docs/designs/eval-loops/`. The canonical unified design lives in
+> [`proposal.md`](./proposal.md) and [`plan.md`](./plan.md); naming here (e.g.
+> `repeat_target` enum, 8 `has_*` flags) predates and is superseded by those docs.
+> Retained because the legacy loop-family nesting analysis below is not replicated
+> elsewhere and is useful for assessing migration risk.
+
**Created:** 2026-02-16
**Purpose:** Document the iteration patterns used to execute evaluation graphs and populate evaluation tensors across API and SDK
diff --git a/docs/designs/eval-loops/refactoring-analysis.md b/docs/designs/unified-eval-loops/legacy-refactoring-analysis.md
similarity index 99%
rename from docs/designs/eval-loops/refactoring-analysis.md
rename to docs/designs/unified-eval-loops/legacy-refactoring-analysis.md
index 8a53018076..c51e9d5a29 100644
--- a/docs/designs/eval-loops/refactoring-analysis.md
+++ b/docs/designs/unified-eval-loops/legacy-refactoring-analysis.md
@@ -1,10 +1,16 @@
# Evaluation System - Refactoring Analysis
+> **Status: Frozen legacy analysis (2026-02-16).** Moved here from the now-removed
+> `docs/designs/eval-loops/`. The canonical unified design lives in
+> [`proposal.md`](./proposal.md) and [`plan.md`](./plan.md). Retained for the
+> side-by-side loop comparison and the concrete "pure functions to extract"
+> signatures, which are not replicated in the current design docs.
+
**Created:** 2026-02-16
**Purpose:** Detailed analysis of current code and concrete refactoring steps
**Related:**
-- [Current State - Iteration Patterns](./iteration-patterns.md)
-- [Desired Architecture](./desired-architecture.md)
+- [Current State - Iteration Patterns](./legacy-iteration-patterns.md)
+- Desired Architecture — _removed; superseded by_ [`proposal.md`](./proposal.md)
---
diff --git a/docs/designs/unified-eval-loops/operations.md b/docs/designs/unified-eval-loops/operations.md
new file mode 100644
index 0000000000..32be681489
--- /dev/null
+++ b/docs/designs/unified-eval-loops/operations.md
@@ -0,0 +1,89 @@
+# Evaluation Operation Surface
+
+## Purpose
+
+This document is the single catalogue of the first-class evaluation operations the
+unified-eval-loops design intends to expose, and the implementation status of each.
+
+It exists so the explicit operations (`add_step`, `remove_step`, `add_scenario`,
+`add_result`, `refresh_metrics`, …) are tracked in one place. Most are **deferred**
+and will be implemented later; this doc records what is done, what is not, and where
+each is specified.
+
+It does not redefine semantics — see the canonical docs:
+
+- Operation list and direction: [`proposal.md`](./proposal.md) §"Operation API Direction" (lines ~366-383)
+- Gaps and deferred surface: [`gap.md`](./gap.md) §"API Gaps", §"SDK Gaps"
+- Destructive removal lifecycle: [`step-removal-semantics.md`](./step-removal-semantics.md)
+
+## Model
+
+The graph defines the tensor shape; operations mutate either the **graph**
+(`add_step` / `remove_step` …) or the **tensor** (`populate` / `prune` …). The two
+op families stay symmetric:
+
+```text
+graph: add_step / remove_step / add_scenario / remove_scenario
+tensor: probe / populate / prune / process
+run: refresh_metrics / set_flag
+```
+
+A key invariant (per `step-removal-semantics.md`): the **stored graph and stored
+tensor have the same shape**. Adding a step adds a tensor column dimension; removing
+a step prunes that column's cells. `create_run` is conceptually "edit from an empty
+graph", so create and edit share one reconciliation path.
+
+## Status legend
+
+- **done** — implemented and reachable through the service/router (or runtime).
+- **partial** — exists but does not yet meet the documented contract.
+- **deferred** — specified here/in the proposal, not yet implemented. To be done later.
+
+## Operations
+
+Every first-class op below is reachable over HTTP under `/api/simple/evaluations/{id}/…`
+with an explicit `operation_id`, so the regenerated Fern client exposes a method per op.
+
+### Graph-shape operations
+
+| Operation | Status | Endpoint (`operation_id`) | Where |
+| --- | --- | --- | --- |
+| `add_steps` | **done** | `POST /{id}/steps/add` (`add_steps`) | `SimpleEvaluationsService.add_steps` — appends step columns to `run.data.steps` (idempotent on key); cells fill on the next `process`. The legacy folded-into-`edit_run` path still works too. proposal.md:370. |
+| `remove_steps` | **done** | `POST /{id}/steps/remove` (`remove_steps`) | `SimpleEvaluationsService.remove_steps` — drops step columns by key. Destructive cell removal via the reconcile path (`_reconcile_run` / `_prune_removed_steps`) is also driven by omitting a step on `edit_run`; semantics in `step-removal-semantics.md`; closed UEL-014. |
+| `add_scenarios` | **done** | `POST /{id}/scenarios/add` (`add_scenarios`) | `SimpleEvaluationsService.add_scenarios` — appends N skeleton rows (height). `populate` writes their input cells, `process` plans/executes (`process` never mints scenarios). proposal.md:372. |
+| `remove_scenarios` | **done** | `POST /{id}/scenarios/remove` (`remove_scenarios`) | `SimpleEvaluationsService.remove_scenarios` — drops scenario rows and their cells (delegates to `delete_scenarios`). proposal.md:373. |
+| `set_repeats` | **done** | `POST /{id}/repeats` (`set_repeats`) | `SimpleEvaluationsService.set_repeats` — sets the run's repeat (depth) dimension; existing cells untouched, new repeat slots fill on the next `process`. |
+
+### Tensor operations
+
+| Operation | Status | Endpoint (`operation_id`) | Where |
+| --- | --- | --- | --- |
+| `probe(slice)` | **done** | `POST /{id}/probe` (`probe_slice`) | `SimpleEvaluationsService.probe_slice` → `TensorSliceOperations.probe` / `probe_summary` in `runtime/tensor.py`. |
+| `populate(slice, results)` | **done** | `POST /{id}/populate` (`populate_slice`) | `SimpleEvaluationsService.populate_slice` → `TensorSliceOperations.populate`. Low-level cell CRUD (`create_results` + `/evaluations/results/`) still underlies it. |
+| `prune(slice)` | **done** | `POST /{id}/prune` (`prune_slice`) | `SimpleEvaluationsService.prune_slice` → `TensorSliceOperations.prune` (removes cells + refreshes metrics over the scope). Also driven by `remove_step` via `_prune_removed_steps`. |
+| `process(slice)` | **done** | `POST /{id}/process` (`process_slice`) | `SimpleEvaluationsService.dispatch_tensor_slice` → taskiq → `TensorSliceOperations.process`, which delegates to the injected `SliceProcessor` (`APISliceProcessor` in `tasks/processor.py`). Re-executes the runnable cells for the EXISTING scenarios a `TensorSlice` addresses — rebuilds each scenario's source binding from its stored input cell, re-hydrates trace/testcase context, plans from the run's current graph (so modified steps re-run), runs the cache-aware runners (hashed-trace reuse), populates, refreshes metrics, and finalizes. With no processor wired it raises rather than silently refreshing. Closed UEL-015. proposal.md:160-208. |
+
+### Run operations
+
+| Operation | Status | Where / Tracking |
+| --- | --- | --- |
+| `refresh_metrics(scope)` | **done** | `EvaluationsService.refresh_metrics` + `/evaluations/metrics/refresh`. Also invoked by every tensor-write op (populate / process / prune) over the touched scope. |
+| `set_flag` | deferred (this branch) | No first-class constrained `set_flag`. Flags are currently re-derived from the graph (`_make_run_flags`) and reconciled (`is_queue` via `_reconcile_default_queue`). A constrained setter lands later in this branch. proposal.md:379; gap.md:302, 340. |
+| run start / stop / close / open | **done** | `create_run`/`close_run`/`open_run` + `/{id}/start`,`/stop`,`/close`,`/open` routes. |
+
+## Still deferred
+
+Only `set_flag` remains deferred on this branch (flags are re-derived from the graph
+today; a constrained setter lands later — proposal.md:379; gap.md:302, 340). When
+implemented it should:
+
+- follow the AGENTS.md domain conventions (`apis/fastapi/evaluations/router.py` +
+ `core/evaluations/service.py`), with typed domain exceptions in
+ `core/evaluations/types.py`;
+- reuse the shared reconcile path so the mutation re-derives flags + default-queue
+ eligibility consistently with create/edit.
+
+The graph-shape and tensor ops are all wired end to end (service → HTTP →
+Fern client). They are slice-shaped where applicable (`TensorSlice`) so setup, retry,
+queue assignment, manual annotation, live ticks, and SDK/local runs share one tensor
+contract (proposal.md:381).
diff --git a/docs/designs/unified-eval-loops/origin-execution-model.md b/docs/designs/unified-eval-loops/origin-execution-model.md
new file mode 100644
index 0000000000..92acaac6cc
--- /dev/null
+++ b/docs/designs/unified-eval-loops/origin-execution-model.md
@@ -0,0 +1,171 @@
+# Origin execution model: today (`human`/`auto`/`custom`) and the future (`web`/`api`/`sdk`/`custom`)
+
+Status: design / forward-looking. The "today" section documents shipped
+behavior; the "future" section is a proposal, not yet implemented.
+
+## What `origin` means
+
+Every evaluation step (`input`, `invocation`, `annotation`) carries an
+`origin`. `origin` answers exactly one question: **who is responsible for
+executing this step?** It is not "who created the run", not "who started it",
+not "who dispatched the job" — only who *runs the work in a given slice*.
+
+- Type (SDK): `agenta/sdk/models/evaluations.py` — `Origin = Literal["custom", "human", "auto"]`
+- Type (API): `api/oss/src/core/evaluations/types.py` — same literal.
+
+The evaluation runtime (`EvaluationPlanner` + the slice processor) is shared:
+the **same** code runs inside the backend worker and inside the SDK
+`evaluate()` loop. So `origin` is the only thing that lets one body of code
+decide "is this step mine to run, or someone else's?". Two hosts read the same
+plan and each runs only its own steps.
+
+## Today: `human` / `auto` / `custom`
+
+| origin | Who executes the step | Who reads it |
+| -------- | ---------------------------------------------- | ----------------------------------------- |
+| `human` | A person, via the web frontend | Web only |
+| `auto` | The runtime host (backend worker, or the SDK) | Backend worker; SDK when it is the host |
+| `custom` | The SDK / an external client | The SDK runtime, **only** when it is that client |
+
+Read carefully: `auto` and `custom` are **not** symmetric.
+
+- `auto` is read by *whatever runtime is currently hosting the run* — the
+ backend worker when the backend runs it, the SDK runtime when `evaluate()`
+ runs it. "auto" = "the runtime should run this".
+- `custom` means "an external client runs this." The only situation where
+ `custom` resolves to "run it here" is when the SDK `evaluate()` loop **is**
+ that external client — i.e. the evaluation was both created and executed in
+ the SDK via `aevaluate()`. In every other context (a `custom` step on a run
+ the web created, or one the backend picked up), `custom` means "not mine" and
+ the step is left for whoever the external client is.
+
+### Where this is enforced in code
+
+- **Planner** — `agenta/sdk/evaluations/runtime/planner.py`,
+ `EvaluationPlanner._runnable_cells`:
+
+ ```python
+ manual_origins = {"human"} if execute_custom else {"human", "custom"}
+ is_manual_annotation = step.type == "annotation" and step.origin in manual_origins
+ # should_execute = not is_manual_annotation
+ ```
+
+ `execute_custom` is the context flag that says "I am the external client for
+ custom steps." It is threaded `aevaluate() -> process_evaluation_source_slice
+ -> EvaluationPlanner.plan/plan_bindings -> _runnable_cells`.
+
+- **SDK host** — `agenta/sdk/evaluations/preview/evaluate.py`: wires a local
+ evaluator runner for `origin != "human"` (so auto **and** custom), and calls
+ the processor with `execute_custom=True`. The SDK is the custom client.
+
+- **Backend host** — `api/oss/src/core/evaluations/tasks/processor.py`: wires
+ runners only for annotation steps with `origin not in {"human", "custom"}`
+ (auto only), and never sets `execute_custom` (defaults `False`). The backend
+ leaves both human and custom alone.
+
+ Confirmed in worker logs: a `custom` annotation processed by the backend
+ resolves to `runner_keys=[]` and the slice completes with the step left
+ pending — the backend does not run it.
+
+### How the web labels runs (`custom` = "SDK")
+
+The web does not store an authoritative "kind" — it **derives** it from the
+run's step origins (`web/oss/src/lib/evaluations/utils/evaluationKind.ts`,
+`deriveEvaluationKind`), priority order:
+
+1. online (live / source-backed)
+2. `human` — any annotation step with `origin="human"`
+3. `custom` — any step with `origin="custom"`
+4. `auto` — default
+
+So in the UI a run containing `custom` steps is shown as the "SDK"/custom kind.
+This is *load-bearing*: changing local-callable SDK evaluators from `custom` to
+`auto` would silently reclassify every SDK evaluation as a backend `auto` run in
+the UI. That is why local-callable evaluators created by `evaluate()` keep
+`origin="custom"`, even though the SDK is the one running them.
+
+### The tension this resolves
+
+`custom` is overloaded: it means both "the SDK ran this" (when `evaluate()` is
+the host) and "an external client owns this" (everywhere else). The
+`execute_custom` flag is what disambiguates the two at runtime without changing
+the stored origin — so the web's `custom`→"SDK" classification stays intact
+while the backend correctly refuses to run custom steps.
+
+## Future direction (proposal): `web` / `api` / `sdk` / `custom`
+
+The cleaner long-term model replaces the *role-by-actor* origins with
+*role-by-executor* origins. `origin` would name the executor that owns the step:
+
+| origin | Who executes the step |
+| -------- | ---------------------------------------------- |
+| `web` | The web frontend (a person, in the browser) |
+| `api` | The backend behind the API |
+| `sdk` | An Agenta SDK runtime (Python today, others later) |
+| `custom` | Anything else — external scripts, third-party code; **no one in the platform picks it up** |
+
+Each executor runs exactly the steps stamped with its own name; everyone else
+treats the rest as no-ops. `custom` becomes a true "nobody here runs this" —
+unlike today, where `custom` sometimes means "the SDK runs this."
+
+This is strictly about **who runs a step in a slice**, independent of who
+dispatched the job, who started the run, or who created it.
+
+### Why this is cleaner — and the open problem it raises
+
+- It removes the `auto`/`custom` overload. `auto` today secretly means "the
+ current runtime host", which is ambiguous once there is more than one runtime.
+- It removes the need for the `execute_custom` context flag: an `sdk` step is
+ run by the SDK, full stop; an `api` step by the backend. No "am I the client
+ for this?" question.
+
+The open problem (and why we did **not** adopt this now): **the SDK runtime is
+unified with the backend runtime.** The same planner/processor runs in both. If
+both backend and SDK are "the runtime", what distinguishes an `api` step from an
+`sdk` step beyond a label? And once there is a TypeScript SDK — a *different*
+codebase also running evaluations — is that `sdk` too, or does it need its own
+origin? A second candidate model ("web vs. runtime", only two values) collapses
+under exactly this: it cannot tell a backend-run step from an SDK-run step,
+because they share the runtime. The four-value `web/api/sdk/custom` model is the
+one that survives multiple SDKs, at the cost of every executor having to know
+its own identity.
+
+### Implications
+
+**Schema.** `origin` is currently `Literal["custom", "human", "auto"]` in both
+`sdk/models/evaluations.py` and `core/evaluations/types.py`, stored inside the
+run's `data.steps[].origin` (a `json` column, not `jsonb`). Moving to
+`web/api/sdk/custom` is a value-domain change, not a column change — no DDL, but
+every producer and reader of `origin` must agree on the new vocabulary
+simultaneously, which is the hard part.
+
+**Data migration.** Existing rows carry `human`/`auto`/`custom`. A migration
+would remap stored step origins:
+
+- `human` → `web`
+- `auto` → `api` (the backend was the implied runtime host for stored auto runs)
+- `custom` → split: SDK-run customs → `sdk`; everything else → `custom`.
+ This split is the lossy one — historically `custom` did not record *which*
+ external client ran it. A backfill can only infer "this was an SDK run" from
+ surrounding signal (e.g. the run was created via the SDK upsert path / has SDK
+ meta), and must fall back to `custom` when it cannot prove `sdk`.
+
+**Backward compatibility.** Run during the transition:
+
+- Keep accepting the legacy literals on write; normalize to the new domain at
+ the boundary (an adapter mapping `human/auto/custom` → `web/api/sdk/custom`),
+ the same shape as the existing legacy adapters in the API (cf. the
+ `__dedup_id__`/`testcase_dedup_id` normalization).
+- The web's `deriveEvaluationKind` already special-cases `custom`; it would gain
+ `sdk` and treat `web`/`api` as the new human/auto. Keep reading the legacy
+ values for old runs.
+- Dual-read for at least one deprecation window: planners must treat `api` and
+ legacy `auto` identically on the backend, `sdk` and "legacy custom that the
+ SDK runs" identically in the SDK, until all stored runs are migrated.
+
+**Net.** The future model is cleaner conceptually but requires (a) every
+executor to self-identify, (b) a lossy `custom`→`sdk` backfill, and (c) a
+dual-read compatibility window. The shipped `human/auto/custom` + `execute_custom`
+model is the pragmatic interim: it fixes the actual bug (the SDK not running its
+own custom evaluators) without a vocabulary migration, and keeps the web's
+existing `custom`→"SDK" classification working unchanged.
diff --git a/docs/designs/unified-eval-loops/plan.md b/docs/designs/unified-eval-loops/plan.md
new file mode 100644
index 0000000000..2ccb00ab5e
--- /dev/null
+++ b/docs/designs/unified-eval-loops/plan.md
@@ -0,0 +1,199 @@
+# Plan
+
+## Goal
+
+Move from multiple specialized setup and execution functions to unified evaluation loop(s) built around:
+
+- source resolvers
+- run graph steps
+- tensor slices
+- repeat-aware planning
+- origin-aware execution
+- runnable-step execution
+- adapter-based persistence
+
+This plan describes required work, not phases or timeline.
+
+## Baseline Inventory
+
+1. Lock down the current behavior with code references and tests before changing semantics.
+2. Treat these as implemented baseline behavior:
+ - `is_cached`
+ - `is_split`
+ - current `is_queue`
+ - `repeats`
+ - repeat-indexed result creation in current backend workers
+ - hash-based cache helpers and worker integration
+ - source-aware queue creation and source batch dispatch
+ - human/custom pending behavior in query/queue-related paths
+3. Maintain a parity matrix from current tests:
+ - `test_cache_split_utils.py`
+ - `test_query_eval_loops.py`
+ - `test_run_flags.py`
+ - queue assignment and queue DAO tests
+ - acceptance tests for evaluation steps/runs/queues/results
+
+## Vocabulary And Flags
+
+1. Use current backend names as canonical:
+ - `is_cached`
+ - `is_split`
+ - `repeats`
+2. Normalize origin values:
+ - `auto`
+ - `human`
+ - `custom`
+3. Add explicit source-family flags:
+ - `has_queries`
+ - `has_testsets`
+ - `has_traces`
+ - `has_testcases`
+4. Separate source-family classification from simple-queue eligibility.
+5. Redefine target `run.flags.is_queue` as:
+
+```text
+active default queue exists + active human evaluator work exists
+```
+
+6. Document topology validation rules in one table used by implementation and tests.
+
+## Shared Runtime Models
+
+Introduce or consolidate shared internal models:
+
+1. `InputSourceSpec`
+2. `ResolvedSourceItem`
+3. `ScenarioBinding`
+4. `EvaluationStep`
+5. `TensorSlice`
+6. `PlannedCell`
+7. `ExecutionPlan`
+8. `ProcessSummary`
+
+The common runtime contract should live in the SDK so SDK-local evaluations and API workers share the same planner/topology/result-cell model. Backend code should keep API-specific source, DAO, workflow-service, and worker-dispatch adapters in backend modules.
+
+## Source Resolution
+
+Create resolver interfaces that cover:
+
+1. query revision -> trace refs for live windows
+2. query revision -> trace refs for source-backed queues
+3. testset revision -> testcase refs for source-backed queues
+4. testset revision -> testcase payloads for batch testset/invocation
+5. direct trace IDs -> trace refs
+6. direct testcase IDs -> testcase refs
+
+Resolver requirements:
+
+- preserve existing source behavior
+- own live query windowing
+- preserve original source references in input steps
+- reject unsupported mixed-source combinations explicitly
+- expose source-family flags consistently
+
+## Tensor Slice Operations
+
+Add or adapt backend service operations around existing CRUD:
+
+1. `probe(slice)`
+2. `populate(slice, results)`
+3. `prune(slice)`
+4. `process(slice)`
+
+Requirements:
+
+- slice dimensions support all/none/explicit selections
+- `probe` identifies missing, success, failure, and any cells
+- `populate` writes by `scenario_id + step_key + repeat_idx`
+- `prune` deletes by slice and refreshes affected metrics
+
+## Planner
+
+Implement planner logic that produces result slots before execution.
+
+Planner responsibilities:
+
+1. validate topology
+2. order steps
+3. materialize scenario bindings
+4. create input cells
+5. expand repeat slots
+6. decide fan-out boundary
+7. bind upstream context
+8. mark `human` and `custom` cells pending
+9. select `auto` cells for execution
+
+Planner requirements:
+
+- one planned cell exists for every required repeat slot
+- unsupported topologies fail with structured validation errors
+- human/custom steps are planned as pending rather than silently skipped
+
+## Cache Resolution
+
+Reuse the existing cache helpers:
+
+1. `make_hash(...)`
+2. `fetch_traces_by_hash(...)`
+3. `select_traces_for_reuse(...)`
+4. `plan_missing_traces(...)`
+5. per-slot trace binding
+
+Requirements:
+
+- cache lookup is skipped when `is_cached=false`
+- full cache hit invokes nothing
+- partial cache hit invokes only missing slots
+- misses invoke all required slots
+- reused and newly generated traces populate identical tensor cells
+
+## Runnable-Step Execution
+
+Add a runnable execution boundary for any auto step whose type maps to a runnable.
+
+Initial adapters:
+
+1. SDK workflow-runner protocols for application/evaluator execution
+2. SDK/local adapters wrapping decorator/service endpoint execution
+3. API adapters wrapping the current backend workflow invocation path
+4. API application adapter wrapping the current legacy batch invocation path
+
+The interface should own:
+
+- request construction from step references and upstream bindings
+- cache resolver integration
+- invocation
+- trace fetch/validation
+- normalized `StepExecutionResult`
+
+## Queue Integration
+
+1. Treat default queues as persisted human-work views over the tensor, not orchestration.
+2. Add `queue.flags.is_default` to identify the canonical queue.
+3. Keep default queues open over scenarios, steps, and assignments.
+4. Let source-family flags describe where scenarios come from.
+5. Let `run.flags.is_queue` describe simple-queue eligibility.
+6. Ensure queue eligibility depends on active human steps and active default queue lifecycle.
+
+## Mutation Semantics
+
+1. Decide whether ordinary evaluator removal is archival/deactivation rather than destructive deletion.
+2. If history must remain visible, represent active versus archived step state in the graph model.
+3. Make planner defaults operate on active steps.
+4. Reserve hard remove/prune for explicit destructive cleanup.
+5. Keep queue eligibility tied to active human steps.
+
+## Verification
+
+Add or preserve coverage for:
+
+1. topology classification
+2. resolver behavior
+3. repeat slot creation
+4. cache reuse
+5. human/custom pending behavior
+6. query/testset/direct trace/direct testcase source families
+7. source-family validation
+8. tensor slice probe/populate/prune/process behavior
+9. queue/default-queue integration semantics
+10. active-versus-archived step behavior once chosen
diff --git a/docs/designs/unified-eval-loops/proposal.md b/docs/designs/unified-eval-loops/proposal.md
new file mode 100644
index 0000000000..ac5e2bcca1
--- /dev/null
+++ b/docs/designs/unified-eval-loops/proposal.md
@@ -0,0 +1,476 @@
+# Proposal
+
+## Goal
+
+Introduce unified evaluation loop(s) that avoid separate setup and execution functions for every evaluation shape while preserving the capabilities already implemented in the current backend:
+
+- input steps
+- application and evaluator origins
+- evaluation run flags
+- input sources
+- evaluation graph steps
+- repeat and cache behavior through `repeats`, `is_cached`, and `is_split`
+- live, batch, queue, and SDK/local execution contexts
+
+This proposal does not require every source to become the same thing. It requires every source to enter the same planning and tensor execution contract.
+
+The current code has already implemented several parts that older docs described as missing:
+
+- `EvaluationRunFlags.is_cached`
+- `EvaluationRunFlags.is_split`
+- `EvaluationRunFlags.is_queue`
+- `EvaluationRunData.repeats`
+- repeat helper functions in `evaluations/utils.py`
+- hash/cache helper functions in `evaluations/utils.py`
+- source-aware queue creation from query/testset-backed sources
+- live and batch query human/custom pending behavior
+- repeat-aware result creation in the inspected backend worker loops
+
+The proposal is therefore a unification/refactor proposal, not a first implementation of those behaviors.
+
+## Design Principle
+
+Separate source resolution, graph planning, execution, and tensor persistence.
+
+```text
+setup request
+ -> source resolver
+ -> run graph
+ -> scenario materializer
+ -> execution planner
+ -> step executor
+ -> tensor writer
+ -> metrics refresh
+```
+
+Each current loop family becomes a configuration of this pipeline instead of a separate handwritten loop.
+
+## Canonical Concepts
+
+### Run Graph
+
+A run graph is a list of immutable step definitions:
+
+```python
+class EvaluationStep:
+ key: str
+ type: Literal["input", "invocation", "annotation"]
+ origin: Literal["auto", "human", "custom"]
+ references: dict
+ inputs: list[StepInput] | None
+```
+
+Step references point to concrete revisions or direct-source descriptors. Editing a step means removing it and adding a new step.
+
+### Tensor Cell
+
+Every produced or pending result targets:
+
+```text
+run_id + scenario_id + step_key + repeat_idx
+```
+
+All execution, retry, prune, cache binding, and manual annotation work should address this coordinate.
+
+### Tensor Slice
+
+Use one slice model for read, write, delete, and processing operations:
+
+```python
+class TensorSlice:
+ scenarios: Literal["all", "none"] | list[UUID]
+ steps: Literal["all", "none"] | list[str]
+ repeats: Literal["all", "none"] | list[int]
+```
+
+The same slice shape should power:
+
+- `probe`
+- `populate`
+- `prune`
+- `process`
+- retry failed cells
+- fill missing cells
+- re-run a single evaluator
+- materialize new repeat slots
+
+## Source Resolver Layer
+
+Input sources should be modeled as descriptors that resolve into concrete source items.
+
+| Descriptor | Resolver output | Scenario source |
+|---|---|---|
+| query revision | trace refs | queried traces |
+| testset revision | testcase refs | testcases |
+| direct trace source | trace refs | queued traces |
+| direct testcase source | testcase refs | queued testcases |
+
+The resolver is responsible for source-specific rules:
+
+- live query windows
+- batch query snapshots
+- testset revision loading
+- direct item validation
+- source-aware queue expansion
+- preserving original source references in input steps
+
+The executor should not care whether a trace came from live query, batch query, or a queue. It should receive concrete scenario bindings.
+
+## Annotation Queue Convenience Layer
+
+Annotation Queue v2 should be treated as a consumer-facing layer over the same unified evaluation infrastructure.
+
+Principles:
+
+- `EvaluationRun`, `EvaluationScenario`, `EvaluationResult`, and `EvaluationQueue` remain the backing entities.
+- The annotation queue API hides run/scenario/result setup for trace and testset annotation use cases.
+- Queue assignment remains based on `EvaluationQueue.data.user_ids`, optional `scenario_ids`, optional `step_keys`, and result `repeat_idx`.
+- Queue creation from traces/testsets should translate into canonical source specs and graph steps, then use the same source resolver and planner as evaluation runs.
+- Annotation submission can continue to create annotation traces and link them to evaluation results.
+
+Unified eval loops should provide the infrastructure contract for this layer. They should not replace the annotation queue convenience API.
+
+## Planner Layer
+
+The planner converts a graph and concrete scenarios into execution slots.
+
+```python
+class PlannedCell:
+ scenario_id: UUID
+ step_key: str
+ repeat_idx: int
+ action: Literal["bind_input", "invoke", "pending", "skip"]
+ upstream: dict
+```
+
+Planner responsibilities:
+
+- validate topology
+- derive step order
+- materialize input cells
+- decide repeat fan-out point
+- compute required result slots
+- bind upstream trace/testcase/application output context
+- mark human/custom annotation cells as pending
+- skip cells that are already successful when requested
+
+The planner is where topology-specific behavior belongs.
+
+## Execution Layer
+
+`process(slice)` executes planned `auto` cells only.
+
+```text
+process(run, slice):
+ resolve concrete scenarios for input steps
+ plan cells for the requested slice
+ probe existing cells if skip-success is enabled
+ for each executable auto cell in dependency order:
+ resolve cache/reuse if enabled
+ invoke only missing work
+ populate result cells
+ create pending cells for human/custom work
+ refresh metrics for affected scope
+```
+
+The same executor can run in different contexts with different adapters:
+
+| Context | Adapter |
+|---|---|
+| backend worker | API source/DAO/workflow-service adapters |
+| SDK/local | local decorator or remote service adapters |
+| tests | in-memory adapter |
+| frontend human annotation | direct `populate` adapter for submitted cells |
+
+The planner, topology classifier, and result-cell models should be SDK-owned so
+SDK-local evaluation and backend workers use the same runtime contract. API code
+should not fork the runtime; it should translate backend DTOs into SDK runtime
+models and keep only backend-specific adapters beside the worker/service code.
+
+The backend implementation should have one scenario execution loop. Source
+wrappers may still differ because live queries, query snapshots, direct queue
+items, and testset rows resolve differently, but after resolution they should
+all call one source-slice processor. That processor owns input cell creation,
+application invocation, evaluator invocation, pending manual/custom cells,
+cache resolution, metrics refresh, and run/scenario status updates. Batch
+inference is therefore just the application-only graph shape, not a separate
+loop. Task-level trace/testcase batch helpers are unnecessary once the slice
+worker calls the source-slice processor directly; service/API wrapper methods
+can remain for compatibility.
+
+The SDK should own the generic source-slice contract. SDK preview/local
+execution can run through SDK-owned `process_evaluation_source_slice` now using
+local decorator runners, SDK result logging, and SDK trace loading. The backend
+processor should use that same contract with backend adapters for scenario
+creation, result persistence, cache reuse, status updates, trace loading, and
+workflow service execution.
+
+## Runnable Step Executor
+
+The unified loop should introduce a new runnable-step execution boundary rather than directly preserving the current helper calls inside each loop.
+
+Current application execution is still routed through legacy helper paths such as batch LLM app invocation. Those paths have accumulated patches and are not the right long-term abstraction. Evaluator execution is also assembled separately even though it has the same core shape: prepare a runnable request, bind upstream context, invoke or reuse a trace, validate the trace, and produce a result cell.
+
+Proposed contract:
+
+```python
+class WorkflowRunner:
+ async def execute(
+ self,
+ request: WorkflowExecutionRequest,
+ ) -> WorkflowExecutionResult:
+ ...
+```
+
+`WorkflowExecutionResult` should be independent of whether the runnable was an application or evaluator:
+
+```python
+class WorkflowExecutionResult:
+ status: EvaluationStatus
+ trace_id: str | None
+ span_id: str | None
+ hash_id: str | None
+ error: dict | None
+ outputs: dict | None
+```
+
+Responsibilities:
+
+- build the service request from step references and upstream bindings
+- apply cache lookup/reuse when enabled
+- invoke missing work
+- fetch and validate traces where required
+- normalize failures into result payloads
+- return enough context for downstream steps
+
+The first implementation can wrap existing application and workflow services.
+The SDK should expose the runner protocol and shared models. The API should
+provide backend workflow-service and legacy batch-invocation adapters. The SDK
+should provide local decorator and remote service adapters. This makes those
+wrappers replaceable so the legacy batch helpers can be deprecated without
+changing the planner, tensor operations, or queue APIs.
+
+## Origin Semantics
+
+`origin` controls who can populate a step:
+
+| Origin | Planner behavior | Executor behavior |
+|---|---|---|
+| `auto` | create executable cells | invoke and populate |
+| `human` | create pending cells | do not invoke |
+| `custom` | create pending cells or external-awaiting cells | do not invoke |
+
+This gives query-backed, testset-backed, and queue-backed runs the same pending/manual semantics. Current behavior where query-backed runs lack human/custom pending branches should become a topology limitation only until the planner supports those cells.
+
+## Flag Model
+
+Use the current backend flag set as canonical. Bridge older design names only where old clients or docs still mention them.
+
+| Canonical flag | Legacy design name | Purpose |
+|---|---|---|
+| `is_live` | `is_live` | periodic windowed source resolution |
+| `is_active` | `is_active` | pause/resume live processing |
+| `is_cached` | `reuse_traces` in older docs | enable hash-based trace reuse |
+| `is_split` | `repeat_target` in older docs | select fan-out location where meaningful |
+| `repeats` | `repeats` | number of repeat slots |
+| `is_closed` | `is_closed` | block structural and tensor mutations |
+
+Recommended compatibility mapping:
+
+```text
+repeat_target = "application" <=> is_split = true
+repeat_target = "evaluator" <=> is_split = false
+reuse_traces = true <=> is_cached = true
+```
+
+Do not introduce `reuse_traces` or `repeat_target` as new model fields unless there is a compatibility requirement. The current code already uses `is_cached` and `is_split`.
+
+## Topology Validation
+
+The unified planner should support every valid topology explicitly and reject invalid combinations before execution.
+
+| Topology | Valid? | Notes |
+|---|---:|---|
+| query -> evaluator | yes | live or batch; evaluator fan-out only |
+| query -> human/custom evaluator | yes target | creates pending cells |
+| query -> application -> evaluator | potentially useful | Requires query trace to application input adapter. Do not pass query traces as application `links`; that can make application traces look like annotations rather than invocations. |
+| testset -> application -> evaluator | yes | app or evaluator fan-out |
+| testset -> application | yes | Batch inference / batch invocation. Application fan-out only; no evaluator execution or evaluator metrics. |
+| testset -> evaluator | potentially useful | Requires evaluator testcase-only contract. |
+| direct trace -> evaluator | yes | queue trace shape |
+| direct testcase -> evaluator | yes | queue testcase shape |
+| mixed query + testset in one queue | not planned | Keep queues single-source-family for now. |
+| multiple application steps | not planned | Use separate evaluations for A/B comparison for the foreseeable future. |
+| live testset | not planned | Static sources do not make sense for live periodic evaluation. |
+
+The key shift is that unsupported shapes should fail through planner validation, not because there is no matching handwritten function. Potentially useful shapes should be explicitly modeled when implemented; not-planned shapes should stay rejected with clear errors.
+
+## Repeat Semantics
+
+Repeats are always represented as `repeat_idx` result slots. Fan-out determines which runnable step produces multiple traces.
+
+Rules:
+
+- query/queue trace/testcase evaluator-only runs fan out at evaluator steps.
+- application-only runs, also called batch inference or batch invocation, fan out at application steps.
+- testset -> application -> evaluator runs use `is_split`:
+ - `true`: application produces one trace per repeat, evaluators consume matching repeat traces
+ - `false`: application produces one trace, evaluators produce one trace per repeat
+- if a topology has no application/evaluator boundary, `is_split` is ignored or rejected according to validation policy.
+
+## Cache Semantics
+
+Cache reuse is explicit through `is_cached`.
+
+At each runnable step:
+
+1. Compute the expected hash from step references and upstream links.
+2. Fetch all candidate traces by hash.
+3. Select deterministic traces for requested repeat slots.
+4. Invoke missing slots only.
+5. Populate the same tensor cells whether the trace was reused or newly generated.
+
+Cache lookup is step-local and already exists in the current backend loops inspected:
+
+- application steps reuse application traces
+- evaluator steps reuse evaluator traces
+
+Cross-run reuse is structurally supported by project-scoped trace lookup by hash. The unified planner should reuse the existing helper functions instead of reimplementing this per loop.
+
+The cache resolver should sit inside or immediately beside the runnable-step executor so applications and evaluators use the same reuse semantics.
+
+## Setup API Direction
+
+Consolidate specialized setup functions behind one graph-oriented creation path plus convenience wrappers.
+
+Canonical create request:
+
+```python
+class EvaluationCreate:
+ inputs: list[InputSourceSpec]
+ steps: list[ExecutableStepSpec]
+ flags: EvaluationFlags
+```
+
+Convenience wrappers may remain:
+
+- create auto testset evaluation
+- create live query evaluation
+- create annotation queue from traces
+- create annotation queue from testcases
+- create source-aware queue from query/testset
+- create Annotation Queue v2 convenience flows from traces or testsets
+
+Several wrappers already use `_make_evaluation_run_data()`. The next step is to make that builder and its validations explicit enough that wrappers only translate into canonical graph/source specs and do not own separate graph semantics.
+
+## Operation API Direction
+
+Expose or normalize first-class operations:
+
+- `add_step`
+- `remove_step`
+- `add_scenario`
+- `remove_scenario`
+- `probe(slice)`
+- `populate(slice, results)`
+- `prune(slice)`
+- `process(slice)`
+- `refresh_metrics(scope)`
+- `set_flag`
+
+This lets setup, retry, queue assignment, manual annotation, live ticks, and SDK/local runs share the same tensor contract.
+
+Some CRUD operations already exist in service/router form (`create_results`, `query_results`, `delete_results`, `refresh_metrics`, run start/stop, queue creation). The missing piece is a slice-shaped operation boundary and a shared `process(slice)` planner/executor.
+
+## Migration Strategy
+
+Do not rewrite all loops at once. Introduce the unified planner and adapters beside existing loops, then move topologies one at a time while preserving current behavior.
+
+Recommended order:
+
+1. Inventory current behavior and lock it with parity tests.
+2. Define shared models: source descriptor, scenario binding, tensor slice, planned cell.
+3. Extract current source resolution behavior into resolver interfaces.
+4. Extract current repeat/cache planning into shared planner functions.
+5. Introduce a runnable-step executor that initially wraps existing invocation services.
+6. Route one simple topology through the planner, likely batch query or queue traces.
+7. Move pending human/custom planning into the shared planner.
+8. Move batch testset after repeat, cache, and runnable-executor parity are proven.
+9. Move live query once windowed source resolution and idempotency are stable.
+10. Collapse API-internal worker handlers to run/slice processors.
+11. Share one backend source-slice processor across live query, batch query, queue slices, batch inference, and testset application evaluation.
+12. Route SDK preview/local evaluation through SDK-owned source-slice processing with SDK-specific adapters.
+13. Move backend execution onto the SDK source-slice contract through backend adapters that preserve current cache/result/status behavior.
+14. Treat batch inference as the application-only shape of the testset application graph.
+15. Retire specialized setup/execution branches after parity tests pass, leaving compatibility wrappers around the canonical processor.
+
+## Success Criteria
+
+The design succeeds when adding a new valid combination requires:
+
+- adding or extending a source resolver if the source is new
+- adding or extending a step executor if the runnable is new
+- adding planner validation if the topology is new
+
+It should not require creating a new end-to-end setup function and a new end-to-end execution loop.
+
+## Default Queue Integration
+
+Unified eval loops should treat default queues as a consumer-facing layer over the tensor, not as part of orchestration.
+
+```text
+default queue = canonical persisted human-work view over the run tensor
+```
+
+A default queue is open over the run by default:
+
+```text
+scenario_ids = None
+step_keys = None
+user_ids = None
+```
+
+The runtime should continue to own:
+
+- source resolution
+- topology validation
+- planning
+- auto-step execution
+- tensor persistence
+
+The queue layer should own:
+
+- human-work visibility
+- assignment
+- queue lifecycle
+- simple queue interaction
+
+### Run flags
+
+The unified model should distinguish source family from queue eligibility.
+
+Source-family flags:
+
+- `has_queries`
+- `has_testsets`
+- `has_traces`
+- `has_testcases`
+
+Queue eligibility flag:
+
+```text
+run.flags.is_queue = active default queue exists + active human evaluator work exists
+```
+
+That keeps query-backed, testset-backed, trace-backed, and testcase-backed runs expressible through the same planner while allowing any human-bearing run with an active default queue to participate in the simple queue surface.
+
+### Step lifecycle
+
+The mutation model should distinguish lifecycle changes from destructive cleanup.
+
+If the product needs historical evaluator results to remain visible, then:
+
+- archive/deactivate should be the normal operation for steps that stop participating in future work
+- remove/prune should remain available only for explicit destructive cleanup
+- planner defaults should target active steps
+- default queue eligibility should depend on active human steps
diff --git a/docs/designs/unified-eval-loops/research.md b/docs/designs/unified-eval-loops/research.md
new file mode 100644
index 0000000000..44e834b97c
--- /dev/null
+++ b/docs/designs/unified-eval-loops/research.md
@@ -0,0 +1,344 @@
+# Research
+
+## Scope
+
+This document consolidates the existing evaluation-loop design notes and the
+current implementation state from:
+
+- `application/docs/designs/eval-loops`
+- `application/docs/designs/loops`
+- `application/docs/designs/query-eval-loops`
+- `application/docs/design/annotation-queue-v2`
+- `application/api/oss/src/core/evaluations/types.py`
+- `application/api/oss/src/core/evaluations/utils.py`
+- `application/api/oss/src/core/evaluations/service.py`
+- `application/api/oss/src/core/evaluations/tasks/source_slice.py`
+- `application/api/oss/src/core/evaluations/tasks/query.py`
+- `application/api/oss/tests/pytest/unit/evaluations/*`
+
+The goal is to identify the common execution model behind the current loop families and the places where setup and execution still diverge.
+
+## Current Loop Families
+
+The runtime historically had several explicit evaluation loop families:
+
+| Loop family | Source unit | Input steps | Application steps | Evaluator steps | Scenario represents |
+|---|---|---:|---:|---:|---|
+| Live query | trace returned by query | `1..N` query | `0` | `1..N` | queried trace |
+| Batch query | trace returned by query | `1..N` query | `0` | `1..N` | queried trace |
+| Batch testset | testcase | `1..N` testset | `1` | `1..N` | testcase |
+| Batch inference / batch invocation | testcase | `1..N` testset | `1` | `0` | testcase |
+| Queue traces | trace ID | `1` synthetic source | `0` | `1..N` | provided trace |
+| Queue testcases | testcase ID | `1` synthetic source | `0` | `1..N` | provided testcase |
+| SDK/local | runner-defined | run-defined | run-defined | run-defined | runner-defined |
+
+## Related Design: Annotation Queue v2
+
+`application/docs/design/annotation-queue-v2` matters because annotation queues are one of the main consumers of unified evaluation loop infrastructure.
+
+The durable direction from that design is:
+
+- keep `EvaluationRun`, `EvaluationScenario`, `EvaluationResult`, and `EvaluationQueue` as backing infrastructure
+- expose a simpler annotation queue API/UI that hides backing run/scenario/result setup
+- do not introduce a separate annotation task runtime unless the existing entities prove insufficient
+- map assignment/repeats through `EvaluationQueue.data.user_ids` and `EvaluationResult.repeat_idx`
+- support trace and testset annotation as consumer-facing queue creation flows
+
+Some current-state claims in that older design are stale. In current code, source-aware queue creation and human/custom pending behavior are already partially implemented. The useful takeaway is the layering principle: annotation queues are a convenience layer over evaluation entities, not a separate execution model.
+
+The current worker dispatch only supports a subset of possible graphs:
+
+- `query(1..N) -> evaluator(1..N)`
+- `testset(1..N) -> application(1) -> evaluator(1..N)`
+- `testset(1..N) -> application(1)`
+- `queue source(1) -> evaluator(1..N)`
+
+Unsupported by the current simple-evaluation worker dispatch, with product priority:
+
+| Unsupported shape | Priority | Notes |
+|---|---|---|
+| multiple application steps in one worker-dispatched run | not planned | A/B comparison can remain separate evaluations for the foreseeable future. |
+| query inputs followed by application steps | potentially useful | The planner must treat query traces as input data, not as invocation links for the application step. If query trace IDs are placed in application `links`, the resulting application traces may be classified as annotations rather than invocations. |
+| testset inputs followed directly by evaluator steps in non-queue mode | potentially useful | Useful for evaluators that can score testcase payloads without first invoking an application. Requires an explicit evaluator input contract. |
+| mixed query and testset source families in one queue | not planned | Keep queues single-source-family for now. |
+| live testset evaluation | not planned | Static testsets do not make sense as periodic live sources. |
+
+## Shared Runtime Model
+
+All loop families can be described with the same conceptual entities:
+
+- input source descriptors
+- materialized scenarios
+- executable steps
+- result cells
+- repeat slots
+- execution flags
+
+The intended result identity is already visible in the persistence model:
+
+```text
+scenario_id + step_key + repeat_idx
+```
+
+That identity is the core tensor coordinate. A unified loop should treat every execution as filling, probing, or pruning cells in this coordinate system.
+
+The current code already models this directly:
+
+- `EvaluationResult` has `scenario_id`, `step_key`, and `repeat_idx`.
+- `EvaluationResultQuery` can filter by `scenario_ids`, `step_keys`, and `repeat_idxs`.
+- worker loops now create repeat-indexed result rows in the main batch, queue, and live paths.
+
+## Steps
+
+Current run data already carries step definitions with:
+
+- `key`
+- `type`
+- `origin`
+- `references`
+- optional input links
+
+The shared step types are:
+
+| Step type | Meaning | Typical references |
+|---|---|---|
+| `input` | Source materialization | query revision, testset revision, direct trace/testcase source |
+| `invocation` | Application/workflow execution | application revision, variant, workflow revision |
+| `annotation` | Evaluator/judge/manual annotation | evaluator revision, annotation task |
+
+The shared origins are:
+
+| Origin | Populated by | Execution behavior |
+|---|---|---|
+| `auto` | Backend/SDK runner | invoked by `process` |
+| `human` | UI/user annotation | runner creates or leaves pending work |
+| `custom` | External/programmatic actor | runner creates or leaves pending work |
+
+Backend types use `auto`, `human`, and `custom`. Any frontend or generated-client naming drift should be treated as compatibility debt and verified before changing.
+
+## Input Sources
+
+The current code distinguishes source descriptors from concrete execution items.
+
+| Source descriptor | Concrete item | Current usage |
+|---|---|---|
+| query revision | trace | live query, batch query |
+| testset revision | testcase | batch testset, batch inference / batch invocation |
+| direct trace IDs | trace | queue traces |
+| direct testcase IDs | testcase | queue testcases |
+
+Source-aware queue creation has been partially implemented. `SimpleQueuesService.create()` can accept query/testset-backed queue sources, builds run data through `_make_evaluation_run_data()`, preserves source revision references in input steps, and dispatches concrete trace/testcase batches through `_dispatch_source_batches()`. Direct trace/testcase queue additions remain supported.
+
+Annotation Queue v2 frames this as a consumer-facing convenience layer: users should be able to create annotation queues from traces or testsets without manually constructing the backing evaluation run, scenarios, results, and queue.
+
+## Scenario Semantics
+
+A scenario is a concrete source item inside a run.
+
+Depending on the source family, a scenario may represent:
+
+- a trace returned by a query
+- a testcase from a testset revision
+- a direct trace queue item
+- a direct testcase queue item
+
+Live query scenarios additionally need temporal metadata such as timestamp and interval. Testset-backed online evaluation is intentionally unsupported because the same static testcases would be reprocessed every interval.
+
+## Application And Evaluator Boundaries
+
+Application steps produce application traces and outputs. Evaluator steps consume either:
+
+- an existing source trace from query/queue trace inputs
+- an application trace/output from an invocation step
+- testcase payload where the evaluator supports testcase-only input
+
+The current loop families differ mostly in which upstream object exists before evaluator execution.
+
+| Shape | Evaluator input |
+|---|---|
+| query -> evaluator | source trace |
+| queue trace -> evaluator | source trace |
+| testset -> application | no evaluator; output is application trace/result |
+| testset -> application -> evaluator | application trace and outputs |
+| queue testcase -> evaluator | testcase item |
+
+This difference is real and should be modeled as planning data, not hidden in separate handwritten loops.
+
+## Repeats And Fan-Out
+
+Older docs used two naming schemes for the same underlying concern:
+
+| Older eval-loop name | Current code name | Meaning |
+|---|---|---|
+| `repeat_target = "application"` | `is_split = true` | fan out at the application step |
+| `repeat_target = "evaluator"` | `is_split = false` | fan out at evaluator steps |
+| `reuse_traces` | `is_cached` | enable hash-based trace reuse |
+
+The current backend model uses `is_cached`, `is_split`, and `repeats`. `EvaluationRunFlags` contains `is_cached` and `is_split`; `EvaluationRunData.repeats` defaults to `1`.
+
+The worker loops now expand repeat slots in the core paths inspected:
+
+- batch testset creates input, invocation, and evaluator results per `repeat_idx`
+- batch inference / batch invocation creates input and invocation results per `repeat_idx`
+- batch trace/testcase queue items create input/source and evaluator results per `repeat_idx`
+- live query creates query and evaluator results per `repeat_idx`
+
+The remaining issue is not absence of repeat support. It is that repeat planning is still duplicated inside specialized loops rather than centralized in one planner.
+
+Fan-out validity depends on topology:
+
+| Topology | Valid fan-out |
+|---|---|
+| query -> evaluator | evaluator only |
+| queue source -> evaluator | evaluator only |
+| testset -> application -> evaluator | application or evaluator |
+| testset -> application | application only; this is batch inference / batch invocation |
+
+## Trace Reuse
+
+Hash-based trace reuse is explicit through `is_cached`.
+
+Reuse flow:
+
+1. Compute a stable hash for the runnable node from canonical references and upstream links.
+2. Fetch matching traces by hash at project scope.
+3. Select deterministic reusable traces for the requested repeat slots.
+4. Invoke only the missing slots.
+5. Populate result cells with reused or newly produced trace IDs.
+
+The lookup is already plural in `fetch_traces_by_hash(...)`, and helper tests cover selection and missing-count behavior. Cache lookup is now wired into the inspected application and evaluator worker boundaries. The remaining issue is duplicated per-loop cache resolution logic.
+
+## Setup Fragmentation
+
+Current setup is not one universal flow. It is split across:
+
+- auto evaluation creation for app + variant + testset + evaluators
+- human evaluation creation for testset + single variant + evaluators
+- live evaluation setup for query-backed trace sampling
+- queue creation from trace IDs or testcase IDs
+- SDK/local setup
+- annotation queue convenience setup from traces/testsets, backed by evaluation entities
+
+These setup paths build similar run-data concepts through `_make_evaluation_run_data()` in several paths, but they still apply different validation and dispatch rules. That is why new combinations still tend to require setup and execution changes in multiple places.
+
+## Execution Consolidation
+
+The SDK and backend now route concrete source items through the SDK-owned
+source-slice processor. Backend task modules are source/dispatch shells:
+
+- `run.py` classifies a run and dispatches to the right source resolver
+- `query.py` resolves live/batch query source traces
+- `source_slice.py` resolves direct/testset source items and builds backend adapters
+
+The remaining backend-specific work lives behind adapters for scenario creation,
+result persistence, metrics refresh, trace loading, cache reuse, and workflow
+execution.
+- application invocation
+- evaluator invocation
+- human/custom pending behavior
+- repeat handling
+- cache lookup
+- metrics refresh
+
+This duplication is now the main remaining problem. Some formerly missing capabilities are implemented, but they are implemented repeatedly across specialized loops.
+
+## Runnable Execution Debt
+
+Unifying the loop should not mean preserving every current invocation helper as-is.
+
+The current application execution path is especially legacy. Batch testset and batch inference paths still rely on older application invocation helpers such as the LLM app service batch invocation path, which has been patched repeatedly over time. Evaluator execution uses workflow invocation paths with similar but not identical request assembly, links, reference handling, cache handling, trace fetch handling, and error handling.
+
+The repeated pattern is broader than "application vs evaluator":
+
+- build runnable request from step references, upstream bindings, inputs, trace, and outputs
+- optionally compute hash and reuse existing traces
+- invoke a runnable when cache does not satisfy the slot
+- fetch/validate the resulting trace
+- convert response or failure into an evaluation result cell
+
+That should become a shared runnable-step execution contract. Application and evaluator steps can then be two runnable kinds handled by the same boundary, rather than separate loop-local helper stacks.
+
+## Research Conclusion
+
+The product does not need one flattened source type, but it does need one loop contract.
+
+The common contract should be:
+
+```text
+resolve sources -> materialize scenarios -> plan result slots -> execute auto steps -> leave human/custom slots pending -> populate tensor cells -> refresh metrics
+```
+
+Current code has many pieces of that contract, including flags, repeat helpers, cache helpers, source-aware queue dispatch, and pending human/custom behavior in key loops. The missing layer is a shared planner that owns these decisions once.
+
+Source-specific behavior should live in resolvers and planners. Step execution should be generic over:
+
+- scenario
+- step
+- repeat slot
+- upstream bindings
+- origin
+- cache policy
+- fan-out policy
+- runnable invocation policy
+
+## Relationship To Default Queues
+
+The queue-unification work clarifies that annotation queues are not another execution runtime. They are a persisted human-work view over the same evaluation tensor described in this document.
+
+The useful separation is:
+
+```text
+evaluation runtime
+ = graph + tensor + process(slice)
+
+default queue
+ = canonical persisted human-work view over that tensor
+```
+
+The queue dimensions align with tensor dimensions:
+
+- scenario selection maps to scenarios
+- step selection maps to steps
+- repeat assignment maps to scenario × repeat lanes
+
+A default queue leaves those dimensions open:
+
+```text
+scenario_ids = None
+step_keys = None
+user_ids = None
+```
+
+The queue layer decides how human work is exposed and assigned. It does not decide how auto steps are planned or executed.
+
+### Source-family flags versus queue eligibility
+
+The current runtime still uses `is_queue` in places where it is really distinguishing queue-style source ingestion. The cleaner target model is to expose source family directly through inferred flags:
+
+- `has_queries`
+- `has_testsets`
+- `has_traces`
+- `has_testcases`
+
+Those flags should describe where scenarios come from and should drive topology validation and mixed-source prevention.
+
+Separately, `run.flags.is_queue` should answer the product question:
+
+```text
+active default queue exists
+and active human evaluator work exists
+```
+
+That makes source classification and simple-queue eligibility separate facts rather than overloading one flag.
+
+### Shared mutation question
+
+The queue-unification work also exposes a question this design must answer explicitly: whether step removal is usually destructive or archival.
+
+If historical results should remain visible after an evaluator is no longer active, then the graph model needs an active-versus-archived distinction. In that world:
+
+- `archive_step` is the common lifecycle operation
+- hard `remove_step` and `prune` are stronger cleanup operations
+- queue eligibility should depend on active human steps, not merely historical human steps
+
+This needs to be settled before hardening the mutation contract around remove/prune behavior.
diff --git a/docs/designs/unified-eval-loops/run-status-finalization.md b/docs/designs/unified-eval-loops/run-status-finalization.md
new file mode 100644
index 0000000000..391a2a6f05
--- /dev/null
+++ b/docs/designs/unified-eval-loops/run-status-finalization.md
@@ -0,0 +1,180 @@
+# Run-status finalization: analysis and options
+
+Status: analysis for UEL-028 (and its overlap with UEL-017 item 1).
+Date: 2026-05-21.
+Decision: **Option B implemented** (no aggregation) — corrected severity order +
+reset `status=RUNNING` on every (re)dispatch. Batch testset/invocation runs are
+single-slice today (`process_testset_source_run` issues exactly one slice), so the
+multi-slice race (Option C) is not needed now and stays tracked under UEL-017 item 1.
+
+## 1. Problem
+
+A batch (non-queue) evaluation run that completes all its work never transitions to a
+terminal `status` — it stays `running` with `flags.is_active=true` indefinitely. On the
+dev DB this affected the majority of batch runs (`success=35` vs `running=114`,
+`pending=211`).
+
+Reproduced end-to-end with the new LLM-free `mock_v0` workflow: a testset → app →
+auto-evaluator run processes both scenarios to `success` and refreshes metrics, but the
+run row stays `running` / `is_active=true`.
+
+## 2. Where run status is written
+
+Run status is finalized in `process_evaluation_source_slice`
+(`api/oss/src/core/evaluations/tasks/source_slice.py`), and **only** when the caller
+passes `update_run_status=True`.
+
+Dispatch (in `tasks/run.py::process_evaluation_run`, by topology):
+
+| topology | task | `update_run_status` | finalizes run status? |
+| ------------------ | --------------------------- | ------------------- | --------------------- |
+| `live_query` | `process_query_source_run` | **False** | no (stays running) |
+| `batch_query` | `process_query_source_run` | **False** | no |
+| `batch_testset` | `process_testset_source_run`| **True** | yes |
+| `batch_invocation` | `process_testset_source_run`| **True** | yes |
+
+Implication: **live and batch-query runs never enter the finalize block.** Any change to
+finalization affects only `batch_testset` / `batch_invocation`. (Whether `batch_query`
+*should* finalize is a separate gap — see §6.)
+
+## 3. The current finalize logic
+
+After processing this slice's scenarios:
+
+```python
+if any(item.has_errors for item in processed): run_status = ERRORS
+elif any(item.has_pending for item in processed): run_status = RUNNING
+else: run_status = SUCCESS
+# (exception path) -> run_status = FAILURE
+```
+
+This `run_status` is computed from **this slice's `processed` subset only**, not from the
+whole run. To reconcile across slices, a "severity floor" then compares it to the stored
+status and keeps whichever is more severe:
+
+```python
+severity = {FAILURE:4, ERRORS:3, RUNNING:2, SUCCESS:1, PENDING:0} # ORIGINAL
+current = fetch_run(run_id)
+if severity[current.status] > severity[run_status]:
+ run_status = current.status
+```
+
+### Root cause of UEL-028
+
+`RUNNING` (2) outranks `SUCCESS` (1). When the stored status is `running` (the start
+state of every run), a slice that computes `SUCCESS` is floored back **up** to `running`:
+`severity[running]=2 > severity[success]=1`. So the run can never leave `running`. It pins
+forever.
+
+This is a true P1: the floor's "keep the more severe status" rule treats the transient
+`RUNNING` as more severe than the terminal `SUCCESS`, which is backwards for finalization.
+
+## 4. The cases finalization must satisfy
+
+| case | what should happen |
+| ---- | ------------------ |
+| **single-slice batch** (one slice = whole run; e.g. testset→app→eval) | all scenarios success → run `success`; any error → `errors`; exception → `failure`. |
+| **multi-slice batch** (run dispatched as several slices; UEL-017 item 1) | run is terminal only when **all** slices/scenarios are done; an early SUCCESS-only slice must not finalize the whole run while other slices are pending. |
+| **extended finished run** (a `success` run gets new steps/scenarios and is re-dispatched) | while new work is pending the run should read `running` again; when the new work completes it should read `success` (or `errors`/`failure` as appropriate). |
+| **live / batch-query** | unaffected — never finalizes via this path (`update_run_status=False`). |
+
+The fundamental flaw shared by the original logic **and** the quick severity-reorder fix
+is that `run_status` is derived from **one slice's subset** plus a `max()` against the
+**stored** status. Neither reflects the run's *actual current* aggregate state, so:
+
+- single-slice: stored `running` wrongly floors over computed `success` (UEL-028).
+- multi-slice: a slice can't see other slices' scenarios, so it either finalizes too early
+ (no floor) or never (bad floor).
+- extended: stored `success` floors over a computed `running`, hiding in-flight pending
+ work — or, with the reorder, the opposite mishandling.
+
+## 5. Options
+
+**Constraint (per maintainer):** no full run-wide scenario aggregation in the finalize
+path. The finalize must work from what the slice already has plus, at most, cheap O(1)
+state — not a scan/count of all the run's scenarios on every slice.
+
+### Option A — Reorder the severity floor (minimal)
+
+Swap `RUNNING` and `SUCCESS` in the severity map so terminal statuses outrank the transient
+ones:
+
+```python
+severity = {FAILURE:4, ERRORS:3, SUCCESS:2, RUNNING:1, PENDING:0}
+```
+
+- **Fixes:** single-slice batch (UEL-028). A computed `SUCCESS` now replaces stored
+ `running`. FAILURE/ERRORS still floor over a later SUCCESS-only slice (preserves
+ UEL-017's "don't downgrade errors" intent).
+- **Does NOT fix:** the **extended-finished** case. If an extension's new slice computes
+ `RUNNING` (pending cells), the floor keeps stored `success` (`2 > 1`), so the run wrongly
+ shows `success` while new work is in flight. Symmetrically, multi-slice early-finalize is
+ not addressed (a SUCCESS slice still finalizes the whole run).
+- **Cost:** one-line change; lowest risk; lowest correctness.
+- **Verified:** unit test `test_source_slice_processor_preserves_higher_queue_status` still
+ passes; the `mock_v0` single-slice flow reaches `success` in ~4s.
+
+### Option B — Correct the severity floor + scope it to a fresh-dispatch start state
+
+Two-part, no aggregation:
+
+1. **Reorder severity** so terminal statuses outrank transient ones (as in A):
+ `FAILURE:4 > ERRORS:3 > SUCCESS:2 > RUNNING:1 > PENDING:0`. Fixes UEL-028 single-slice.
+2. **Reset the run to a known start state at dispatch** so the floor compares against a
+ meaningful baseline. The dispatch/start flow (`service.py:3540-3556`) already sets
+ `is_active=True`; have it also set `status=RUNNING` for **every** (re)dispatch — not just
+ `just_created`. Then a finished run that is extended starts the new dispatch at `running`,
+ and the slice's computed status (SUCCESS / ERRORS) cleanly replaces it via the corrected
+ floor. No run-wide scan.
+
+- **Fixes:** single-slice batch (UEL-028) **and** extended-finished (it restarts at
+ `running`, then the slice writes the new terminal status).
+- **Partial on multi-slice:** with the corrected order, a SUCCESS-only slice can still
+ finalize the run before sibling slices finish. The `ERRORS`/`FAILURE` floor still prevents
+ *downgrading*, but `RUNNING→SUCCESS` can happen early. Acceptable if batch testset/invocation
+ runs are effectively single-slice today (confirm); otherwise pair with Option C.
+- **Cost:** the severity one-liner + a one-line change to the start flow
+ (`status=RUNNING` on every dispatch). No new queries.
+- **Risk:** changing the start flow to always reset `status=RUNNING` affects the perceived
+ status of any run being (re)started. This is arguably the correct semantic ("a dispatched
+ run is running"), but it is a behavior change for restart.
+
+### Option C — Finalize only on the last slice (for multi-slice, if needed)
+
+Pass `slice_index` / `expected_total_slices` (or a "last slice" flag) into
+`process_evaluation_source_slice`; only run the finalize block on the final slice. Cheap
+per-dispatch counter, **no aggregation**.
+
+- **Fixes:** multi-slice early-finalize.
+- **Does NOT by itself fix:** UEL-028 (the last slice still needs the corrected severity
+ order). Layer on top of B only if batch runs are genuinely multi-slice.
+- **Cost:** thread a slice counter through dispatch + the SDK boundary; more invasive than B.
+
+## 6. Adjacent gap (not UEL-028)
+
+`batch_query` runs dispatch through `process_query_source_run` with
+`update_run_status=False`, so they **also never finalize** their run status — by a different
+path than the testset/invocation one fixed here. This should be confirmed with a flow test
+and tracked as its own finding (candidate: extend UEL-017 or a new UEL-0xx) rather than
+folded into UEL-028.
+
+## 7. Recommendation
+
+No run-wide aggregation. Adopt **Option B**: corrected severity order + reset
+`status=RUNNING` on every (re)dispatch in the start flow. Keep the two independent hardening
+fixes already applied:
+
+- clear `flags.is_active` when status is terminal (SUCCESS/ERRORS/FAILURE);
+- `dao.edit_run` persists `status` via `status.value` + `flag_modified`.
+
+This fixes single-slice (UEL-028) and extended-finished with only O(1) local changes (no
+scenario scans). Prove with the flow suite:
+
+- single-slice batch → `success`;
+- extended finished run → `running` during extension, `success` after;
+- live eval → stays `running`/active (unchanged).
+
+**Multi-slice:** first confirm whether batch testset/invocation runs are ever dispatched as
+multiple slices today. If not, B is sufficient and the multi-slice race stays tracked under
+UEL-017 item 1. If they are, layer **Option C** (last-slice finalize, cheap per-dispatch
+counter — still no aggregation) on top of B.
diff --git a/docs/designs/unified-eval-loops/simplified-interface.md b/docs/designs/unified-eval-loops/simplified-interface.md
new file mode 100644
index 0000000000..10b9cfd238
--- /dev/null
+++ b/docs/designs/unified-eval-loops/simplified-interface.md
@@ -0,0 +1,178 @@
+# Simplified Interface: the evaluation operation vocabulary
+
+Status: design / forward-looking. Concentrates the operation surface scattered
+across `proposal.md`, `gap.md`, `operations.md`, and `step-removal-semantics.md`
+into one place. No new semantics — it organizes what we want the **public
+interface** to be.
+
+## Why this document
+
+We want a small, atomic vocabulary of evaluation operations that maps cleanly to:
+
+1. **HTTP endpoints** with clean URLs and explicit `operation_id`s, so they
+ surface as named methods in the generated Fern clients (TS + Python).
+2. **The SDK `evaluate()` utility** — built *on top of* these atomic operations,
+ not as a parallel code path.
+3. **User-built utilities** — a user should be able to assemble their own
+ evaluation flow from the same atomic operations `evaluate()` uses.
+
+The test: adding a new evaluation flow should mean *composing existing
+operations*, never adding a new end-to-end endpoint.
+
+## The vocabulary
+
+There are three layers (and a fourth, queues, set aside for now):
+
+1. **Run** — the container. RPC-style lifecycle, not a graph/tensor mutator.
+2. **Graph** — the shape: steps, scenarios, repeats, and their connections.
+3. **Tensor** — the contents: results, and metrics.
+4. *(Queues — a human-work view over the tensor. Noted, left aside here.)*
+
+```text
+run: create / edit / delete | start / stop / close / open
+graph: add_step / remove_step | add_scenario / remove_scenario | set_repeats
+tensor: results → probe / process / populate / prune
+ metrics → refresh (variational / temporal / global)
+```
+
+### Run
+
+The run is acted on by **RPC operations**, not by editing fields:
+
+- `create` / `edit` / `delete` — `edit` mostly for completeness; real editing is
+ graph ops (add/remove steps & scenarios).
+- `start` / `stop` / `close` / `open` — lifecycle.
+
+**There is no `set_flag`.** The `has_*` flags are inferred from the graph,
+`is_queue` is reconciled, and the remaining config flags are set through
+`create`/`edit` — never a dedicated flag RPC.
+
+### Graph → tensor shape
+
+Mutating the graph mutates the tensor's shape — the three graph axes map
+one-to-one onto the three tensor dimensions:
+
+- **steps** → columns (add/remove a step adds/prunes a column of cells)
+- **scenarios** → rows (add/remove a scenario adds/prunes a row of cells)
+- **repeats** → depth (`set_repeats` materializes or prunes repeat slots)
+
+Steps and scenarios are named entities (add/remove); repeats is a count, so it
+is **set** (`set_repeats`), which re-shapes the tensor depth.
+
+### Tensor: results
+
+Result ops act on a **slice** (`TensorSlice = scenarios x steps x repeats` =
+rows x columns x depth), so retry, fill-missing, re-run-one-evaluator, queue
+assignment, and live ticks are all a slice op:
+
+- `probe` — read cells (what exists, what's missing).
+- `process` — run the runnable cells (whatever the current executor owns by
+ origin; see [`origin-execution-model.md`](./origin-execution-model.md)) and
+ populate the results.
+- `populate` — write result cells directly. The shared write primitive for any
+ origin, including the runtimes themselves.
+- `prune` — delete cells.
+
+### Tensor: metrics
+
+Metrics are derived from result cells. There are **three kinds**, differing by
+scope and by *when* they may be refreshed. Each is an object **keyed by step**.
+
+| kind | aggregates over | refresh trigger |
+| --- | --- | --- |
+| **variational** | one scenario, across all its repeats | only when the scenario is **fully computed** — used in both live and batch evaluations |
+| **temporal** | all scenarios + repeats within a timestamp **interval** | per interval — used for **live** evaluations |
+| **global** | all scenarios + repeats in the run | at run scope — used for batch evaluations |
+
+**Results and metrics are decoupled.** `probe`/`process`/`populate`/`prune`
+operate on **result cells only** — none of them refresh metrics. `refresh` is a
+separate, first-class op that recomputes metrics, invoked by the caller on the
+right boundary (scenario-complete / interval / run). `prune` deletes cells but
+not metrics: a metric is an aggregate over a whole scenario/interval/run, so
+pruning cells leaves it to be recomputed by `refresh`, not deleted.
+
+## Target endpoint shape
+
+All under `/api/evaluations/`. Conventions follow AGENTS.md (POST `/query`,
+`/{id}/archive`, explicit `operation_id`, cursor pagination, `count` + payload
+envelopes).
+
+### Run (RPC lifecycle)
+
+| operation_id | Method + path | Status |
+| --- | --- | --- |
+| `create_runs` / `edit_runs` / `delete_runs` / `query_runs` | `…/runs/` `/runs/query` | done |
+| `fetch_run` / `edit_run` / `delete_run` | `…/runs/{run_id}` | done |
+| `start_run` / `stop_run` | `POST /runs/{run_id}/start` `/stop` | done (via simple-evaluation start/stop) |
+| `close_run` / `open_run` | `POST /runs/{run_id}/close` `/open` | done (lock) |
+
+No `set_flag`: `has_*` flags are inferred from the graph, `is_queue` is
+reconciled, and the config `is_*` flags are written through `create`/`edit`.
+
+### Graph — steps & scenarios
+
+| operation_id | Method + path | Status |
+| --- | --- | --- |
+| `add_step` | `POST /runs/{run_id}/steps` | **deferred** — today a step is added by editing `data.steps`. |
+| `remove_step` | `DELETE /runs/{run_id}/steps/{step_key}` | done as behavior (folded into `edit_run` reconcile + prune), **deferred** as a named endpoint. |
+| `create_scenarios` / `edit_scenarios` / `delete_scenarios` | `…/scenarios/` | done (CRUD) |
+| `add_scenario` | `POST /runs/{run_id}/scenarios` | **deferred** — graph-aware add (resolve source binding, plan cells), vs. raw CRUD. |
+| `remove_scenario` | `DELETE /runs/{run_id}/scenarios/{scenario_id}` | **deferred** — cascade-aware (prune cells + flush metrics). |
+| `set_repeats` | `POST /runs/{run_id}/repeats` | **deferred** — set the depth; materialize new repeat slots or prune surplus, then `process` the new cells. |
+
+### Tensor results — endpoints
+
+| operation_id | Method + path | Status |
+| --- | --- | --- |
+| `create_results` / `edit_results` / `delete_results` | `…/results/` | done (CRUD; the low-level cell write) |
+| `probe_slice` | `POST /runs/{run_id}/slice/probe` | in-process (`TensorSliceOperations.probe`), **deferred** as endpoint. |
+| `process_slice` | `POST /runs/{run_id}/slice/process` | in-process (`process` → `BackendSliceProcessor`), **deferred** as endpoint. |
+| `populate_slice` | `POST /runs/{run_id}/slice/populate` | in-process, **deferred** as endpoint (bulk/slice write). |
+| `prune_slice` | `POST /runs/{run_id}/slice/prune` | in-process, **deferred** as endpoint. |
+
+The four `*_slice` ops all take a `TensorSlice` body. They are the atomic
+primitives `evaluate()` and user utilities compose; only their HTTP exposure is
+deferred — the in-process implementations exist (`runtime/tensor.py`).
+
+### Tensor metrics — endpoints
+
+| operation_id | Method + path | Status |
+| --- | --- | --- |
+| `refresh_metrics` | `POST /metrics/refresh` | done — single endpoint today; refreshes the affected scope. |
+| `create_metrics` / `edit_metrics` / `delete_metrics` / `query_metrics` | `…/metrics/` `/metrics/query` | done (CRUD) |
+
+Whether refresh stays one endpoint or splits per kind (variational / temporal /
+global) — and whether it stays coupled to `process` or becomes its own
+operation — is the open question above.
+
+## How `evaluate()` composes these
+
+The SDK utility is a thin client-side orchestration over the vocabulary:
+
+```text
+evaluate(testset, app, evaluators):
+ create_run(...) # container
+ add_step per app + evaluator # graph
+ add_scenario per testset row # graph (resolve source bindings)
+ process_slice(all scenarios, all steps) # tensor: run the runnable cells + refresh metrics
+ -> returns {run, scenarios, metrics}
+```
+
+A user wanting a custom flow (e.g. re-run only one evaluator on failed rows)
+calls the same ops directly: `probe_slice` to find failures, then
+`process_slice` scoped to that evaluator's `step_key`.
+
+## What this unlocks
+
+- Generated clients expose `evaluations.processSlice(...)`,
+ `evaluations.addScenario(...)`, etc. as named methods.
+- One mental model for setup, retry, queue assignment, manual annotation, live
+ ticks, and SDK/local runs — all are slice ops.
+- New flows are compositions, not new endpoints.
+
+## Pointers
+
+- Operation list + direction: [`proposal.md`](./proposal.md) §"Operation API Direction".
+- Per-op status (done / partial / deferred): [`operations.md`](./operations.md).
+- Removal lifecycle (why `remove_step` prunes): [`step-removal-semantics.md`](./step-removal-semantics.md).
+- Gaps: [`gap.md`](./gap.md) §"Tensor Operation Gaps".
diff --git a/docs/designs/unified-eval-loops/single-loop-plan.md b/docs/designs/unified-eval-loops/single-loop-plan.md
new file mode 100644
index 0000000000..12ab398f2b
--- /dev/null
+++ b/docs/designs/unified-eval-loops/single-loop-plan.md
@@ -0,0 +1,229 @@
+# Single-Loop Plan: `populate` then `process` (two-level cache)
+
+## Goal
+
+**One execution loop. No two paths.** Today the backend has two wrappers around
+the same SDK engine (`sdk_process_evaluation_source_slice`):
+
+- `process_evaluation_source_slice` (processor.py:636) — **ingest**: creates NEW
+ scenarios from direct ids / query / testset, runs all cells.
+- `APISliceProcessor.process` (processor.py:238–488) — **re-execute**: operates on
+ EXISTING scenarios by coordinate, reconstructs source from stored cells.
+
+These are not different verbs. They are the **same operation** distinguished only
+by whether the inputs already exist. This plan collapses them into one loop.
+
+## The model (the core idea)
+
+`process` is a **two-level cache walk**. For every addressed coordinate cell:
+
+```
+1. RESULT level — does the result cell already exist?
+ yes -> reuse it (skip), unless process_mode == "force"
+ no -> go to step 2
+2. INPUT/DATA level — is the underlying input already available?
+ - the scenario's input cell stores a trace_id / testcase_id? -> use it
+ - a reusable trace exists by HASH (make_hash + fetch_by_hash)? -> use it
+ - the run references a query / testset revision? -> load internally
+ - a DIRECT testcase_id / trace_id with nothing stored yet? -> must be POPULATED first
+3. Execute only the genuine gaps (the cells with no result and resolvable input).
+```
+
+Both levels are the same question — *does it already exist?* — applied first to
+the **result**, then to the **input**. "Hashing for traces" and "storing the
+testcase_id" are exactly the input-level cache: you store the id instead of
+re-invoking the thing that generates it.
+
+### Consequence: there is no create-vs-reuse branch
+
+The only thing the loop cannot derive is a **direct `testcase_id` / `trace_id`
+that was never stored** — because the id *is* the source identity and there is no
+internal way to load it. That, and only that, is what `populate` is for.
+
+| Source kind | Input derivable internally? | Needs explicit `populate`? |
+|---|---|---|
+| query revision | yes — load rows from the referenced revision | no |
+| testset revision | yes — load rows from the referenced revision | no |
+| already-run scenario (input cell stored) | yes — read the stored id | no |
+| direct `testcase_id` / `trace_id` (fresh) | no — the id is the only identity | **yes** |
+
+### Three primitives — `process` never creates scenarios
+
+"populate then process" glossed over a missing verb. There are **three**
+distinct operations, and crucially `process` operates only on scenarios that
+**already exist** — it does not mint them:
+
+| Verb | Creates | Does NOT create |
+|---|---|---|
+| **materialize** | scenarios (the coordinate skeleton for the run) | results |
+| **populate** | result cells (input cells carrying the trace_id/testcase_id) | scenarios |
+| **process** | result cells (by executing existing cells) | **scenarios** |
+
+`materialize` = `create_scenarios` (service.py:936); `populate` = `set_results`;
+`process` = the shared execution loop. Today `APIScenarioFactory`-inside-the-loop
+does materialize *implicitly* as a side effect of `process` — this plan pulls it
+out and names it, so `process` is uniform: it never creates scenarios for anyone.
+
+So every flow reduces to:
+
+- **direct id ingest** = `materialize(N)` → `populate(input cells for the ids)` → `process`
+- **query / testset run** = `materialize(from internally-loaded rows)` → `process` (inputs loaded internally; no explicit populate)
+- **re-execute / retry / add-evaluator** = `process` (scenarios + input cells already exist)
+
+`process` is the one execution loop; `materialize` precedes it when scenarios
+don't exist; `populate` precedes it when the input identity (direct id) can't be
+loaded internally.
+
+## Target API (the single loop)
+
+`process` already exists as `TensorSliceOperations.process` →
+`SliceProcessor.process` (tensor.py:42). The unification makes its concrete
+implementation the **only** execution loop, and turns the ingest wrapper into a
+caller that `populate`s first.
+
+```
+process(slice) =
+ for each scenario coordinate in the slice (or all run scenarios if unaddressed):
+ ensure an input cell exists # else: skip — must populate first
+ resolve source from the input cell (id / hash / reference)
+ plan cells from the run's CURRENT graph
+ filter to addressed coordinates (step_keys / repeat_idxs)
+ for each cell: result-cache check -> input-cache check -> execute gap
+ populate result cells
+ (metrics refresh is the separate `refresh` op)
+```
+
+The SDK engine (`runtime/processor.py`) is already this loop. The work is in the
+API layer: make one wrapper, delete the second.
+
+## Seam analysis (what actually differs today)
+
+Both wrappers call `sdk_process_evaluation_source_slice` and differ in:
+
+| Seam | ingest (line) | re-execute (line) | unified treatment |
+|---|---|---|---|
+| scenario | `APIScenarioFactory` (869) | `_ExistingScenario` (431) | **input-cache check** — reuse if input cell exists, else the caller populated it; no policy branch |
+| source data | `resolve_direct_source_items` (800) | `_source_item_from_input_cells` (351) | one resolver: read stored id → hydrate; query/testset load by reference |
+| cell filter | none | `target_keys` closure (466) | `cell_filter` pass-through (None = all) |
+| metrics | `APIMetricsRefresher` (883) | `_noop_refresh_metrics` (442) | **shared** — re-execute stops opting out; both inject the real refresher so `process` refreshes incrementally per-scenario AND rolls up at the end, exactly as the SDK loop already does (sdk processor.py:270, 297). The metric *kind* (variational/temporal/global) is already derived from scope by `service._refresh_metrics`. The separate `refresh` op + `_noop` are deleted. |
+| post-process: status | per-scenario `edit_scenario` + run severity-floor + is_active (991–1054) | none | **shared** — `process` finalizes from the touched set it already returns (`ProcessedScenario.has_errors/has_pending` per scenario; floored to the run). Two flags: `finalize_run_status` (False for live-query, which loops) and the is_active flip (terminal only). The concurrent-slice re-fetch / `is_active` race fix moves verbatim into the shared finalize. |
+
+**Why post-process is shared, not ingest-only:** status + which-metrics-to-refresh
+are a function of *what coordinates were touched* — which the shared loop already
+knows (it returns `processed`). The reasoning is identical regardless of how the
+run was triggered; and since we hold the run lock (one process per run at a time),
+the shared path has full control to finalize before releasing. A slice covering
+the whole run IS a batch evaluation — its "done" must match today's batch path.
+
+Everything else (steps mapping, runners/revisions via
+`_resolve_runners_and_revisions`, `trace_loader`, `is_split`,
+batch_size/max_retries) is **already identical** and intrinsic to `run`.
+
+### The one-sentence shape
+
+- **ingest** = `populate` → `process` → done
+- **re-execute** = `process` → done
+
+…where **`process` owns "done"** (status finalize + scoped, incremental metric
+refresh from what was touched). `populate` is the only divergence, and only for
+direct ids that can't be loaded internally.
+
+## Staging (incremental, never two paths in the middle)
+
+The end state is one loop, but the move is staged so the working ingest path is
+never destabilized. Each stage leaves the suite green.
+
+### Stage 1 — collapse source shaping (pure dedup, zero behavior change)
+- Extract one `_to_sdk_source_item(...)` helper; the
+ `SdkResolvedSourceItem(...)` construction is byte-identical at processor.py
+ 816–831 and 372–383. Replace both.
+- Guard: existing unit + acceptance suites green.
+
+### Stage 2 — one source resolver (input-level cache)
+- A single `resolve_source_for_scenario(...)` that implements the input-cache
+ ladder: stored id → hash-reuse → reference-load. `resolve_direct_source_items`
+ and `_source_item_from_input_cells` both fold into it.
+- Re-execute and ingest both call it; the only difference becomes whether the
+ input cell pre-exists (re-execute) or was just populated (ingest).
+
+### Stage 3 — one execution loop
+- A single `process_source_slice(...)` does the per-scenario loop + SDK call.
+ `APISliceProcessor.process` becomes a thin caller (adds coordinate filter +
+ ProcessSummary accounting). `process_evaluation_source_slice` becomes a thin
+ caller (adds queue validation + run finalization, both run-level).
+- Delete the duplicated SDK call site.
+
+### Stage 4 — `process` owns "done" (shared finalize)
+
+- Fold post-process into the shared loop: per-scenario status writes + run
+ severity-floor + `is_active`, derived from the `processed` set the loop already
+ returns. Re-execute stops injecting `_noop_refresh_metrics` and injects the real
+ refresher, so metrics refresh incrementally per-scenario AND roll up at the end
+ for BOTH paths (timing unchanged from today — the SDK loop already does this).
+ The separate `refresh` op / `_noop` are deleted.
+- Two flags split from the old single `update_run_status`:
+ `finalize_run_status` (False for the live-query loop, which never finalizes) and
+ the `is_active` flip (terminal status only). The concurrent-slice re-fetch
+ (`is_active` race fix) moves verbatim into the shared finalize.
+
+### Stage 5 — the coordinate-dimension ops (`process` never creates scenarios)
+
+The coordinate space is `scenarios × steps × repeats`. `process` operates only on
+EXISTING coordinates; the dimensions are managed by first-class graph ops. This
+pass lands the ones ingest needs (the others stay deferred):
+
+- **`add_scenarios(run, n)`** — create N scenario skeleton rows for the run (rows
+ only; no input cells, no results). This is the deferred `add_scenario` op from
+ operations.md:50, implemented thin (skeleton only — `populate` writes the input
+ cell, `process` plans+executes). Wraps `create_scenarios` (service.py:936).
+- **`set_repeats(run, repeats)`** — resize the repeat dimension (today `repeats`
+ is fixed at create, EvaluationRunData.repeats:226). NB: a `set_repeats` pydantic
+ *validator* already exists (types.py:231) — the op needs a distinct name
+ (`resize_repeats` / `add_repeats`) to avoid the collision.
+- `process` is made uniform: it never mints scenarios for anyone (the
+ `APIScenarioFactory`-inside-the-loop is removed). Callers `add_scenarios` first.
+
+Deferred siblings (noted, not in this pass): `add_steps`, `remove_scenarios`,
+`set_flag`.
+
+### Stage 6 — direct-id ingest = add_scenarios → populate → process
+
+- `run.py` traces/testcases ingest becomes: `add_scenarios(N)` →
+ `populate(input cells carrying the ids)` → `process(those scenario_ids)` →
+ shared finalize.
+- Query/testset keep loading rows internally and `add_scenarios` from them, then
+ `process` (no explicit populate — inputs load by reference).
+- Guard: parity test — direct-id ingest and the explicit
+ add_scenarios→populate→process produce identical result cells + status + metrics.
+
+## The one genuine limit (by design, not a gap)
+
+`process` cannot run a coordinate whose scenario has **no input cell and no
+internal reference** — there is nothing to resolve. Today this is counted as
+`failed` and skipped (processor.py:355). That is correct: it is exactly the case
+`populate` must handle first. The loop never tries to conjure a source from
+nothing.
+
+## Risk / blast radius
+
+- **Run finalization** (severity-floor + `is_active`, the concurrent-slice race
+ fix) must stay a run-level caller concern, never leak into the per-slice loop —
+ re-execute must not finalize.
+- **Queue validation** (`require_queue`) is ingest-only; stays in the ingest
+ caller.
+- **timestamp / interval** (live-query window) must thread through to scenario +
+ result writes.
+- **is_split** must be computed once and shared between the cell filter and the
+ SDK plan, or they diverge.
+
+## Tests guarding the move
+
+- `unit/evaluations/test_tensor_slice_ops.py` — the `process`/`probe`/`populate`
+ surface (the single-loop entry).
+- `unit/evaluations/test_runtime_topology_planner.py` — source-slice + re-execute
+ parity, the "no input cell → skipped" branch.
+- `unit/evaluations/test_query_eval_loops.py` — live/batch-query (finalize=False,
+ timestamp/interval seam).
+- `acceptance/evaluations/test_tensor_slice_endpoints.py` — HTTP contract +
+ populate→probe round-trip.
+- New parity test: `ingest(direct ids)` ≡ `populate + process`.
diff --git a/docs/designs/unified-eval-loops/step-removal-semantics.md b/docs/designs/unified-eval-loops/step-removal-semantics.md
new file mode 100644
index 0000000000..585e520f62
--- /dev/null
+++ b/docs/designs/unified-eval-loops/step-removal-semantics.md
@@ -0,0 +1,448 @@
+# Step Removal Semantics
+
+## Decision
+
+For now, evaluation step removal is **destructive**:
+
+```text
+remove_step -> prune the removed step's tensor cells
+```
+
+Removing a step means:
+
+1. remove it from the active run graph
+2. delete result cells for that step across scenarios and repeats
+3. refresh/flush metrics that depended on that step
+4. if the removed step is an input step, also remove scenarios that are sourced only from that step
+
+This keeps the stored graph and stored tensor aligned with the current evaluation definition.
+
+The alternative — archiving/deactivating steps while retaining historical cells — remains a valid future model, but it is **not** the model chosen for the current design.
+
+## Why This Decision Exists
+
+There are two coherent models for step lifecycle.
+
+### Model A — Destructive removal
+
+```text
+stored graph = current active graph
+stored tensor = cells for the current active graph
+```
+
+A removed step no longer exists in the graph, and its cells are pruned.
+
+### Model B — Archival lifecycle
+
+```text
+stored graph = historical graph
+active execution = projection over active steps
+stored tensor = historical cells, including archived steps
+```
+
+An archived step remains historically present, but no longer participates in future work.
+
+Both models are internally coherent. The current design chooses **Model A** because it is simpler, cleaner, and matches the existing unified-loop operation model.
+
+## Existing Design Rationale For Remove + Prune
+
+The existing eval-loop documents already leaned toward destructive removal for good reasons.
+
+### Steps are immutable by reference
+
+A step points to a concrete referenced revision. Changing a reference should not mutate the step in place.
+
+Instead:
+
+```text
+change evaluator revision = remove old step + add new step
+```
+
+That preserves step identity semantics and avoids silently rewriting what a historical step meant.
+
+### The graph defines tensor shape
+
+The design treats graph steps as tensor dimensions:
+
+- add a step -> add a tensor column dimension
+- remove a step -> remove that tensor column's cells
+
+This creates a simple invariant:
+
+```text
+current graph and current tensor have the same shape
+```
+
+### Remove + prune prevents stale state
+
+If a step disappears but its result cells remain:
+
+- cells exist for steps no longer in the graph
+- metrics may still refer to retired steps
+- UI needs to distinguish active from historical columns
+- planner and topology logic need lifecycle-aware filtering
+
+Pruning avoids all of that in the default path.
+
+### The mutation model stays symmetric
+
+The lower-level operation model remains clean:
+
+```text
+graph: add_step / remove_step
+tensor: populate / prune
+```
+
+That symmetry is useful for reasoning, implementation, and testing.
+
+## Why Archival Was Considered
+
+Archival has one major product advantage:
+
+> it preserves auditability.
+
+If a human evaluator or automatic evaluator is no longer active, retaining the old step and its cells would preserve:
+
+- who evaluated what
+- what outputs existed before the step was retired
+- historical metric context
+- a full explanation of past evaluation state
+
+That is especially attractive if evaluations are treated as long-lived collaborative records rather than disposable execution definitions.
+
+## Cost Of Destructive Removal
+
+The chosen model deliberately gives up some history.
+
+When a step is removed:
+
+- its result cells are deleted
+- metrics derived from it disappear from the active run
+- prior human work for that step is no longer represented in the run tensor
+- the run no longer explains that the step ever existed
+
+If auditability becomes a product requirement later, destructive removal will not satisfy it by itself.
+
+## Cost Of Archival
+
+Archival avoids data loss, but it has broad implications across every layer of the system.
+
+The rest of this document records those implications so the tradeoff remains explicit.
+
+# Archival Implications
+
+## 1. Model implications
+
+Archival requires step lifecycle state, for example:
+
+```python
+archived_at: datetime | None
+archived_by_id: UUID | None
+```
+
+A run would then contain two conceptual graphs:
+
+```text
+historical graph = all steps ever attached to the run
+active graph = historical graph minus archived steps
+```
+
+Any presence-style flags would need explicit semantics:
+
+- `has_evaluators`
+- `has_human`
+- `has_auto`
+- `has_custom`
+
+For most product behavior, they would likely need to mean **active presence**, not historical presence.
+
+If historical presence also matters, that would require separate query behavior or additional flags.
+
+## 2. Data implications
+
+Archived steps retain their tensor cells:
+
+```text
+scenario_id + step_key + repeat_idx
+```
+
+That preserves history, but results now divide into:
+
+- active-step results
+- archived-step results
+
+Queries and APIs would need to decide whether they default to:
+
+- active-only results
+- all historical results
+- or support explicit `include_archived_steps`
+
+If archived steps remain embedded in JSON run data, active/historical filtering is service-derived and less relationally natural. If steps become first-class rows, lifecycle handling becomes cleaner but requires a larger schema refactor.
+
+Archival also increases retained data volume over time because old cells remain instead of being pruned.
+
+## 3. Metrics implications
+
+Archival makes metric meaning more complex.
+
+At minimum, the system would need to distinguish:
+
+### Active metrics
+
+Metrics over the current active graph, used for:
+
+- current dashboards
+- current summary views
+- present-tense evaluation interpretation
+
+### Historical metrics
+
+Metrics including archived steps, used for:
+
+- audit
+- history
+- lineage
+
+Without that distinction, archived evaluators would continue to affect current dashboards.
+
+Metric refresh would need to know whether it is computing over active steps only or over historical steps as well. Run mappings may also need lifecycle awareness so archived step mappings do not keep contributing to current aggregates.
+
+## 4. Compute and planner implications
+
+The planner would need to operate on **active steps only** by default.
+
+Every execution path would need a shared helper such as:
+
+```python
+active_steps(run)
+has_active_human_steps(run)
+```
+
+If archived steps remained in `run.data.steps`, raw iteration over `run.data.steps` would become unsafe.
+
+`process(slice)` would need explicit semantics:
+
+- `steps="all"` likely means all **active** steps
+- archived steps require explicit inclusion for any historical replay or audit operation
+
+Planner complexity would remain manageable if active filtering is centralized, but every planner, topology classifier, queue reconciler, and flag refresher would need to use the same lifecycle-aware projection.
+
+## 5. Queue implications
+
+Default queue eligibility would need to depend on **active** human steps:
+
+```text
+active default queue exists
+and active human evaluator work exists
+```
+
+For default queues:
+
+```text
+step_keys=None
+```
+
+would need to mean all **active** queue-relevant steps, not all historical steps.
+
+Custom queues that explicitly reference later-archived steps would need a policy, such as:
+
+- retain the queue row
+- stop generating active work for archived steps
+- surface that the queue references inactive steps
+- perhaps mark the queue degraded/inactive if all included steps are archived
+
+## 6. API implications
+
+Archival would require new lifecycle operations:
+
+- `archive_step`
+- `unarchive_step`
+
+or equivalent run-mutation semantics.
+
+Any response that exposes step definitions would need archival metadata so clients can distinguish active from historical steps.
+
+The API would also need explicit lifecycle-aware query semantics, likely including some form of:
+
+- active-only default behavior
+- optional archived inclusion for audit/history views
+
+Backward compatibility becomes non-trivial because older clients may assume every returned step is active.
+
+## 7. UI implications
+
+The UI would need an explicit active-versus-archived presentation model.
+
+Likely implications:
+
+- active steps shown normally
+- archived steps grouped under a collapsed historical section
+- current results tables show active columns by default
+- archived result columns appear only in audit/history contexts or behind an explicit toggle
+- current metric charts exclude archived steps by default
+- historical metric views expose archived-step data intentionally
+- queue screens show only active human work
+- archived human work remains visible in evaluation history but not as new actionable queue work
+
+Action labels would also need to change:
+
+- ordinary user action: `Archive evaluator`
+- stronger destructive action: `Delete step and results`
+
+Without UI support for archived state, archival would preserve data technically but create user confusion.
+
+## 8. Controller and service implications
+
+Archival requires centralized lifecycle orchestration.
+
+A step archive/unarchive transition would need to coordinate:
+
+- active graph projection
+- run flag recomputation
+- queue reconciliation
+- metric refresh
+- possible custom-queue invalidation/degradation
+
+Those changes should not be scattered across ad hoc call sites. They require one authoritative lifecycle path.
+
+## 9. Conceptual implication
+
+Archival changes the core invariant from:
+
+```text
+stored tensor = current graph
+```
+
+to:
+
+```text
+stored tensor = historical graph
+active execution = projection over active graph
+```
+
+That is a richer but more expensive model.
+
+# Destructive Removal Implications
+
+## 1. Model implications
+
+No additional step lifecycle state is required.
+
+The run graph remains:
+
+```text
+run.data.steps = active graph
+```
+
+Presence flags continue to reflect the graph directly.
+
+## 2. Data implications
+
+Removed step cells are deleted.
+
+This avoids:
+
+- stale cells
+- historical-vs-active result interpretation
+- extra retained data volume for removed steps
+
+But it sacrifices historical traceability inside the run.
+
+## 3. Metrics implications
+
+Metric handling stays simple:
+
+- prune step cells
+- refresh/flush dependent metrics
+- current metrics remain aligned with the current graph
+
+No separate active/historical metric families are required.
+
+## 4. Compute and planner implications
+
+Planner logic remains simpler:
+
+- every step in the graph is active
+- `steps="all"` means literally every stored step
+- topology validation does not need step lifecycle filtering
+
+## 5. Queue implications
+
+Queue eligibility can be computed from the current graph without active/historical distinction.
+
+A removed human step no longer contributes to queue eligibility because it no longer exists.
+
+## 6. API implications
+
+Only destructive graph operations are needed:
+
+- `add_step`
+- `remove_step`
+
+No step archive/unarchive surface is required.
+
+## 7. UI implications
+
+The UI stays much simpler:
+
+- no archived-step sections
+- no archived-result toggles
+- no historical metric mode
+- “remove” means the thing is gone
+
+The downside is that users cannot inspect retired step history through the run afterward.
+
+## 8. Controller implications
+
+Mutation side effects remain narrow:
+
+- remove step
+- prune cells
+- refresh metrics
+- if needed, reconcile queue flags from the new active graph
+
+No long-lived archival state needs to remain synchronized.
+
+# Comparison
+
+| Concern | Destructive remove + prune | Archive/deactivate |
+|---|---|---|
+| Auditability | weak | strong |
+| Current-state simplicity | strong | weaker |
+| Storage growth | lower | higher |
+| Planner complexity | lower | higher |
+| Metric semantics | simple | active vs historical required |
+| UI complexity | lower | higher |
+| Queue semantics | simpler | must ignore archived steps |
+| API lifecycle surface | smaller | larger |
+| Graph/tensor invariant | identical current graph/tensor | historical storage + active projection |
+
+# Current Choice
+
+The current unified-eval-loop design chooses:
+
+```text
+remove + prune
+```
+
+as the normal behavior.
+
+This is intentionally destructive, and the tradeoff is accepted for now because it provides:
+
+- a clean graph/tensor invariant
+- simpler planning and topology logic
+- simpler metrics
+- simpler UI/API behavior
+- direct alignment with the existing operation model
+
+If auditability becomes a product requirement later, the design should be revisited explicitly rather than approximated halfway. A future archival model would need full support across:
+
+- step lifecycle metadata
+- active/historical result semantics
+- metric semantics
+- queue eligibility
+- APIs
+- UI
+- planner defaults
+
+Until then, retaining removed-step cells without modeling archival everywhere is not acceptable because it would introduce ambiguity without delivering coherent auditability.
diff --git a/docs/designs/unify-evals-and-queues/gap.md b/docs/designs/unify-evals-and-queues/gap.md
new file mode 100644
index 0000000000..81b0efa296
--- /dev/null
+++ b/docs/designs/unify-evals-and-queues/gap.md
@@ -0,0 +1,92 @@
+# Gap Analysis
+
+## Queue Semantics
+
+Missing from current state:
+
+- no explicit meaning that `step_keys=None` is the open/default step scope
+- current auto-created human queues snapshot human step keys instead of leaving step scope open
+- no canonical default-queue marker distinct from arbitrary custom queues
+
+Already present:
+
+- `scenario_ids=None` already leaves scenario scope open over the run
+- `user_ids=None` already means unassigned
+- repeats are already run-owned rather than queue-owned
+
+## Default Queue Lifecycle
+
+Missing from current state:
+
+- no default-queue reconciliation tied to run creation/editing
+- current helper is path-dependent and only reached from selected execution flows
+- no two-policy model separating:
+ - human-step structural condition
+ - unconditional default-queue global setting
+- no logic to archive/unarchive the default queue as human evaluator availability changes
+
+## Queue Archival
+
+Missing from current state:
+
+- no queue archive endpoint
+- no queue unarchive endpoint
+- no queue service/DAO archive lifecycle path
+- no `include_archived` support on queue query/fetch surfaces
+- default-queue lookup cannot currently search archived queues for restoration
+
+Present but underused:
+
+- queue DTOs already inherit lifecycle fields such as `deleted_at` and `deleted_by_id`
+
+## Queue Identity
+
+Missing from current state:
+
+- no reliable way to distinguish the canonical default queue from a custom queue with the same open shape
+- current ensure logic stops if any queue exists for the run, which is insufficient once default and custom queues coexist
+
+## Run Semantics
+
+Needs clarification or adjustment:
+
+- `is_queue` currently distinguishes simple queue-created runs from simple evaluations
+- linked default queues should not require ordinary evaluation runs to become queue-ingest runs
+- the old meaning of `is_queue` must be replaced by persisted simple-queue eligibility
+
+## Configuration
+
+Missing from current state:
+
+- no global policy toggle for unconditional default queues
+- no shared policy helper for deciding default-queue lifecycle mode
+
+## Tests
+
+Missing from current state:
+
+- open default queue behavior with `step_keys=None`
+- default queue creation for simple evaluations under unconditional mode
+- conditional creation when human evaluator steps exist
+- no creation / archive when conditional mode has no active human evaluator steps
+- unarchive of an existing archived default queue instead of duplicate creation
+- coexistence of default and custom queues
+- archived-inclusive queue query behavior
+- regression tests for existing queue assignment and scenario selection behavior
+
+## API Surface
+
+Missing from current state:
+
+- archive/unarchive queue endpoints
+- `include_archived` request/query support for queues
+- response behavior that lets callers distinguish active from archived queues where relevant
+
+## UI Surface
+
+Not covered by this backend design:
+
+- whether auto-only evaluations show an empty queue
+- whether users are nudged to add human evaluators
+- how the default queue appears inside evaluation details versus Queues
+- any migration of frontend terminology from “human evaluation” to “evaluation with human evaluators”
diff --git a/docs/designs/unify-evals-and-queues/plan.md b/docs/designs/unify-evals-and-queues/plan.md
new file mode 100644
index 0000000000..2f62a34e2c
--- /dev/null
+++ b/docs/designs/unify-evals-and-queues/plan.md
@@ -0,0 +1,16 @@
+# Plan
+
+1. Define the canonical default queue shape with open filters: `scenario_ids=None`, `step_keys=None`, `user_ids=None`, and no default batching restrictions.
+2. Add a durable default-queue identifier, preferably an explicit queue flag or role that distinguishes default queues from custom queues independently of shape.
+3. Add queue archival support across DTOs, service methods, DAO methods, and API endpoints, including archive and unarchive operations.
+4. Extend queue query/fetch paths with `include_archived` support and ensure archived default queues can be found during reconciliation.
+5. Add global policy toggle for unconditional default queues, e.g. `EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS`, as a module-level global.
+6. Implement shared policy helpers for:
+ - whether a run has active human evaluator steps
+ - whether default queues are unconditional for all runs
+7. Replace the current path-specific human-queue helper with a default-queue reconciliation operation that can create, unarchive, no-op, or archive according to the two-policy model.
+8. Invoke default-queue reconciliation from simple evaluation run creation and run-editing flows so queue lifecycle follows evaluation lifecycle rather than dispatch timing.
+9. Use source-family flags for ingestion semantics; persist `is_queue` as active default queue + active human evaluator work.
+10. Update simple queue/default queue creation paths so the default queue leaves `step_keys` open instead of snapshotting human step keys.
+11. Add backend tests for unconditional mode, conditional mode, archive/unarchive behavior, coexistence with custom queues, open step scope, and existing queue regressions.
+12. Update design/API documentation to describe the default queue model, the two policies, queue archival semantics, and the frontend decisions intentionally left outside this backend work.
diff --git a/docs/designs/unify-evals-and-queues/proposal.md b/docs/designs/unify-evals-and-queues/proposal.md
new file mode 100644
index 0000000000..63666386a1
--- /dev/null
+++ b/docs/designs/unify-evals-and-queues/proposal.md
@@ -0,0 +1,144 @@
+# Proposal
+
+## Goal
+
+Unify human evaluation and annotation queues at the backend model level by making the queue a default companion of evaluation runs rather than a separately created product concept.
+
+This proposal covers API and service semantics only. Frontend behavior, copy, and product nudges can vary later without requiring a different backend model.
+
+## Proposed Model
+
+Keep the current evaluation substrate:
+
+- runs define evaluation structure and repeats
+- scenarios are concrete work items
+- results are step × repeat outputs
+- queues overlay a run to expose and distribute human work
+
+Add one canonical **default queue** concept for evaluation runs.
+
+A default queue has:
+
+- `scenario_ids=None`
+- `step_keys=None`
+- `user_ids=None`
+- no queue-specific batching restriction
+
+Those open fields mean:
+
+- all scenarios in the run are eligible
+- all queue-relevant steps are eligible
+- no users are assigned by default
+- run repeats remain fully covered because repeats belong to the run
+
+## Queue Axes
+
+The queue has three independent axes:
+
+| Axis | Governs |
+|---|---|
+| scenario selection | which scenarios belong to the queue |
+| repeat assignment | which scenario × repeat lanes a user receives |
+| step selection | which steps must be completed for each assigned scenario × repeat |
+
+Default queues leave all three axes open except for the run boundary itself.
+
+## Default Queue Policies
+
+### Structural policy
+
+The structural condition is simple:
+
+```text
+has_human_evaluator_steps(run)
+```
+
+This says whether a run warrants a default queue when queues are conditional.
+
+### Global lifecycle policy
+
+A configuration value controls whether default queues exist for all runs regardless of human steps, for example:
+
+```text
+EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS
+```
+
+When enabled:
+
+- every run gets a default queue at creation
+- the default queue is never archived merely because no active human evaluator steps remain
+
+When disabled:
+
+- a default queue exists only while active human evaluator steps exist
+- adding/restoring human evaluator work creates or unarchives the default queue
+- removing/archiving the last active human evaluator archives the default queue
+
+## Default Queue Lifecycle
+
+Default queue reconciliation should use durable identity:
+
+- missing + required -> create
+- archived + required -> unarchive
+- active + required -> no-op
+- active + not required -> archive
+
+Default queues should not be hard-deleted as part of normal reconciliation.
+
+## Queue Lifecycle Support
+
+Queues should gain product-level soft-delete support:
+
+- archive endpoint/service/DAO path
+- unarchive endpoint/service/DAO path
+- `include_archived` query support
+- archived-inclusive lookup for default-queue reconciliation
+
+Hard delete may remain available for existing low-level semantics, but default-queue lifecycle should use archive/unarchive.
+
+## Canonical Queue Identity
+
+The system needs a reliable way to identify the default queue independently of shape. A custom queue may coincidentally have no scenario filter, no step filter, and no assignments.
+
+The proposal requires one of:
+
+- an explicit queue role/flag such as `is_default`
+- or another canonical linkage that uniquely identifies the default queue for a run
+
+An explicit marker is the clearer fit.
+
+## Service Placement
+
+Default-queue reconciliation belongs with run creation and run mutation, not only dispatch flows.
+
+The current `_ensure_human_annotation_queue(...)` seam should evolve into a more general lifecycle operation such as:
+
+```text
+reconcile_default_queue(run)
+```
+
+It should evaluate the global lifecycle policy and, when needed, the structural human-step policy.
+
+## Compatibility
+
+This proposal preserves:
+
+- existing evaluation-run primitives
+- existing custom queue behavior
+- existing queue-backed execution paths
+- hard-delete support where still needed
+
+It changes the default composition:
+
+- default queue existence becomes managed by run lifecycle
+- open `step_keys` become a supported queue shape rather than a snapshot omission
+- simple evaluations can participate in the same queue model as simple queues
+
+## Product Boundary
+
+The backend supports both product postures:
+
+- default queues for every evaluation, including auto-only evaluations
+- default queues only when human evaluator work exists
+
+The frontend can later decide whether to expose empty queues, nudge users toward adding human evaluators, or hide queues until human work appears. The API does not need to change again for that choice.
diff --git a/docs/designs/unify-evals-and-queues/research.md b/docs/designs/unify-evals-and-queues/research.md
new file mode 100644
index 0000000000..fcfbc2cf36
--- /dev/null
+++ b/docs/designs/unify-evals-and-queues/research.md
@@ -0,0 +1,500 @@
+# Research: Unifying Evaluations and Queues
+
+## Scope
+
+This note maps the evaluation/queue model that exists today and answers one concrete exploration question:
+
+> What would it mean, in the current architecture, for a regular evaluation to always have a default linked queue that behaves like a simple queue when human evaluators are present?
+
+The focus is backend behavior in:
+
+- `api/oss/src/core/evaluations/*`
+- `api/oss/src/apis/fastapi/evaluations/*`
+- `api/oss/src/dbs/postgres/evaluations/*`
+- the neighboring annotations layer where it clarifies the boundary
+
+## Executive Summary
+
+The system already has a single low-level evaluation substrate:
+
+- an **evaluation run** defines the workflow graph and repeats
+- **scenarios** are concrete work items within a run
+- **results** are per-step, per-repeat outputs for a scenario
+- **metrics** summarize results
+- an **evaluation queue** is an overlay over a run that selects which scenarios and annotation steps are visible to which users
+
+The split users see today is mostly created by wrapper layers:
+
+- `SimpleEvaluationsService` wraps runs without queue-centric defaults
+- `SimpleQueuesService` wraps runs plus a queue with queue-centric defaults
+
+That means the proposed product direction is structurally plausible: it does **not** require inventing a new primitive. It mostly requires deciding what the canonical/default queue attached to a run means and when it should be created or updated.
+
+The codebase is also already partway toward that direction:
+
+- `EvaluationsService._ensure_human_annotation_queue(...)` creates a queue for a run with human annotation steps when none exists.
+- Human-bearing live runs call this during refresh.
+- Queue-backed batch dispatch paths call it before processing traces/testcases.
+
+However, that helper currently creates a **narrow, snapshot-style** queue:
+
+- only when human steps exist
+- only if the run has no queue at all
+- with `step_keys` captured from the run at that moment
+- with no assignments
+- with no explicit scenario restriction
+
+It is a useful seam, but not yet the full default-queue model.
+
+The sharper target model is simpler than the current helper:
+
+- `scenario_ids=None` means all scenarios in the run
+- `step_keys=None` means all steps included by the queue policy
+- `user_ids=None` means unassigned
+- repeats remain owned by the run, while assignments distribute scenario × repeat work
+
+## Current Domain Model
+
+### 1. Evaluation runs are the canonical execution object
+
+`EvaluationRun` stores the durable definition of an evaluation:
+
+- `data.steps`: input, invocation, and annotation steps
+- `data.repeats`: repeat count for the run
+- `data.mappings`: metric/result extraction mappings
+- flags such as `is_live`, `is_queue`, `has_human`, `has_auto`, `has_testsets`, `has_queries`
+
+A run is therefore already capable of representing:
+
+- automatic-only evaluations
+- human-only evaluations
+- mixed human + automatic evaluations
+- queue-backed and non-queue-backed flows
+
+The evaluator origin is not a separate resource type. It is encoded on annotation steps as `origin in {custom, human, auto}`.
+
+### 2. Queues are overlays over runs, not separate executions
+
+`EvaluationQueue` points to a `run_id` and stores queue-specific selection/distribution state in `EvaluationQueueData`:
+
+- `user_ids: List[List[UUID]] | None`
+- `scenario_ids: List[UUID] | None`
+- `step_keys: List[str] | None`
+- optional batching controls
+
+The queue does **not** own scenarios or results. It derives visible scenarios from the underlying run and optionally filters them.
+
+This is important for the proposed default queue:
+
+- if `scenario_ids is None`, the queue automatically covers **all current scenarios in the run**
+- if `user_ids is None`, the queue is effectively **unassigned**
+- if the queue has no user filter, the scenario query path returns the run scenarios directly
+
+So the desired “default queue that follows future scenarios” already matches existing semantics **if** we leave `scenario_ids=None`.
+
+### 3. Scenario assignment is derived, not persisted per scenario
+
+Assignment behavior is computed from queue data at read time:
+
+- no `user_ids` -> everyone sees the run’s scenarios
+- with `user_ids` -> `filter_scenario_ids(...)` deterministically partitions scenarios per repeat/user lane
+- sequential vs randomized distribution is controlled by queue flags/settings
+
+That means the queue model already supports:
+
+- no assignees
+- assignees per repeat lane
+- repeated review lanes
+- deterministic re-computation as scenarios are added later
+
+The subtle point is that **repeats live on the run**, while **assignment lanes live on the queue**. `SimpleQueuesService.create(...)` currently reconciles the two by setting run repeats to at least the number of assignment lanes.
+
+## Current Public/Service Surfaces
+
+### `SimpleEvaluationsService`
+
+This is a convenience wrapper over runs. It builds run steps from query/testset/application/evaluator revision IDs and exposes CRUD/lifecycle operations as “simple evaluations.”
+
+Notably:
+
+- evaluator inputs can be lists or explicit origin maps
+- run flags are inferred from step origins
+- it is run-first, not queue-first
+
+### `SimpleQueuesService`
+
+This is a different convenience wrapper over the same substrate. It:
+
+1. builds or reuses run data
+2. creates a run with `is_queue=True`
+3. creates one linked `EvaluationQueue`
+4. stores queue-specific behavior such as assignments, step keys, and batching
+
+It is effectively a preset constructor for “evaluation run + annotation queue.”
+
+### Low-level evaluation endpoints
+
+The main evaluations API exposes separate resources for:
+
+- runs
+- scenarios
+- results
+- metrics
+- queues
+
+This exposes the true underlying shape more directly than either simple wrapper.
+
+### Annotations
+
+The annotations module is adjacent but distinct. It creates/edit annotations as trace-linked artifacts and may provision evaluators, but it is not the queue abstraction itself. The queue system is still implemented in evaluations.
+
+## How Simple Queues Work Today
+
+A simple queue is not a separate backend domain. It is a prescribed composition:
+
+1. Create an evaluation run whose input is either:
+ - direct traces/testcases, or
+ - source-backed queries/testsets
+2. Add evaluator annotation steps.
+3. Create one queue against that run.
+4. Store only the annotation `step_keys` in the queue.
+5. Optionally store assignments and batching settings.
+
+The queue then queries scenarios by:
+
+- starting from scenarios belonging to the run
+- optionally applying `queue.data.scenario_ids`
+- optionally applying user/repeat distribution
+
+That is why a queue with:
+
+- `scenario_ids=None`
+- `step_keys=None`
+- `user_ids=None`
+
+is the natural shape of the default queue.
+
+These are three independent axes:
+
+- scenario selection decides which scenarios are in the queue
+- repeat assignment decides which scenario × repeat lanes a user gets
+- step selection decides which steps must be completed for each assigned scenario × repeat
+
+`step_keys` do not participate in scenario or repeat selection, and they do not need to. Leaving them open is still the correct queue-level analogue of leaving `scenario_ids` open.
+
+## The Existing Proto-Unification Seam
+
+`EvaluationsService._ensure_human_annotation_queue(...)` currently does this:
+
+1. inspect run steps
+2. collect human annotation step keys
+3. if there are no human steps, do nothing
+4. if any queue already exists for the run, do nothing
+5. otherwise create an `EvaluationQueue` with:
+ - `run_id=run.id`
+ - `status=RUNNING`
+ - `step_keys=`
+ - no assignments
+ - no explicit scenario IDs
+
+This already gives the queue open scenario coverage and no default assignments, but it freezes step membership instead of leaving the queue open over the run’s steps.
+
+Today it is invoked from:
+
+- live run refresh before dispatch
+- queue-backed trace/testcase batch evaluation dispatch
+
+That tells us two things:
+
+1. The architecture already treats queues as a natural companion to human annotation work.
+2. The current behavior is still opportunistic and path-dependent, not a universal invariant of evaluation creation/editing.
+
+## What the Desired Default Queue Maps To in Current Terms
+
+| Desired behavior | Current primitive that already supports it |
+|---|---|
+| Queue linked to an evaluation | `EvaluationQueue.run_id` |
+| No scenario selection; include all current/future scenarios | `queue.data.scenario_ids = None` |
+| No assigned users by default | `queue.data.user_ids = None` |
+| Cover all repeats | run-level `data.repeats`; queue assignment lanes can be absent |
+| Step scope is not frozen | `queue.data.step_keys = None` |
+| New scenarios added later become visible | queue scenario lookup derives from `run_id`, not a frozen list |
+
+So the cleanest first interpretation of a **default queue** is:
+
+```text
+one canonical queue per evaluation run,
+with no scenario restriction,
+no step-key restriction,
+and no assignees.
+```
+
+## Default Queue Policy
+
+The target model has two separate policies.
+
+### Structural policy
+
+This is the run-level condition:
+
+```text
+has_human_evaluator_steps(run)
+```
+
+When default queues are conditional, this decides whether a run should currently have one.
+
+### Global lifecycle policy
+
+This is a configuration choice, for example:
+
+```text
+EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS
+```
+
+When enabled:
+
+- create a default queue for every run
+- never archive it merely because the run has no active human evaluators
+
+When disabled:
+
+- create or unarchive the default queue when the run has human evaluator steps
+- archive the default queue when the run has no active human evaluator steps
+
+These policies are related but not interchangeable. The global setting defines whether default queues are unconditional. The structural rule only governs lifecycle when default queues are conditional.
+
+## Default Queue Lifecycle
+
+The desired queue identity is durable:
+
+- if the default queue does not exist and policy requires one, create it
+- if it exists and is archived, unarchive it
+- if it exists and is active, leave it alone
+- if policy no longer requires it, archive it rather than hard-delete it
+
+This fits the broader evaluator model if evaluators are archived rather than removed. A queue can disappear from normal views while retaining identity and later return if human evaluator work becomes active again.
+
+The current queue API is not yet aligned with that lifecycle:
+
+- queues have lifecycle fields
+- queue endpoints currently expose hard deletion
+- queue queries do not yet expose `include_archived`
+- queue lookup does not currently distinguish active from archived queues
+
+If default queues become durable linked objects, queue archive/unarchive operations and archived-aware lookup become part of the needed foundation.
+
+## Remaining Model Gaps
+
+### 1. `step_keys` are currently stored as a snapshot
+
+The current helper captures the human step keys that exist at creation time. The default queue should instead leave step scope open with `step_keys=None`, so later step changes do not require queue rewrites.
+
+### 2. There is no first-class distinction between default and custom queues
+
+Currently, a queue is just a queue. `_ensure_human_annotation_queue(...)` only checks whether **any** queue exists for the run.
+
+That creates ambiguity:
+
+- if a custom filtered queue exists, should it suppress creation of the evaluation’s default queue?
+- if multiple queues exist, which one is the queue shown inside the evaluation?
+- which archived queue should be restored when the default-queue invariant becomes true again?
+
+A stable default-queue marker or equivalent canonical linkage is needed once default queues and custom queues can coexist.
+
+### 3. `is_queue` still encodes a product distinction on the run
+
+Simple queues create runs with `is_queue=True`; simple evaluations generally do not. This flag is used for querying and queue-specific dispatch guards.
+
+If ordinary evaluations can have linked queues, `is_queue` should remain a technical execution flag rather than the signal that a run has a queue companion.
+
+### 4. Queue lifecycle is currently path-dependent
+
+Today automatic queue creation is reached from execution paths, not from the run mutation paths that define whether human work exists.
+
+Default-queue reconciliation belongs next to run creation/editing so it can enforce either:
+
+- unconditional queue existence, or
+- conditional existence based on active human evaluator steps.
+
+## Multiple Human Evaluators, Assignments, and Repeats
+
+### Multiple human evaluators
+
+The run model supports many human evaluator steps already. A queue can target multiple annotation steps through `step_keys`.
+
+So there is no fundamental blocker to one default queue covering multiple human evaluators. The real question is product semantics:
+
+- should one task card represent one scenario with multiple human fields?
+- or one scenario × evaluator step as separate queue work?
+
+The current queue primitive points at multiple step keys but scenario listing is scenario-oriented, not step-oriented. That suggests today’s model is closer to “one scenario can carry several annotation steps” than “each evaluator creates a separate queue item.”
+
+### Assignments
+
+The queue model already supports repeat-lane assignments:
+
+```text
+user_ids = [[repeat_0 users], [repeat_1 users], ...]
+```
+
+A default queue with `user_ids=None` naturally means “unassigned.”
+
+What still needs product clarification is how assignment should behave when:
+
+- the evaluation repeat count increases later
+- a human evaluator is added after assignments exist
+- different human evaluators should have different assignee pools
+
+The current queue data model has one assignment matrix for the whole queue, not per evaluator step. If evaluators need separate assignment rules, one shared default queue may be insufficient or the model must evolve.
+
+### Repeats
+
+Repeats are owned by `EvaluationRunData.repeats`, not by the queue. Simple queue creation enforces:
+
+```text
+run.repeats >= number of assignment lanes
+```
+
+That is compatible with a default queue that “covers all existing repeats,” provided the queue derives from the run rather than freezing repeat-specific scope.
+
+The open design question is what happens if repeats are later edited downward/upward after a queue already has assignments. The current storage model permits temporary mismatch.
+
+## Likely Design Direction
+
+### Recommended conceptual model
+
+Treat the queue as a **view/controller over human annotation work for an evaluation run**, not as a sibling product object that users must create manually.
+
+A practical backend direction would be:
+
+1. Every evaluation run may have one **canonical/default queue**.
+2. The default queue is created automatically when the run first contains human annotation steps.
+3. The default queue has:
+ - no scenario filter
+ - no assignments
+ - derived human-step membership, or managed synchronization
+4. Additional custom queues may still exist for advanced filtered/assigned workflows.
+5. The evaluation API should expose the canonical queue link directly so the UI can render the same queue both inside the evaluation and on the Queues surface.
+
+### Why this fits the current code well
+
+It reuses what already exists:
+
+- run/scenario/result storage
+- evaluation queue storage
+- scenario derivation by `run_id`
+- assignment logic by repeat lane
+- the already-present `_ensure_human_annotation_queue(...)` seam
+
+The largest required addition is not storage volume; it is **semantics**:
+
+- how to mark the canonical queue
+- how default queue step membership stays current
+- where invariant enforcement lives
+
+## Concrete Gaps to Resolve Before Implementation
+
+### Product/behavior questions
+
+1. Is the default queue only for **human** steps, or for all annotation steps?
+ - The current helper chooses human-only.
+ - The product statement sounds human-focused.
+
+2. With multiple human evaluators, is assignment shared across them or evaluator-specific?
+ - Current queue data supports shared assignment only.
+
+3. When a run already has a custom queue, should the default queue still exist?
+ - Current helper says no because it stops if *any* queue exists.
+
+4. If human evaluators are removed, should the default queue remain, archive, or disappear?
+
+5. Should all evaluation runs have a default queue immediately, or only runs with human work?
+ - The latter better matches current semantics and avoids empty queues for automatic-only runs.
+
+### Technical questions
+
+1. Should default queue membership be derived with `step_keys=None`, or synchronized explicitly?
+2. How is “default queue” represented?
+3. Should queue creation/update happen in service-layer run mutation methods rather than dispatch flows?
+4. Does `is_queue` remain meaningful once ordinary evaluations can have linked queues?
+5. What migration/backfill is needed for existing runs with human steps but no queue?
+
+## Candidate Implementation Shapes
+
+### Option A — Minimal evolution
+
+Keep explicit `step_keys`, add a default queue marker, and update `_ensure_human_annotation_queue(...)` plus run-edit paths to keep the default queue synced.
+
+**Pros**
+
+- smallest delta from current code
+- easiest to reason about with existing queue reads
+- preserves explicit custom queue semantics
+
+**Cons**
+
+- sync bugs remain possible
+- every run edit touching human steps must remember to update the queue
+
+### Option B — Derived default queues
+
+Define `step_keys=None` on a default queue as “all current human annotation steps for this run.” Custom queues continue to use explicit step keys.
+
+**Pros**
+
+- best match for “follows the evaluation as it changes”
+- new human evaluators appear automatically
+- fewer synchronization paths
+
+**Cons**
+
+- requires read-time logic to distinguish default/derived queues from unconstrained queues
+- needs crisp semantics for historical behavior and custom queues
+
+### Option C — No persisted default queue; virtualize it
+
+Do not persist a canonical queue. Derive one virtually from the run whenever human steps exist.
+
+**Pros**
+
+- no sync issue
+- cleanest conceptual model
+
+**Cons**
+
+- weaker fit with “visible in Queues” unless the Queues API/UI also supports virtual resources
+- assignments and future edits become awkward because there is no row to mutate
+
+**Current recommendation:** Option B looks like the strongest long-term fit, with Option A as the lower-risk incremental step if we want a small migration first.
+
+## Key References
+
+- `api/oss/src/core/evaluations/types.py`
+ - `EvaluationRun*`
+ - `EvaluationQueue*`
+ - `SimpleEvaluation*`
+ - `SimpleQueue*`
+- `api/oss/src/core/evaluations/service.py`
+ - `EvaluationsService._ensure_human_annotation_queue(...)`
+ - `EvaluationsService.fetch_queue_scenarios(...)`
+ - `SimpleEvaluationsService`
+ - `SimpleQueuesService`
+- `api/oss/src/core/evaluations/utils.py`
+ - `filter_scenario_ids(...)`
+- `api/oss/src/dbs/postgres/evaluations/dao.py`
+ - queue CRUD and user filtering
+- `api/oss/src/apis/fastapi/evaluations/router.py`
+ - low-level evaluation endpoints
+ - simple evaluation endpoints
+ - simple queue endpoints
+- `api/oss/src/core/annotations/service.py`
+ - neighboring annotation abstraction, distinct from queueing
+
+## Bottom Line
+
+The backend already has the right primitive split for unification:
+
+- **evaluation run** = what is being evaluated
+- **queue** = how human annotation work over that run is exposed/distributed
+
+The exploration should therefore avoid introducing a new “human evaluation” abstraction. The more promising path is to make a linked default queue a first-class, automatically maintained aspect of evaluation runs that contain human steps, while keeping custom queues as an advanced overlay when users need narrower assignment or filtering behavior.
diff --git a/docs/designs/unify-evals-and-queues/unify-evals-extension-synthesis.md b/docs/designs/unify-evals-and-queues/unify-evals-extension-synthesis.md
new file mode 100644
index 0000000000..832b12eae5
--- /dev/null
+++ b/docs/designs/unify-evals-and-queues/unify-evals-extension-synthesis.md
@@ -0,0 +1,263 @@
+# Unify Evals Extension Synthesis
+
+## Purpose
+
+This note captures the refined model that emerged after relating the queue-unification work to the parallel eval-loop unification work.
+
+The central clarification is that several concepts currently overloaded into “queue” should be separated:
+
+- source family
+- default queue identity
+- simple-queue eligibility
+- queue lifecycle
+
+## Final Vocabulary
+
+### Source-family flags on runs
+
+Runs should expose distinct inferred flags for each source family:
+
+- `has_queries`
+- `has_testsets`
+- `has_traces`
+- `has_testcases`
+
+These flags answer where scenarios come from and should drive:
+
+- validation
+- topology classification
+- source-family filtering
+- mixed-input prevention
+
+They should replace the current tendency to infer direct trace/testcase behavior indirectly through `is_queue` plus synthetic step-key inspection.
+
+### `run.flags.is_queue`
+
+`is_queue` should become the persisted derived flag that answers:
+
+> Can this evaluation currently be interacted with through the simple annotation queue surface?
+
+The intended condition is:
+
+```text
+active default queue exists
+and active human evaluator work exists
+```
+
+This aligns the name with the product meaning and makes the flag directly useful for querying.
+
+It should be maintained eagerly, like the other persisted run flags, whenever:
+
+- the default queue is created
+- the default queue is archived or unarchived
+- active human evaluator work appears or disappears
+
+### `queue.flags.is_default`
+
+Queues need an explicit canonical-default marker:
+
+```text
+queue.flags.is_default = true
+```
+
+Shape alone is not enough to identify the canonical queue, because a custom queue may coincidentally have the same open filters.
+
+## Default Queue Model
+
+A default queue is the canonical persisted queue view for a run.
+
+Its invariant shape is:
+
+```text
+scenario_ids = None
+step_keys = None
+user_ids = None
+```
+
+and no queue-specific batching constraints.
+
+Interpretation:
+
+- no scenario filter -> all run scenarios
+- no step filter -> all included steps
+- no user assignments -> unassigned
+- repeat coverage remains run-owned
+
+### Uniqueness
+
+There must be at most one default queue per run, including archived queues.
+
+Because queue flags are persisted JSONB, this can be enforced with a partial unique index over the materialized JSONB flag:
+
+```sql
+CREATE UNIQUE INDEX ux_evaluation_queues_default_per_run
+ON evaluation_queues (project_id, run_id)
+WHERE (flags ->> 'is_default')::boolean = true;
+```
+
+An archived default queue still occupies the uniqueness slot. Reconciliation should unarchive it rather than create a duplicate.
+
+### Edit restrictions
+
+When `is_default=true`, editing must not allow:
+
+- scenario filters
+- step-key filters
+- assignments
+- batching settings
+
+Default queues are canonical open views, not user-customizable slices.
+
+## Default Queue Lifecycle
+
+There are two policies.
+
+### Structural policy
+
+```text
+has_active_human_evaluator_steps(run)
+```
+
+This says whether a run warrants a default queue when queues are conditional.
+
+### Global lifecycle policy
+
+A global policy toggle determines whether default queues are unconditional for all runs, for example:
+
+```text
+EVALUATIONS_DEFAULT_QUEUES_FOR_ALL_RUNS
+```
+
+When enabled:
+
+- every run gets a default queue
+- the default queue is not archived merely because active human work disappears
+
+When disabled:
+
+- active human work requires a default queue
+- absence of active human work archives the default queue
+
+### Reconciliation behavior
+
+```text
+required + missing -> create
+required + archived -> unarchive
+required + active -> no-op
+not required + active -> archive
+```
+
+Queue lifecycle should use soft deletion for this behavior. Hard deletion may remain available separately where still needed.
+
+Queue queries need archived-aware support so reconciliation can restore the existing canonical row.
+
+## Simple Queue Semantics
+
+A `SimpleQueue` should be understood as:
+
+```text
+a simplified human-work projection of an evaluation's default queue
+```
+
+not as a wrapper around runs that happen to use a special ingestion mode.
+
+### Eligibility
+
+A run is simple-queue eligible when:
+
+```text
+run.flags.is_queue == true
+```
+
+under the redefined meaning above.
+
+That means all of these can appear through the simple queue surface when they have active human work and an active default queue:
+
+- query-backed evaluations
+- testset-backed evaluations
+- direct trace-backed evaluations
+- direct testcase-backed evaluations
+
+Auto-only evaluations with an eager but empty default queue are not simple-queue eligible unless product later decides otherwise.
+
+### Identifiers
+
+Simple queue endpoints should remain queue-ID based.
+
+If a caller starts from a run, add one small lookup endpoint:
+
+```http
+GET /evaluations/runs/{run_id}/default-queue
+```
+
+This returns the canonical queue resource or ID, after which existing simple queue endpoints can continue using queue IDs.
+
+There is no need for run-scoped archive/unarchive endpoints.
+
+## Relationship to Unified Eval Loops
+
+The parallel eval-loop work formalizes:
+
+```text
+evaluation = graph + tensor + process(slice)
+```
+
+The queue model fits above that as:
+
+```text
+default queue = canonical persisted human-work view over the tensor
+```
+
+The queue axes align naturally with tensor dimensions:
+
+- scenarios
+- steps
+- repeats
+
+A default queue is the open/default view over those dimensions.
+
+### Boundary
+
+The default queue is not orchestration.
+
+- eval runtime owns planning, processing, and tensor population
+- queues own visibility, assignment, queue lifecycle, and user workflow
+
+## Shared Design Tension: Step Lifecycle
+
+The unified-loop design currently leans toward:
+
+```text
+remove_step -> prune tensor cells
+```
+
+But if product semantics require evaluators or steps to be archived rather than hard-removed, the graph model needs to support active versus archived steps.
+
+That affects queue logic directly:
+
+- queue eligibility should depend on active human steps
+- archived human steps may remain visible historically without keeping the queue active
+- old tensor cells may remain instead of being pruned
+
+This needs explicit alignment with the eval-loop mutation model.
+
+## Recommended Backend Changes
+
+1. Add inferred run flags:
+ - `has_traces`
+ - `has_testcases`
+2. Redefine persisted `run.flags.is_queue` as simple-queue eligibility.
+3. Add `queue.flags.is_default`.
+4. Enforce one default queue per run with a partial unique index over `flags.is_default`.
+5. Reject filters/assignments/batching edits on default queues.
+6. Add queue archive/unarchive support and archived-aware queries.
+7. Add default-queue reconciliation tied to run creation/editing and queue lifecycle changes.
+8. Persist and eagerly refresh `run.flags.is_queue` when the default queue or active human-work state changes.
+9. Keep simple queue endpoints queue-ID based.
+10. Add a small run-scoped lookup endpoint for the default queue:
+
+```http
+GET /evaluations/runs/{run_id}/default-queue
+```
+
+11. Align eval-loop mutation semantics around active vs archived steps before hardening remove/prune behavior.
diff --git a/docs/designs/unify-evals-and-queues/unify-evals-extension-verbatim.md b/docs/designs/unify-evals-and-queues/unify-evals-extension-verbatim.md
new file mode 100644
index 0000000000..66e41f27e7
--- /dev/null
+++ b/docs/designs/unify-evals-and-queues/unify-evals-extension-verbatim.md
@@ -0,0 +1,533 @@
+Yes — I think this is a better model than the one I was circling around before.
+
+It gives each fact its own place instead of forcing `is_queue` to carry a hidden runtime meaning that does not match its name.
+
+## The revised flag model
+
+### Add inferred source flags
+
+Alongside:
+
+- `has_queries`
+- `has_testsets`
+- `has_evaluators`
+
+add:
+
+- `has_traces`
+- `has_testcases`
+
+Then the source family becomes explicit:
+
+| Source shape | Flags |
+|---|---|
+| query-backed | `has_queries=True` |
+| testset-backed | `has_testsets=True` |
+| externally supplied traces | `has_traces=True` |
+| externally supplied testcases | `has_testcases=True` |
+
+That gives us the right vocabulary for:
+
+- validation
+- topology classification
+- query filtering
+- avoiding mixed source families
+- distinguishing declared sources from externally supplied concrete items
+
+And importantly:
+
+> that source distinction does not need to be smuggled through `is_queue`.
+
+I like that a lot.
+
+## Then redefine `is_queue`
+
+Under your proposal:
+
+```text
+is_queue = there is an active default queue
+ and at least one active human evaluator step
+```
+
+or more plainly:
+
+```text
+this evaluation is currently interactable as a simple annotation queue
+```
+
+That is much more intuitive.
+
+It answers the product-relevant question:
+
+> Can this run be interacted with through the simple queue / annotation queue surface?
+
+And it can turn off when:
+- the default queue is archived
+- there are no active human evaluator steps
+
+That means `is_queue` is no longer an execution/input-source flag. It becomes a derived **human-work availability** flag.
+
+I think that is actually the right use of the name.
+
+## The clean separation becomes
+
+| Fact | Where represented |
+|---|---|
+| declared query source | `has_queries` |
+| declared testset source | `has_testsets` |
+| external trace source | `has_traces` |
+| external testcase source | `has_testcases` |
+| has evaluators | `has_evaluators` |
+| has active human evaluators | `has_human` or eventually `has_active_human` if step archival becomes explicit |
+| can be used via simple queues | `is_queue` |
+| this particular queue is canonical | `EvaluationQueue.flags.is_default` |
+
+That is much clearer.
+
+---
+
+# A few important consequences
+
+## 1. `is_queue` can no longer be derived from the run alone
+
+Today run flags are derived only from run data.
+
+Under this model, `is_queue` depends on:
+
+- run graph state
+- queue existence
+- queue archival state
+
+So we should stop thinking of all run flags as purely “derived from steps.”
+
+Some are graph-derived:
+- `has_queries`
+- `has_testsets`
+- `has_traces`
+- `has_testcases`
+- `has_evaluators`
+- `has_human`
+- `has_auto`
+
+But `is_queue` is relationship/lifecycle-derived:
+- active default queue exists
+- active human work exists
+
+That is fine, but it means the reconciliation path needs to update the run flag whenever the default queue is created, archived, or unarchived.
+
+## 2. `has_traces` / `has_testcases` solve the current synthetic-source hack
+
+Right now the code has this awkward logic:
+
+```python
+if flags.is_queue and not _references:
+ inspect step_key text for "query" or "testset"
+```
+
+That exists because direct queues use synthetic input steps and the system still wants to classify them as trace/testcase-ish through the old flags.
+
+With explicit:
+
+- `has_traces`
+- `has_testcases`
+
+we can stop overloading:
+- `has_queries` to mean “trace-like”
+- `has_testsets` to mean “testcase-like”
+- `is_queue` to help infer source family from missing references
+
+That should make validation and topology much more honest.
+
+## 3. Source-backed human evaluations can naturally be simple queues
+
+Then your desired product rule becomes straightforward:
+
+```text
+simple queue eligible
+iff
+run.is_queue == True
+```
+
+because `is_queue` now means exactly:
+
+```text
+active default queue + active human evaluator work
+```
+
+So:
+
+| Run | `is_queue` |
+|---|---:|
+| query-backed + human evaluator + active default queue | true |
+| testset-backed + human evaluator + active default queue | true |
+| direct traces + human evaluator + active default queue | true |
+| direct testcases + human evaluator + active default queue | true |
+| auto-only eval with eager default queue | false |
+| human eval whose default queue is archived | false |
+
+That is much more useful than the current meaning.
+
+---
+
+# On the default queue itself
+
+Yes: I think we need an explicit queue flag:
+
+```python
+EvaluationQueueFlags.is_default: bool
+```
+
+because shape alone is not enough once custom queues exist. A custom queue could happen to also have:
+
+- no scenario filter
+- no step filter
+- no assignments
+
+and still not be the canonical default queue.
+
+## Default queue invariants
+
+For `is_default=True`, enforce:
+
+```text
+scenario_ids is None
+step_keys is None
+user_ids is None
+```
+
+You mentioned “no repeat index”; today queues do not have a repeat-index filter field, so in current schema that translates to **no assignments**, because assignment lanes are the queue-level way repeats are partitioned. If repeat-index filtering is later added explicitly, then yes, default queues should also forbid that.
+
+And I agree with the behavior:
+
+- default queue archived → it still exists
+- creating another default queue for same run should fail
+- reconciliation should unarchive the existing one rather than create a second row
+
+So the invariant is:
+
+```text
+at most one default queue per run, including archived queues
+```
+
+That likely wants a real uniqueness guarantee, not just service logic. Since `is_default` inside JSONB flags is awkward for constraints, I would at least consider making `is_default` a real DB column or adding an explicit indexed field rather than burying it only in JSON flags. If we keep it only inside JSONB, enforcement is still possible but less pleasant and less obvious.
+
+---
+
+# On simple queue identifiers
+
+Yes — today the simple queue endpoints are queue-ID-centric.
+
+If after unification the simple queue is fundamentally:
+
+```text
+the simple projection of the run’s default queue
+```
+
+then using the **run ID** is probably the better canonical identifier for that surface.
+
+Because the user-facing thing is increasingly “the evaluation’s queue,” not “some arbitrary queue row.”
+
+## Compatibility shape
+
+Your compatibility idea is reasonable:
+
+- if the identifier resolves to a queue ID, use that queue
+- otherwise, if it resolves to a run ID, fetch that run’s default queue
+- eventually prefer run IDs in the new API/UI paths
+
+Since both are UUIDs, this is a pragmatic compatibility shim rather than a semantically clean contract. It works, but the implementation should be careful and deterministic:
+
+1. try queue ID lookup first
+2. if no queue exists, try default queue by run ID
+3. if both could theoretically exist, queue ID wins
+
+UUID collision across tables is extraordinarily unlikely, but the precedence should still be explicit.
+
+Longer term, I would probably prefer:
+- queue-specific endpoints remain queue-ID based
+- simple queue endpoints become run-ID based
+- maybe add explicit routes like `/simple/queues/by-run/{run_id}` during transition
+
+But as an internal compatibility move, your suggestion is sound.
+
+---
+
+# The resulting model is much stronger
+
+I would now summarize it this way:
+
+```text
+Source flags describe where scenarios come from:
+ has_queries
+ has_testsets
+ has_traces
+ has_testcases
+
+Queue flags describe queue identity:
+ is_default
+
+Run.is_queue describes product eligibility:
+ active default queue + active human evaluator work
+
+SimpleQueue is the simplified API view over:
+ the run's default queue
+```
+
+That gives each concern one home.
+
+It also removes the awkwardness where a run could “have a queue” but `is_queue=False`, or have `is_queue=True` mostly because it accepts source batches. Under your model, the name and the meaning line up again.
+
+## One thing I would still decide explicitly
+
+Whether `is_queue` should be persisted at all or always recomputed.
+
+Because it depends on both:
+- run state
+- queue state
+
+If it is persisted, reconciliation must update it transactionally whenever:
+- default queue created
+- default queue archived/unarchived
+- active human evaluator steps appear/disappear
+
+If it is recomputed, queries become more expensive or need joins.
+
+Given that you explicitly want it queryable, persisting it as a denormalized derived flag is reasonable — but then I would treat **default queue reconciliation + run flag refresh** as one logical operation.
+
+This is a much cleaner design than the earlier alternatives.
+
+---
+
+Yes — on both points.
+
+## 1. Uniqueness for the default queue
+
+`scenario_ids`, `step_keys`, and `user_ids` all currently live inside `EvaluationQueueData`, which is stored in the queue’s JSON `data` column. So if we define the default queue only by the shape:
+
+```text
+scenario_ids is None
+step_keys is None
+user_ids is None
+```
+
+then a normal relational unique index over those fields is not straightforward.
+
+You could technically build expression indexes over JSON paths, but that would be a poor foundation for a first-class invariant like:
+
+```text
+at most one default queue per run
+```
+
+I think your instinct is right: if **defaultness** matters enough to enforce uniqueness, it wants a first-class indexed column.
+
+### Recommended shape
+
+Add something like:
+
+```python
+is_default: bool
+```
+
+as a real queue column, even if it is also mirrored into DTO flags for API symmetry.
+
+Then enforce:
+
+```text
+unique(project_id, run_id) where is_default = true
+```
+
+That gives you the exact invariant you want:
+
+- only one default queue per run
+- archived default queue still occupies the slot
+- trying to create another default queue fails
+- reconciliation can find and unarchive the existing one
+
+And separately, enforce in service validation:
+
+```text
+if is_default:
+ scenario_ids must be None
+ step_keys must be None
+ user_ids must be None
+ batch settings must be None
+```
+
+The uniqueness invariant should key on **identity** (`is_default`), not on a coincidental combination of empty filters.
+
+That is much safer than saying “whichever queue happens to have no filters is default.”
+
+## 2. Simple queues can stay queue-ID based if default queue lookup is easy
+
+I agree with your revised take.
+
+If we add a very small direct way to fetch the default queue for a run, then we do **not** need to overload simple queue identifiers with run IDs.
+
+Something like:
+
+```http
+GET /evaluations/runs/{run_id}/queue
+```
+
+or more explicitly:
+
+```http
+GET /evaluations/runs/{run_id}/default-queue
+```
+
+would be enough.
+
+Then the flow becomes:
+
+1. evaluation screen has `run_id`
+2. fetch default queue in one cheap call
+3. receive `queue_id`
+4. use existing simple queue endpoints with `queue_id`
+
+That preserves the clean existing identity model:
+- queue resources use queue IDs
+- runs use run IDs
+- no ambiguous UUID interpretation
+- no compatibility shim needed unless product wants one for some other reason
+
+I’d favor:
+
+```http
+GET /evaluations/runs/{run_id}/default-queue
+```
+
+because it is unambiguous and leaves room for other queue relationships later.
+
+Possibly also:
+
+```http
+POST /evaluations/runs/{run_id}/default-queue/archive
+POST /evaluations/runs/{run_id}/default-queue/unarchive
+```
+
+if we want run-scoped convenience operations, though the generic queue archive/unarchive endpoints may already be enough.
+
+## 3. Persisting `run.flags.is_queue`
+
+I agree with you.
+
+Because we want:
+
+- cheap filtering
+- parity with the other persisted inferred run flags
+- no joins for the common read paths
+- and queue archival/unarchival is a meaningful state transition anyway
+
+then `is_queue` should be persisted and eagerly maintained.
+
+Under the new meaning:
+
+```text
+run.flags.is_queue =
+ active default queue exists
+ and active human evaluator work exists
+```
+
+And yes, that means queue lifecycle operations must update the run flags eagerly:
+
+| Event | `run.flags.is_queue` effect |
+|---|---|
+| default queue created and human work exists | `true` |
+| default queue unarchived and human work exists | `true` |
+| default queue archived | `false` |
+| last active human evaluator archived | `false` |
+| human evaluator added/restored while default queue active | `true` |
+
+This is analogous to the other denormalized flags:
+- they are persisted
+- they are inferred/maintained eagerly
+- query paths stay cheap
+
+The only thing I would be careful about is **where** that synchronization lives. I would want one narrow service-level operation that owns the invariant, rather than scattered manual edits:
+
+```text
+reconcile_default_queue_and_run_flags(...)
+```
+
+or maybe two lower-level pieces used transactionally:
+
+```text
+reconcile_default_queue(...)
+refresh_run_flags(...)
+```
+
+But conceptually, yes: persist it and keep it in sync.
+
+## Updated model after your refinements
+
+```text
+EvaluationRunFlags
+ has_queries
+ has_testsets
+ has_traces
+ has_testcases
+ has_evaluators
+ has_human
+ has_auto
+ is_queue # can be used via simple queue surface
+
+EvaluationQueue
+ is_default # first-class indexed identity field
+
+Default queue invariant
+ at most one per run
+ scenario_ids=None
+ step_keys=None
+ user_ids=None
+ no batching constraints
+
+Simple queue endpoints
+ remain queue-ID based
+
+Default queue lookup
+ add a direct run-scoped endpoint to get queue_id cheaply
+```
+
+That feels quite settled to me now.
+
+---
+
+Yes — if `is_default` is materialized inside the queue `flags` JSONB, then Postgres can enforce uniqueness from that directly. We do **not** necessarily need a dedicated physical column just for the index.
+
+For example, conceptually:
+
+```sql
+CREATE UNIQUE INDEX ux_evaluation_queues_default_per_run
+ON evaluation_queues (project_id, run_id)
+WHERE (flags ->> 'is_default')::boolean = true;
+```
+
+That would give us the important invariant:
+
+```text
+at most one default queue per run, including archived rows
+```
+
+because archived rows still satisfy the partial-index predicate.
+
+So yes: if we are comfortable treating `flags.is_default` as a materialized persisted field, a partial unique index over the JSONB expression is enough.
+
+The tradeoff is mainly ergonomics:
+- **JSONB expression index**: no extra column, keeps queue flags grouped together
+- **real column**: easier to inspect/query/index conventionally
+
+But technically, your approach is sound, and in this codebase it may be the more consistent choice if other queue flags already live in JSONB.
+
+And agreed: **no** to run-scoped archive/unarchive endpoints.
+
+We only need:
+- generic queue archive/unarchive operations
+- plus a simple way to fetch the default queue for a run
+
+So the useful addition is something like:
+
+```http
+GET /evaluations/runs/{run_id}/default-queue
+```
+
+but not special lifecycle endpoints hanging off the run.
diff --git a/examples/python/evaluators/ag/secrets_check.py b/examples/python/evaluators/ag/secrets_check.py
index 2427ecc81b..1754a7848f 100644
--- a/examples/python/evaluators/ag/secrets_check.py
+++ b/examples/python/evaluators/ag/secrets_check.py
@@ -35,7 +35,7 @@ def evaluate(
)
response = requests.get(
- f"{host}/api/vault/v1/secrets/",
+ f"{host}/api/secrets/",
headers=headers,
timeout=10,
)
diff --git a/hosting/docker-compose/ee/docker-compose.dev.yml b/hosting/docker-compose/ee/docker-compose.dev.yml
index c7b3198d1b..812578fa9c 100644
--- a/hosting/docker-compose/ee/docker-compose.dev.yml
+++ b/hosting/docker-compose/ee/docker-compose.dev.yml
@@ -143,7 +143,7 @@ services:
image: agenta-ee-dev-api:latest
# === EXECUTION ============================================ #
command: >
- watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --
+ watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --ignore-patterns=*/tests/* --
python -m entrypoints.worker_evaluations
# === STORAGE ============================================== #
volumes:
@@ -180,7 +180,7 @@ services:
image: agenta-ee-dev-api:latest
# === EXECUTION ============================================ #
command: >
- watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --
+ watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --ignore-patterns=*/tests/* --
python -m entrypoints.worker_tracing
# === STORAGE ============================================== #
volumes:
@@ -217,7 +217,7 @@ services:
image: agenta-ee-dev-api:latest
# === EXECUTION ============================================ #
command: >
- watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --
+ watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --ignore-patterns=*/tests/* --
python -m entrypoints.worker_webhooks
# === STORAGE ============================================== #
volumes:
@@ -260,7 +260,7 @@ services:
image: agenta-ee-dev-api:latest
# === EXECUTION ============================================ #
command: >
- watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --
+ watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --ignore-patterns=*/tests/* --
python -m entrypoints.worker_events
# === STORAGE ============================================== #
volumes:
diff --git a/hosting/docker-compose/oss/docker-compose.dev.yml b/hosting/docker-compose/oss/docker-compose.dev.yml
index 942d528664..3e320ebe57 100644
--- a/hosting/docker-compose/oss/docker-compose.dev.yml
+++ b/hosting/docker-compose/oss/docker-compose.dev.yml
@@ -141,7 +141,7 @@ services:
image: agenta-oss-dev-api:latest
# === EXECUTION ============================================ #
command: >
- watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --
+ watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --ignore-patterns=*/tests/* --
python -m entrypoints.worker_evaluations
# === STORAGE ============================================== #
volumes:
@@ -178,7 +178,7 @@ services:
image: agenta-oss-dev-api:latest
# === EXECUTION ============================================ #
command: >
- watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --
+ watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --ignore-patterns=*/tests/* --
python -m entrypoints.worker_tracing
# === STORAGE ============================================== #
volumes:
@@ -215,7 +215,7 @@ services:
image: agenta-oss-dev-api:latest
# === EXECUTION ============================================ #
command: >
- watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --
+ watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --ignore-patterns=*/tests/* --
python -m entrypoints.worker_webhooks
# === STORAGE ============================================== #
volumes:
@@ -258,7 +258,7 @@ services:
image: agenta-oss-dev-api:latest
# === EXECUTION ============================================ #
command: >
- watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --
+ watchmedo auto-restart --directory=/app/ --pattern=*.py --recursive --ignore-patterns=*/tests/* --
python -m entrypoints.worker_events
# === STORAGE ============================================== #
volumes:
diff --git a/sdks/python/agenta/sdk/engines/running/errors.py b/sdks/python/agenta/sdk/engines/running/errors.py
index 9cbd2c1f33..6b68465681 100644
--- a/sdks/python/agenta/sdk/engines/running/errors.py
+++ b/sdks/python/agenta/sdk/engines/running/errors.py
@@ -340,6 +340,19 @@ def __init__(self, message: str, stacktrace: Optional[str] = None):
)
+class MockV0Error(ErrorStatus):
+ code: int = 500
+ type: str = f"{ERRORS_BASE_URL}#v0:workflows:mock-error"
+
+ def __init__(self, message: str, stacktrace: Optional[str] = None):
+ super().__init__(
+ code=self.code,
+ type=self.type,
+ message=message,
+ stacktrace=stacktrace,
+ )
+
+
class SnippetV0Error(ErrorStatus):
code: int = 500
type: str = f"{ERRORS_BASE_URL}#v0:workflows:snippet-error"
diff --git a/sdks/python/agenta/sdk/engines/running/handlers.py b/sdks/python/agenta/sdk/engines/running/handlers.py
index 871f918af9..4499943616 100644
--- a/sdks/python/agenta/sdk/engines/running/handlers.py
+++ b/sdks/python/agenta/sdk/engines/running/handlers.py
@@ -6,6 +6,7 @@
import socket
import ipaddress
import traceback
+from inspect import isawaitable
from difflib import SequenceMatcher
from json import dumps, loads
from typing import Any, Dict, List, Optional, Union, Tuple
@@ -60,6 +61,7 @@
WebhookServerV0Error,
MatchV0Error,
CodeV0Error,
+ MockV0Error,
ConfigV0Error,
FeedbackV0Error,
)
@@ -330,8 +332,7 @@ def auto_exact_match_v0(
Returns:
Evaluation result with success flag (True for match, False for mismatch)
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
correct_answer_key = str(parameters.get("correct_answer_key", "correct_answer"))
@@ -372,8 +373,7 @@ def auto_regex_test_v0(
Returns:
Evaluation result with success flag
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "regex_pattern" not in parameters:
raise MissingConfigurationParameterV0Error(path="regex_pattern")
@@ -430,18 +430,14 @@ def field_match_test_v0(
Returns:
Evaluation result with success flag
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "json_field" not in parameters:
raise MissingConfigurationParameterV0Error(path="json_field")
json_field = str(parameters["json_field"])
- if "correct_answer_key" not in parameters:
- raise MissingConfigurationParameterV0Error(path="correct_answer_key")
-
- correct_answer_key = str(parameters["correct_answer_key"])
+ correct_answer_key = str(parameters.get("correct_answer_key", "correct_answer"))
if inputs is None or not isinstance(inputs, dict):
raise InvalidInputsV0Error(expected="dict", got=inputs)
@@ -526,8 +522,7 @@ def json_multi_field_match_v0(
Dict with per-field scores and aggregate_score, e.g.:
{"name": 1.0, "email": 0.0, "aggregate_score": 0.5}
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "fields" not in parameters:
raise MissingConfigurationParameterV0Error(path="fields")
@@ -541,10 +536,7 @@ def json_multi_field_match_v0(
got=fields,
)
- if "correct_answer_key" not in parameters:
- raise MissingConfigurationParameterV0Error(path="correct_answer_key")
-
- correct_answer_key = str(parameters["correct_answer_key"])
+ correct_answer_key = str(parameters.get("correct_answer_key", "correct_answer"))
if inputs is None or not isinstance(inputs, dict):
raise InvalidInputsV0Error(expected="dict", got=inputs)
@@ -637,8 +629,7 @@ async def auto_webhook_test_v0(
Returns:
Evaluation result with score from the webhook
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "webhook_url" not in parameters:
raise MissingConfigurationParameterV0Error(path="webhook_url")
@@ -756,8 +747,7 @@ async def auto_custom_code_run_v0(
Returns:
Evaluation result with score from the custom code
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "code" not in parameters:
raise MissingConfigurationParameterV0Error(path="code")
@@ -823,10 +813,7 @@ def _run_v2() -> Any:
) from e
def _run_v1() -> Any:
- if "correct_answer_key" not in parameters:
- raise MissingConfigurationParameterV0Error(path="correct_answer_key")
-
- correct_answer_key = str(parameters["correct_answer_key"])
+ correct_answer_key = str(parameters.get("correct_answer_key", "correct_answer"))
if inputs is None or not isinstance(inputs, dict):
raise InvalidInputsV0Error(expected="dict", got=inputs)
@@ -888,8 +875,7 @@ async def auto_ai_critique_v0(
Returns:
Evaluation result with score from the AI
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
correct_answer_key = parameters.get("correct_answer_key")
@@ -1109,8 +1095,7 @@ def auto_starts_with_v0(
Returns:
Evaluation result with success flag
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "prefix" not in parameters:
raise MissingConfigurationParameterV0Error(path="prefix")
@@ -1158,8 +1143,7 @@ def auto_ends_with_v0(
Returns:
Evaluation result with success flag
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "suffix" not in parameters:
raise MissingConfigurationParameterV0Error(path="suffix")
@@ -1207,8 +1191,7 @@ def auto_contains_v0(
Returns:
Evaluation result with success flag
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "substring" not in parameters:
raise MissingConfigurationParameterV0Error(path="substring")
@@ -1256,8 +1239,7 @@ def auto_contains_any_v0(
Returns:
Evaluation result with success flag
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "substrings" not in parameters:
raise MissingConfigurationParameterV0Error(path="substrings")
@@ -1314,8 +1296,7 @@ def auto_contains_all_v0(
Returns:
Evaluation result with success flag
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "substrings" not in parameters:
raise MissingConfigurationParameterV0Error(path="substrings")
@@ -1414,13 +1395,9 @@ def auto_json_diff_v0(
Returns:
Evaluation result with score only (no diff explanation)
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
-
- if "correct_answer_key" not in parameters:
- raise MissingConfigurationParameterV0Error(path="correct_answer_key")
+ parameters = parameters or {}
- correct_answer_key = str(parameters["correct_answer_key"])
+ correct_answer_key = str(parameters.get("correct_answer_key", "correct_answer"))
if inputs is None or not isinstance(inputs, dict):
raise InvalidInputsV0Error(expected="dict", got=inputs)
@@ -1511,13 +1488,9 @@ def auto_levenshtein_distance_v0(
Dictionary with normalized similarity score (0 to 1),
or error message if evaluation fails.
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
- if "correct_answer_key" not in parameters:
- raise MissingConfigurationParameterV0Error(path="correct_answer_key")
-
- correct_answer_key = str(parameters["correct_answer_key"])
+ correct_answer_key = str(parameters.get("correct_answer_key", "correct_answer"))
case_sensitive = parameters.get("case_sensitive", True) is True
@@ -1616,13 +1589,9 @@ def auto_similarity_match_v0(
Returns:
Evaluation result with similarity score
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
- if "correct_answer_key" not in parameters:
- raise MissingConfigurationParameterV0Error(path="correct_answer_key")
-
- correct_answer_key = str(parameters["correct_answer_key"])
+ correct_answer_key = str(parameters.get("correct_answer_key", "correct_answer"))
case_sensitive = parameters.get("case_sensitive", True) is True
@@ -1709,13 +1678,9 @@ async def auto_semantic_similarity_v0(
Returns:
Evaluation result with cosine similarity score
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
-
- if "correct_answer_key" not in parameters:
- raise MissingConfigurationParameterV0Error(path="correct_answer_key")
+ parameters = parameters or {}
- correct_answer_key = str(parameters["correct_answer_key"])
+ correct_answer_key = str(parameters.get("correct_answer_key", "correct_answer"))
embedding_model = parameters.get("embedding_model", "text-embedding-3-small")
@@ -2143,7 +2108,7 @@ async def completion_v0(
required_keys = set(config.prompt.input_keys)
provided_keys = set(_variables.keys())
- if required_keys != provided_keys:
+ if not required_keys.issubset(provided_keys):
raise InvalidInputsV0Error(
expected=sorted(required_keys),
got=sorted(provided_keys),
@@ -2217,7 +2182,7 @@ async def chat_v0(
required_keys = set(config.prompt.input_keys) - {"messages"}
provided_keys = set(_variables.keys())
- if required_keys != provided_keys:
+ if not required_keys.issubset(provided_keys):
raise InvalidInputsV0Error(
expected=sorted(required_keys),
got=sorted(provided_keys),
@@ -2857,7 +2822,10 @@ async def code_v0(
The raw dict / str when code returns one of those.
"""
if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ raise InvalidConfigurationParametersV0Error(
+ expected="dict",
+ got=parameters,
+ )
if "code" not in parameters:
raise MissingConfigurationParameterV0Error(path="code")
@@ -2933,6 +2901,128 @@ async def config_v0(
)
+# ---------------------------------------------------------------------------
+# mock_v0 — deterministic, LLM-free, sandbox-free workflow for testing
+# ---------------------------------------------------------------------------
+#
+# A single handler that stands in for BOTH an application (invocation step,
+# returns workflow outputs) and an evaluator (annotation step, returns
+# {"score", "success"}). The behavior is selected by name so evaluations can
+# run end-to-end through the real worker without any LLM call or code sandbox.
+#
+# Parameter contract (mirrors the LLM `MOCKS[key](**kwargs)` selector pattern):
+# parameters = {"key": "", "kwargs": {...}}
+#
+# App-role selectors return outputs; evaluator-role selectors return a result.
+
+
+def _mock_echo(*, inputs=None, **_) -> Any:
+ # App-role: echo the inputs back as the workflow output.
+ return inputs or {}
+
+
+def _mock_static(*, output=None, **_) -> Any:
+ # App-role: return a fixed payload supplied via kwargs.
+ return output if output is not None else {}
+
+
+def _mock_pass(**_) -> Any:
+ # Evaluator-role: always passing result.
+ return {"score": 1.0, "success": True}
+
+
+def _mock_fail(**_) -> Any:
+ # Evaluator-role: always failing result.
+ return {"score": 0.0, "success": False}
+
+
+def _mock_score(*, score=0.0, threshold=0.5, **_) -> Any:
+ # Evaluator-role: explicit score with threshold-based success.
+ _score = float(score)
+ return {"score": _score, "success": _score >= float(threshold)}
+
+
+def _mock_error(*, message="mock_v0 error behavior", **_) -> Any:
+ # Failure path (shared by app and evaluator roles).
+ raise MockV0Error(message=str(message))
+
+
+async def _mock_delay(*, seconds=0.1, then="pass", inputs=None, **kwargs) -> Any:
+ # Sleep then defer to another (synchronous) behavior. Useful to exercise
+ # RUNNING/timing without an LLM. `then` must name a non-delay behavior.
+ await asyncio.sleep(float(seconds))
+ behavior = MOCK_V0_BEHAVIORS.get(str(then), _mock_pass)
+ if behavior is _mock_delay:
+ behavior = _mock_pass
+ return behavior(inputs=inputs, **kwargs)
+
+
+MOCK_V0_BEHAVIORS = {
+ # app-role
+ "echo": _mock_echo,
+ "static": _mock_static,
+ # evaluator-role
+ "pass": _mock_pass,
+ "fail": _mock_fail,
+ "score": _mock_score,
+ # shared
+ "error": _mock_error,
+ "delay": _mock_delay,
+}
+
+
+@instrument()
+async def mock_v0(
+ request: Optional[Data] = None,
+ revision: Optional[Data] = None,
+ inputs: Optional[Data] = None,
+ parameters: Optional[Data] = None,
+ outputs: Optional[Union[Data, str]] = None,
+ trace: Optional[Data] = None,
+ testcase: Optional[Data] = None,
+) -> Any:
+ """
+ Deterministic mock workflow (agenta:custom:mock:v0).
+
+ Selects a predefined behavior by name — no LLM, no code sandbox. Serves as
+ both an application (invocation) and an evaluator (annotation) depending on
+ the selected behavior.
+
+ Parameters:
+ key: selector name — one of MOCK_V0_BEHAVIORS
+ (echo, static, pass, fail, score, error, delay).
+ kwargs: structured args for the selected behavior (optional).
+
+ Returns:
+ The behavior's output (workflow outputs for app-role selectors, or
+ {"score", "success"} for evaluator-role selectors).
+ """
+ parameters = parameters or {}
+
+ if "key" not in parameters:
+ raise MissingConfigurationParameterV0Error(path="key")
+
+ key = str(parameters["key"])
+ if key not in MOCK_V0_BEHAVIORS:
+ raise InvalidConfigurationParameterV0Error(
+ path="key",
+ expected=list(MOCK_V0_BEHAVIORS.keys()),
+ got=key,
+ )
+
+ kwargs = parameters.get("kwargs") or {}
+ if not isinstance(kwargs, dict):
+ raise InvalidConfigurationParameterV0Error(
+ path="kwargs", expected="dict", got=kwargs
+ )
+
+ behavior = MOCK_V0_BEHAVIORS[key]
+ result = behavior(inputs=inputs, outputs=outputs, trace=trace, **kwargs)
+ if isawaitable(result):
+ result = await result
+ return result
+
+
async def match_v0(
request: Optional[Data] = None,
revision: Optional[Data] = None,
@@ -2970,8 +3060,7 @@ async def match_v0(
Returns:
{key: result_node, ..., "score": float, "success": bool} — flat result dict
"""
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
if "matchers" not in parameters:
raise MissingConfigurationParameterV0Error(path="matchers")
@@ -3461,8 +3550,7 @@ async def llm_v0(
from agenta.sdk.engines.running.errors import LLMUnavailableV0Error
# --- Validate parameters
- if parameters is None or not isinstance(parameters, dict):
- raise InvalidConfigurationParametersV0Error(expected="dict", got=parameters)
+ parameters = parameters or {}
llms = parameters.get("llms")
if not llms or not isinstance(llms, list):
diff --git a/sdks/python/agenta/sdk/engines/running/interfaces.py b/sdks/python/agenta/sdk/engines/running/interfaces.py
index b7d9a0569c..03eb6b4ed6 100644
--- a/sdks/python/agenta/sdk/engines/running/interfaces.py
+++ b/sdks/python/agenta/sdk/engines/running/interfaces.py
@@ -176,6 +176,11 @@ def llm_inputs_schema(
schemas=None,
)
+mock_v0_interface = WorkflowRevisionData(
+ uri="agenta:custom:mock:v0",
+ schemas=None,
+)
+
config_v0_interface = WorkflowRevisionData(
uri="agenta:custom:config:v0",
schemas=None,
diff --git a/sdks/python/agenta/sdk/engines/running/utils.py b/sdks/python/agenta/sdk/engines/running/utils.py
index f350dba905..da84036e5a 100644
--- a/sdks/python/agenta/sdk/engines/running/utils.py
+++ b/sdks/python/agenta/sdk/engines/running/utils.py
@@ -12,6 +12,7 @@
feedback_v0,
hook_v0,
code_v0,
+ mock_v0,
config_v0,
match_v0,
llm_v0,
@@ -43,6 +44,7 @@
feedback_v0_interface,
hook_v0_interface,
code_v0_interface,
+ mock_v0_interface,
config_v0_interface,
match_v0_interface,
llm_v0_interface,
@@ -76,6 +78,7 @@
feedback=dict(v0=feedback_v0_interface),
hook=dict(v0=hook_v0_interface),
code=dict(v0=code_v0_interface),
+ mock=dict(v0=mock_v0_interface),
snippet=dict(v0=config_v0_interface),
),
builtin=dict(
@@ -337,6 +340,7 @@ def _catalog_entry() -> dict:
hook=dict(v0=hook_v0),
snippet=dict(v0=config_v0),
code=dict(v0=code_v0),
+ mock=dict(v0=mock_v0),
),
builtin=dict(
# --- NEW URI
@@ -534,6 +538,8 @@ def infer_url_from_uri(uri: Optional[str]) -> Optional[str]:
("custom", "code"): (True, True, False),
("custom", "hook"): (True, True, False),
("custom", "feedback"): (True, True, False),
+ # agenta:custom:mock — deterministic test workflow (app + evaluator, no LLM/sandbox)
+ ("custom", "mock"): (True, True, False),
# agenta:builtin:* — application-only (not evaluators)
("builtin", "chat"): (True, False, False),
("builtin", "completion"): (True, False, False),
diff --git a/sdks/python/agenta/sdk/evaluations/metrics.py b/sdks/python/agenta/sdk/evaluations/metrics.py
index c08a035352..d9dde933b5 100644
--- a/sdks/python/agenta/sdk/evaluations/metrics.py
+++ b/sdks/python/agenta/sdk/evaluations/metrics.py
@@ -7,6 +7,42 @@
# TODO: ADD TYPES
+async def aquery_global(
+ *,
+ run_id: UUID,
+) -> Optional[EvaluationMetrics]:
+ """Read back the GLOBAL (whole-run) metric row for a run.
+
+ Mirrors `POST /evaluations/metrics/query` with the global selector
+ `scenario_ids=False, timestamps=False` — the DAO reads these bools as
+ "scenario_id IS NULL" and "timestamp IS NULL", i.e. the single aggregate row
+ (not the per-scenario/variational or temporal rows). The SDK calls this
+ after executing+refreshing to surface the run's headline metrics.
+ """
+ response = authed_api()(
+ method="POST",
+ endpoint="/evaluations/metrics/query",
+ json=dict(
+ metrics=dict(
+ run_id=str(run_id),
+ scenario_ids=False,
+ timestamps=False,
+ )
+ ),
+ )
+
+ try:
+ response.raise_for_status()
+ except Exception:
+ print(response.text)
+ raise
+
+ response = response.json()
+
+ metrics = [EvaluationMetrics(**m) for m in response.get("metrics", [])]
+ return metrics[0] if metrics else None
+
+
async def arefresh(
run_id: UUID,
scenario_id: Optional[UUID] = None,
diff --git a/sdks/python/agenta/sdk/evaluations/preview/evaluate.py b/sdks/python/agenta/sdk/evaluations/preview/evaluate.py
index 8747b294fa..87afe1a0ac 100644
--- a/sdks/python/agenta/sdk/evaluations/preview/evaluate.py
+++ b/sdks/python/agenta/sdk/evaluations/preview/evaluate.py
@@ -1,4 +1,4 @@
-from typing import Dict, List, Any, Union, Optional, Tuple
+from typing import Dict, List, Any, Union, Optional
from uuid import UUID
from copy import deepcopy
from datetime import datetime
@@ -10,17 +10,6 @@
Target,
SimpleEvaluationData,
)
-from agenta.sdk.models.shared import Link, Reference
-from agenta.sdk.models.workflows import (
- ApplicationRevision,
- EvaluatorRevision,
- WorkflowServiceRequestData,
- ApplicationServiceRequest,
- EvaluatorServiceRequest,
-)
-from agenta.sdk.models.testsets import TestsetRevision
-
-from agenta.sdk.evaluations.preview.utils import fetch_trace_data
from agenta.sdk.managers.testsets import (
acreate as acreate_testset,
@@ -35,25 +24,30 @@
aretrieve as aretrieve_evaluator,
)
from agenta.sdk.evaluations.runs import (
+ RunData,
acreate as acreate_run,
aclose as aclose_run,
aurl as aget_url,
)
from agenta.sdk.evaluations.scenarios import (
- acreate as aadd_scenario,
+ aadd as aadd_scenarios,
+ aedit_scenario,
)
from agenta.sdk.evaluations.results import (
- acreate as alog_result,
+ apopulate as apopulate_slice,
)
from agenta.sdk.evaluations.metrics import (
- arefresh as acompute_metrics,
+ arefresh,
+ aquery_global as aquery_metrics,
+)
+from agenta.sdk.evaluations.runtime.processor import process_sources
+from agenta.sdk.evaluations.runtime.executor import AsyncioEvaluationTaskRunner
+from agenta.sdk.evaluations.runtime.adapters import (
+ SDKWorkflowRunner,
)
+from agenta.sdk.evaluations.preview.utils import afetch_trace
-from agenta.sdk.decorators.running import (
- invoke_application,
- invoke_evaluator,
-)
from agenta.sdk.utils.logging import get_module_logger
@@ -169,9 +163,59 @@ async def _parse_evaluate_kwargs(
return simple_evaluation_data
-async def _upsert_entities(
+async def _resolve_testset_steps_to_revisions(
+ testset_steps: Any,
+) -> Dict[str, Origin]:
+ """Pin each testset step key to a concrete revision id.
+
+ A normalized testset step is `{id: origin}`, but `id` may be a testset id or
+ a revision id. Resolve each: try it as a revision id, fall back to a testset
+ id (latest revision). The backend persists these step refs verbatim and does
+ no JIT resolution, so this must happen before the run is created.
+ """
+ if not testset_steps or not isinstance(testset_steps, dict):
+ return testset_steps
+
+ resolved: Dict[str, Origin] = {}
+ for testset_id_str, origin in testset_steps.items():
+ try:
+ testset_uuid = UUID(str(testset_id_str))
+ except Exception:
+ continue
+
+ testset_revision = await aretrieve_testset(
+ testset_revision_id=testset_uuid,
+ )
+
+ if not testset_revision or not testset_revision.id:
+ # Fallback: treat as testset_id (latest revision)
+ testset_revision = await aretrieve_testset(
+ testset_id=testset_uuid,
+ )
+
+ if testset_revision and testset_revision.id:
+ resolved[str(testset_revision.id)] = origin
+
+ return resolved
+
+
+async def _resolve_entities(
simple_evaluation_data: SimpleEvaluationData,
) -> SimpleEvaluationData:
+ """Resolve a parsed draft into a revision-pinned SimpleEvaluationData.
+
+ The draft's `*_steps` arrive loose (a `Target`: revision ids, entity ids,
+ callables, or inline testcase data). This is THE phase that turns each into
+ a `{revision_id: origin}` dict — its postcondition is the invariant the rest
+ of the pipeline relies on: every step map is keyed by a concrete revision id.
+
+ Two mechanisms get there:
+ - mint: callable -> revision (`aupsert_*`), inline data -> testset revision
+ (`acreate_testset`); these return revision ids directly;
+ - disambiguate: a passed testset UUID may be a testset id OR a revision id,
+ so testset steps are pinned to revision ids here (no JIT resolution in
+ the backend, which persists these step refs verbatim on the run).
+ """
if simple_evaluation_data.testset_steps:
if isinstance(simple_evaluation_data.testset_steps, list):
testset_steps: Dict[str, Origin] = {}
@@ -208,6 +252,14 @@ async def _upsert_entities(
step_name="testset steps",
)
+ # Pin testset steps to revision ids. A passed UUID may be a testset id or a
+ # revision id; the backend does no JIT resolution and persists these step
+ # refs verbatim on the run, so disambiguate to revision ids here. (Apps and
+ # evaluators already resolve to revision ids above, via id or upsert.)
+ simple_evaluation_data.testset_steps = await _resolve_testset_steps_to_revisions(
+ simple_evaluation_data.testset_steps
+ )
+
if simple_evaluation_data.application_steps:
if isinstance(simple_evaluation_data.application_steps, list):
application_steps: Dict[str, Origin] = {}
@@ -289,60 +341,57 @@ async def _upsert_entities(
return simple_evaluation_data
-async def _retrieve_entities(
- simple_evaluation_data: SimpleEvaluationData,
-) -> Tuple[
- Dict[UUID, TestsetRevision],
- Dict[UUID, ApplicationRevision],
- Dict[UUID, EvaluatorRevision],
-]:
- testset_revisions: Dict[UUID, TestsetRevision] = {}
- for testset_ref, origin in simple_evaluation_data.testset_steps.items():
- testset_revision = await aretrieve_testset(
- testset_revision_id=testset_ref,
- )
-
- if not testset_revision or not testset_revision.id:
- testset_revision = await aretrieve_testset(
- testset_id=testset_ref,
- )
-
- if not testset_revision or not testset_revision.id:
- continue
-
- testset_revisions[testset_revision.id] = testset_revision
-
- application_revisions: Dict[UUID, ApplicationRevision] = {}
- for (
- application_revision_id,
- origin,
- ) in simple_evaluation_data.application_steps.items():
- application_revision = await aretrieve_application(
- application_revision_id=application_revision_id,
- )
-
- if not application_revision:
- continue
-
- application_revisions[application_revision_id] = application_revision
-
- evaluator_revisions: Dict[UUID, EvaluatorRevision] = {}
- for evaluator_revision_id, origin in simple_evaluation_data.evaluator_steps.items():
- evaluator_revision = await aretrieve_evaluator(
- evaluator_revision_id=evaluator_revision_id,
- )
+def _timestamp_suffix():
+ suffix = datetime.now().strftime("%y-%m-%d · %H:%M")
+ return f" [{suffix}]"
- if not evaluator_revision:
- continue
- evaluator_revisions[evaluator_revision_id] = evaluator_revision
+async def _prepare_run_data(
+ *,
+ name: Optional[str],
+ description: Optional[str],
+ testsets: Optional[Target],
+ applications: Optional[Target],
+ evaluators: Optional[Target],
+ repeats: Optional[int],
+ specs: Optional[Union[EvaluateSpecs, Dict[str, Any]]],
+) -> RunData:
+ """Turn the raw `evaluate()` kwargs into the `RunData` for `acreate_run`.
+
+ The full input phase:
+ 1. parse — pack the loose kwargs into a draft (`*_steps` still a `Target`:
+ ids, callables, or inline data);
+ 2. resolve — mint + disambiguate every step to a revision id, so the
+ revision-pinned invariant holds before the run is created;
+ 3. assemble — pair the resolved step maps with the timestamped run name
+ (defaulting to "SDK Eval"), description, and repeats.
+ """
+ draft = await _parse_evaluate_kwargs(
+ testsets=testsets,
+ applications=applications,
+ evaluators=evaluators,
+ repeats=repeats,
+ specs=specs,
+ )
- return testset_revisions, application_revisions, evaluator_revisions
+ simple_evaluation_data = await _resolve_entities(
+ simple_evaluation_data=draft,
+ )
+ base_name = name.strip() if isinstance(name, str) else ""
+ if not base_name:
+ base_name = "SDK Eval"
-def _timestamp_suffix():
- suffix = datetime.now().strftime("%y-%m-%d · %H:%M")
- return f" [{suffix}]"
+ return RunData(
+ name=f"{base_name}{_timestamp_suffix()}",
+ description=description,
+ #
+ testset_steps=simple_evaluation_data.testset_steps,
+ application_steps=simple_evaluation_data.application_steps,
+ evaluator_steps=simple_evaluation_data.evaluator_steps,
+ #
+ repeats=simple_evaluation_data.repeats,
+ )
UNICODE = {
@@ -370,18 +419,19 @@ async def aevaluate(
#
specs: Optional[Union[EvaluateSpecs, Dict[str, Any]]] = None,
):
- simple_evaluation_data = await _parse_evaluate_kwargs(
+ run_data = await _prepare_run_data(
+ name=name,
+ description=description,
+ #
testsets=testsets,
applications=applications,
evaluators=evaluators,
+ #
repeats=repeats,
+ #
specs=specs,
)
- simple_evaluation_data = await _upsert_entities(
- simple_evaluation_data=simple_evaluation_data,
- )
-
print()
print(
"────────────────────────────────────────────────────────────────────────────"
@@ -391,440 +441,80 @@ async def aevaluate(
"────────────────────────────────────────────────────────────────────────────"
)
- # Normalize testset_steps to revision ids (no JIT transfers in backend)
- if simple_evaluation_data.testset_steps and isinstance(
- simple_evaluation_data.testset_steps, dict
- ):
- normalized_testset_steps: Dict[str, Origin] = {}
- for testset_id_str, origin in simple_evaluation_data.testset_steps.items():
- try:
- testset_uuid = UUID(str(testset_id_str))
- except Exception:
- continue
-
- testset_revision = await aretrieve_testset(
- testset_revision_id=testset_uuid,
- )
-
- if not testset_revision or not testset_revision.id:
- # Fallback: treat as testset_id (latest revision)
- testset_revision = await aretrieve_testset(
- testset_id=testset_uuid,
- )
-
- if testset_revision and testset_revision.id:
- normalized_testset_steps[str(testset_revision.id)] = origin
-
- simple_evaluation_data.testset_steps = normalized_testset_steps
-
- suffix = _timestamp_suffix()
- base_name = name.strip() if isinstance(name, str) else ""
- if not base_name:
- base_name = "SDK Eval"
- name = f"{base_name}{suffix}"
-
run = await acreate_run(
- name=name,
- description=description,
+ name=run_data.name,
+ description=run_data.description,
#
- testset_steps=simple_evaluation_data.testset_steps,
- application_steps=simple_evaluation_data.application_steps,
- evaluator_steps=simple_evaluation_data.evaluator_steps,
+ testset_steps=run_data.testset_steps,
+ application_steps=run_data.application_steps,
+ evaluator_steps=run_data.evaluator_steps,
#
- repeats=simple_evaluation_data.repeats,
- )
-
- print(
- f"{UNICODE['here']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f" run_id={str(run.id)}",
+ repeats=run_data.repeats,
)
if not run.id:
print("[failure] could not create evaluation")
return None
- (
- testset_revisions,
- application_revisions,
- evaluator_revisions,
- ) = await _retrieve_entities(
- simple_evaluation_data=simple_evaluation_data,
+ log.info(
+ "[EVAL] run created",
+ run_id=str(run.id),
+ **({"name": run_data.name} if run_data.name else {}),
+ testsets=len(run_data.testset_steps or {}),
+ applications=len(run_data.application_steps or {}),
+ evaluators=len(run_data.evaluator_steps or {}),
+ repeats=run_data.repeats or 1,
)
- scenarios = list()
-
- metrics = dict()
-
- for testset_revision in testset_revisions.values():
- if not testset_revision.data or not testset_revision.data.testcases:
- continue
-
- testcases = testset_revision.data.testcases
-
- print(
- f"{UNICODE['next']}"
- f"{UNICODE['here']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f" testset_id={str(testset_revision.testset_id)}",
- )
-
- for testcase_idx, testcase in enumerate(testcases):
- print(
- f"{UNICODE['pipe']}"
- f"{UNICODE['pipe']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- "-----------------------"
- "--------------------------------------"
- )
-
- print(
- f"{UNICODE['pipe']}"
- f"{UNICODE['next' if testcase_idx < len(testcases) - 1 else 'last']}"
- f"{UNICODE['here']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f"testcase_id={str(testcase.id)}",
- )
-
- scenario = await aadd_scenario(
- run_id=run.id,
- )
-
- print(
- f"{UNICODE['pipe']}"
- f"{UNICODE['pipe' if testcase_idx < len(testcases) - 1 else 'skip']}"
- f"{UNICODE['next']}"
- f"{UNICODE['here']}"
- f"{UNICODE['skip']}"
- f"scenario_id={str(scenario.id)}",
- )
-
- results = dict()
-
- result = await alog_result(
- run_id=run.id,
- scenario_id=scenario.id,
- step_key="testset-" + testset_revision.slug, # type: ignore
- testcase_id=testcase.id,
- )
-
- print(
- f"{UNICODE['pipe']}"
- f"{UNICODE['pipe' if testcase_idx < len(testcases) - 1 else 'skip']}"
- f"{UNICODE['pipe']}"
- f"{UNICODE['next']}"
- f"{UNICODE['here']}"
- f" result_id={str(result.id)} (testcase)",
- )
-
- results[testset_revision.slug] = result
-
- _testcase = testcase.model_dump(
- mode="json",
- exclude_none=True,
- ) # type: ignore
- inputs = testcase.data
- if isinstance(inputs, dict):
- if "testcase_dedup_id" in inputs:
- del inputs["testcase_dedup_id"]
-
- for application_revision in application_revisions.values():
- if not application_revision or not application_revision.data:
- print("Missing or invalid application revision")
- if application_revision:
- print(application_revision.model_dump(exclude_none=True))
- continue
-
- # print(f" Application {application_revision.model_dump(exclude_none=True)}") # type: ignore
-
- references = dict(
- testset=Reference(
- id=testset_revision.testset_id,
- ),
- testset_variant=Reference(
- id=testset_revision.testset_variant_id,
- ),
- testset_revision=Reference(
- id=testset_revision.id,
- slug=testset_revision.slug,
- version=testset_revision.version,
- ),
- application=Reference(
- id=application_revision.application_id,
- ),
- application_variant=Reference(
- id=application_revision.application_variant_id,
- ),
- application_revision=Reference(
- id=application_revision.id,
- slug=application_revision.slug,
- version=application_revision.version,
- ),
- )
- links = None
-
- _revision = application_revision.model_dump(
- mode="json",
- exclude_none=True,
- )
- parameters = (
- application_revision.data.parameters
- if application_revision.data
- else None
- )
-
- _trace = None
- outputs = None
-
- workflow_service_request_data = WorkflowServiceRequestData(
- revision=_revision,
- parameters=parameters,
- #
- testcase=_testcase,
- inputs=inputs,
- #
- trace=_trace,
- outputs=outputs,
- )
-
- application_request = ApplicationServiceRequest(
- data=workflow_service_request_data,
- #
- references=references, # type: ignore
- links=links, # type: ignore
- )
-
- application_response = await invoke_application(
- request=application_request,
- )
-
- if (
- not application_response
- or not application_response.data
- or not application_response.trace_id
- ):
- print("Missing or invalid application response")
- if application_response:
- print(application_response.model_dump(exclude_none=True))
- continue
-
- trace_id = application_response.trace_id
-
- if not application_revision.slug:
- print("Missing application revision slug")
- continue
-
- application_slug = application_revision.slug
-
- trace = fetch_trace_data(trace_id, max_retries=30, delay=1.0)
-
- result = await alog_result(
- run_id=run.id,
- scenario_id=scenario.id,
- step_key="application-" + application_slug, # type: ignore
- trace_id=trace_id,
- )
-
- print(
- f"{UNICODE['pipe']}"
- f"{UNICODE['pipe' if testcase_idx < len(testcases) - 1 else 'skip']}"
- f"{UNICODE['pipe']}"
- f"{UNICODE['next']}"
- f"{UNICODE['here']}"
- f" result_id={str(result.id)} (invocation)",
- )
-
- results[application_slug] = result
-
- trace = await trace
-
- if not trace:
- print("Failed to fetch trace data for application")
- continue
-
- root_span = list(trace.get("spans", {}).values())[0]
- trace_attributes: dict = root_span.get("attributes", {})
- trace_attributes_ag: dict = trace_attributes.get("ag", {})
- trace_attributes_ag_data: dict = trace_attributes_ag.get("data", {})
- outputs = trace_attributes_ag_data.get("outputs")
- inputs = inputs or trace_attributes_ag_data.get("inputs")
-
- for i, evaluator_revision in enumerate(evaluator_revisions.values()):
- if not evaluator_revision or not evaluator_revision.data:
- print("Missing or invalid evaluator revision")
- if evaluator_revision:
- print(evaluator_revision.model_dump(exclude_none=True))
- continue
-
- references = dict(
- testset=Reference(
- id=testset_revision.testset_id,
- ),
- testset_variant=Reference(
- id=testset_revision.testset_variant_id,
- ),
- testset_revision=Reference(
- id=testset_revision.id,
- slug=testset_revision.slug,
- version=testset_revision.version,
- ),
- evaluator=Reference(
- id=evaluator_revision.evaluator_id,
- ),
- evaluator_variant=Reference(
- id=evaluator_revision.evaluator_variant_id,
- ),
- evaluator_revision=Reference(
- id=evaluator_revision.id,
- slug=evaluator_revision.slug,
- version=evaluator_revision.version,
- ),
- )
- links = (
- dict(
- invocation=Link(
- trace_id=application_response.trace_id,
- span_id=application_response.span_id,
- )
- )
- if application_response.trace_id
- and application_response.span_id
- else None
- )
-
- _revision = evaluator_revision.model_dump(
- mode="json",
- exclude_none=True,
- )
- parameters = (
- evaluator_revision.data.parameters
- if evaluator_revision.data
- else None
- )
-
- workflow_service_request_data = WorkflowServiceRequestData(
- revision=_revision,
- parameters=parameters,
- #
- testcase=_testcase,
- inputs=inputs,
- #
- trace=trace,
- outputs=outputs,
- )
-
- evaluator_request = EvaluatorServiceRequest(
- version="2025.07.14",
- #
- data=workflow_service_request_data,
- #
- references=references, # type: ignore
- links=links, # type: ignore
- )
-
- evaluator_response = await invoke_evaluator(
- request=evaluator_request,
- )
-
- if (
- not evaluator_response
- or not evaluator_response.data
- or not evaluator_response.trace_id
- ):
- print("Missing or invalid evaluator response")
- if evaluator_response:
- print(evaluator_response.model_dump(exclude_none=True))
- continue
-
- trace_id = evaluator_response.trace_id
-
- trace = fetch_trace_data(trace_id, max_retries=30, delay=1.0)
-
- result = await alog_result(
- run_id=run.id,
- scenario_id=scenario.id,
- step_key="evaluator-" + evaluator_revision.slug, # type: ignore
- trace_id=trace_id,
- )
-
- print(
- f"{UNICODE['pipe']}"
- f"{UNICODE['pipe' if testcase_idx < len(testcases) - 1 else 'skip']}"
- f"{UNICODE['pipe']}"
- f"{UNICODE['last' if (i == len(evaluator_revisions) - 1) else 'next']}"
- f"{UNICODE['here']}"
- f" result_id={str(result.id)} (annotation)",
- )
-
- results[evaluator_revision.slug] = result
-
- trace = await trace
-
- if not trace:
- print("Failed to fetch trace data for evaluator")
- continue
-
- metrics = await acompute_metrics(
- run_id=run.id,
- scenario_id=scenario.id,
- )
-
- print(
- f"{UNICODE['pipe']}"
- f"{UNICODE['pipe' if testcase_idx < len(testcases) - 1 else 'skip']}"
- f"{UNICODE['last']}"
- f"{UNICODE['here']}"
- f"{UNICODE['skip']}"
- f" metrics_id={str(metrics.id)}",
- )
+ runner = AsyncioEvaluationTaskRunner(
+ retrieve_testset=aretrieve_testset,
+ retrieve_application=aretrieve_application,
+ retrieve_evaluator=aretrieve_evaluator,
+ #
+ fetch_trace=afetch_trace,
+ #
+ add_scenarios=aadd_scenarios,
+ edit_scenario=aedit_scenario,
+ #
+ populate_slice=apopulate_slice,
+ refresh_metrics=arefresh,
+ #
+ process_sources=process_sources,
+ #
+ workflow_runner=SDKWorkflowRunner(),
+ )
- scenarios.append(
- {
- "scenario": scenario,
- "results": results,
- "metrics": metrics,
- },
- )
+ scenarios, run_status = await runner.process_run_locally(
+ run_id=run.id,
+ run_data=run_data,
+ )
- print(
- f"{UNICODE['pipe']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- "-----------------------"
- "--------------------------------------"
+ if not scenarios:
+ log.warning(
+ "[EVAL] evaluation produced no scenarios; check testset",
+ run_id=str(run.id),
)
- metrics = dict()
-
- if len(scenarios) > 0:
- metrics = await acompute_metrics(
- run_id=run.id,
- )
+ run = await aclose_run(
+ run_id=run.id,
+ status=run_status.value,
+ )
- print(
- f"{UNICODE['last']}"
- f"{UNICODE['here']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f"{UNICODE['skip']}"
- f" metrics_id={str(metrics.id)}",
- )
+ log.info(
+ "[EVAL] run closed",
+ run_id=str(run.id),
+ status=run_status.value,
+ scenarios=len(scenarios),
+ )
- run = await aclose_run(
+ # Global metrics only
+ metrics = await aquery_metrics(
run_id=run.id,
)
- run_url = await aget_url(run_id=run.id)
+ run_url = await aget_url(
+ run_id=run.id,
+ )
print(
"────────────────────────────────────────────────────────────────────────────"
diff --git a/sdks/python/agenta/sdk/evaluations/preview/utils.py b/sdks/python/agenta/sdk/evaluations/preview/utils.py
index 93fc199c66..e33ae0e0a6 100644
--- a/sdks/python/agenta/sdk/evaluations/preview/utils.py
+++ b/sdks/python/agenta/sdk/evaluations/preview/utils.py
@@ -562,7 +562,7 @@ async def display_evaluation_results(
# Fetch and process trace data using services module
try:
- trace_data = await fetch_trace_data(result.trace_id)
+ trace_data = await afetch_trace(result.trace_id)
if trace_data and "spans" in trace_data:
for span_key in trace_data["spans"].keys():
step_data = extract_trace_step_data(trace_data, span_key)
@@ -690,8 +690,8 @@ async def display_evaluation_results(
from typing import Dict, Any, Optional # noqa: E402
-async def fetch_trace_data(
- trace_id: str, max_retries: int = 3, delay: float = 1.0
+async def afetch_trace(
+ trace_id: str, max_retries: int = 30, delay: float = 1.0
) -> Optional[Dict[str, Any]]:
"""
Fetch trace data from the API with retry logic.
@@ -735,10 +735,10 @@ async def fetch_trace_data(
await asyncio.sleep(delay)
continue
else:
- print(f"Error fetching trace data: {e}")
+ print(f"Error fetching trace: {e}")
return None
- print("Failed to fetch trace data after retries")
+ print("Failed to fetch trace after retries")
return None
diff --git a/sdks/python/agenta/sdk/evaluations/results.py b/sdks/python/agenta/sdk/evaluations/results.py
index ca0aebb170..8d186367e9 100644
--- a/sdks/python/agenta/sdk/evaluations/results.py
+++ b/sdks/python/agenta/sdk/evaluations/results.py
@@ -1,4 +1,4 @@
-from typing import Optional, Dict, Any
+from typing import Optional, Dict, Any, List
from uuid import UUID
from agenta.sdk.utils.client import authed_api
@@ -7,12 +7,52 @@
# TODO: ADD TYPES
+async def apopulate(
+ *,
+ results: List[Dict[str, Any]],
+) -> List[EvaluationResult]:
+ """Bulk-write finished result cells in one call (the `populate_slice` op).
+
+ Mirrors `POST /simple/evaluations/{id}/populate`: each item is a fully-formed
+ result cell (run_id, scenario_id, step_key, repeat_idx, status, and the
+ trace_id/testcase_id/error it carries). Callers that computed cells
+ themselves (the SDK local evaluator) write them all at once here instead of
+ one `acreate` per cell. `run_id` is taken from the cells, not the path
+ builder, so every cell must carry its own.
+ """
+ if not results:
+ return []
+
+ run_ids = {r.get("run_id") for r in results}
+ if len(run_ids) != 1 or None in run_ids:
+ raise ValueError(
+ "apopulate requires all result cells to carry the same run_id."
+ )
+ run_id = run_ids.pop()
+
+ response = authed_api()(
+ method="POST",
+ endpoint=f"/simple/evaluations/{run_id}/populate",
+ json=dict(results=results),
+ )
+
+ try:
+ response.raise_for_status()
+ except:
+ print(response.text)
+ raise
+
+ response = response.json()
+
+ return [EvaluationResult(**r) for r in response.get("results", [])]
+
+
async def acreate(
*,
run_id: UUID,
scenario_id: UUID,
step_key: str,
- # repeat_idx: str,
+ repeat_idx: Optional[int] = 0,
# timestamp: datetime,
# interval: float,
#
@@ -37,7 +77,7 @@ async def acreate(
#
# interval=interval,
# timestamp=timestamp,
- # repeat_idx=repeat_idx,
+ repeat_idx=repeat_idx,
step_key=step_key,
run_id=str(run_id),
scenario_id=str(scenario_id),
diff --git a/sdks/python/agenta/sdk/evaluations/runs.py b/sdks/python/agenta/sdk/evaluations/runs.py
index af4fbf762e..f907919a93 100644
--- a/sdks/python/agenta/sdk/evaluations/runs.py
+++ b/sdks/python/agenta/sdk/evaluations/runs.py
@@ -1,11 +1,43 @@
from typing import Optional, Dict, Any
+
+from pydantic import BaseModel
from uuid import UUID
from agenta.sdk.utils.client import authed_api
-from agenta.sdk.models.evaluations import EvaluationRun, Target
+from agenta.sdk.models.evaluations import EvaluationRun, Origin, Target
import agenta as ag
+
+class RunData(BaseModel):
+ """Typed input contract for `acreate` — the RESOLVED run-creation payload.
+
+ Callers assemble a `RunData` and pass its fields to `acreate` explicitly
+ (`acreate(name=run_data.name, ...)`), keeping the create call's surface
+ visible at the call site while resolving the data in one place.
+
+ `*_steps` are typed `Dict[str, Origin]` (revision-id-keyed), NOT the loose
+ `Target` `acreate` accepts: by the time a `RunData` exists, every step is
+ resolved to a `{revision_id: origin}` map. Using `Target` here would let
+ pydantic coerce the string keys back to UUID (the `Dict[UUID, Origin]` union
+ member), which then fails to JSON-serialize.
+ """
+
+ name: Optional[str] = None
+ description: Optional[str] = None
+ #
+ flags: Optional[Dict[str, Any]] = None
+ tags: Optional[Dict[str, Any]] = None
+ meta: Optional[Dict[str, Any]] = None
+ #
+ query_steps: Optional[Dict[str, Origin]] = None
+ testset_steps: Optional[Dict[str, Origin]] = None
+ application_steps: Optional[Dict[str, Origin]] = None
+ evaluator_steps: Optional[Dict[str, Origin]] = None
+ #
+ repeats: Optional[int] = None
+
+
# TODO: ADD TYPES
@@ -100,7 +132,8 @@ async def aclose(
) -> Optional[EvaluationRun]:
response = authed_api()(
method="POST",
- endpoint=f"/evaluations/runs/{run_id}/close/{status}",
+ endpoint=f"/evaluations/runs/{run_id}/close",
+ params={"status": status} if status else None,
)
try:
diff --git a/sdks/python/agenta/sdk/evaluations/runtime/__init__.py b/sdks/python/agenta/sdk/evaluations/runtime/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/sdks/python/agenta/sdk/evaluations/runtime/adapters.py b/sdks/python/agenta/sdk/evaluations/runtime/adapters.py
new file mode 100644
index 0000000000..060654c00e
--- /dev/null
+++ b/sdks/python/agenta/sdk/evaluations/runtime/adapters.py
@@ -0,0 +1,190 @@
+from asyncio import Semaphore, gather
+from typing import Any, Dict, Optional
+
+from agenta.sdk.decorators.running import invoke_application, invoke_evaluator
+from agenta.sdk.evaluations.runtime.models import (
+ ResultLogRequest,
+ WorkflowExecutionRequest,
+ WorkflowExecutionResult,
+)
+from agenta.sdk.models.evaluations import EvaluationStatus
+from agenta.sdk.models.workflows import (
+ ApplicationServiceRequest,
+ EvaluatorServiceRequest,
+ WorkflowServiceRequestData,
+)
+
+
+class SDKWorkflowRunner:
+ """SDK adapter for executing workflow steps through local decorators.
+
+ One runner for both runnable step kinds — invocation (application) and
+ annotation (evaluator) — mirroring the API's single `APIWorkflowRunner`. It
+ branches on `request.step.type`: an application step invokes the app
+ decorator, an evaluator step the evaluator decorator. The two paths differ
+ only in which decorator they call and the request envelope; the request
+ DATA is built identically.
+ """
+
+ async def execute(
+ self,
+ request: WorkflowExecutionRequest,
+ ) -> WorkflowExecutionResult:
+ data = WorkflowServiceRequestData(
+ revision=request.revision,
+ parameters=request.parameters,
+ testcase=request.source.testcase,
+ inputs=request.source.inputs,
+ trace=request.upstream_trace,
+ outputs=request.upstream_outputs,
+ )
+
+ if request.step.type == "invocation":
+ response = await invoke_application(
+ request=ApplicationServiceRequest(
+ data=data,
+ references=request.references, # type: ignore[arg-type]
+ links=request.links, # type: ignore[arg-type]
+ )
+ )
+ else:
+ response = await invoke_evaluator(
+ request=EvaluatorServiceRequest(
+ version="2025.07.14",
+ data=data,
+ references=request.references, # type: ignore[arg-type]
+ links=request.links, # type: ignore[arg-type]
+ )
+ )
+
+ return _normalize_service_response(response)
+
+ async def execute_batch(
+ self,
+ requests: list[WorkflowExecutionRequest],
+ semaphore: Optional[Semaphore] = None,
+ ) -> list[WorkflowExecutionResult]:
+ # Concurrent, semaphore-bounded — same shape as APIWorkflowRunner. The
+ # engine passes a shared semaphore (from batch_size); honoring it here is
+ # what makes a scenario's repeats/steps run concurrently instead of
+ # serially.
+ async def _guarded(
+ request: WorkflowExecutionRequest,
+ ) -> WorkflowExecutionResult:
+ if semaphore is not None:
+ async with semaphore:
+ return await self.execute(request)
+ return await self.execute(request)
+
+ return list(await gather(*(_guarded(request) for request in requests)))
+
+
+class SDKResultSetter:
+ """Result setter that WRITES each cell live, like the API's APIResultSetter.
+
+ Aligns the SDK with the API persistence model: each finished cell is
+ populated to the backend as the engine produces it (one `populate` call per
+ cell), instead of collected and bulk-written after the slice. Writing live is
+ what lets the engine's inline per-scenario metric refresh see persisted
+ cells, so the SDK gets the SAME variational-inline + global-at-end refresh
+ shape as the API. The returned dict is what the engine remembers as the
+ cell's value.
+ """
+
+ def __init__(self, *, populate: Any) -> None:
+ self._populate = populate
+
+ async def set(self, request: ResultLogRequest) -> Dict[str, Any]:
+ cell = request.cell
+ payload = dict(
+ run_id=str(cell.run_id),
+ scenario_id=str(cell.scenario_id),
+ step_key=cell.step_key,
+ repeat_idx=cell.repeat_idx,
+ status=getattr(cell.status, "value", cell.status),
+ trace_id=request.trace_id
+ if request.trace_id is not None
+ else cell.trace_id,
+ testcase_id=str(
+ request.testcase_id
+ if request.testcase_id is not None
+ else cell.testcase_id
+ )
+ if (request.testcase_id is not None or cell.testcase_id is not None)
+ else None,
+ error=request.error if request.error is not None else cell.error,
+ )
+ await self._populate(results=[payload])
+ return payload
+
+
+class SDKScenarioEditor:
+ """Engine `edit_scenario` adapter — SDK peer of `APIScenarioEditor`.
+
+ Bridges the engine's `(scenario, status)` contract to the SDK client's
+ `aedit_scenario(scenario_id=, status=, tags=, meta=)`, carrying the
+ scenario's tags/meta through like the API adapter. The injected `edit`
+ client tolerates a run closed mid-flight (HTTP 409 -> None).
+ """
+
+ def __init__(self, *, edit: Any) -> None:
+ self._edit = edit
+
+ async def __call__(self, scenario: Any, status: Any) -> Any:
+ return await self._edit(
+ scenario_id=scenario.id,
+ status=getattr(status, "value", status),
+ tags=getattr(scenario, "tags", None),
+ meta=getattr(scenario, "meta", None),
+ )
+
+
+class SDKMetricsRefresher:
+ """Engine `refresh_metrics` adapter — SDK peer of `APIMetricsRefresher`.
+
+ The engine calls this `(run_id, scenario_id)` per scenario (variational) and
+ `(run_id, None)` once at the end (global). Wraps the injected `arefresh`
+ client; the SDK has no temporal axis, so unlike the API adapter it does not
+ handle timestamp/interval buckets.
+ """
+
+ def __init__(self, *, refresh: Any) -> None:
+ self._refresh = refresh
+
+ async def __call__(self, run_id: Any, scenario_id: Any = None) -> Any:
+ return await self._refresh(run_id, scenario_id)
+
+
+class SDKTraceFetcher:
+ """Engine `fetch_trace` adapter — SDK peer of `APITraceFetcher`.
+
+ A callable `(trace_id) -> trace | None`, wrapping the injected `afetch_trace`
+ client so the engine loads a runner's trace after a step executes.
+ """
+
+ def __init__(self, *, fetch: Any) -> None:
+ self._fetch = fetch
+
+ async def __call__(self, trace_id: str) -> Any:
+ return await self._fetch(trace_id)
+
+
+def _normalize_service_response(response: Any) -> WorkflowExecutionResult:
+ # A response with no trace_id is treated as a FAILURE on purpose: the SDK
+ # evaluation pipeline keys cache reuse, upstream-context links, and metric
+ # provenance off the produced trace, so a step that returns outputs but no
+ # trace cannot be wired into the rest of the run and is not a usable success.
+ # (If a trace-free "outputs only" success mode is ever needed, branch here on
+ # `response.data.outputs` before falling through to FAILURE.)
+ if not response or not getattr(response, "data", None) or not response.trace_id:
+ return WorkflowExecutionResult(
+ status=EvaluationStatus.FAILURE,
+ error={"message": "Missing or invalid workflow response"},
+ )
+
+ return WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id=response.trace_id,
+ span_id=getattr(response, "span_id", None),
+ outputs=getattr(response.data, "outputs", None),
+ )
diff --git a/sdks/python/agenta/sdk/evaluations/runtime/executor.py b/sdks/python/agenta/sdk/evaluations/runtime/executor.py
new file mode 100644
index 0000000000..87b604873b
--- /dev/null
+++ b/sdks/python/agenta/sdk/evaluations/runtime/executor.py
@@ -0,0 +1,527 @@
+from asyncio import Lock, Semaphore, gather
+from datetime import datetime
+from typing import Any, Awaitable, Callable, Dict, List, Optional, Protocol, Tuple
+from uuid import UUID
+
+from agenta.sdk.evaluations.runtime.adapters import (
+ SDKResultSetter,
+ SDKScenarioEditor,
+ SDKMetricsRefresher,
+ SDKTraceFetcher,
+)
+from agenta.sdk.evaluations.runtime.models import (
+ EvaluationStep,
+ PlannedCell,
+ ResolvedSourceItem,
+ ResultLogRequest,
+ WorkflowExecutionRequest,
+ WorkflowExecutionResult,
+)
+from agenta.sdk.models.shared import Reference
+from agenta.sdk.utils.logging import get_module_logger
+
+_log = get_module_logger(__name__)
+
+
+class WorkflowRunner(Protocol):
+ """Adapter boundary for application/evaluator execution.
+
+ SDK-local evaluation, API service execution, and backend-internal workflow
+ invocation should each implement this protocol instead of changing the
+ planner or topology classifier.
+ """
+
+ async def execute(
+ self,
+ request: WorkflowExecutionRequest,
+ ) -> WorkflowExecutionResult: ...
+
+
+class WorkflowBatchRunner(WorkflowRunner, Protocol):
+ """Optional batch execution boundary for any runnable workflow step."""
+
+ async def execute_batch(
+ self,
+ requests: List[WorkflowExecutionRequest],
+ semaphore: Optional[Semaphore] = None,
+ ) -> List[WorkflowExecutionResult]: ...
+
+
+async def execute_workflow_batch(
+ *,
+ runner: WorkflowRunner,
+ requests: List[WorkflowExecutionRequest],
+ semaphore: Optional[Semaphore] = None,
+) -> List[WorkflowExecutionResult]:
+ execute_batch = getattr(runner, "execute_batch", None)
+
+ async def _guarded(request: WorkflowExecutionRequest) -> WorkflowExecutionResult:
+ if semaphore is not None:
+ async with semaphore:
+ return await runner.execute(request)
+ return await runner.execute(request)
+
+ if execute_batch is not None:
+ return await execute_batch(requests, semaphore=semaphore)
+
+ return list(await gather(*(_guarded(request) for request in requests)))
+
+
+class EvaluationTaskRunner(Protocol):
+ """Generic evaluation task dispatch boundary.
+
+ SDK/local code should use an in-process asyncio implementation. API code can
+ adapt this protocol to Taskiq without Taskiq leaking into SDK runtime code.
+ """
+
+ async def process_run_from_source(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run_id: UUID,
+ newest: Optional[datetime] = None,
+ oldest: Optional[datetime] = None,
+ ) -> Any: ...
+
+ async def process_run_from_batch(
+ self,
+ *,
+ project_id: UUID,
+ user_id: UUID,
+ run_id: UUID,
+ source_kind: str,
+ trace_ids: Optional[List[str]] = None,
+ testcase_ids: Optional[List[UUID]] = None,
+ input_step_key: Optional[str] = None,
+ ) -> Any: ...
+
+
+class AsyncioEvaluationTaskRunner:
+ """In-process evaluation executor for SDK/local runs.
+
+ The SDK counterpart of the API's Taskiq worker. It mirrors the API's slice-op
+ sequence — add_scenarios -> populate -> refresh — but adapted to the SDK's
+ irreducible differences: it works by VALUE (entities already resolved in
+ `aevaluate`), executes workflows LOCALLY (the user's decorated functions, via
+ `SDKWorkflowRunner`), and runs inline with no broker.
+
+ Per testset revision the sequence is:
+
+ 1. add_scenarios — bulk-mint N skeleton scenarios (the `add_scenarios` op),
+ 2. process — ONE slice over all scenarios via the SDK engine with local
+ runners. Each cell is written live (SDKResultSetter -> populate), the
+ engine refreshes metrics inline per scenario (variational) and once at
+ the end (global), and writes each scenario's status — the SAME shape as
+ the API worker, only the runner is local.
+
+ The source processor (`process_sources`) is the same engine the API funnels
+ through; only the injected adapters (local runner) differ.
+ """
+
+ def __init__(
+ self,
+ *,
+ process_sources: Callable[..., Awaitable[List[Any]]],
+ add_scenarios: Callable[..., Awaitable[List[Any]]],
+ populate_slice: Callable[..., Awaitable[Any]],
+ refresh_metrics: Callable[..., Awaitable[Any]],
+ edit_scenario: Callable[..., Awaitable[Any]],
+ retrieve_testset: Callable[..., Awaitable[Any]],
+ retrieve_application: Callable[..., Awaitable[Any]],
+ retrieve_evaluator: Callable[..., Awaitable[Any]],
+ workflow_runner: Any,
+ fetch_trace: Any,
+ ):
+ self._process_sources = process_sources
+ self._add_scenarios = add_scenarios
+ self._populate_slice = populate_slice
+ self._refresh_metrics = refresh_metrics
+ self._edit_scenario = edit_scenario
+ self._retrieve_testset = retrieve_testset
+ self._retrieve_application = retrieve_application
+ self._retrieve_evaluator = retrieve_evaluator
+ # Stateless dispatcher (branches on step type); one shared instance is
+ # wired into every runnable step — no per-step minting needed.
+ self._workflow_runner = workflow_runner
+ self._fetch_trace = fetch_trace
+
+ def _build_steps_and_runners(
+ self,
+ *,
+ testset: Tuple[Any, Any],
+ input_step_key: str,
+ application_revisions: List[Tuple[Any, Any]],
+ evaluator_revisions: List[Tuple[Any, Any]],
+ ) -> tuple:
+ """Build the step graph + wire local runners for one testset revision.
+
+ All three entity kinds arrive as the same `(revision, origin)` shape,
+ consumed symmetrically (testset is a single pair; applications and
+ evaluators are lists of pairs). The input step carries the testset's
+ origin, the invocation step the application's, the annotation step the
+ evaluator's; only evaluators vary (auto / custom / human), and only
+ non-human runnable steps get a local runner. The one shared
+ `SDKWorkflowRunner` is wired into every runnable step; it branches on
+ step type internally.
+ """
+ testset_revision, testset_origin = testset
+ steps = [
+ EvaluationStep(
+ key=input_step_key,
+ type="input",
+ origin=testset_origin,
+ references={
+ "testset": Reference(id=testset_revision.testset_id),
+ "testset_variant": Reference(
+ id=testset_revision.testset_variant_id
+ ),
+ "testset_revision": Reference(
+ id=testset_revision.id,
+ slug=testset_revision.slug,
+ version=testset_revision.version,
+ ),
+ },
+ )
+ ]
+ runners: Dict[str, Any] = {}
+ revisions: Dict[str, Any] = {}
+
+ for application_revision, origin in application_revisions:
+ if not application_revision or not application_revision.data:
+ continue
+ application_step_key = "application-" + application_revision.slug
+ steps.append(
+ EvaluationStep(
+ key=application_step_key,
+ type="invocation",
+ origin=origin,
+ references={
+ "application": Reference(
+ id=application_revision.application_id
+ ),
+ "application_variant": Reference(
+ id=application_revision.application_variant_id,
+ ),
+ "application_revision": Reference(
+ id=application_revision.id,
+ slug=application_revision.slug,
+ version=application_revision.version,
+ ),
+ },
+ )
+ )
+ if origin != "human":
+ runners[application_step_key] = self._workflow_runner
+ revisions[application_step_key] = application_revision
+
+ for evaluator_revision, origin in evaluator_revisions:
+ if not evaluator_revision or not evaluator_revision.data:
+ continue
+ evaluator_step_key = "evaluator-" + evaluator_revision.slug
+ steps.append(
+ EvaluationStep(
+ key=evaluator_step_key,
+ type="annotation",
+ origin=origin,
+ references={
+ "evaluator": Reference(id=evaluator_revision.evaluator_id),
+ "evaluator_variant": Reference(
+ id=evaluator_revision.evaluator_variant_id,
+ ),
+ "evaluator_revision": Reference(
+ id=evaluator_revision.id,
+ slug=evaluator_revision.slug,
+ version=evaluator_revision.version,
+ ),
+ },
+ )
+ )
+ # auto + custom evaluators run locally; only human is left to the web.
+ if origin != "human":
+ runners[evaluator_step_key] = self._workflow_runner
+ revisions[evaluator_step_key] = evaluator_revision
+
+ return steps, runners, revisions
+
+ def _build_source_items(
+ self,
+ *,
+ testset_revision: Any,
+ input_step_key: str,
+ ) -> List[Any]:
+ """One hydrated source item per testcase in the revision."""
+ source_items: List[Any] = []
+ for testcase in testset_revision.data.testcases:
+ inputs = dict(testcase.data or {})
+ inputs.pop("testcase_dedup_id", None)
+ source_items.append(
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key=input_step_key,
+ references={
+ "testcase": Reference(id=testcase.id),
+ "testset": Reference(id=testset_revision.testset_id),
+ "testset_variant": Reference(
+ id=testset_revision.testset_variant_id,
+ ),
+ "testset_revision": Reference(
+ id=testset_revision.id,
+ slug=testset_revision.slug,
+ version=testset_revision.version,
+ ),
+ },
+ testcase_id=testcase.id,
+ testcase=testcase.model_dump(mode="json", exclude_none=True),
+ inputs=inputs,
+ )
+ )
+ return source_items
+
+ async def _retrieve_revisions(
+ self,
+ run_data: Any,
+ ) -> Tuple[
+ List[Tuple[Any, Any]],
+ List[Tuple[Any, Any]],
+ List[Tuple[Any, Any]],
+ ]:
+ """Fetch the revision objects for the run's step ids.
+
+ `run_data` carries revision IDS; local execution needs the revision
+ OBJECTS (slug/data/refs), so fetch them via the injected per-entity
+ retrievers — the SDK analogue of the API executor's
+ `_resolve_runners_and_revisions`. Returns `(revision, origin)` pairs per
+ kind. Testsets get the revision-id-then-testset-id fallback.
+ """
+ testset_revisions: List[Tuple[Any, Any]] = []
+ for testset_ref, origin in (run_data.testset_steps or {}).items():
+ testset_revision = await self._retrieve_testset(
+ testset_revision_id=testset_ref,
+ )
+ if not testset_revision or not testset_revision.id:
+ # Fallback: treat the id as a testset id (latest revision).
+ testset_revision = await self._retrieve_testset(
+ testset_id=testset_ref,
+ )
+ if not testset_revision or not testset_revision.id:
+ _log.warning(
+ "[EVAL] testset reference could not be retrieved; skipping",
+ testset_ref=str(testset_ref),
+ )
+ continue
+ testset_revisions.append((testset_revision, origin))
+
+ application_revisions: List[Tuple[Any, Any]] = []
+ for application_revision_id, origin in (
+ run_data.application_steps or {}
+ ).items():
+ application_revision = await self._retrieve_application(
+ application_revision_id=application_revision_id,
+ )
+ if not application_revision:
+ continue
+ application_revisions.append((application_revision, origin))
+
+ evaluator_revisions: List[Tuple[Any, Any]] = []
+ for evaluator_revision_id, origin in (run_data.evaluator_steps or {}).items():
+ evaluator_revision = await self._retrieve_evaluator(
+ evaluator_revision_id=evaluator_revision_id,
+ )
+ if not evaluator_revision:
+ continue
+ evaluator_revisions.append((evaluator_revision, origin))
+
+ return testset_revisions, application_revisions, evaluator_revisions
+
+ async def process_run_locally(
+ self,
+ *,
+ run_id: UUID,
+ run_data: Any,
+ ) -> Tuple[List[Dict[str, Any]], Any]:
+ """Run the evaluation locally via the API-mirroring slice sequence.
+
+ Takes `run_data` (revision IDS) and fetches the revision OBJECTS itself
+ (`_retrieve_revisions`, via injected retrievers) — mirroring the API
+ executor, which fetches its revisions inside `process`, not before. Per
+ testset: add_scenarios (bulk) -> ONE process_sources slice over all
+ scenarios (live cell writes, inline + global metric refresh, status
+ writes). Empty/unresolved testsets are skipped, not failed.
+ """
+ # Local import: processor.py imports from this module, so importing it at
+ # module load would be circular. The verdict→status ranking lives there
+ # so every driver shares one definition.
+ from agenta.sdk.evaluations.runtime.processor import (
+ run_status,
+ scenario_status,
+ )
+
+ (
+ testset_revisions,
+ application_revisions,
+ evaluator_revisions,
+ ) = await self._retrieve_revisions(run_data)
+ repeats = run_data.repeats
+
+ scenarios: List[Dict[str, Any]] = []
+ # Accumulate the engine's per-scenario verdicts across every slice so the
+ # run status is rolled up once via the shared `run_status` — not
+ # re-derived by the caller at close time.
+ all_processed: List[Any] = []
+
+ for testset in testset_revisions:
+ testset_revision, _origin = testset
+ if not testset_revision.data or not testset_revision.data.testcases:
+ # An empty testset produces no scenarios. Warn per-testset so a
+ # partially-empty run (some testsets have data, others don't) is
+ # still surfaced — the caller's aggregate "no scenarios" warning
+ # only fires when EVERY testset was empty.
+ _log.warning(
+ "[EVAL] testset has no testcases; skipping",
+ testset_revision_id=str(testset_revision.id),
+ )
+ continue
+
+ _log.info(
+ "[EVAL] processing testset",
+ testset_id=str(testset_revision.testset_id),
+ )
+
+ input_step_key = "testset-" + testset_revision.slug
+ steps, runners, revisions = self._build_steps_and_runners(
+ testset=testset,
+ input_step_key=input_step_key,
+ application_revisions=application_revisions,
+ evaluator_revisions=evaluator_revisions,
+ )
+ source_items = self._build_source_items(
+ testset_revision=testset_revision,
+ input_step_key=input_step_key,
+ )
+
+ # add_scenarios — bulk-mint one skeleton per source item, in order.
+ minted = await self._add_scenarios(
+ run_id=run_id,
+ count=len(source_items),
+ )
+ if len(minted) != len(source_items):
+ _log.warning(
+ "[EVAL] add_scenarios returned an unexpected count; skipping",
+ wanted=len(source_items),
+ got=len(minted),
+ testset_revision_id=str(testset_revision.id),
+ )
+ continue
+
+ # ONE slice over ALL scenarios — the design's `process_slice(all
+ # scenarios, all steps)`. The engine's internal gather + semaphore run
+ # the scenarios concurrently (bounded by batch_size), which is what
+ # makes concurrency real; an outer per-scenario loop would feed the
+ # engine one item at a time and leave the semaphore inert.
+ # Live persistence, aligned with the API: each cell is populated as
+ # the engine produces it (SDKResultSetter), so the engine's inline
+ # per-scenario metric refresh (arefresh) sees persisted cells, and
+ # the engine's end-of-slice global refresh rolls up the run — the
+ # same variational-inline + global-at-end shape as the API worker.
+ processed = await self._process_sources(
+ run_id=run_id,
+ source_items=source_items,
+ steps=steps,
+ repeats=repeats,
+ create_scenario=_PreMintedScenarios(minted),
+ set_results=SDKResultSetter(populate=self._populate_slice),
+ refresh_metrics=SDKMetricsRefresher(refresh=self._refresh_metrics),
+ edit_scenario=SDKScenarioEditor(edit=self._edit_scenario),
+ runners=runners,
+ revisions=revisions,
+ fetch_trace=SDKTraceFetcher(fetch=self._fetch_trace),
+ # The SDK evaluate() loop IS the executor for custom-origin steps.
+ execute_custom=True,
+ )
+
+ # Cells are live-written and status is written in-loop by the engine's
+ # edit_scenario adapter (same as the API), so here we only assemble
+ # the return payload.
+ for item in processed:
+ scenarios.append(
+ {
+ "scenario": item.scenario,
+ "results": item.results,
+ "metrics": item.metrics,
+ "status": scenario_status(
+ has_errors=item.has_errors,
+ has_pending=item.has_pending,
+ ),
+ }
+ )
+ all_processed.extend(processed)
+
+ # Run status rolled up once from every touched scenario (shared with the
+ # API). The caller applies it (closes the run with it); it is NOT
+ # re-derived there.
+ return scenarios, run_status(all_processed)
+
+
+class _PreMintedScenarios:
+ """`create_scenario` adapter handing back bulk-minted scenarios in order.
+
+ The engine calls `create_scenario(run_id)` once per source item; the SDK
+ minted them all up front via `add_scenarios`, so this cursor returns the next
+ pre-minted scenario instead of creating a new one — the SDK analogue of the
+ API's `_ExistingScenario` over a seed-bindings set.
+
+ Order/concurrency: the engine now runs scenarios concurrently (gather +
+ semaphore), so multiple coroutines call this. `create_scenario` is the FIRST
+ statement of the engine's `_process_one` and this body has no `await`, so
+ each task runs through the pop synchronously before reaching any real
+ suspension point — i.e. the pops happen in `source_items` order, pairing
+ scenario i with source_item i. The lock makes the index increment atomic so
+ that ordering can never degrade into a double-hand-out if scheduling shifts.
+ """
+
+ def __init__(self, scenarios: List[Any]):
+ self._scenarios = list(scenarios)
+ self._idx = 0
+ self._lock = Lock()
+
+ async def __call__(self, run_id: UUID) -> Any:
+ async with self._lock:
+ scenario = self._scenarios[self._idx]
+ self._idx += 1
+ return scenario
+
+
+class ResultSetter(Protocol):
+ """Adapter boundary for persisting planned result cells."""
+
+ async def set(self, request: ResultLogRequest) -> Any: ...
+
+
+# Adapter boundary for loading a runner's trace after a step executes: a plain
+# async callable `(trace_id) -> trace | None`. The SDK passes `afetch_trace`
+# directly; the API passes its (callable) APITraceLoader instance.
+TraceLoader = Callable[[str], Awaitable[Optional[Any]]]
+
+
+class RuntimeExecutionContext:
+ """Small mutable context shared by runner adapters while processing a scenario."""
+
+ def __init__(self) -> None:
+ self.results: Dict[str, Any] = {}
+ self.traces: Dict[str, Any] = {}
+ self.outputs: Dict[str, Any] = {}
+
+ def remember_result(self, *, cell: PlannedCell, result: Any) -> None:
+ self.results[cell.step_key] = result
+
+ def remember_execution(
+ self,
+ *,
+ cell: PlannedCell,
+ execution: WorkflowExecutionResult,
+ ) -> None:
+ if execution.trace is not None:
+ self.traces[cell.step_key] = execution.trace
+ if execution.outputs is not None:
+ self.outputs[cell.step_key] = execution.outputs
diff --git a/sdks/python/agenta/sdk/evaluations/runtime/models.py b/sdks/python/agenta/sdk/evaluations/runtime/models.py
new file mode 100644
index 0000000000..99a526dfaf
--- /dev/null
+++ b/sdks/python/agenta/sdk/evaluations/runtime/models.py
@@ -0,0 +1,129 @@
+from typing import Any, Dict, List, Literal, Optional
+from uuid import UUID
+
+from pydantic import BaseModel, ConfigDict, Field
+
+from agenta.sdk.models.evaluations import EvaluationStatus, Origin
+
+StepType = Literal["input", "invocation", "annotation"]
+SourceKind = Literal["query", "testset", "trace", "testcase", "direct"]
+TopologyStatus = Literal["supported", "potential", "not_planned", "unsupported"]
+DispatchKind = Literal[
+ "batch_query",
+ "batch_testset",
+ "batch_invocation",
+ "queue_traces",
+ "queue_testcases",
+ "live_query",
+]
+
+
+class EvaluationStep(BaseModel):
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ key: str
+ type: StepType
+ origin: Origin = "custom"
+ references: Dict[str, Any] = Field(default_factory=dict)
+ inputs: List[str] = Field(default_factory=list)
+
+
+class ResolvedSourceItem(BaseModel):
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ kind: SourceKind
+ step_key: str
+ references: Dict[str, Any] = Field(default_factory=dict)
+ trace_id: Optional[str] = None
+ span_id: Optional[str] = None
+ testcase_id: Optional[UUID] = None
+ testcase: Optional[Any] = None
+ trace: Optional[Any] = None
+ inputs: Optional[Any] = None
+ outputs: Optional[Any] = None
+
+
+class ScenarioBinding(BaseModel):
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ scenario_id: UUID
+ source: ResolvedSourceItem
+ interval: Optional[int] = None
+ timestamp: Optional[Any] = None
+
+
+class PlannedCell(BaseModel):
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ run_id: UUID
+ scenario_id: UUID
+ step_key: str
+ step_type: StepType
+ origin: Origin
+ repeat_idx: int
+ status: EvaluationStatus
+ should_execute: bool = False
+ trace_id: Optional[str] = None
+ span_id: Optional[str] = None
+ testcase_id: Optional[UUID] = None
+ error: Optional[Dict[str, Any]] = None
+
+
+class ExecutionPlan(BaseModel):
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ run_id: UUID
+ cells: List[PlannedCell]
+
+ @property
+ def executable_cells(self) -> List[PlannedCell]:
+ return [cell for cell in self.cells if cell.should_execute]
+
+
+class TopologyDecision(BaseModel):
+ status: TopologyStatus
+ label: str
+ reason: str
+ dispatch: Optional[DispatchKind] = None
+
+
+class WorkflowExecutionRequest(BaseModel):
+ """Runner-agnostic request for an application or evaluator step."""
+
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ step: EvaluationStep
+ cell: PlannedCell
+ source: ResolvedSourceItem
+ revision: Any
+ parameters: Optional[Any] = None
+ references: Dict[str, Any] = Field(default_factory=dict)
+ links: Optional[Dict[str, Any]] = None
+ upstream_trace: Optional[Any] = None
+ upstream_outputs: Optional[Any] = None
+
+
+class WorkflowExecutionResult(BaseModel):
+ """Normalized result produced by any workflow runner adapter."""
+
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ status: EvaluationStatus
+ trace_id: Optional[str] = None
+ span_id: Optional[str] = None
+ hash_id: Optional[str] = None
+ outputs: Optional[Any] = None
+ trace: Optional[Any] = None
+ error: Optional[Dict[str, Any]] = None
+
+
+class ResultLogRequest(BaseModel):
+ """Runner-agnostic request for persisting a planned result cell."""
+
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ cell: PlannedCell
+ trace_id: Optional[str] = None
+ span_id: Optional[str] = None
+ testcase_id: Optional[UUID] = None
+ error: Optional[Dict[str, Any]] = None
diff --git a/sdks/python/agenta/sdk/evaluations/runtime/planner.py b/sdks/python/agenta/sdk/evaluations/runtime/planner.py
new file mode 100644
index 0000000000..fda93ab5cb
--- /dev/null
+++ b/sdks/python/agenta/sdk/evaluations/runtime/planner.py
@@ -0,0 +1,213 @@
+from typing import List, Optional
+from uuid import UUID
+
+from agenta.sdk.evaluations.runtime.models import (
+ EvaluationStep,
+ ExecutionPlan,
+ PlannedCell,
+ ResolvedSourceItem,
+ ScenarioBinding,
+)
+from agenta.sdk.models.evaluations import EvaluationStatus
+
+
+def build_repeat_indices(repeats: Optional[int]) -> List[int]:
+ count = repeats or 1
+ if count < 1:
+ count = 1
+ return list(range(count))
+
+
+def effective_is_split(
+ *,
+ is_split: bool,
+ is_live: bool = False,
+ has_traces: bool = False,
+ has_testcases: bool = False,
+ has_application_steps: bool = False,
+ has_evaluator_steps: bool = False,
+) -> bool:
+ if is_live or has_traces or has_testcases:
+ return False
+ if not has_application_steps or not has_evaluator_steps:
+ return False
+ return is_split
+
+
+class EvaluationPlanner:
+ """Build the evaluation result tensor without knowing how steps execute."""
+
+ def plan(
+ self,
+ *,
+ run_id: UUID,
+ scenario_id: UUID,
+ source: ResolvedSourceItem,
+ steps: List[EvaluationStep],
+ repeats: Optional[int] = None,
+ is_split: bool = False,
+ is_live: bool = False,
+ has_traces: bool = False,
+ has_testcases: bool = False,
+ execute_custom: bool = False,
+ ) -> ExecutionPlan:
+ return self.plan_bindings(
+ run_id=run_id,
+ bindings=[
+ ScenarioBinding(
+ scenario_id=scenario_id,
+ source=source,
+ )
+ ],
+ steps=steps,
+ repeats=repeats,
+ is_split=is_split,
+ is_live=is_live,
+ has_traces=has_traces,
+ has_testcases=has_testcases,
+ execute_custom=execute_custom,
+ )
+
+ def plan_bindings(
+ self,
+ *,
+ run_id: UUID,
+ bindings: List[ScenarioBinding],
+ steps: List[EvaluationStep],
+ repeats: Optional[int] = None,
+ is_split: bool = False,
+ is_live: bool = False,
+ has_traces: bool = False,
+ has_testcases: bool = False,
+ execute_custom: bool = False,
+ ) -> ExecutionPlan:
+ repeat_indices = build_repeat_indices(repeats)
+
+ input_steps = [step for step in steps if step.type == "input"]
+ application_steps = [step for step in steps if step.type == "invocation"]
+ evaluator_steps = [step for step in steps if step.type == "annotation"]
+ app_repeat_indices = self._application_repeat_indices(
+ repeat_indices=repeat_indices,
+ is_split=is_split,
+ is_live=is_live,
+ has_traces=has_traces,
+ has_testcases=has_testcases,
+ has_application_steps=bool(application_steps),
+ has_evaluator_steps=bool(evaluator_steps),
+ )
+
+ cells: List[PlannedCell] = []
+
+ for binding in bindings:
+ source = binding.source
+
+ for step in input_steps:
+ cells.extend(
+ PlannedCell(
+ run_id=run_id,
+ scenario_id=binding.scenario_id,
+ step_key=step.key,
+ step_type=step.type,
+ origin=step.origin,
+ repeat_idx=repeat_idx,
+ status=EvaluationStatus.SUCCESS,
+ trace_id=source.trace_id,
+ span_id=source.span_id,
+ testcase_id=source.testcase_id,
+ )
+ for repeat_idx in repeat_indices
+ )
+
+ for step in application_steps:
+ cells.extend(
+ self._runnable_cells(
+ run_id=run_id,
+ scenario_id=binding.scenario_id,
+ source=source,
+ step=step,
+ repeat_indices=app_repeat_indices,
+ )
+ )
+
+ for step in evaluator_steps:
+ cells.extend(
+ self._runnable_cells(
+ run_id=run_id,
+ scenario_id=binding.scenario_id,
+ source=source,
+ step=step,
+ repeat_indices=repeat_indices,
+ execute_custom=execute_custom,
+ )
+ )
+
+ return ExecutionPlan(run_id=run_id, cells=cells)
+
+ def _application_repeat_indices(
+ self,
+ *,
+ repeat_indices: List[int],
+ is_split: bool,
+ is_live: bool,
+ has_traces: bool,
+ has_testcases: bool,
+ has_application_steps: bool,
+ has_evaluator_steps: bool,
+ ) -> List[int]:
+ split = effective_is_split(
+ is_split=is_split,
+ is_live=is_live,
+ has_traces=has_traces,
+ has_testcases=has_testcases,
+ has_application_steps=has_application_steps,
+ has_evaluator_steps=has_evaluator_steps,
+ )
+
+ if not has_application_steps:
+ return []
+ if not has_evaluator_steps:
+ return repeat_indices
+ if split:
+ return repeat_indices
+ return [0]
+
+ def _runnable_cells(
+ self,
+ *,
+ run_id: UUID,
+ scenario_id: UUID,
+ source: ResolvedSourceItem,
+ step: EvaluationStep,
+ repeat_indices: List[int],
+ execute_custom: bool = False,
+ ) -> List[PlannedCell]:
+ # Who executes an annotation step depends on its origin:
+ # human -> the web frontend (never executed by the runtime)
+ # auto -> the runtime host (backend worker, or SDK locally)
+ # custom -> the SDK/external client. The runtime only runs custom when
+ # it IS that client (execute_custom=True, set by the SDK
+ # evaluate() loop); the backend leaves custom alone.
+ manual_origins = {"human"} if execute_custom else {"human", "custom"}
+ is_manual_annotation = step.type == "annotation" and step.origin in (
+ manual_origins
+ )
+ status = (
+ EvaluationStatus.PENDING
+ if is_manual_annotation
+ else EvaluationStatus.QUEUED
+ )
+
+ return [
+ PlannedCell(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key=step.key,
+ step_type=step.type,
+ origin=step.origin,
+ repeat_idx=repeat_idx,
+ status=status,
+ should_execute=not is_manual_annotation,
+ testcase_id=source.testcase_id,
+ )
+ for repeat_idx in repeat_indices
+ ]
diff --git a/sdks/python/agenta/sdk/evaluations/runtime/processor.py b/sdks/python/agenta/sdk/evaluations/runtime/processor.py
new file mode 100644
index 0000000000..c6a31a8427
--- /dev/null
+++ b/sdks/python/agenta/sdk/evaluations/runtime/processor.py
@@ -0,0 +1,736 @@
+import asyncio
+from typing import Any, Awaitable, Callable, Dict, List, Mapping, Optional, Union
+from uuid import UUID
+
+from pydantic import BaseModel, ConfigDict, Field
+
+from agenta.sdk.evaluations.runtime.executor import (
+ ResultSetter,
+ TraceLoader,
+ execute_workflow_batch,
+)
+from agenta.sdk.evaluations.runtime.models import (
+ EvaluationStep,
+ PlannedCell,
+ ResolvedSourceItem,
+ ResultLogRequest,
+ WorkflowExecutionRequest,
+ WorkflowExecutionResult,
+)
+from agenta.sdk.evaluations.runtime.planner import EvaluationPlanner
+from agenta.sdk.models.evaluations import EvaluationStatus
+from agenta.sdk.utils.logging import get_logger
+
+logger = get_logger(__name__)
+
+# Default concurrency for a slice when the caller passes no explicit batch_size.
+# batch_size is None across both drivers by default (nothing sets
+# run.data.concurrency), which would leave the engine's semaphore inert and run
+# every scenario's workflows unbounded. A bounded default gives both the API and
+# the SDK the same in-slice concurrency through the shared semaphore instead of
+# dormant machinery. An explicit batch_size (e.g. from run.data.concurrency)
+# still overrides this.
+DEFAULT_BATCH_SIZE = 10
+
+
+class ProcessedScenario(BaseModel):
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ scenario: Any
+ results: Dict[str, Any] = Field(default_factory=dict)
+ metrics: Optional[Any] = None
+ has_pending: bool = False
+ has_errors: bool = False
+ auto_results_created: bool = False
+
+
+CreateScenario = Callable[[UUID], Awaitable[Any]]
+RefreshMetrics = Callable[[UUID, Optional[UUID]], Awaitable[Any]]
+PlanCellFilter = Callable[[PlannedCell], bool]
+# Per-repeat upstream context seed. Either ONE slice-wide dict (every scenario
+# gets the same seed — the simple/SDK case, usually None) OR an async callable
+# `(scenario_id) -> {repeat_idx: ctx}` resolved lazily per scenario. The
+# callable form lets a batched slice carry DIFFERENT recovered context per
+# scenario (the API re-execute path) without holding every scenario's context
+# in memory at once.
+InitialContextByRepeat = Dict[int, Dict[str, Any]]
+InitialContextSeed = Union[
+ InitialContextByRepeat,
+ Callable[[UUID], Awaitable[InitialContextByRepeat]],
+]
+# Adapter boundary for persisting a scenario's terminal status. The engine
+# computes the verdict (has_errors/has_pending) per scenario, so writing the
+# status is a property of `process` itself — every driver (API ingest,
+# API re-execute, SDK) injects its own setter rather than re-deriving status
+# in a separate post-process. A plain async `(scenario, status) -> Any`.
+EditScenario = Callable[[Any, EvaluationStatus], Awaitable[Any]]
+
+
+def scenario_status(
+ *,
+ has_errors: bool,
+ has_pending: bool,
+) -> EvaluationStatus:
+ """The terminal status of a single scenario from its touched cells.
+
+ Identical ranking on every driver: any error ranks the scenario ERRORS,
+ else any unresolved cell ranks it PENDING, else SUCCESS.
+ """
+ if has_errors:
+ return EvaluationStatus.ERRORS
+ if has_pending:
+ return EvaluationStatus.PENDING
+ return EvaluationStatus.SUCCESS
+
+
+def run_status(processed: List[ProcessedScenario]) -> EvaluationStatus:
+ """The run status rolled up from a slice's touched scenarios.
+
+ One shared rollup for every driver: ERRORS if any scenario errored, else
+ RUNNING if any is still pending (the run is not done), else SUCCESS. Drivers
+ apply this verdict in their own way — the SDK closes the run with it; the API
+ feeds it into the cross-slice floor — but the verdict itself lives here, next
+ to the per-scenario `scenario_status`, so it is computed in exactly one place.
+ """
+ if any(item.has_errors for item in processed):
+ return EvaluationStatus.ERRORS
+ if any(item.has_pending for item in processed):
+ return EvaluationStatus.RUNNING
+ return EvaluationStatus.SUCCESS
+
+
+async def process_sources(
+ *,
+ run_id: UUID,
+ source_items: List[ResolvedSourceItem],
+ steps: List[EvaluationStep],
+ repeats: Optional[int] = None,
+ create_scenario: CreateScenario,
+ set_results: ResultSetter,
+ refresh_metrics: RefreshMetrics,
+ runners: Mapping[str, Any],
+ revisions: Mapping[str, Any],
+ fetch_trace: Optional[TraceLoader] = None,
+ is_split: bool = False,
+ log_pending: bool = True,
+ refresh_metrics_without_auto_results: bool = True,
+ batch_size: Optional[int] = None,
+ max_retries: Optional[int] = None,
+ retry_delay: Optional[float] = None,
+ execute_custom: bool = False,
+ initial_context_by_repeat: Optional[InitialContextSeed] = None,
+ plan_cell_filter: Optional[PlanCellFilter] = None,
+ edit_scenario: Optional[EditScenario] = None,
+) -> List[ProcessedScenario]:
+ """Process concrete source items through the SDK-owned runtime contract.
+
+ The function is runner/persistence agnostic. SDK preview uses local
+ decorator runners and API result logging; backend code can move to this
+ shape by supplying backend DAO/workflow adapters.
+
+ batch_size controls the maximum number of concurrent invoke_workflow calls
+ across all scenarios and repeats. A single asyncio.Semaphore is shared by
+ both the scenario-level gather and the per-step repeat batch so that peak
+ concurrency equals exactly batch_size regardless of how repeats are split.
+ When the caller passes no batch_size, `DEFAULT_BATCH_SIZE` applies so the
+ slice still runs bounded-concurrent rather than unbounded — the same default
+ for both the API and the SDK driver.
+ """
+ effective_batch_size = batch_size or DEFAULT_BATCH_SIZE
+ semaphore = asyncio.Semaphore(effective_batch_size)
+ processed_lock = asyncio.Lock()
+ processed: List[ProcessedScenario] = []
+
+ logger.info(
+ "[SLICE] Starting",
+ run_id=str(run_id),
+ scenarios=len(source_items),
+ batch_size=effective_batch_size,
+ **({"max_retries": max_retries} if max_retries else {}),
+ **({"retry_delay": retry_delay} if retry_delay else {}),
+ )
+
+ async def _process_one(source_item: ResolvedSourceItem) -> None:
+ scenario = await create_scenario(run_id)
+ scenario_id = scenario.id
+
+ logger.info(
+ "[SCENARIO] Starting",
+ run_id=str(run_id),
+ scenario_id=str(scenario_id),
+ **(
+ {"testcase_id": str(source_item.testcase_id)}
+ if source_item.testcase_id
+ else {}
+ ),
+ )
+
+ plan = EvaluationPlanner().plan(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ source=source_item,
+ steps=steps,
+ repeats=repeats,
+ is_split=is_split,
+ execute_custom=execute_custom,
+ )
+ if plan_cell_filter is not None:
+ plan = plan.model_copy(
+ update={
+ "cells": [cell for cell in plan.cells if plan_cell_filter(cell)]
+ }
+ )
+ # Keyed by step_key, then repeat_idx. A step with repeats>1 produces one
+ # result per repeat; keying by step_key alone would let later repeats
+ # overwrite earlier ones, so each step maps to a {repeat_idx: result}
+ # dict. JSON-serializable (int keys) so it survives the SDK return.
+ results: Dict[str, Dict[int, Any]] = {}
+
+ def _remember(cell: PlannedCell, value: Any) -> None:
+ results.setdefault(cell.step_key, {})[cell.repeat_idx] = value
+
+ context_by_repeat = _initial_context_by_repeat(
+ source_item=source_item,
+ repeats=repeats,
+ )
+ # The seed is either a slice-wide dict (every scenario the same) or an
+ # async callable resolved lazily for THIS scenario — the batched-slice
+ # case where each scenario recovers its own upstream context.
+ seed = initial_context_by_repeat
+ if callable(seed):
+ seed = await seed(scenario_id)
+ if seed:
+ context_by_repeat.update(seed)
+ scenario_has_pending = False
+ scenario_has_errors = False
+ scenario_auto_results_created = False
+
+ idx = 0
+ while idx < len(plan.cells):
+ cell = plan.cells[idx]
+ step = _step_by_key(steps, cell.step_key)
+ if step is None:
+ idx += 1
+ continue
+
+ if cell.step_type == "input":
+ _remember(
+ cell,
+ await set_results.set(
+ ResultLogRequest(
+ cell=cell,
+ testcase_id=source_item.testcase_id,
+ trace_id=source_item.trace_id,
+ )
+ ),
+ )
+ idx += 1
+ continue
+
+ if not cell.should_execute:
+ scenario_has_pending = True
+ logger.info(
+ "[STEP] Pending",
+ run_id=str(run_id),
+ scenario_id=str(scenario_id),
+ step_key=cell.step_key,
+ repeat_idx=cell.repeat_idx,
+ )
+ if log_pending:
+ _remember(
+ cell,
+ await set_results.set(ResultLogRequest(cell=cell)),
+ )
+ idx += 1
+ continue
+
+ batch_cells = _next_runnable_batch(
+ cells=plan.cells,
+ start_idx=idx,
+ step_key=cell.step_key,
+ )
+ runner = runners.get(cell.step_key)
+ revision = revisions.get(cell.step_key)
+ if runner is None or revision is None:
+ logger.info(
+ "[STEP] Error",
+ run_id=str(run_id),
+ scenario_id=str(scenario_id),
+ step_key=cell.step_key,
+ error=f"Missing runner or revision for {cell.step_key}",
+ )
+ for batch_cell in batch_cells:
+ scenario_has_errors = True
+ _remember(
+ batch_cell,
+ await set_results.set(
+ ResultLogRequest(
+ cell=_failed_cell(
+ batch_cell,
+ message=(
+ f"Missing runner or revision for "
+ f"{batch_cell.step_key}"
+ ),
+ ),
+ error={
+ "message": (
+ f"Missing runner or revision for "
+ f"{batch_cell.step_key}"
+ )
+ },
+ )
+ ),
+ )
+ idx += len(batch_cells)
+ continue
+
+ requests = [
+ _build_execution_request(
+ cell=batch_cell,
+ step=step,
+ source_item=source_item,
+ revision=revision,
+ context_by_repeat=context_by_repeat,
+ )
+ for batch_cell in batch_cells
+ ]
+
+ executions = await _execute_with_retry(
+ runner=runner,
+ requests=requests,
+ semaphore=semaphore,
+ max_retries=max_retries,
+ retry_delay=retry_delay,
+ )
+ for batch_cell, execution in zip(batch_cells, executions):
+ if fetch_trace and execution.trace_id and execution.trace is None:
+ execution.trace = await fetch_trace(str(execution.trace_id))
+ if execution.outputs is None and execution.trace is not None:
+ execution.outputs = _extract_outputs(execution.trace)
+
+ _remember(
+ batch_cell,
+ await set_results.set(
+ ResultLogRequest(
+ cell=batch_cell,
+ trace_id=execution.trace_id,
+ span_id=execution.span_id,
+ testcase_id=source_item.testcase_id,
+ error=execution.error,
+ )
+ ),
+ )
+ scenario_auto_results_created = True
+ step_failed = bool(
+ execution.error or _is_failure_status(execution.status)
+ )
+ if step_failed:
+ scenario_has_errors = True
+ logger.info(
+ "[STEP] Done",
+ run_id=str(run_id),
+ scenario_id=str(scenario_id),
+ step_key=batch_cell.step_key,
+ repeat_idx=batch_cell.repeat_idx,
+ status=getattr(execution.status, "name", execution.status),
+ **(
+ {"trace_id": str(execution.trace_id)}
+ if execution.trace_id
+ else {}
+ ),
+ **({"error": execution.error} if step_failed else {}),
+ )
+
+ if execution.trace_id:
+ _remember_context(
+ cell=batch_cell,
+ context_by_repeat=context_by_repeat,
+ trace=execution.trace,
+ trace_id=str(execution.trace_id),
+ span_id=execution.span_id,
+ outputs=execution.outputs,
+ )
+
+ if len(executions) != len(batch_cells):
+ scenario_has_errors = True
+ message = (
+ f"Runner for {cell.step_key} returned {len(executions)} "
+ f"execution(s) for {len(batch_cells)} planned cell(s)."
+ )
+ if len(executions) < len(batch_cells):
+ # Fewer executions than cells: fail the unplanned-for cells so
+ # the mismatch is visible per cell.
+ for batch_cell in batch_cells[len(executions) :]:
+ _remember(
+ batch_cell,
+ await set_results.set(
+ ResultLogRequest(
+ cell=_failed_cell(batch_cell, message=message),
+ testcase_id=source_item.testcase_id,
+ error={"message": message},
+ )
+ ),
+ )
+ scenario_auto_results_created = True
+ else:
+ # More executions than cells: the extras have no cell and were
+ # dropped by the zip() above. Warn with their summaries so the
+ # contract violation leaves an audit trail.
+ extra_executions = executions[len(batch_cells) :]
+ logger.warning(
+ message,
+ step_key=cell.step_key,
+ planned_cells=len(batch_cells),
+ returned_executions=len(executions),
+ dropped_executions=[
+ {
+ "trace_id": str(execution.trace_id)
+ if execution.trace_id
+ else None,
+ "span_id": str(execution.span_id)
+ if execution.span_id
+ else None,
+ "status": str(execution.status),
+ "error": execution.error,
+ }
+ for execution in extra_executions
+ ],
+ )
+
+ idx += len(batch_cells)
+
+ metrics = None
+ if refresh_metrics_without_auto_results or scenario_auto_results_created:
+ try:
+ logger.info(
+ "[METRICS] Refreshing",
+ run_id=str(run_id),
+ scenario_id=str(scenario_id),
+ scope="variational",
+ )
+ metrics = await refresh_metrics(run_id, scenario_id)
+ except Exception: # pylint: disable=broad-exception-caught
+ # A metrics-refresh failure must not lose the result cells that
+ # were already written for this scenario, nor abort sibling
+ # scenarios in the gather. Mark the scenario errored and carry on.
+ logger.error(
+ "[SLICE] scenario metrics refresh failed",
+ run_id=str(run_id),
+ scenario_id=str(scenario_id),
+ exc_info=True,
+ )
+ scenario_has_errors = True
+
+ status = scenario_status(
+ has_errors=scenario_has_errors,
+ has_pending=scenario_has_pending,
+ )
+ logger.info(
+ "[SCENARIO] Complete",
+ run_id=str(run_id),
+ scenario_id=str(scenario_id),
+ status=status.name,
+ cells=len(plan.cells),
+ )
+
+ # Per-scenario status write. The verdict is known here (this scenario's
+ # touched cells), so the engine owns the write via the injected adapter
+ # — the same path for every driver, instead of a separate post-process.
+ if edit_scenario is not None:
+ await edit_scenario(scenario, status)
+
+ async with processed_lock:
+ processed.append(
+ ProcessedScenario(
+ scenario=scenario,
+ results=results,
+ metrics=metrics,
+ has_pending=scenario_has_pending,
+ has_errors=scenario_has_errors,
+ auto_results_created=scenario_auto_results_created,
+ )
+ )
+
+ async def _guarded_process_one(source_item: ResolvedSourceItem) -> None:
+ # One scenario's failure (e.g. create_scenario or an unhandled error in
+ # the loop) must not abort the whole slice. Isolate it: log and continue
+ # so sibling scenarios still run and partial results survive.
+ try:
+ await _process_one(source_item)
+ except Exception: # pylint: disable=broad-exception-caught
+ logger.error(
+ "[SLICE] scenario processing failed",
+ run_id=str(run_id),
+ step_key=source_item.step_key,
+ exc_info=True,
+ )
+
+ await asyncio.gather(*(_guarded_process_one(item) for item in source_items))
+
+ has_errors = any(item.has_errors for item in processed)
+ logger.info(
+ "[SLICE] Complete",
+ run_id=str(run_id),
+ processed=len(processed),
+ **({"has_errors": has_errors} if has_errors else {}),
+ )
+
+ if processed and (
+ refresh_metrics_without_auto_results
+ or any(item.auto_results_created for item in processed)
+ ):
+ try:
+ logger.info(
+ "[METRICS] Refreshing",
+ run_id=str(run_id),
+ scope="global",
+ )
+ await refresh_metrics(run_id, None)
+ except Exception: # pylint: disable=broad-exception-caught
+ # The run-level rollup is best-effort: every scenario already
+ # refreshed its own metrics above, and the result cells are
+ # persisted. A failure here must not discard the processed list the
+ # caller uses to finalize run status.
+ logger.error(
+ "[SLICE] run-level metrics refresh failed",
+ run_id=str(run_id),
+ exc_info=True,
+ )
+
+ return processed
+
+
+async def _execute_with_retry(
+ *,
+ runner: Any,
+ requests: List[WorkflowExecutionRequest],
+ semaphore: Optional[asyncio.Semaphore],
+ max_retries: Optional[int],
+ retry_delay: Optional[float],
+) -> List[WorkflowExecutionResult]:
+ attempts = max(1, (max_retries or 0) + 1)
+ delay = retry_delay or 0.0
+ results: List[WorkflowExecutionResult] = await execute_workflow_batch(
+ runner=runner,
+ requests=requests,
+ semaphore=semaphore,
+ )
+ for attempt in range(attempts - 1):
+ failed_indices = [
+ i for i, r in enumerate(results) if r.error or _is_failure_status(r.status)
+ ]
+ if not failed_indices:
+ break
+ logger.warning(
+ "[RETRY] Retrying failed requests",
+ attempt=attempt + 1,
+ failed=len(failed_indices),
+ total=len(requests),
+ delay=delay,
+ )
+ if delay > 0:
+ await asyncio.sleep(delay)
+ retried = await execute_workflow_batch(
+ runner=runner,
+ requests=[requests[i] for i in failed_indices],
+ semaphore=semaphore,
+ )
+ for idx, result in zip(failed_indices, retried):
+ results[idx] = result
+ return results
+
+
+def _is_failure_status(status: EvaluationStatus) -> bool:
+ # `WorkflowExecutionResult.status` is typed `EvaluationStatus`, so compare
+ # members directly rather than matching `str(status)` against literals.
+ return status in (EvaluationStatus.FAILURE, EvaluationStatus.ERRORS)
+
+
+def _step_by_key(
+ steps: List[EvaluationStep],
+ step_key: str,
+) -> Optional[EvaluationStep]:
+ for step in steps:
+ if step.key == step_key:
+ return step
+ return None
+
+
+def _initial_context_by_repeat(
+ *,
+ source_item: ResolvedSourceItem,
+ repeats: Optional[int],
+) -> Dict[int, Dict[str, Any]]:
+ if not source_item.trace and not source_item.trace_id:
+ return {}
+
+ trace = source_item.trace
+ trace_id = source_item.trace_id or _get_trace_id(trace)
+ root_span = _extract_root_span(trace)
+ span_id = source_item.span_id or _get_span_id(root_span)
+ outputs = source_item.outputs or _extract_outputs(trace)
+ if not trace_id:
+ return {}
+
+ context = {
+ "trace": trace,
+ "trace_id": str(trace_id),
+ "span_id": span_id,
+ "outputs": outputs,
+ }
+ count = repeats or 1
+ return {repeat_idx: context for repeat_idx in range(max(count, 1))}
+
+
+def _next_runnable_batch(
+ *,
+ cells: List[PlannedCell],
+ start_idx: int,
+ step_key: str,
+) -> List[PlannedCell]:
+ batch = []
+ for cell in cells[start_idx:]:
+ if not cell.should_execute or cell.step_key != step_key:
+ break
+ batch.append(cell)
+ return batch
+
+
+def _build_execution_request(
+ *,
+ cell: PlannedCell,
+ step: EvaluationStep,
+ source_item: ResolvedSourceItem,
+ revision: Any,
+ context_by_repeat: Dict[int, Dict[str, Any]],
+) -> WorkflowExecutionRequest:
+ upstream = _upstream_for_cell(
+ cell=cell,
+ context_by_repeat=context_by_repeat,
+ )
+ return WorkflowExecutionRequest(
+ step=step,
+ cell=cell,
+ source=source_item,
+ revision=_dump_revision(revision),
+ parameters=_revision_parameters(revision),
+ references={
+ **(source_item.references or {}),
+ **(step.references or {}),
+ },
+ links=upstream.get("links"),
+ upstream_trace=upstream.get("trace"),
+ upstream_outputs=upstream.get("outputs"),
+ )
+
+
+def _failed_cell(cell: PlannedCell, *, message: str) -> PlannedCell:
+ return cell.model_copy(
+ update={
+ "status": EvaluationStatus.FAILURE,
+ "error": {"message": message},
+ }
+ )
+
+
+def _dump_revision(revision: Any) -> Any:
+ if hasattr(revision, "model_dump"):
+ return revision.model_dump(mode="json", exclude_none=True)
+ return revision
+
+
+def _revision_parameters(revision: Any) -> Optional[Any]:
+ data = getattr(revision, "data", None)
+ return getattr(data, "parameters", None) if data else None
+
+
+def _upstream_for_cell(
+ *,
+ cell: PlannedCell,
+ context_by_repeat: Dict[int, Dict[str, Any]],
+) -> Dict[str, Any]:
+ context = context_by_repeat.get(cell.repeat_idx) or context_by_repeat.get(0) or {}
+ if not context:
+ return {}
+
+ trace_id = context.get("trace_id")
+ span_id = context.get("span_id")
+ links = (
+ {
+ "invocation": {
+ "trace_id": trace_id,
+ "span_id": span_id,
+ }
+ }
+ if trace_id and span_id
+ else None
+ )
+ return {
+ "links": links,
+ "trace": context.get("trace"),
+ "outputs": context.get("outputs"),
+ }
+
+
+def _remember_context(
+ *,
+ cell: PlannedCell,
+ context_by_repeat: Dict[int, Dict[str, Any]],
+ trace: Optional[Any],
+ trace_id: str,
+ span_id: Optional[str],
+ outputs: Optional[Any],
+) -> None:
+ context = {
+ "trace": trace,
+ "trace_id": trace_id,
+ "span_id": span_id,
+ "outputs": outputs,
+ }
+ context_by_repeat[cell.repeat_idx] = context
+ if cell.step_type == "invocation" and 0 not in context_by_repeat:
+ context_by_repeat[0] = context
+
+
+def _extract_outputs(trace: Any) -> Optional[Any]:
+ root_span = _extract_root_span(trace)
+ if root_span is None:
+ return None
+ attributes = (
+ root_span.get("attributes", {})
+ if isinstance(root_span, dict)
+ else getattr(root_span, "attributes", {})
+ )
+ if hasattr(attributes, "model_dump"):
+ attributes = attributes.model_dump(mode="json", exclude_none=True)
+ return attributes.get("ag", {}).get("data", {}).get("outputs")
+
+
+def _extract_root_span(trace: Any) -> Optional[Any]:
+ spans = (
+ trace.get("spans") if isinstance(trace, dict) else getattr(trace, "spans", None)
+ )
+ if not spans:
+ return None
+ root_span = next(iter(spans.values()), None) if isinstance(spans, dict) else None
+ if isinstance(root_span, list):
+ return None
+ return root_span
+
+
+def _get_trace_id(trace: Any) -> Optional[str]:
+ if isinstance(trace, dict):
+ return trace.get("trace_id")
+ trace_id = getattr(trace, "trace_id", None)
+ return str(trace_id) if trace_id else None
+
+
+def _get_span_id(root_span: Any) -> Optional[str]:
+ if root_span is None:
+ return None
+ span_id = (
+ root_span.get("span_id")
+ if isinstance(root_span, dict)
+ else getattr(root_span, "span_id", None)
+ )
+ return str(span_id) if span_id else None
diff --git a/sdks/python/agenta/sdk/evaluations/runtime/topology.py b/sdks/python/agenta/sdk/evaluations/runtime/topology.py
new file mode 100644
index 0000000000..d06d08512e
--- /dev/null
+++ b/sdks/python/agenta/sdk/evaluations/runtime/topology.py
@@ -0,0 +1,145 @@
+from typing import Iterable, List, Optional
+
+from agenta.sdk.evaluations.runtime.models import EvaluationStep, TopologyDecision
+
+
+def _has_reference(step: EvaluationStep, token: str) -> bool:
+ if any(token in str(key).lower() for key in step.references.keys()):
+ return True
+ return token in step.key.lower()
+
+
+def _input_family(step: EvaluationStep) -> Optional[str]:
+ if _has_reference(step, "query"):
+ return "query"
+ if _has_reference(step, "testset"):
+ return "testset"
+ if _has_reference(step, "trace"):
+ return "trace"
+ if _has_reference(step, "testcase"):
+ return "testcase"
+ return None
+
+
+def _steps_of_type(
+ steps: Iterable[EvaluationStep], step_type: str
+) -> List[EvaluationStep]:
+ return [step for step in steps if step.type == step_type]
+
+
+def classify_steps_topology(
+ *,
+ steps: List[EvaluationStep],
+ is_live: bool = False,
+ has_queries: bool = False,
+ has_testsets: bool = False,
+ has_traces: bool = False,
+ has_testcases: bool = False,
+ has_evaluators: bool = False,
+) -> TopologyDecision:
+ input_steps = _steps_of_type(steps, "input")
+ application_steps = _steps_of_type(steps, "invocation")
+ evaluator_steps = _steps_of_type(steps, "annotation")
+
+ input_families = {
+ family for family in (_input_family(step) for step in input_steps) if family
+ }
+ has_queries = has_queries or "query" in input_families
+ has_testsets = has_testsets or "testset" in input_families
+ has_traces = has_traces or "trace" in input_families
+ has_testcases = has_testcases or "testcase" in input_families
+ has_applications = bool(application_steps)
+ has_evaluators = has_evaluators or bool(evaluator_steps)
+
+ if has_queries and has_testsets:
+ return TopologyDecision(
+ status="not_planned",
+ label="mixed query and testset sources",
+ reason="mixed query and testset source families in one run are not planned",
+ )
+
+ if is_live and has_testsets:
+ return TopologyDecision(
+ status="not_planned",
+ label="live testset evaluation",
+ reason="live testset evaluation is not a meaningful product shape",
+ )
+
+ if len(application_steps) > 1:
+ return TopologyDecision(
+ status="not_planned",
+ label="multiple application steps",
+ reason="A/B application comparisons should use separate evaluations",
+ )
+
+ if is_live and has_queries and has_evaluators and not has_applications:
+ return TopologyDecision(
+ status="supported",
+ label="live query -> evaluator",
+ reason="live query evaluator runs keep scheduler/windowing behavior",
+ dispatch="live_query",
+ )
+
+ if has_evaluators and not has_applications:
+ if has_testcases:
+ return TopologyDecision(
+ status="supported",
+ label="direct testcases -> evaluator",
+ reason="direct testcase batches are worker-dispatched",
+ dispatch="queue_testcases",
+ )
+ if has_traces:
+ return TopologyDecision(
+ status="supported",
+ label="direct traces -> evaluator",
+ reason="direct trace batches are worker-dispatched",
+ dispatch="queue_traces",
+ )
+
+ if has_queries and has_applications:
+ return TopologyDecision(
+ status="potential",
+ label="query -> application",
+ reason=(
+ "query traces can seed application calls, but source trace links must "
+ "not be attached as application links because that would classify the "
+ "new application traces as annotations"
+ ),
+ )
+
+ if has_testsets and has_evaluators and not has_applications:
+ return TopologyDecision(
+ status="potential",
+ label="testset -> evaluator",
+ reason="non-queue testcase-only evaluator execution needs an explicit evaluator contract",
+ )
+
+ if has_queries and has_evaluators and not has_applications:
+ return TopologyDecision(
+ status="supported",
+ label="batch query -> evaluator",
+ reason="batch query evaluator runs are worker-dispatched",
+ dispatch="batch_query",
+ )
+
+ if has_testsets and has_applications and has_evaluators:
+ return TopologyDecision(
+ status="supported",
+ label="testset -> application -> evaluator",
+ reason="batch testset evaluation is worker-dispatched",
+ dispatch="batch_testset",
+ )
+
+ if has_testsets and has_applications and not has_evaluators and not has_queries:
+ return TopologyDecision(
+ status="supported",
+ label="testset -> application",
+ reason="batch inference / batch invocation is worker-dispatched",
+ dispatch="batch_invocation",
+ )
+
+ return TopologyDecision(
+ status="unsupported",
+ label="unsupported evaluation topology",
+ reason="no current worker dispatch path matches this evaluation graph",
+ )
diff --git a/sdks/python/agenta/sdk/evaluations/scenarios.py b/sdks/python/agenta/sdk/evaluations/scenarios.py
index 2b3b6e5ab1..00be347c01 100644
--- a/sdks/python/agenta/sdk/evaluations/scenarios.py
+++ b/sdks/python/agenta/sdk/evaluations/scenarios.py
@@ -1,4 +1,5 @@
-from typing import Optional, Dict, Any
+from datetime import datetime
+from typing import Optional, Dict, Any, List
from uuid import UUID
from agenta.sdk.utils.client import authed_api
@@ -7,6 +8,42 @@
# TODO: ADD TYPES
+async def aadd(
+ *,
+ run_id: UUID,
+ count: int,
+ timestamp: Optional[datetime] = None,
+) -> List[EvaluationScenario]:
+ """Bulk-mint `count` skeleton scenarios for a run (the `add_scenarios` op).
+
+ Mirrors `POST /simple/evaluations/{id}/scenarios/add`: skeleton rows with no
+ cells, returned in order so the caller can bind result cells to their ids.
+ `timestamp` buckets them on the temporal axis (live runs); None otherwise.
+ """
+ if count <= 0:
+ return []
+
+ payload: Dict[str, Any] = {"count": count}
+ if timestamp is not None:
+ payload["timestamp"] = timestamp.isoformat()
+
+ response = authed_api()(
+ method="POST",
+ endpoint=f"/simple/evaluations/{run_id}/scenarios/add",
+ json=payload,
+ )
+
+ try:
+ response.raise_for_status()
+ except:
+ print(response.text)
+ raise
+
+ response = response.json()
+
+ return [EvaluationScenario(**s) for s in response.get("scenarios", [])]
+
+
async def acreate(
*,
run_id: UUID,
@@ -46,3 +83,54 @@ async def acreate(
scenario = EvaluationScenario(**response["scenarios"][0])
return scenario
+
+
+async def aedit_scenario(
+ *,
+ scenario_id: UUID,
+ status: str,
+ tags: Optional[Dict[str, Any]] = None,
+ meta: Optional[Dict[str, Any]] = None,
+) -> Optional[EvaluationScenario]:
+ """Edit a single scenario (status, and optionally tags/meta).
+
+ Mirrors `PATCH /evaluations/scenarios/{scenario_id}` (operation
+ `edit_scenario`); the body's `scenario.id` must match the path id. Used by
+ the SDK evaluate loop's `edit_scenario` adapter to flip each scenario to its
+ computed SUCCESS/ERRORS/PENDING status after its cells are written.
+
+ Carries `tags`/`meta` like the API's `APIScenarioEditor`, and tolerates a
+ run closed mid-flight: the API returns 409 (EvaluationClosedException) for an
+ edit against a locked run — closing is a lock, not a failure, so we return
+ None rather than raising, matching the API adapter's
+ `except EvaluationClosedConflict`.
+ """
+ scenario: Dict[str, Any] = dict(
+ id=str(scenario_id),
+ status=status,
+ )
+ if tags is not None:
+ scenario["tags"] = tags
+ if meta is not None:
+ scenario["meta"] = meta
+
+ response = authed_api()(
+ method="PATCH",
+ endpoint=f"/evaluations/scenarios/{scenario_id}",
+ json=dict(scenario=scenario),
+ )
+
+ # Run closed (locked) mid-flight -> 409. Skip the write, don't raise.
+ if response.status_code == 409:
+ return None
+
+ try:
+ response.raise_for_status()
+ except Exception:
+ print(response.text)
+ raise
+
+ response = response.json()
+
+ scenario_data = response.get("scenario")
+ return EvaluationScenario(**scenario_data) if scenario_data else None
diff --git a/sdks/python/agenta/sdk/litellm/mocks/__init__.py b/sdks/python/agenta/sdk/litellm/mocks/__init__.py
index 59f3947c8b..ea7418aa4d 100644
--- a/sdks/python/agenta/sdk/litellm/mocks/__init__.py
+++ b/sdks/python/agenta/sdk/litellm/mocks/__init__.py
@@ -78,11 +78,34 @@ def capital_mock_response(*args, **kwargs) -> MockResponseModel:
)
+@instrument()
+def echo_mock_response(*args, **kwargs) -> MockResponseModel:
+ # Returns the last user message content verbatim — deterministic, useful for
+ # asserting prompt plumbing without an LLM.
+ messages = kwargs.get("messages") or []
+ content = ""
+ for message in reversed(messages):
+ if isinstance(message, dict) and message.get("role") == "user":
+ content = str(message.get("content", ""))
+ break
+ return MockResponseModel(
+ choices=[MockChoiceModel(message=MockMessageModel(content=content))],
+ )
+
+
+@instrument()
+def error_mock_response(*args, **kwargs) -> MockResponseModel:
+ # Raises to exercise the LLM failure path deterministically.
+ raise RuntimeError("mock LLM error")
+
+
MOCKS: dict[str, Callable[..., MockResponseModel]] = {
"hello": hello_mock_response,
"chat": chat_mock_response,
"delay": delay_mock_response,
"capital": capital_mock_response,
+ "echo": echo_mock_response,
+ "error": error_mock_response,
}
CAPITALS = {
diff --git a/sdks/python/agenta/sdk/managers/applications.py b/sdks/python/agenta/sdk/managers/applications.py
index f4b2ac91af..72fb59dc41 100644
--- a/sdks/python/agenta/sdk/managers/applications.py
+++ b/sdks/python/agenta/sdk/managers/applications.py
@@ -162,7 +162,7 @@ async def aupsert(
req = await application_workflow.inspect()
- simple_application_flags = SimpleApplicationFlags(**req.flags)
+ simple_application_flags = SimpleApplicationFlags(**(req.flags or {}))
simple_application_data = SimpleApplicationData(
**(
@@ -264,36 +264,6 @@ async def aupsert(
# print("Retrieve response:", retrieve_response)
if retrieve_response and retrieve_response.id and retrieve_response.application_id:
- existing_application_name = None
- try:
- with_name = await _fetch_simple_application(
- application_id=retrieve_response.application_id
- )
- except ValueError as e:
- print(
- "[WARN]: Failed to fetch existing application for name preservation; "
- f"continuing without it: {e}"
- )
- with_name = None
- if with_name:
- existing_application_name = with_name.name
-
- # TEMPORARY: API simple application edit currently rejects renaming.
- # Preserve the existing stored name when updating by slug/id so evaluate()
- # can keep syncing configuration/data without triggering rename failures.
- if (
- existing_application_name
- and name is not None
- and name != existing_application_name
- ):
- print(
- "[INFO]: Renaming applications is temporarily disabled. "
- f"Using existing application name '{existing_application_name}'."
- )
- name = existing_application_name
- elif existing_application_name and name is None:
- name = existing_application_name
-
application_id = retrieve_response.application_id
# print(" --- Updating application...", application_id)
application_edit_request = SimpleApplicationEdit(
diff --git a/sdks/python/agenta/sdk/managers/evaluators.py b/sdks/python/agenta/sdk/managers/evaluators.py
index 7c9c9e169b..0d440cc566 100644
--- a/sdks/python/agenta/sdk/managers/evaluators.py
+++ b/sdks/python/agenta/sdk/managers/evaluators.py
@@ -158,7 +158,7 @@ async def aupsert(
req = await evaluator_workflow.inspect()
- legacy_application_flags = SimpleEvaluatorFlags(**req.flags)
+ legacy_application_flags = SimpleEvaluatorFlags(**(req.flags or {}))
simple_evaluator_data = SimpleEvaluatorData(
**(
diff --git a/sdks/python/agenta/sdk/middlewares/routing/auth.py b/sdks/python/agenta/sdk/middlewares/routing/auth.py
index 3c83d8bea8..6d11d89c9a 100644
--- a/sdks/python/agenta/sdk/middlewares/routing/auth.py
+++ b/sdks/python/agenta/sdk/middlewares/routing/auth.py
@@ -142,7 +142,7 @@ async def get_credentials(
async with httpx.AsyncClient() as client:
try:
response = await client.get(
- f"{host}/api/permissions/verify",
+ f"{host}/api/access/permissions/check",
headers=headers,
cookies=cookies,
params=params,
diff --git a/sdks/python/agenta/sdk/middlewares/running/vault.py b/sdks/python/agenta/sdk/middlewares/running/vault.py
index 2c4fc0d719..5061b7879f 100644
--- a/sdks/python/agenta/sdk/middlewares/running/vault.py
+++ b/sdks/python/agenta/sdk/middlewares/running/vault.py
@@ -131,7 +131,7 @@ async def _allow_local_secrets(
):
"""
Verify if the user has permission to use local secrets.
- Makes an API call to /api/permissions/verify to check access.
+ Makes an API call to /api/access/permissions/check to check access.
"""
try:
if not _AUTH_ENABLED:
@@ -174,7 +174,7 @@ async def _allow_local_secrets(
async with httpx.AsyncClient() as client:
try:
response = await client.get(
- f"{host}/api/permissions/verify",
+ f"{host}/api/access/permissions/check",
headers=headers,
params=params,
timeout=30.0,
@@ -329,7 +329,7 @@ async def get_secrets(
try:
async with httpx.AsyncClient() as client:
response = await client.get(
- f"{api_url}/vault/v1/secrets/",
+ f"{api_url}/secrets/",
headers=headers,
)
diff --git a/sdks/python/agenta/sdk/models/evaluations.py b/sdks/python/agenta/sdk/models/evaluations.py
index 267f996fab..94479ee24c 100644
--- a/sdks/python/agenta/sdk/models/evaluations.py
+++ b/sdks/python/agenta/sdk/models/evaluations.py
@@ -42,6 +42,9 @@ class EvaluationRunFlags(BaseModel):
is_live: bool = False # Indicates if the run has live queries
is_active: bool = False # Indicates if the run is currently active
is_closed: bool = False # Indicates if the run is modifiable
+ is_queue: bool = False # Indicates this run belongs to an annotation queue
+ is_cached: bool = False # Indicates the run should reuse traces by hash
+ is_split: bool = False # Indicates repeats fan out at the application step
#
has_queries: bool = False # Indicates if the run has queries
has_testsets: bool = False # Indicates if the run has testsets
@@ -86,9 +89,10 @@ class EvaluationResult(BaseModel):
run_id: UUID
scenario_id: UUID
step_key: str
+ repeat_idx: Optional[int] = 0
testcase_id: Optional[UUID] = None
- trace_id: Optional[UUID] = None
+ trace_id: Optional[str] = None
error: Optional[dict] = None
flags: Optional[Dict[str, Any]] = None
diff --git a/sdks/python/oss/tests/legacy/new_tests/vault_router/conftest.py b/sdks/python/oss/tests/legacy/new_tests/vault_router/conftest.py
index aef2c39a57..ec4abb182f 100644
--- a/sdks/python/oss/tests/legacy/new_tests/vault_router/conftest.py
+++ b/sdks/python/oss/tests/legacy/new_tests/vault_router/conftest.py
@@ -6,7 +6,7 @@
AGENTA_HOST = os.environ.get("AGENTA_HOST", "http://localhost")
-API_BASE_URL = f"{AGENTA_HOST}/api/vault/v1/"
+API_BASE_URL = f"{AGENTA_HOST}/api/"
@pytest.fixture
diff --git a/sdks/python/oss/tests/pytest/acceptance/evaluations/test_evaluate_flow.py b/sdks/python/oss/tests/pytest/acceptance/evaluations/test_evaluate_flow.py
new file mode 100644
index 0000000000..b8cc5d8f24
--- /dev/null
+++ b/sdks/python/oss/tests/pytest/acceptance/evaluations/test_evaluate_flow.py
@@ -0,0 +1,182 @@
+"""
+End-to-end acceptance tests for the high-level evaluate() entrypoint
+(`agenta.sdk.evaluations.aevaluate`).
+
+aevaluate() is a CLIENT-SIDE orchestrator: it upserts the testset/application/
+evaluator, creates a run, builds the input/invocation/annotation step graph,
+executes the slice IN-PROCESS via the SDK local runners, computes metrics, and
+closes the run — returning {run, scenarios, metrics}. No worker is involved.
+
+These run against the live API (acceptance) using deterministic, LLM-free
+handlers, so they exercise the real upsert + run + local-execution path.
+
+Coverage:
+ - local-callable mode (handlers passed directly) across the config matrix:
+ single auto evaluator, repeats, multiple evaluators;
+ - saved-workflow mode once: the application is the saved agenta:custom:mock:v0
+ workflow referenced by revision id.
+
+We do not re-run the whole matrix through both modes — the matrix runs through
+local-callable mode; saved-workflow mode gets a single wiring test.
+"""
+
+from uuid import uuid4
+
+import pytest
+
+import agenta as ag
+from agenta.sdk.evaluations import aevaluate
+from agenta.sdk.managers import testsets, applications
+
+pytestmark = [pytest.mark.acceptance, pytest.mark.asyncio]
+
+MOCK_URI = "agenta:custom:mock:v0"
+
+
+@ag.workflow(uri=MOCK_URI, parameters={"key": "echo", "kwargs": {}})
+def mock_app():
+ """Saved-workflow handle pointing at the deterministic agenta:custom:mock:v0
+ workflow (echo selector). Registered as an application via its URI."""
+
+
+# --- deterministic, LLM-free local handlers --------------------------------
+
+
+@ag.application()
+def echo_app(topic: str = "") -> dict:
+ """A trivial deterministic application: echoes the input."""
+ return {"answer": topic}
+
+
+@ag.evaluator()
+def pass_evaluator(answer: str = "", **kwargs) -> dict:
+ """A deterministic evaluator that always passes."""
+ return {"score": 1.0, "success": True}
+
+
+@ag.evaluator()
+def length_evaluator(answer: str = "", **kwargs) -> dict:
+ """A deterministic evaluator scoring by output length."""
+ return {"score": float(len(answer or "")), "success": True}
+
+
+async def _make_testset():
+ name = f"sdk-eval-flow-{uuid4().hex[:8]}"
+ rev = await testsets.aupsert(
+ name=name,
+ data=[
+ {"topic": "alpha"},
+ {"topic": "beta"},
+ ],
+ )
+ assert rev is not None and rev.testset_id
+ return rev
+
+
+def _assert_eval_result(result, *, expected_scenarios):
+ assert result is not None, "aevaluate returned None"
+ assert set(result.keys()) == {"run", "scenarios", "metrics"}
+ assert result["run"] is not None and result["run"].id
+ assert len(result["scenarios"]) == expected_scenarios
+
+
+def _metrics_data(result):
+ m = result["metrics"]
+ return getattr(m, "data", None) or {}
+
+
+def _assert_evaluator_metrics_present(result):
+ # The evaluator must actually be EXECUTED by the SDK runtime (custom origin),
+ # so its outputs land in the run metrics. Before the custom-execution fix the
+ # evaluator step was skipped (logged pending, trace_id=None) and produced no
+ # metrics — this assertion guards that regression.
+ data = _metrics_data(result)
+ evaluator_steps = {k: v for k, v in data.items() if k.startswith("evaluator-")}
+ assert evaluator_steps, f"no evaluator metrics in run metrics: {list(data.keys())}"
+ # at least one evaluator step exposes its scored output
+ assert any(
+ any("ag.data.outputs.score" in path for path in v)
+ for v in evaluator_steps.values()
+ ), f"evaluator metrics present but no score output: {evaluator_steps}"
+
+
+class TestEvaluateLocalCallable:
+ async def test_basic_testset_app_auto_evaluator(self, agenta_init):
+ rev = await _make_testset()
+ result = await aevaluate(
+ name="sdk-eval-basic",
+ testsets={str(rev.id): "custom"},
+ applications=[echo_app],
+ evaluators=[pass_evaluator],
+ )
+ # 2 testcases x 1 repeat = 2 scenarios
+ _assert_eval_result(result, expected_scenarios=2)
+ # the custom (SDK-run) evaluator must actually execute and yield metrics
+ _assert_evaluator_metrics_present(result)
+
+ async def test_with_repeats(self, agenta_init):
+ rev = await _make_testset()
+ result = await aevaluate(
+ name="sdk-eval-repeats",
+ testsets={str(rev.id): "custom"},
+ applications=[echo_app],
+ evaluators=[pass_evaluator],
+ repeats=2,
+ )
+ # repeats fan out at the scenario/cell level; still one scenario per
+ # testcase row (2), each carrying repeated cells.
+ _assert_eval_result(result, expected_scenarios=2)
+
+ async def test_multiple_evaluators(self, agenta_init):
+ rev = await _make_testset()
+ result = await aevaluate(
+ name="sdk-eval-multi",
+ testsets={str(rev.id): "custom"},
+ applications=[echo_app],
+ evaluators=[pass_evaluator, length_evaluator],
+ )
+ _assert_eval_result(result, expected_scenarios=2)
+ _assert_evaluator_metrics_present(result)
+
+ async def test_specs_dict_equivalent_to_kwargs(self, agenta_init):
+ rev = await _make_testset()
+ result = await aevaluate(
+ name="sdk-eval-specs",
+ specs={
+ "testsets": {str(rev.id): "custom"},
+ "applications": [echo_app],
+ "evaluators": [pass_evaluator],
+ },
+ )
+ _assert_eval_result(result, expected_scenarios=2)
+
+ async def test_missing_evaluators_raises(self, agenta_init):
+ rev = await _make_testset()
+ with pytest.raises(ValueError, match="missing evaluators"):
+ await aevaluate(
+ name="sdk-eval-bad",
+ testsets={str(rev.id): "custom"},
+ applications=[echo_app],
+ )
+
+
+class TestEvaluateSavedWorkflow:
+ async def test_saved_mock_workflow_application(self, agenta_init):
+ # Saved-workflow mode: register the agenta:custom:mock:v0 workflow as an
+ # application revision, then reference it by revision id in aevaluate.
+ rev = await _make_testset()
+
+ app_revision_id = await applications.aupsert(
+ application_slug=f"mock-app-{uuid4().hex[:8]}",
+ name="Mock App",
+ handler=mock_app,
+ )
+ assert app_revision_id is not None
+
+ result = await aevaluate(
+ name="sdk-eval-saved",
+ testsets={str(rev.id): "custom"},
+ applications={str(app_revision_id): "custom"},
+ evaluators=[pass_evaluator],
+ )
+ _assert_eval_result(result, expected_scenarios=2)
diff --git a/sdks/python/oss/tests/pytest/acceptance/integrations/test_vault_secrets.py b/sdks/python/oss/tests/pytest/acceptance/integrations/test_vault_secrets.py
index d99a8db3fa..8d5cfc8a7a 100644
--- a/sdks/python/oss/tests/pytest/acceptance/integrations/test_vault_secrets.py
+++ b/sdks/python/oss/tests/pytest/acceptance/integrations/test_vault_secrets.py
@@ -2,7 +2,7 @@
Integration tests for Vault/Secrets functionality.
These tests verify:
-1. Permissions verification via access_control.verify_permissions()
+1. Permissions verification via access.verify_permissions()
2. Secrets CRUD via secrets.list_secrets(), create_secret(), read_secret(), delete_secret()
The vault middleware uses these endpoints during workflow execution to:
@@ -13,6 +13,7 @@
import time
import pytest
+import requests
import agenta as ag
from agenta.client.types import (
@@ -53,26 +54,28 @@ def _wait_for_secret_ids(
class TestAccessControlPermissions:
"""Test access control permission verification."""
- @pytest.mark.xfail(
- reason=(
- "/permissions router is mounted with include_in_schema=False, "
- "so Fern does not generate ag.api.access_control. Either flip the "
- "schema flag and regenerate the client, or rewrite this test "
- "against the raw HTTP endpoint."
- ),
- strict=True,
- )
- def test_verify_permissions_for_local_secrets(self, agenta_init):
+ @staticmethod
+ def _check_permissions(*, e2e_account):
+ response = requests.get(
+ f"{e2e_account['api_url']}/access/permissions/check",
+ headers={"Authorization": e2e_account["credentials"]},
+ params={
+ "action": "view_secret",
+ "resource_type": "local_secrets",
+ },
+ timeout=30,
+ )
+ response.raise_for_status()
+ return response.json()
+
+ def test_verify_permissions_for_local_secrets(self, agenta_init, e2e_account):
"""
- Test that verify_permissions works for local_secrets resource.
+ Test that the permission check endpoint works for local_secrets resource.
This is the same call the vault middleware makes to check if
a user can use local (env var) secrets during workflow execution.
"""
- result = ag.api.access_control.verify_permissions(
- action="view_secret",
- resource_type="local_secrets",
- )
+ result = self._check_permissions(e2e_account=e2e_account)
# The response should indicate the permission effect
assert result is not None
@@ -81,23 +84,13 @@ def test_verify_permissions_for_local_secrets(self, agenta_init):
# Effect should be "allow" or "deny"
assert result["effect"] in ("allow", "deny")
- @pytest.mark.xfail(
- reason=(
- "/permissions router is mounted with include_in_schema=False, "
- "so Fern does not generate ag.api.access_control. Either flip the "
- "schema flag and regenerate the client, or rewrite this test "
- "against the raw HTTP endpoint."
- ),
- strict=True,
- )
- def test_verify_permissions_returns_allow_for_valid_user(self, agenta_init):
+ def test_verify_permissions_returns_allow_for_valid_user(
+ self, agenta_init, e2e_account
+ ):
"""
Test that a valid API key gets 'allow' effect for view_secret.
"""
- result = ag.api.access_control.verify_permissions(
- action="view_secret",
- resource_type="local_secrets",
- )
+ result = self._check_permissions(e2e_account=e2e_account)
assert result is not None
# A valid API key should have permission to view secrets
diff --git a/sdks/python/oss/tests/pytest/acceptance/workflows/test_apps_shared_manager.py b/sdks/python/oss/tests/pytest/acceptance/workflows/test_apps_shared_manager.py
index 5b6f820c33..68ef2c8623 100644
--- a/sdks/python/oss/tests/pytest/acceptance/workflows/test_apps_shared_manager.py
+++ b/sdks/python/oss/tests/pytest/acceptance/workflows/test_apps_shared_manager.py
@@ -141,15 +141,12 @@ def test_list_apps_contains_created_app(self, agenta_init, test_app):
f"Created app {test_app['app_id']} should be in the list"
)
- @pytest.mark.xfail(reason="TEMPORARY: Renaming applications is disabled in the API")
def test_update_app(self, agenta_init, test_app):
"""Test updating an app via AppManager.update()."""
new_slug = generate_unique_slug("updated")
_result = AppManager.update(app_id=test_app["app_id"], app_slug=new_slug)
- # update() may return None or the updated app
- # The important thing is it doesn't raise an exception
assert _result is None or hasattr(_result, "app_id")
def test_delete_app(self, agenta_init):
@@ -240,13 +237,11 @@ async def test_alist_apps(self, agenta_init):
assert_not_none(result, "alist() should return a response")
assert isinstance(result, list), "alist() should return a list"
- @pytest.mark.xfail(reason="TEMPORARY: Renaming applications is disabled in the API")
async def test_aupdate_app(self, agenta_init, test_app):
"""Test updating an app via AppManager.aupdate()."""
new_slug = generate_unique_slug("async-updated")
_result = await AppManager.aupdate(app_id=test_app["app_id"], app_slug=new_slug)
- # Update may return None or the updated app
assert _result is None or hasattr(_result, "app_id")
async def test_adelete_app(self, agenta_init):
diff --git a/sdks/python/oss/tests/pytest/integration/__init__.py b/sdks/python/oss/tests/pytest/integration/__init__.py
new file mode 100644
index 0000000000..a26504824f
--- /dev/null
+++ b/sdks/python/oss/tests/pytest/integration/__init__.py
@@ -0,0 +1 @@
+# Integration tests package
diff --git a/sdks/python/oss/tests/pytest/integration/conftest.py b/sdks/python/oss/tests/pytest/integration/conftest.py
new file mode 100644
index 0000000000..202af977f8
--- /dev/null
+++ b/sdks/python/oss/tests/pytest/integration/conftest.py
@@ -0,0 +1,2 @@
+# Integration tests wire multiple SDK modules together with the network
+# boundary mocked. No live services required (unlike acceptance/).
diff --git a/sdks/python/oss/tests/pytest/integration/test_evaluate_orchestration.py b/sdks/python/oss/tests/pytest/integration/test_evaluate_orchestration.py
new file mode 100644
index 0000000000..64b4022ed5
--- /dev/null
+++ b/sdks/python/oss/tests/pytest/integration/test_evaluate_orchestration.py
@@ -0,0 +1,232 @@
+"""
+Integration-level tests for the aevaluate() orchestration.
+
+These exercise the real SDK orchestration in agenta.sdk.evaluations.preview.evaluate
+(spec parsing, entity retrieval, step-graph construction, runner wiring, result
+assembly) with the network boundary and the slice processor mocked. They verify
+that aevaluate():
+
+ - builds the input/invocation/annotation step graph with the right keys + origins,
+ - wires a local application runner and (for auto evaluators) a local evaluator
+ runner, but NOT a runner for human evaluators,
+ - forwards repeats and the resolved source_items to the processor,
+ - assembles {run, scenarios, metrics} from the processed scenarios.
+
+The runtime processor itself is unit-tested separately (test_evaluations_runtime);
+here it is mocked so these tests stay deterministic and free of execution timing.
+"""
+
+import asyncio
+from types import SimpleNamespace
+from unittest.mock import AsyncMock, patch
+from uuid import uuid4
+
+import pytest
+
+import agenta.sdk.evaluations.preview.evaluate as ev
+from agenta.sdk.evaluations.runtime.adapters import (
+ SDKWorkflowRunner,
+)
+
+pytestmark = pytest.mark.integration
+
+MOD = "agenta.sdk.evaluations.preview.evaluate"
+
+
+def run(coro):
+ return asyncio.run(coro)
+
+
+def _testcase(data):
+ return SimpleNamespace(
+ id=uuid4(),
+ data=data,
+ model_dump=lambda **kw: {"data": data},
+ )
+
+
+def _testset_revision(*, slug="t1", testcases):
+ return SimpleNamespace(
+ id=uuid4(),
+ slug=slug,
+ version="1",
+ testset_id=uuid4(),
+ testset_variant_id=uuid4(),
+ data=SimpleNamespace(testcases=testcases),
+ )
+
+
+def _application_revision(*, slug="app1"):
+ return SimpleNamespace(
+ id=uuid4(),
+ slug=slug,
+ version="1",
+ application_id=uuid4(),
+ application_variant_id=uuid4(),
+ data=SimpleNamespace(),
+ )
+
+
+def _evaluator_revision(*, slug="ev1"):
+ return SimpleNamespace(
+ id=uuid4(),
+ slug=slug,
+ version="1",
+ evaluator_id=uuid4(),
+ evaluator_variant_id=uuid4(),
+ data=SimpleNamespace(),
+ )
+
+
+def _patch_io(*, testset_revision, application_revision, evaluator_revision, captured):
+ """Patch every network/IO boundary aevaluate() uses, and capture the
+ process_sources kwargs. Returns a context-manager list.
+
+ The flow runs process_sources ONCE per testset over all source items —
+ `captured["process_kwargs"]` holds the most recent call and
+ `captured["process_calls"]` holds every call's kwargs.
+ """
+ run_obj = SimpleNamespace(id=uuid4())
+ captured["process_calls"] = []
+
+ async def fake_process(**kwargs):
+ captured["process_kwargs"] = kwargs
+ captured["process_calls"].append(kwargs)
+ # Return one processed scenario per source item.
+ return [
+ SimpleNamespace(
+ scenario=SimpleNamespace(id=uuid4()),
+ results={},
+ metrics={"score": 1.0},
+ has_errors=False,
+ has_pending=False,
+ )
+ for _ in kwargs["source_items"]
+ ]
+
+ async def fake_add_scenarios(*, run_id, count, timestamp=None):
+ return [SimpleNamespace(id=uuid4()) for _ in range(count)]
+
+ # aevaluate queries the GLOBAL aggregate metric at end-of-run; the SDK
+ # client (aquery_global) asks the API for that single row and returns it.
+ global_metric = SimpleNamespace(
+ scenario_id=None, timestamp=None, data={"score": 1.0}
+ )
+
+ return [
+ patch(f"{MOD}.acreate_run", AsyncMock(return_value=run_obj)),
+ patch(f"{MOD}.aclose_run", AsyncMock(return_value=run_obj)),
+ patch(f"{MOD}.aget_url", AsyncMock(return_value="http://x/run")),
+ patch(f"{MOD}.aadd_scenarios", fake_add_scenarios),
+ patch(f"{MOD}.apopulate_slice", AsyncMock(return_value=[])),
+ patch(f"{MOD}.arefresh", AsyncMock(return_value=None)),
+ patch(f"{MOD}.aedit_scenario", AsyncMock(return_value=None)),
+ patch(f"{MOD}.aquery_metrics", AsyncMock(return_value=global_metric)),
+ patch(f"{MOD}.aretrieve_testset", AsyncMock(return_value=testset_revision)),
+ patch(
+ f"{MOD}.aretrieve_application",
+ AsyncMock(return_value=application_revision),
+ ),
+ patch(
+ f"{MOD}.aretrieve_evaluator",
+ AsyncMock(return_value=evaluator_revision),
+ ),
+ patch(f"{MOD}.process_sources", fake_process),
+ ]
+
+
+def _evaluate(*, evaluators, repeats=None, testcases=None):
+ captured = {}
+ tsr = _testset_revision(
+ testcases=testcases or [_testcase({"q": "a"}), _testcase({"q": "b"})]
+ )
+ appr = _application_revision()
+ evr = _evaluator_revision()
+
+ patches = _patch_io(
+ testset_revision=tsr,
+ application_revision=appr,
+ evaluator_revision=evr,
+ captured=captured,
+ )
+ for p in patches:
+ p.start()
+ try:
+ result = run(
+ ev.aevaluate(
+ testsets={str(tsr.id): "custom"},
+ applications={str(appr.id): "custom"},
+ evaluators=evaluators,
+ repeats=repeats,
+ )
+ )
+ finally:
+ for p in patches:
+ p.stop()
+ return result, captured, (tsr, appr, evr)
+
+
+class TestAevaluateOrchestration:
+ def test_builds_step_graph_and_returns_run_scenarios_metrics(self):
+ _, captured, (tsr, appr, evr) = _evaluate(evaluators={str(uuid4()): "auto"})
+
+ steps = captured["process_kwargs"]["steps"]
+ kinds = [(s.key, s.type, s.origin) for s in steps]
+
+ # input (testset) + invocation (application) + annotation (evaluator)
+ types = [t for _, t, _ in kinds]
+ assert "input" in types
+ assert "invocation" in types
+ assert "annotation" in types
+
+ # input step key derives from the testset slug, invocation from app slug
+ assert any(k.startswith("testset-") and t == "input" for k, t, _ in kinds)
+ assert any(
+ k == f"application-{appr.slug}" and t == "invocation" for k, t, _ in kinds
+ )
+ assert any(
+ k == f"evaluator-{evr.slug}" and t == "annotation" for k, t, _ in kinds
+ )
+
+ def test_auto_evaluator_gets_local_runner(self):
+ _, captured, (_tsr, appr, evr) = _evaluate(evaluators={str(uuid4()): "auto"})
+ runners = captured["process_kwargs"]["runners"]
+
+ # one shared SDKWorkflowRunner is wired into both runnable step kinds
+ # (it branches on step type internally).
+ assert isinstance(runners[f"application-{appr.slug}"], SDKWorkflowRunner)
+ # auto evaluator -> local runner is wired
+ assert isinstance(runners[f"evaluator-{evr.slug}"], SDKWorkflowRunner)
+
+ def test_human_evaluator_gets_no_runner(self):
+ _, captured, (_tsr, _appr, evr) = _evaluate(evaluators={str(uuid4()): "human"})
+ runners = captured["process_kwargs"]["runners"]
+
+ # human annotation has no auto runner (it is filled in by a person)
+ assert f"evaluator-{evr.slug}" not in runners
+ # but the annotation step is still in the graph
+ steps = captured["process_kwargs"]["steps"]
+ assert any(
+ s.key == f"evaluator-{evr.slug}" and s.origin == "human" for s in steps
+ )
+
+ def test_forwards_repeats_and_source_items(self):
+ tcs = [_testcase({"q": "a"}), _testcase({"q": "b"}), _testcase({"q": "c"})]
+ _, captured, _ = _evaluate(
+ evaluators={str(uuid4()): "auto"}, repeats=4, testcases=tcs
+ )
+ calls = captured["process_calls"]
+ # single-slice: process_sources is called ONCE for the testset, carrying
+ # all three source items, with repeats forwarded.
+ assert len(calls) == 1
+ assert calls[0]["repeats"] == 4
+ assert len(calls[0]["source_items"]) == 3
+
+ def test_assembles_result_payload(self):
+ result, captured, _ = _evaluate(evaluators={str(uuid4()): "auto"})
+ assert set(result.keys()) == {"run", "scenarios", "metrics"}
+ # one processed scenario per source item (2 default testcases)
+ assert len(result["scenarios"]) == 2
+ # metrics is the GLOBAL aggregate row queried at end-of-run (not the
+ # per-scenario one); its data carries the run's headline score.
+ assert result["metrics"].data == {"score": 1.0}
diff --git a/sdks/python/oss/tests/pytest/unit/test_auto_ai_critique_v0_runtime.py b/sdks/python/oss/tests/pytest/unit/test_auto_ai_critique_v0_runtime.py
index f3d2affe24..7b23bf32b0 100644
--- a/sdks/python/oss/tests/pytest/unit/test_auto_ai_critique_v0_runtime.py
+++ b/sdks/python/oss/tests/pytest/unit/test_auto_ai_critique_v0_runtime.py
@@ -44,7 +44,23 @@ def _noop_aws_credentials(_provider_settings):
@pytest.fixture
-def mocked_llm_call():
+def initialized_sdk():
+ """Initialize the SDK so the litellm callback isn't configured pre-init.
+
+ The handlers lazily configure litellm on first use, which calls
+ ``litellm_handler()`` — and that emits a ``RuntimeWarning`` when ``ag.tracing``
+ is unset. ``ag.init()`` runs offline (no network) and sets ``ag.tracing``,
+ keeping these tests warning-free. Scoped to the LLM-touching tests via
+ ``mocked_llm_call`` rather than applied autouse.
+ """
+ import agenta as ag
+
+ ag.init()
+ yield
+
+
+@pytest.fixture
+def mocked_llm_call(initialized_sdk):
"""Mock the LLM call boundary without touching the network."""
captured: dict = {}
diff --git a/sdks/python/oss/tests/pytest/unit/test_evaluate_specs.py b/sdks/python/oss/tests/pytest/unit/test_evaluate_specs.py
new file mode 100644
index 0000000000..449b9bfb60
--- /dev/null
+++ b/sdks/python/oss/tests/pytest/unit/test_evaluate_specs.py
@@ -0,0 +1,190 @@
+"""
+Unit tests for the evaluate() spec parsing/normalization layer.
+
+These cover the pure, API-free internals of `agenta.sdk.evaluations.preview.evaluate`:
+
+ - `_parse_evaluate_kwargs`: merges kwargs with `specs`, applies kwargs-win
+ precedence, carries `repeats`, and validates the three required step groups.
+ - `_normalize_step_id`: coerces UUID-compatible ids to canonical str, drops
+ invalid ones.
+ - `_normalize_target_steps`: builds {step_id: origin}, rejecting invalid ids
+ and non-{custom,human,auto} origins.
+
+`_parse_evaluate_kwargs` is async but does no I/O, so it runs via asyncio.run.
+"""
+
+import asyncio
+from uuid import uuid4
+
+import pytest
+
+from agenta.sdk.evaluations.preview.evaluate import (
+ EvaluateSpecs,
+ _normalize_step_id,
+ _normalize_target_steps,
+ _parse_evaluate_kwargs,
+)
+
+
+def run(coro):
+ return asyncio.run(coro)
+
+
+def _str_keys(steps):
+ # Target = Dict[UUID, Origin] coerces string keys to UUID objects; compare by
+ # canonical string so the assertions are independent of key representation.
+ return {str(k): v for k, v in (steps or {}).items()}
+
+
+# --- _normalize_step_id ----------------------------------------------------
+
+
+def test_normalize_step_id_passes_through_uuid_object():
+ u = uuid4()
+ assert _normalize_step_id(u) == str(u)
+
+
+def test_normalize_step_id_canonicalizes_uuid_string():
+ u = uuid4()
+ assert _normalize_step_id(str(u)) == str(u)
+
+
+def test_normalize_step_id_returns_none_for_none():
+ assert _normalize_step_id(None) is None
+
+
+def test_normalize_step_id_returns_none_for_invalid():
+ assert _normalize_step_id("not-a-uuid") is None
+
+
+# --- _normalize_target_steps ----------------------------------------------
+
+
+def test_normalize_target_steps_keeps_valid_entries():
+ a, b = uuid4(), uuid4()
+ steps = {str(a): "human", str(b): "auto"}
+ out = _normalize_target_steps(steps=steps, step_name="evaluators")
+ assert out == {str(a): "human", str(b): "auto"}
+
+
+def test_normalize_target_steps_rejects_invalid_id():
+ with pytest.raises(ValueError, match="invalid"):
+ _normalize_target_steps(steps={"not-a-uuid": "auto"}, step_name="evaluators")
+
+
+def test_normalize_target_steps_rejects_invalid_origin():
+ with pytest.raises(ValueError, match="invalid"):
+ _normalize_target_steps(steps={str(uuid4()): "robot"}, step_name="evaluators")
+
+
+def test_normalize_target_steps_rejects_empty():
+ with pytest.raises(ValueError, match="missing or invalid"):
+ _normalize_target_steps(steps={}, step_name="evaluators")
+
+
+def test_normalize_target_steps_rejects_non_dict():
+ with pytest.raises(ValueError, match="missing or invalid"):
+ _normalize_target_steps(steps=["not", "a", "dict"], step_name="evaluators")
+
+
+# --- _parse_evaluate_kwargs ------------------------------------------------
+
+
+def _ids():
+ return str(uuid4()), str(uuid4()), str(uuid4())
+
+
+def test_parse_kwargs_builds_data_from_direct_kwargs():
+ ts, app, ev = _ids()
+ data = run(
+ _parse_evaluate_kwargs(
+ testsets={ts: "custom"},
+ applications={app: "custom"},
+ evaluators={ev: "auto"},
+ repeats=3,
+ )
+ )
+ assert _str_keys(data.testset_steps) == {ts: "custom"}
+ assert _str_keys(data.application_steps) == {app: "custom"}
+ assert _str_keys(data.evaluator_steps) == {ev: "auto"}
+ assert data.repeats == 3
+
+
+def test_parse_kwargs_builds_data_from_specs_dict():
+ ts, app, ev = _ids()
+ data = run(
+ _parse_evaluate_kwargs(
+ specs={
+ "testsets": {ts: "custom"},
+ "applications": {app: "custom"},
+ "evaluators": {ev: "human"},
+ "repeats": 2,
+ }
+ )
+ )
+ assert _str_keys(data.testset_steps) == {ts: "custom"}
+ assert _str_keys(data.evaluator_steps) == {ev: "human"}
+ assert data.repeats == 2
+
+
+def test_parse_kwargs_accepts_evaluatespecs_instance():
+ ts, app, ev = _ids()
+ data = run(
+ _parse_evaluate_kwargs(
+ specs=EvaluateSpecs(
+ testsets={ts: "custom"},
+ applications={app: "custom"},
+ evaluators={ev: "auto"},
+ )
+ )
+ )
+ assert _str_keys(data.application_steps) == {app: "custom"}
+
+
+def test_parse_kwargs_direct_kwargs_win_over_specs():
+ ts, app, ev = _ids()
+ other_ts = str(uuid4())
+ data = run(
+ _parse_evaluate_kwargs(
+ testsets={ts: "custom"},
+ specs={
+ "testsets": {other_ts: "custom"},
+ "applications": {app: "custom"},
+ "evaluators": {ev: "auto"},
+ },
+ )
+ )
+ # direct testsets kwarg wins; applications/evaluators fall back to specs
+ assert _str_keys(data.testset_steps) == {ts: "custom"}
+ assert _str_keys(data.application_steps) == {app: "custom"}
+
+
+@pytest.mark.parametrize(
+ "missing",
+ ["testsets", "applications", "evaluators"],
+)
+def test_parse_kwargs_requires_each_step_group(missing):
+ ts, app, ev = _ids()
+ kwargs = {
+ "testsets": {ts: "custom"},
+ "applications": {app: "custom"},
+ "evaluators": {ev: "auto"},
+ }
+ kwargs.pop(missing)
+ with pytest.raises(ValueError, match=f"missing {missing}"):
+ run(_parse_evaluate_kwargs(**kwargs))
+
+
+def test_parse_kwargs_ignores_non_spec_object():
+ ts, app, ev = _ids()
+ # A specs value that is neither dict nor EvaluateSpecs is dropped, so the
+ # direct kwargs must still satisfy the required groups.
+ data = run(
+ _parse_evaluate_kwargs(
+ testsets={ts: "custom"},
+ applications={app: "custom"},
+ evaluators={ev: "auto"},
+ specs="not-a-spec",
+ )
+ )
+ assert _str_keys(data.testset_steps) == {ts: "custom"}
diff --git a/sdks/python/oss/tests/pytest/unit/test_evaluations_runtime.py b/sdks/python/oss/tests/pytest/unit/test_evaluations_runtime.py
new file mode 100644
index 0000000000..a7f717c400
--- /dev/null
+++ b/sdks/python/oss/tests/pytest/unit/test_evaluations_runtime.py
@@ -0,0 +1,1452 @@
+from types import SimpleNamespace
+from unittest.mock import AsyncMock
+from uuid import uuid4
+
+import pytest
+
+import agenta.sdk.evaluations.preview.evaluate as preview_evaluate
+import agenta.sdk.evaluations.runtime.adapters as runtime_adapters
+from agenta.sdk.evaluations.runtime.executor import execute_workflow_batch
+from agenta.sdk.evaluations.runtime.models import (
+ EvaluationStep,
+ PlannedCell,
+ ResolvedSourceItem,
+ ResultLogRequest,
+ ScenarioBinding,
+)
+from agenta.sdk.evaluations.runtime.planner import EvaluationPlanner
+from agenta.sdk.evaluations.runtime.processor import (
+ process_sources,
+)
+from agenta.sdk.evaluations.runtime.topology import classify_steps_topology
+from agenta.sdk.evaluations.runtime.models import WorkflowExecutionResult
+from agenta.sdk.models.evaluations import EvaluationStatus
+
+
+def test_sdk_runtime_planner_matches_split_repeat_rules():
+ run_id = uuid4()
+ scenario_id = uuid4()
+ plan = EvaluationPlanner().plan(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ source=ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ ),
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="application-main", type="invocation"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ EvaluationStep(key="evaluator-human", type="annotation", origin="human"),
+ ],
+ repeats=3,
+ is_split=False,
+ )
+
+ assert [
+ cell.repeat_idx for cell in plan.cells if cell.step_key == "application-main"
+ ] == [0]
+ assert [
+ cell.status for cell in plan.cells if cell.step_key == "evaluator-human"
+ ] == [
+ EvaluationStatus.PENDING,
+ EvaluationStatus.PENDING,
+ EvaluationStatus.PENDING,
+ ]
+ assert {(cell.step_key, cell.repeat_idx) for cell in plan.executable_cells} == {
+ ("application-main", 0),
+ ("evaluator-auto", 0),
+ ("evaluator-auto", 1),
+ ("evaluator-auto", 2),
+ }
+
+
+def test_sdk_runtime_planner_handles_multiple_scenario_bindings():
+ run_id = uuid4()
+ first_scenario_id = uuid4()
+ second_scenario_id = uuid4()
+
+ plan = EvaluationPlanner().plan_bindings(
+ run_id=run_id,
+ bindings=[
+ ScenarioBinding(
+ scenario_id=first_scenario_id,
+ source=ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ ),
+ ),
+ ScenarioBinding(
+ scenario_id=second_scenario_id,
+ source=ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ ),
+ ),
+ ],
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="application-main", type="invocation"),
+ ],
+ repeats=2,
+ )
+
+ assert [cell.scenario_id for cell in plan.cells] == [
+ first_scenario_id,
+ first_scenario_id,
+ first_scenario_id,
+ first_scenario_id,
+ second_scenario_id,
+ second_scenario_id,
+ second_scenario_id,
+ second_scenario_id,
+ ]
+ assert [
+ (cell.step_key, cell.repeat_idx)
+ for cell in plan.cells
+ if cell.scenario_id == first_scenario_id
+ ] == [
+ ("testset-main", 0),
+ ("testset-main", 1),
+ ("application-main", 0),
+ ("application-main", 1),
+ ]
+
+
+def test_sdk_runtime_topology_classifier_matches_batch_inference_shape():
+ decision = classify_steps_topology(
+ steps=[
+ EvaluationStep(
+ key="testset-main",
+ type="input",
+ references={"testset_revision": {"id": str(uuid4())}},
+ ),
+ EvaluationStep(
+ key="application-main",
+ type="invocation",
+ references={"application_revision": {"id": str(uuid4())}},
+ ),
+ ],
+ )
+
+ assert decision.status == "supported"
+ assert decision.dispatch == "batch_invocation"
+
+
+def test_sdk_runtime_topology_classifier_distinguishes_direct_testcases_from_testsets():
+ decision = classify_steps_topology(
+ steps=[
+ EvaluationStep(key="testcases", type="input"),
+ EvaluationStep(key="evaluator-human", type="annotation", origin="human"),
+ ],
+ has_testcases=True,
+ has_evaluators=True,
+ )
+
+ assert decision.status == "supported"
+ assert decision.dispatch == "queue_testcases"
+
+
+def test_sdk_runtime_topology_classifier_keeps_deferred_query_to_application_shape():
+ decision = classify_steps_topology(
+ steps=[
+ EvaluationStep(
+ key="query-main",
+ type="input",
+ references={"query_revision": {"id": str(uuid4())}},
+ ),
+ EvaluationStep(
+ key="application-main",
+ type="invocation",
+ references={"application_revision": {"id": str(uuid4())}},
+ ),
+ ],
+ )
+
+ assert decision.status == "potential"
+
+
+@pytest.mark.asyncio
+async def test_sdk_workflow_batch_falls_back_to_single_execute():
+ calls = []
+
+ class SingleRunner:
+ async def execute(self, request):
+ calls.append(request.cell.repeat_idx)
+ return WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id=f"trace-{request.cell.repeat_idx}",
+ )
+
+ requests = [
+ SimpleNamespace(
+ cell=SimpleNamespace(repeat_idx=0),
+ ),
+ SimpleNamespace(
+ cell=SimpleNamespace(repeat_idx=1),
+ ),
+ ]
+
+ results = await execute_workflow_batch(
+ runner=SingleRunner(),
+ requests=requests,
+ )
+
+ assert calls == [0, 1]
+ assert [result.trace_id for result in results] == ["trace-0", "trace-1"]
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_batches_runnable_cells():
+ run_id = uuid4()
+ scenario_id = uuid4()
+ logged = []
+
+ class BatchRunner:
+ def __init__(self):
+ self.requests = []
+
+ async def execute_batch(self, requests, semaphore=None):
+ self.requests.append(requests)
+ return [
+ WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id=f"trace-{request.cell.repeat_idx}",
+ span_id=f"span-{request.cell.repeat_idx}",
+ )
+ for request in requests
+ ]
+
+ class Logger:
+ async def set(self, request):
+ logged.append((request.cell.step_key, request.cell.repeat_idx))
+ return SimpleNamespace(id=uuid4())
+
+ async def create_scenario(run_id):
+ return SimpleNamespace(id=scenario_id)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return SimpleNamespace(id=uuid4())
+
+ runner = BatchRunner()
+
+ processed = await process_sources(
+ run_id=run_id,
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"prompt": "hello"},
+ )
+ ],
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=3,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={"evaluator-auto": runner},
+ revisions={"evaluator-auto": {"id": "revision"}},
+ )
+
+ assert len(runner.requests) == 1
+ assert [request.cell.repeat_idx for request in runner.requests[0]] == [0, 1, 2]
+ assert logged == [
+ ("testset-main", 0),
+ ("testset-main", 1),
+ ("testset-main", 2),
+ ("evaluator-auto", 0),
+ ("evaluator-auto", 1),
+ ("evaluator-auto", 2),
+ ]
+
+ # ProcessedScenario.results retains EVERY repeat per step (keyed by
+ # repeat_idx), not just the last one — repeats>1 must not collapse to one
+ # result per step. Regression guard for UEL-016.
+ assert len(processed) == 1
+ results = processed[0].results
+ assert set(results["testset-main"].keys()) == {0, 1, 2}
+ assert set(results["evaluator-auto"].keys()) == {0, 1, 2}
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_isolates_one_scenario_failure():
+ """One scenario's create_scenario failure must not abort the siblings.
+
+ Regression guard for UEL-023: the per-scenario seams were unguarded under
+ asyncio.gather(return_exceptions=False), so a single failing scenario crashed
+ the whole slice. Now each scenario is isolated.
+ """
+ run_id = uuid4()
+ good_scenario_id = uuid4()
+
+ class Runner:
+ async def execute_batch(self, requests, semaphore=None):
+ return [
+ WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id=f"trace-{req.cell.repeat_idx}",
+ )
+ for req in requests
+ ]
+
+ class Logger:
+ async def set(self, request):
+ return SimpleNamespace(id=uuid4())
+
+ calls = {"n": 0}
+
+ async def create_scenario(run_id):
+ # First scenario blows up; the second succeeds.
+ calls["n"] += 1
+ if calls["n"] == 1:
+ raise RuntimeError("boom: scenario factory failed")
+ return SimpleNamespace(id=good_scenario_id)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return SimpleNamespace(id=uuid4())
+
+ source_items = [
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"prompt": "a"},
+ ),
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"prompt": "b"},
+ ),
+ ]
+
+ processed = await process_sources(
+ run_id=run_id,
+ source_items=source_items,
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=1,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={"evaluator-auto": Runner()},
+ revisions={"evaluator-auto": {"id": "revision"}},
+ )
+
+ # The failed scenario is dropped (not raised); the healthy one still ran.
+ assert len(processed) == 1
+ assert processed[0].scenario.id == good_scenario_id
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_marks_short_runner_batch_as_error():
+ run_id = uuid4()
+ scenario_id = uuid4()
+ logged = []
+
+ class ShortRunner:
+ async def execute_batch(self, requests, semaphore=None):
+ return [
+ WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id="trace-0",
+ span_id="span-0",
+ )
+ ]
+
+ class Logger:
+ async def set(self, request):
+ logged.append(request)
+ return SimpleNamespace(id=uuid4())
+
+ async def create_scenario(run_id):
+ return SimpleNamespace(id=scenario_id)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return SimpleNamespace(id=uuid4())
+
+ processed = await process_sources(
+ run_id=run_id,
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"prompt": "hello"},
+ )
+ ],
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=2,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={"evaluator-auto": ShortRunner()},
+ revisions={"evaluator-auto": {"id": "revision"}},
+ )
+
+ assert processed[0].has_errors is True
+ failed_log = logged[-1]
+ assert failed_log.cell.step_key == "evaluator-auto"
+ assert failed_log.cell.repeat_idx == 1
+ assert failed_log.cell.status == EvaluationStatus.FAILURE
+ assert failed_log.error == {
+ "message": (
+ "Runner for evaluator-auto returned 1 execution(s) for 2 planned cell(s)."
+ )
+ }
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_handles_over_count_runner_batch():
+ # Runner returns more executions than planned cells: the planned cells are
+ # logged from the first executions, the extras have no cell and are dropped
+ # (with a structured warning), and the scenario is flagged as having errors.
+ run_id = uuid4()
+ scenario_id = uuid4()
+ logged = []
+
+ class LongRunner:
+ async def execute_batch(self, requests, semaphore=None):
+ # 3 executions for 2 planned cells (repeats=2).
+ return [
+ WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id=f"trace-{i}",
+ span_id=f"span-{i}",
+ )
+ for i in range(3)
+ ]
+
+ class Logger:
+ async def set(self, request):
+ logged.append(request)
+ return SimpleNamespace(id=uuid4())
+
+ async def create_scenario(run_id):
+ return SimpleNamespace(id=scenario_id)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return SimpleNamespace(id=uuid4())
+
+ processed = await process_sources(
+ run_id=run_id,
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"prompt": "hello"},
+ )
+ ],
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=2,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={"evaluator-auto": LongRunner()},
+ revisions={"evaluator-auto": {"id": "revision"}},
+ )
+
+ assert processed[0].has_errors is True
+ # Both planned evaluator cells were logged from the first two executions; the
+ # third (extra) execution is dropped, not logged as a cell.
+ evaluator_logs = [
+ entry for entry in logged if entry.cell.step_key == "evaluator-auto"
+ ]
+ assert len(evaluator_logs) == 2
+ assert {entry.cell.repeat_idx for entry in evaluator_logs} == {0, 1}
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_marks_missing_runner_as_error():
+ run_id = uuid4()
+ scenario_id = uuid4()
+ logged = []
+
+ class Logger:
+ async def set(self, request):
+ logged.append(request)
+ return SimpleNamespace(id=uuid4())
+
+ async def create_scenario(run_id):
+ return SimpleNamespace(id=scenario_id)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return SimpleNamespace(id=uuid4())
+
+ processed = await process_sources(
+ run_id=run_id,
+ source_items=[
+ ResolvedSourceItem(
+ kind="trace",
+ step_key="query-main",
+ trace_id="query-trace",
+ )
+ ],
+ steps=[
+ EvaluationStep(key="query-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=1,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={},
+ revisions={},
+ )
+
+ assert processed[0].has_errors is True
+ assert [(item.cell.step_key, item.error) for item in logged] == [
+ ("query-main", None),
+ (
+ "evaluator-auto",
+ {"message": "Missing runner or revision for evaluator-auto"},
+ ),
+ ]
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_can_defer_manual_results_without_metric_refresh():
+ run_id = uuid4()
+ scenario_id = uuid4()
+ logged = []
+
+ class Logger:
+ async def set(self, request):
+ logged.append(request.cell.step_key)
+ return SimpleNamespace(id=uuid4())
+
+ refresh_metrics = pytest.fail
+
+ async def create_scenario(run_id):
+ return SimpleNamespace(id=scenario_id)
+
+ processed = await process_sources(
+ run_id=run_id,
+ source_items=[
+ ResolvedSourceItem(
+ kind="trace",
+ step_key="query-main",
+ trace_id="query-trace",
+ )
+ ],
+ steps=[
+ EvaluationStep(key="query-main", type="input"),
+ EvaluationStep(key="evaluator-human", type="annotation", origin="human"),
+ ],
+ repeats=1,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={},
+ revisions={},
+ log_pending=False,
+ refresh_metrics_without_auto_results=False,
+ )
+
+ assert processed[0].has_pending is True
+ assert processed[0].auto_results_created is False
+ assert logged == ["query-main"]
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_links_evaluators_to_application_traces():
+ run_id = uuid4()
+ scenario_id = uuid4()
+ evaluator_requests = []
+
+ class ApplicationRunner:
+ async def execute_batch(self, requests, semaphore=None):
+ return [
+ WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id="app-trace",
+ span_id="app-span",
+ outputs={"answer": "hello"},
+ trace={
+ "trace_id": "app-trace",
+ "spans": {
+ "root": {
+ "span_id": "app-span",
+ "attributes": {
+ "ag": {
+ "data": {
+ "outputs": {"answer": "hello"},
+ }
+ }
+ },
+ }
+ },
+ },
+ )
+ for _ in requests
+ ]
+
+ class EvaluatorRunner:
+ async def execute_batch(self, requests, semaphore=None):
+ evaluator_requests.extend(requests)
+ return [
+ WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id=f"eval-trace-{request.cell.repeat_idx}",
+ )
+ for request in requests
+ ]
+
+ class Logger:
+ async def set(self, request):
+ return SimpleNamespace(id=uuid4())
+
+ async def create_scenario(run_id):
+ return SimpleNamespace(id=scenario_id)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return SimpleNamespace(id=uuid4())
+
+ await process_sources(
+ run_id=run_id,
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"prompt": "hello"},
+ )
+ ],
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="application-main", type="invocation"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=2,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={
+ "application-main": ApplicationRunner(),
+ "evaluator-auto": EvaluatorRunner(),
+ },
+ revisions={
+ "application-main": {"id": "application-revision"},
+ "evaluator-auto": {"id": "evaluator-revision"},
+ },
+ is_split=False,
+ )
+
+ assert [request.cell.repeat_idx for request in evaluator_requests] == [0, 1]
+ assert [request.links for request in evaluator_requests] == [
+ {"invocation": {"trace_id": "app-trace", "span_id": "app-span"}},
+ {"invocation": {"trace_id": "app-trace", "span_id": "app-span"}},
+ ]
+ assert [request.upstream_outputs for request in evaluator_requests] == [
+ {"answer": "hello"},
+ {"answer": "hello"},
+ ]
+
+
+@pytest.mark.asyncio
+async def test_sdk_result_setter_writes_populate_ready_cell_live():
+ """SDKResultSetter writes each cell LIVE via populate as the engine produces it.
+
+ It shapes the cell into a populate-ready dict — preserving repeat_idx and the
+ cell's bound trace/testcase — writes it immediately (one populate call per
+ cell), and returns that dict as the engine's remembered value.
+ """
+ run_id = uuid4()
+ scenario_id = uuid4()
+ testcase_id = uuid4()
+ cell = PlannedCell(
+ run_id=run_id,
+ scenario_id=scenario_id,
+ step_key="evaluator-auto",
+ step_type="annotation",
+ origin="auto",
+ repeat_idx=2,
+ status=EvaluationStatus.SUCCESS,
+ testcase_id=testcase_id,
+ )
+
+ populate_calls = []
+
+ async def fake_populate(*, results):
+ populate_calls.append(results)
+ return results
+
+ setter = runtime_adapters.SDKResultSetter(populate=fake_populate)
+ returned = await setter.set(
+ ResultLogRequest(
+ cell=cell,
+ trace_id="trace-repeat",
+ )
+ )
+
+ expected = {
+ "run_id": str(run_id),
+ "scenario_id": str(scenario_id),
+ "step_key": "evaluator-auto",
+ "repeat_idx": 2,
+ "status": "success",
+ "trace_id": "trace-repeat",
+ "testcase_id": str(testcase_id),
+ "error": None,
+ }
+ assert returned == expected
+ # written live: one populate call carrying exactly this cell.
+ assert populate_calls == [[expected]]
+
+
+@pytest.mark.asyncio
+async def test_sdk_preview_evaluate_logs_repeat_aware_results(monkeypatch):
+ run_id = uuid4()
+ scenario_id = uuid4()
+ testset_id = uuid4()
+ testset_variant_id = uuid4()
+ testset_revision_id = uuid4()
+ application_revision_id = uuid4()
+ evaluator_revision_id = uuid4()
+ testcase_id = uuid4()
+
+ testcase = SimpleNamespace(
+ id=testcase_id,
+ data={"prompt": "hello"},
+ model_dump=lambda **kwargs: {
+ "id": str(testcase_id),
+ "data": {"prompt": "hello"},
+ },
+ )
+ testset_revision = SimpleNamespace(
+ id=testset_revision_id,
+ testset_id=testset_id,
+ testset_variant_id=testset_variant_id,
+ slug="main",
+ version="1",
+ data=SimpleNamespace(testcases=[testcase]),
+ )
+ application_revision = SimpleNamespace(
+ id=application_revision_id,
+ application_id=uuid4(),
+ application_variant_id=uuid4(),
+ slug="app",
+ version="1",
+ data=SimpleNamespace(parameters={"temperature": 0}),
+ model_dump=lambda **kwargs: {"id": str(application_revision_id)},
+ )
+ evaluator_revision = SimpleNamespace(
+ id=evaluator_revision_id,
+ evaluator_id=uuid4(),
+ evaluator_variant_id=uuid4(),
+ slug="eval",
+ version="1",
+ data=SimpleNamespace(parameters={"threshold": 1}),
+ model_dump=lambda **kwargs: {"id": str(evaluator_revision_id)},
+ )
+
+ async def fake_retrieve_testset(**kwargs):
+ return testset_revision
+
+ async def fake_retrieve_application(**kwargs):
+ return application_revision
+
+ async def fake_retrieve_evaluator(**kwargs):
+ return evaluator_revision
+
+ async def fake_create_run(**kwargs):
+ return SimpleNamespace(id=run_id)
+
+ async def fake_add_scenarios(*, run_id, count, timestamp=None):
+ # bulk-mint: one scenario per testcase, in order.
+ return [SimpleNamespace(id=scenario_id) for _ in range(count)]
+
+ populated_cells = []
+
+ async def fake_populate_slice(*, results):
+ # the single bulk populate the SDK does after local execution.
+ populated_cells.extend(results)
+ return [SimpleNamespace(id=uuid4()) for _ in results]
+
+ refresh_calls = []
+ edit_status_calls = []
+
+ async def fake_refresh(run_id, scenario_id=None):
+ # arefresh(run_id, scenario_id): per-scenario (variational) when
+ # scenario_id is set, global when it is None.
+ refresh_calls.append((run_id, scenario_id))
+
+ async def fake_edit_scenario(*, scenario_id, status, tags=None, meta=None):
+ edit_status_calls.append((scenario_id, status))
+
+ async def fake_invoke_application(**kwargs):
+ return SimpleNamespace(
+ data=SimpleNamespace(),
+ trace_id="app-trace",
+ span_id="app-span",
+ )
+
+ evaluator_trace_ids = iter(["eval-trace-0", "eval-trace-1"])
+
+ async def fake_invoke_evaluator(**kwargs):
+ return SimpleNamespace(
+ data=SimpleNamespace(),
+ trace_id=next(evaluator_trace_ids),
+ span_id="eval-span",
+ )
+
+ async def fake_afetch_trace(trace_id, **kwargs):
+ return {
+ "spans": {
+ "root": {
+ "attributes": {
+ "ag": {
+ "data": {
+ "inputs": {"prompt": "hello"},
+ "outputs": {"answer": trace_id},
+ }
+ }
+ }
+ }
+ }
+ }
+
+ async def fake_close_run(**kwargs):
+ return SimpleNamespace(id=run_id)
+
+ async def fake_get_url(**kwargs):
+ return ""
+
+ monkeypatch.setattr(preview_evaluate, "aretrieve_testset", fake_retrieve_testset)
+ monkeypatch.setattr(
+ preview_evaluate, "aretrieve_application", fake_retrieve_application
+ )
+ monkeypatch.setattr(
+ preview_evaluate, "aretrieve_evaluator", fake_retrieve_evaluator
+ )
+ monkeypatch.setattr(preview_evaluate, "acreate_run", fake_create_run)
+ # the SDK mirrors the API: bulk add_scenarios -> ONE slice over all scenarios
+ # with live per-cell populate, inline per-scenario + global metric refresh,
+ # and per-scenario status writes.
+ monkeypatch.setattr(preview_evaluate, "aadd_scenarios", fake_add_scenarios)
+ monkeypatch.setattr(preview_evaluate, "apopulate_slice", fake_populate_slice)
+ monkeypatch.setattr(preview_evaluate, "arefresh", fake_refresh)
+ monkeypatch.setattr(preview_evaluate, "aedit_scenario", fake_edit_scenario)
+ monkeypatch.setattr(
+ preview_evaluate,
+ "aquery_metrics",
+ AsyncMock(return_value=[]),
+ )
+ monkeypatch.setattr(runtime_adapters, "invoke_application", fake_invoke_application)
+ monkeypatch.setattr(runtime_adapters, "invoke_evaluator", fake_invoke_evaluator)
+ monkeypatch.setattr(preview_evaluate, "afetch_trace", fake_afetch_trace)
+ monkeypatch.setattr(preview_evaluate, "aclose_run", fake_close_run)
+ monkeypatch.setattr(preview_evaluate, "aget_url", fake_get_url)
+
+ result = await preview_evaluate.aevaluate(
+ testsets={testset_revision_id: "custom"},
+ applications={application_revision_id: "custom"},
+ evaluators={evaluator_revision_id: "auto"},
+ repeats=2,
+ )
+
+ assert result["run"].id == run_id
+ # cells written live (one cell per populate call), repeat-aware, in plan
+ # order. populated_cells accumulates them across the per-cell writes.
+ assert [(cell["step_key"], cell["repeat_idx"]) for cell in populated_cells] == [
+ ("testset-main", 0),
+ ("testset-main", 1),
+ ("application-app", 0),
+ ("evaluator-eval", 0),
+ ("evaluator-eval", 1),
+ ]
+ assert [
+ cell["trace_id"]
+ for cell in populated_cells
+ if cell["step_key"] == "evaluator-eval"
+ ] == ["eval-trace-0", "eval-trace-1"]
+ # metrics refreshed inline for the scenario (variational) AND once globally,
+ # mirroring the API engine.
+ assert (run_id, scenario_id) in refresh_calls
+ assert (run_id, None) in refresh_calls
+
+
+@pytest.mark.asyncio
+async def test_sdk_preview_evaluate_processes_all_scenarios_in_one_slice(monkeypatch):
+ """Two testcases -> ONE slice over both scenarios (the design's
+ `process_slice(all scenarios)`).
+
+ Locks in the single-slice boundary: one bulk populate carrying every
+ scenario's cells, one refresh scoped to all scenario ids, and a status write
+ per scenario. An outer per-scenario loop (one populate/refresh each) would
+ leave the engine's concurrency inert, so this guards that regression.
+ """
+ run_id = uuid4()
+ scenario_a, scenario_b = uuid4(), uuid4()
+ testset_revision_id = uuid4()
+ application_revision_id = uuid4()
+ evaluator_revision_id = uuid4()
+ tc_a, tc_b = uuid4(), uuid4()
+
+ def _testcase(tcid, prompt):
+ return SimpleNamespace(
+ id=tcid,
+ data={"prompt": prompt},
+ model_dump=lambda **kwargs: {"id": str(tcid), "data": {"prompt": prompt}},
+ )
+
+ testset_revision = SimpleNamespace(
+ id=testset_revision_id,
+ testset_id=uuid4(),
+ testset_variant_id=uuid4(),
+ slug="main",
+ version="1",
+ data=SimpleNamespace(testcases=[_testcase(tc_a, "a"), _testcase(tc_b, "b")]),
+ )
+ application_revision = SimpleNamespace(
+ id=application_revision_id,
+ application_id=uuid4(),
+ application_variant_id=uuid4(),
+ slug="app",
+ version="1",
+ data=SimpleNamespace(parameters={}),
+ model_dump=lambda **kwargs: {"id": str(application_revision_id)},
+ )
+ evaluator_revision = SimpleNamespace(
+ id=evaluator_revision_id,
+ evaluator_id=uuid4(),
+ evaluator_variant_id=uuid4(),
+ slug="eval",
+ version="1",
+ data=SimpleNamespace(parameters={}),
+ model_dump=lambda **kwargs: {"id": str(evaluator_revision_id)},
+ )
+
+ # one scenario id per testcase, in order.
+ minted_ids = iter([scenario_a, scenario_b])
+
+ async def fake_add_scenarios(*, run_id, count, timestamp=None):
+ return [SimpleNamespace(id=next(minted_ids)) for _ in range(count)]
+
+ # cells are written live (one cell per populate call); collect every cell.
+ populated_cells = []
+
+ async def fake_populate_slice(*, results):
+ populated_cells.extend(results)
+ return [SimpleNamespace(id=uuid4()) for _ in results]
+
+ refresh_calls = []
+ edit_status_calls = []
+
+ async def fake_refresh(run_id, scenario_id=None):
+ refresh_calls.append((run_id, scenario_id))
+
+ async def fake_edit_scenario(*, scenario_id, status, tags=None, meta=None):
+ edit_status_calls.append((scenario_id, status))
+
+ async def fake_invoke_application(**kwargs):
+ return SimpleNamespace(
+ data=SimpleNamespace(), trace_id="app-trace", span_id="app-span"
+ )
+
+ async def fake_invoke_evaluator(**kwargs):
+ return SimpleNamespace(
+ data=SimpleNamespace(), trace_id="eval-trace", span_id="eval-span"
+ )
+
+ async def fake_afetch_trace(trace_id, **kwargs):
+ return {"spans": {"root": {"attributes": {"ag": {"data": {}}}}}}
+
+ monkeypatch.setattr(
+ preview_evaluate, "aretrieve_testset", lambda **k: _async(testset_revision)
+ )
+ monkeypatch.setattr(
+ preview_evaluate,
+ "aretrieve_application",
+ lambda **k: _async(application_revision),
+ )
+ monkeypatch.setattr(
+ preview_evaluate, "aretrieve_evaluator", lambda **k: _async(evaluator_revision)
+ )
+ monkeypatch.setattr(
+ preview_evaluate, "acreate_run", lambda **k: _async(SimpleNamespace(id=run_id))
+ )
+ monkeypatch.setattr(preview_evaluate, "aadd_scenarios", fake_add_scenarios)
+ monkeypatch.setattr(preview_evaluate, "apopulate_slice", fake_populate_slice)
+ monkeypatch.setattr(preview_evaluate, "arefresh", fake_refresh)
+ monkeypatch.setattr(preview_evaluate, "aedit_scenario", fake_edit_scenario)
+ monkeypatch.setattr(
+ preview_evaluate,
+ "aquery_metrics",
+ AsyncMock(return_value=[]),
+ )
+ monkeypatch.setattr(runtime_adapters, "invoke_application", fake_invoke_application)
+ monkeypatch.setattr(runtime_adapters, "invoke_evaluator", fake_invoke_evaluator)
+ monkeypatch.setattr(preview_evaluate, "afetch_trace", fake_afetch_trace)
+ monkeypatch.setattr(
+ preview_evaluate, "aclose_run", lambda **k: _async(SimpleNamespace(id=run_id))
+ )
+ monkeypatch.setattr(preview_evaluate, "aget_url", lambda **k: _async(""))
+
+ await preview_evaluate.aevaluate(
+ testsets={testset_revision_id: "custom"},
+ applications={application_revision_id: "custom"},
+ evaluators={evaluator_revision_id: "auto"},
+ repeats=1,
+ )
+
+ # TWO scenarios processed in ONE slice: every cell written live, carrying
+ # both scenarios' ids.
+ assert {c["scenario_id"] for c in populated_cells} == {
+ str(scenario_a),
+ str(scenario_b),
+ }
+ # metrics refreshed inline per scenario (variational) AND once globally,
+ # mirroring the API engine.
+ assert (run_id, scenario_a) in refresh_calls
+ assert (run_id, scenario_b) in refresh_calls
+ assert (run_id, None) in refresh_calls
+ # each scenario got its status written.
+ assert {sid for sid, _status in edit_status_calls} == {scenario_a, scenario_b}
+
+
+async def _async(value):
+ return value
+
+
+@pytest.mark.asyncio
+async def test_sdk_workflow_runner_execute_batch_is_concurrent_bounded():
+ """SDKWorkflowRunner.execute_batch runs concurrently, bounded by the
+ semaphore — same shape as APIWorkflowRunner (not the old sequential loop)."""
+ import asyncio
+
+ runner = runtime_adapters.SDKWorkflowRunner()
+
+ in_flight = 0
+ peak = 0
+
+ async def fake_execute(request):
+ nonlocal in_flight, peak
+ in_flight += 1
+ peak = max(peak, in_flight)
+ await asyncio.sleep(0)
+ in_flight -= 1
+ return WorkflowExecutionResult(status=EvaluationStatus.SUCCESS, trace_id="t")
+
+ runner.execute = fake_execute # type: ignore[method-assign]
+
+ requests = [SimpleNamespace(idx=i) for i in range(6)]
+ semaphore = asyncio.Semaphore(2)
+
+ results = await runner.execute_batch(requests, semaphore=semaphore)
+
+ assert len(results) == 6
+ assert peak <= 2 # honored the semaphore
+
+
+# ---------------------------------------------------------------------------
+# Concurrency and retry
+# ---------------------------------------------------------------------------
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_runs_scenarios_concurrently_up_to_batch_size():
+ """batch_size=2 with 4 scenarios: at most 2 invoke_workflow calls in flight at once."""
+ import asyncio
+
+ run_id = uuid4()
+ in_flight = 0
+ peak = 0
+
+ class ConcurrentRunner:
+ async def execute_batch(self, requests, semaphore=None):
+ results = []
+ for request in requests:
+
+ async def _one(req):
+ nonlocal in_flight, peak
+ in_flight += 1
+ peak = max(peak, in_flight)
+ await asyncio.sleep(0)
+ in_flight -= 1
+ return WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id=f"trace-{req.cell.repeat_idx}",
+ )
+
+ if semaphore is not None:
+ async with semaphore:
+ results.append(await _one(request))
+ else:
+ results.append(await _one(request))
+ return results
+
+ class Logger:
+ async def set(self, request):
+ return SimpleNamespace(id=uuid4())
+
+ scenarios_created = []
+
+ async def create_scenario(run_id):
+ sid = uuid4()
+ scenarios_created.append(sid)
+ return SimpleNamespace(id=sid)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return None
+
+ source_items = [
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"x": str(i)},
+ )
+ for i in range(4)
+ ]
+
+ await process_sources(
+ run_id=run_id,
+ source_items=source_items,
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=1,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={"evaluator-auto": ConcurrentRunner()},
+ revisions={"evaluator-auto": {"id": "rev"}},
+ batch_size=2,
+ )
+
+ assert len(scenarios_created) == 4
+ assert peak <= 2
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_semaphore_shared_across_repeats():
+ """batch_size=2 with 1 scenario and 4 repeats: peak concurrency stays ≤ 2."""
+ import asyncio
+
+ run_id = uuid4()
+ scenario_id = uuid4()
+ in_flight = 0
+ peak = 0
+
+ class ConcurrentRunner:
+ async def execute_batch(self, requests, semaphore=None):
+ async def _one(req):
+ nonlocal in_flight, peak
+ in_flight += 1
+ peak = max(peak, in_flight)
+ await asyncio.sleep(0)
+ in_flight -= 1
+ return WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id=f"trace-{req.cell.repeat_idx}",
+ )
+
+ if semaphore is not None:
+ results = []
+ for req in requests:
+ async with semaphore:
+ results.append(await _one(req))
+ return results
+ return [await _one(req) for req in requests]
+
+ class Logger:
+ async def set(self, request):
+ return SimpleNamespace(id=uuid4())
+
+ async def create_scenario(run_id):
+ return SimpleNamespace(id=scenario_id)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return None
+
+ await process_sources(
+ run_id=run_id,
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"x": "0"},
+ )
+ ],
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=4,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={"evaluator-auto": ConcurrentRunner()},
+ revisions={"evaluator-auto": {"id": "rev"}},
+ batch_size=2,
+ )
+
+ assert peak <= 2
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_no_batch_size_runs_all_concurrently():
+ """When batch_size=None the semaphore is absent and all scenarios run freely."""
+ run_id = uuid4()
+ scenarios_created = []
+
+ class Runner:
+ async def execute_batch(self, requests, semaphore=None):
+ return [
+ WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id="t",
+ )
+ for _ in requests
+ ]
+
+ class Logger:
+ async def set(self, request):
+ return SimpleNamespace(id=uuid4())
+
+ async def create_scenario(run_id):
+ sid = uuid4()
+ scenarios_created.append(sid)
+ return SimpleNamespace(id=sid)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return None
+
+ source_items = [
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ )
+ for _ in range(5)
+ ]
+
+ processed = await process_sources(
+ run_id=run_id,
+ source_items=source_items,
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=1,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={"evaluator-auto": Runner()},
+ revisions={"evaluator-auto": {"id": "rev"}},
+ batch_size=None,
+ )
+
+ assert len(processed) == 5
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_retries_failed_cells_and_succeeds():
+ """max_retries=1: first attempt fails, retry succeeds; result is success."""
+ run_id = uuid4()
+ scenario_id = uuid4()
+ call_count = 0
+
+ class FlakyRunner:
+ async def execute_batch(self, requests, semaphore=None):
+ nonlocal call_count
+ call_count += 1
+ if call_count == 1:
+ return [
+ WorkflowExecutionResult(
+ status=EvaluationStatus.FAILURE,
+ error={"message": "transient"},
+ )
+ for _ in requests
+ ]
+ return [
+ WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id="recovered",
+ )
+ for _ in requests
+ ]
+
+ logged = []
+
+ class Logger:
+ async def set(self, request):
+ logged.append((request.cell.step_key, request.trace_id, request.error))
+ return SimpleNamespace(id=uuid4())
+
+ async def create_scenario(run_id):
+ return SimpleNamespace(id=scenario_id)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return None
+
+ processed = await process_sources(
+ run_id=run_id,
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"x": "1"},
+ )
+ ],
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=1,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={"evaluator-auto": FlakyRunner()},
+ revisions={"evaluator-auto": {"id": "rev"}},
+ max_retries=1,
+ )
+
+ assert call_count == 2
+ assert processed[0].has_errors is False
+ eval_log = next(entry for entry in logged if entry[0] == "evaluator-auto")
+ assert eval_log[1] == "recovered"
+ assert eval_log[2] is None
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_exhausts_retries_and_marks_error():
+ """max_retries=1 with persistent failure: result is still an error."""
+ run_id = uuid4()
+ scenario_id = uuid4()
+ call_count = 0
+
+ class AlwaysFailRunner:
+ async def execute_batch(self, requests, semaphore=None):
+ nonlocal call_count
+ call_count += 1
+ return [
+ WorkflowExecutionResult(
+ status=EvaluationStatus.FAILURE,
+ error={"message": "always fails"},
+ )
+ for _ in requests
+ ]
+
+ class Logger:
+ async def set(self, request):
+ return SimpleNamespace(id=uuid4())
+
+ async def create_scenario(run_id):
+ return SimpleNamespace(id=scenario_id)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return None
+
+ processed = await process_sources(
+ run_id=run_id,
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"x": "1"},
+ )
+ ],
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=1,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={"evaluator-auto": AlwaysFailRunner()},
+ revisions={"evaluator-auto": {"id": "rev"}},
+ max_retries=1,
+ )
+
+ assert call_count == 2
+ assert processed[0].has_errors is True
+
+
+@pytest.mark.asyncio
+async def test_sdk_source_slice_retries_only_failed_cells_in_batch():
+ """With repeats=2, only the failing repeat is retried, not the successful one."""
+ run_id = uuid4()
+ scenario_id = uuid4()
+ attempt_by_repeat: dict = {}
+
+ class SelectiveFlakyRunner:
+ async def execute_batch(self, requests, semaphore=None):
+ results = []
+ for req in requests:
+ idx = req.cell.repeat_idx
+ attempt_by_repeat[idx] = attempt_by_repeat.get(idx, 0) + 1
+ if idx == 1 and attempt_by_repeat[idx] == 1:
+ results.append(
+ WorkflowExecutionResult(
+ status=EvaluationStatus.FAILURE,
+ error={"message": "fail repeat 1 first time"},
+ )
+ )
+ else:
+ results.append(
+ WorkflowExecutionResult(
+ status=EvaluationStatus.SUCCESS,
+ trace_id=f"trace-{idx}",
+ )
+ )
+ return results
+
+ class Logger:
+ async def set(self, request):
+ return SimpleNamespace(id=uuid4())
+
+ async def create_scenario(run_id):
+ return SimpleNamespace(id=scenario_id)
+
+ async def refresh_metrics(run_id, scenario_id):
+ return None
+
+ processed = await process_sources(
+ run_id=run_id,
+ source_items=[
+ ResolvedSourceItem(
+ kind="testcase",
+ step_key="testset-main",
+ testcase_id=uuid4(),
+ inputs={"x": "1"},
+ )
+ ],
+ steps=[
+ EvaluationStep(key="testset-main", type="input"),
+ EvaluationStep(key="evaluator-auto", type="annotation", origin="auto"),
+ ],
+ repeats=2,
+ create_scenario=create_scenario,
+ set_results=Logger(),
+ refresh_metrics=refresh_metrics,
+ runners={"evaluator-auto": SelectiveFlakyRunner()},
+ revisions={"evaluator-auto": {"id": "rev"}},
+ max_retries=1,
+ )
+
+ assert processed[0].has_errors is False
+ assert attempt_by_repeat[0] == 1
+ assert attempt_by_repeat[1] == 2
diff --git a/sdks/python/oss/tests/pytest/utils/test_mock_v0.py b/sdks/python/oss/tests/pytest/utils/test_mock_v0.py
new file mode 100644
index 0000000000..e67ddb41f7
--- /dev/null
+++ b/sdks/python/oss/tests/pytest/utils/test_mock_v0.py
@@ -0,0 +1,147 @@
+"""
+Unit tests for the mock_v0 workflow (agenta:custom:mock:v0).
+
+mock_v0 is a deterministic, LLM-free, sandbox-free workflow used by evaluation
+flow tests. It stands in for BOTH an application (invocation step, returns
+outputs) and an evaluator (annotation step, returns {"score", "success"}). The
+behavior is selected by name via parameters = {"key": ..., "kwargs": {...}}.
+
+async handlers are called via asyncio.run() so no pytest-asyncio marker is
+needed. The @instrument() decorator is bypassed via __wrapped__.
+"""
+
+import asyncio
+
+import pytest
+
+from agenta.sdk.workflows.errors import (
+ MockV0Error,
+ InvalidConfigurationParameterV0Error,
+ MissingConfigurationParameterV0Error,
+)
+from agenta.sdk.workflows.handlers import mock_v0, MOCK_V0_BEHAVIORS
+
+_mock_v0 = mock_v0.__wrapped__
+
+
+def run(coro):
+ return asyncio.run(coro)
+
+
+def call(key=None, *, kwargs=None, inputs=None, outputs=None, trace=None):
+ params = {}
+ if key is not None:
+ params["key"] = key
+ if kwargs is not None:
+ params["kwargs"] = kwargs
+ return run(_mock_v0(parameters=params, inputs=inputs, outputs=outputs, trace=trace))
+
+
+# --- parameter validation --------------------------------------------------
+
+
+def test_missing_key_raises():
+ with pytest.raises(MissingConfigurationParameterV0Error):
+ call()
+
+
+def test_unknown_key_raises():
+ with pytest.raises(InvalidConfigurationParameterV0Error):
+ call("not-a-real-selector")
+
+
+def test_non_dict_kwargs_raises():
+ with pytest.raises(InvalidConfigurationParameterV0Error):
+ run(_mock_v0(parameters={"key": "pass", "kwargs": ["not", "a", "dict"]}))
+
+
+# --- app-role selectors ----------------------------------------------------
+
+
+def test_echo_returns_inputs_verbatim():
+ assert call("echo", inputs={"input": "hello"}) == {"input": "hello"}
+
+
+def test_echo_empty_inputs():
+ assert call("echo") == {}
+
+
+def test_static_returns_kwargs_output():
+ assert call("static", kwargs={"output": {"answer": "world"}}) == {"answer": "world"}
+
+
+# --- evaluator-role selectors ----------------------------------------------
+
+
+def test_pass_returns_success():
+ assert call("pass") == {"score": 1.0, "success": True}
+
+
+def test_fail_returns_failure():
+ assert call("fail") == {"score": 0.0, "success": False}
+
+
+def test_score_above_threshold_succeeds():
+ assert call("score", kwargs={"score": 0.8, "threshold": 0.5}) == {
+ "score": 0.8,
+ "success": True,
+ }
+
+
+def test_score_below_threshold_fails():
+ assert call("score", kwargs={"score": 0.2, "threshold": 0.5}) == {
+ "score": 0.2,
+ "success": False,
+ }
+
+
+def test_score_default_threshold():
+ # default threshold is 0.5
+ assert call("score", kwargs={"score": 0.5})["success"] is True
+ assert call("score", kwargs={"score": 0.49})["success"] is False
+
+
+# --- shared selectors ------------------------------------------------------
+
+
+def test_error_raises_mock_error():
+ with pytest.raises(MockV0Error):
+ call("error")
+
+
+def test_error_custom_message():
+ with pytest.raises(MockV0Error) as exc:
+ call("error", kwargs={"message": "boom"})
+ assert "boom" in str(exc.value)
+
+
+def test_delay_sleeps_then_defers():
+ # delay is fast here; just assert it defers to the named behavior
+ assert call("delay", kwargs={"seconds": 0.01, "then": "pass"}) == {
+ "score": 1.0,
+ "success": True,
+ }
+
+
+def test_delay_default_then_is_pass():
+ assert call("delay", kwargs={"seconds": 0.01})["success"] is True
+
+
+def test_delay_recursion_guard():
+ # then="delay" must not recurse into another sleep; it falls back to pass
+ assert call("delay", kwargs={"seconds": 0.01, "then": "delay"})["success"] is True
+
+
+# --- registry --------------------------------------------------------------
+
+
+def test_registry_covers_documented_selectors():
+ assert set(MOCK_V0_BEHAVIORS) == {
+ "echo",
+ "static",
+ "pass",
+ "fail",
+ "score",
+ "error",
+ "delay",
+ }
diff --git a/sdks/python/pyproject.toml b/sdks/python/pyproject.toml
index 28235adf41..29dc125c39 100644
--- a/sdks/python/pyproject.toml
+++ b/sdks/python/pyproject.toml
@@ -34,7 +34,7 @@ dependencies = [
"mystace>=1,<2",
"orjson>=3,<4",
"python-jsonpath>=2,<3",
- "daytona>=0.183,<0.184",
+ "daytona>=0.184,<0.185",
]
[project.urls]
diff --git a/sdks/python/pytest.ini b/sdks/python/pytest.ini
index 9f1886b274..8152f5a6d4 100644
--- a/sdks/python/pytest.ini
+++ b/sdks/python/pytest.ini
@@ -5,6 +5,11 @@ testpaths =
ee/tests/pytest
addopts = -ra -n auto --self-contained-html
asyncio_mode = auto
+filterwarnings =
+ # TestsetRevisionData is a Pydantic model, not a test class; pytest's
+ # default `Test*` collection rule picks it up and warns. Silenced here
+ # (test-side config) rather than tagging the model in source.
+ ignore:cannot collect test class 'TestsetRevisionData':pytest.PytestCollectionWarning
markers =
coverage_smoke: breadth over depth
coverage_full: breadth and depth
diff --git a/sdks/python/uv.lock b/sdks/python/uv.lock
index 0c8416db1d..e39ef44480 100644
--- a/sdks/python/uv.lock
+++ b/sdks/python/uv.lock
@@ -46,7 +46,7 @@ dev = [
[package.metadata]
requires-dist = [
{ name = "agenta-client", editable = "../../clients/python" },
- { name = "daytona", specifier = ">=0.183,<0.184" },
+ { name = "daytona", specifier = ">=0.184,<0.185" },
{ name = "fastapi", specifier = ">=0.136,<0.137" },
{ name = "httpx", specifier = ">=0.28,<0.29" },
{ name = "jinja2", specifier = ">=3,<4" },
@@ -267,30 +267,30 @@ wheels = [
[[package]]
name = "boto3"
-version = "1.43.19"
+version = "1.43.21"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "botocore" },
{ name = "jmespath" },
{ name = "s3transfer" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/97/da/229987ebb70daf5928f959aa8f4dd77dfcf425e6b0e7ff03aaef61ccc333/boto3-1.43.19.tar.gz", hash = "sha256:8b84704719dd3960ac12a8f37d9ff5adb853715baa9742f84fdbe2de0305c4cb", size = 113225, upload-time = "2026-06-01T19:33:06.514Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/1e/f2/0ef88b6584285002a8a8000e34340f56e82681ad2b8a76ea8bd3ecaa5cb9/boto3-1.43.21.tar.gz", hash = "sha256:6dfeb70bf4f9a3514b91c7199f475f71f939199d62f9c63cd555b033fb283f89", size = 113157, upload-time = "2026-06-03T07:09:23.263Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/be/cc/77097be39d83068f864767b710cee0d8f9cd61331de816dd2675a596c328/boto3-1.43.19-py3-none-any.whl", hash = "sha256:ec6825193b75fbb6bfbf12181e4960d00ad2f404343586765394ce620e63783c", size = 140535, upload-time = "2026-06-01T19:33:03.758Z" },
+ { url = "https://files.pythonhosted.org/packages/01/ea/5352950cbee9d1e8392e5396ddbc6defc982414e2abc004b501139bce13c/boto3-1.43.21-py3-none-any.whl", hash = "sha256:8bb863b32dabe5baa4f2e3701778c259243ba117e4811a595411819958c4fb1b", size = 140534, upload-time = "2026-06-03T07:09:21.18Z" },
]
[[package]]
name = "botocore"
-version = "1.43.19"
+version = "1.43.21"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "jmespath" },
{ name = "python-dateutil" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/e2/a7/298986789785b74a954e2347114993be7e6b070417159125a6865f2687b6/botocore-1.43.19.tar.gz", hash = "sha256:18ac2fdd76c89b940707eb10493ff58678adad337d03215caec2d408ccd43cc0", size = 15435441, upload-time = "2026-06-01T19:32:53.126Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/7b/97/d9d26cebf0a8533105e183d8438931c0b196e52484cd5bf00e8443ac1b2d/botocore-1.43.21.tar.gz", hash = "sha256:17604607efe28894e947401379e569cc8f0fe2d69337ece98bd0c82d1bcfaf92", size = 15451979, upload-time = "2026-06-03T07:09:11.489Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/99/75/fe4d45bdd08afd66f3d5273db58f3d8a29365e52ce3a0851f7f5e5900943/botocore-1.43.19-py3-none-any.whl", hash = "sha256:99dbdccbf748974750601e805cecc9362a85d11fee89d6d58cd3f4ff302e6ff9", size = 15117709, upload-time = "2026-06-01T19:32:47.871Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/c7/8c60049357e96d663980d66b98a44cb3626a7e5eaca66480b97826eb5379/botocore-1.43.21-py3-none-any.whl", hash = "sha256:f021ba3e844c36031106fc531ec90259ef005ba5d04f691df53bc4ecbd08f0dd", size = 15135303, upload-time = "2026-06-03T07:09:06.115Z" },
]
[[package]]
@@ -382,7 +382,7 @@ wheels = [
[[package]]
name = "daytona"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiofiles" },
@@ -406,14 +406,14 @@ dependencies = [
{ name = "urllib3" },
{ name = "wsproto" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c8/dd/3914a2ae3dc4ecf3fd861eff221f4222e48ba4e5530ff7e585d4c4aa7965/daytona-0.183.0.tar.gz", hash = "sha256:2f0020537712ae67693fd2341d3008d464ada06dcd8e89baa6183846271e2f76", size = 141636, upload-time = "2026-05-29T10:59:50.565Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ac/6d/482ed38e868e5d6904961bf8c0317a94981bdd2b165f2611acb4f7094357/daytona-0.184.0.tar.gz", hash = "sha256:38a8de4a2daf34cb5940590db4d0f816ee8354d9919ca8ab1051df4a38f2107c", size = 141946, upload-time = "2026-06-03T14:46:56.231Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c8/ae/b23f7e5381ca5d66f2be0f802ebef0110b5e21022946fa7b9d6e873ec6ad/daytona-0.183.0-py3-none-any.whl", hash = "sha256:89af1bcfc9b37c580329fcad01167bcfab786330e2d0ae74ad3fae8cb40397d2", size = 172192, upload-time = "2026-05-29T10:59:48.838Z" },
+ { url = "https://files.pythonhosted.org/packages/10/da/5ff417bbf0ca7d480ee88c310372fec3ab039a66878c27ecab97203d00c0/daytona-0.184.0-py3-none-any.whl", hash = "sha256:630df33c62aebae2ae34679eff79198806014567850c98dcd8d45accdcc5437a", size = 172586, upload-time = "2026-06-03T14:46:54.467Z" },
]
[[package]]
name = "daytona-api-client"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic" },
@@ -421,14 +421,14 @@ dependencies = [
{ name = "typing-extensions" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/1c/40/a5090268e734f804489b8ca3dcdbd4de7c392b1b4d4b02a60c5d85c7198f/daytona_api_client-0.183.0.tar.gz", hash = "sha256:659fff84a6461d1f51986fb814bf6e3fbc51ac203e6502eb6ae6f26029d69814", size = 147714, upload-time = "2026-05-29T10:59:01.709Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/73/63/cdb3ea6dd35fd2091a7e1f988ce1d3194d9bec1accfa6dbbf63ad424e671/daytona_api_client-0.184.0.tar.gz", hash = "sha256:3cdb111cf2a21be13cc648e444162c094d45f80d1eeb638b671fc854be307c23", size = 148346, upload-time = "2026-06-03T14:46:09.888Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/70/6a/8890e773ecf1cd9c1b70ddb0fda57e4941f5a8a44ced1c91574253797f63/daytona_api_client-0.183.0-py3-none-any.whl", hash = "sha256:c319ae3b4666ec15402cacb8ec3aaffbf55802c0dbc33f6826ef07afceae5085", size = 406274, upload-time = "2026-05-29T10:59:00.427Z" },
+ { url = "https://files.pythonhosted.org/packages/88/65/44993d1bb3cb1f5f294ac97bb3246346c14bf7ba3e79cdd4e92c7df0c6df/daytona_api_client-0.184.0-py3-none-any.whl", hash = "sha256:8fec5062d757fb533e82e9bf295fc1625ae294b4a154c24081bbd2bf30bcb5dd", size = 407600, upload-time = "2026-06-03T14:46:08.086Z" },
]
[[package]]
name = "daytona-api-client-async"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohttp" },
@@ -437,14 +437,14 @@ dependencies = [
{ name = "python-dateutil" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/90/aa/c9de46d48ee45228566a53bb699bc4bdab693dc8ce300516ce334bfec82f/daytona_api_client_async-0.183.0.tar.gz", hash = "sha256:4f5b397e375635fe3614c342cf34faa236d5a0918c53588d7059b5061d881407", size = 148190, upload-time = "2026-05-29T10:59:14.315Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/df/2f/caba484cbac693d269b417df73237f117882e2e28d1af4c3878e568bf148/daytona_api_client_async-0.184.0.tar.gz", hash = "sha256:a3cb0ebe5eec2c824b7848d4189a035a13cd84de1e0083c3f0c033f5445f3b71", size = 149131, upload-time = "2026-06-03T14:46:19.64Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/71/db/dde2e2478faf010b048af24227e5ff8b4c635d8104ace26c66ed1f29dd49/daytona_api_client_async-0.183.0-py3-none-any.whl", hash = "sha256:8be2b0bac344893294a8ffd8df7a4703427ec48376f6948975aca85f09dba541", size = 409552, upload-time = "2026-05-29T10:59:12.964Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/fc/c6e304db0bb382a0842cda913474ba42060acbf4f6cc91d8708f7997e337/daytona_api_client_async-0.184.0-py3-none-any.whl", hash = "sha256:19f268e6fb4d4190e7a4ea2ad3f4600bf14c25ab8f4997390d8d07d4a281de61", size = 410889, upload-time = "2026-06-03T14:46:18.051Z" },
]
[[package]]
name = "daytona-toolbox-api-client"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic" },
@@ -452,14 +452,14 @@ dependencies = [
{ name = "typing-extensions" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/ac/ee/1c8b9785c4028a0932f655e131e44417380a1e3d6ff4eb58b4e10b9aac18/daytona_toolbox_api_client-0.183.0.tar.gz", hash = "sha256:7cf4eb8ab36ec488f436695822b0e4c06e82d12d8fb2fe28e3239151dd43c4b7", size = 77732, upload-time = "2026-05-29T10:58:40.866Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/26/8f/78b0c06e91065e573ce1f2f4c6b7941066be939de46128a7e97a30b2e4a7/daytona_toolbox_api_client-0.184.0.tar.gz", hash = "sha256:c325a050ca45e7832c7d05127260634ed0742d8bc75b2d9de65847153fba70e6", size = 77893, upload-time = "2026-06-03T14:45:52.776Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/5e/3a/904bbf95eac89036775051410dbaf55414a73a1e6d074e1486ca29ee3dbb/daytona_toolbox_api_client-0.183.0-py3-none-any.whl", hash = "sha256:bc0c2fb986f50cad23791afa181c04f27d975b59301d7ce59ce519c1f518483c", size = 205626, upload-time = "2026-05-29T10:58:39.381Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/f9/311c8a6d8fdbb48793c1d5504fa212b0325047887e1c8c8dc2560687cff6/daytona_toolbox_api_client-0.184.0-py3-none-any.whl", hash = "sha256:05b6b179018247bf3e7de667b049b0d7bc0e5e83f58b498e0371988e61b3041e", size = 205757, upload-time = "2026-06-03T14:45:51.343Z" },
]
[[package]]
name = "daytona-toolbox-api-client-async"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohttp" },
@@ -468,9 +468,9 @@ dependencies = [
{ name = "python-dateutil" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c5/0f/85e2ad6511ae228e1c423944d6d90ba3ace2153685ba8aa3b4035c5ccc6f/daytona_toolbox_api_client_async-0.183.0.tar.gz", hash = "sha256:31984e9fc5c440efbb5d23426f187046fa419c075c42d8691b127304692c4e6b", size = 71347, upload-time = "2026-05-29T10:59:03.772Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/6b/cc/d10617b9bf1eae7f61870d0f98d5f22e6a56b0777ee9643427be5d8ec488/daytona_toolbox_api_client_async-0.184.0.tar.gz", hash = "sha256:495526bbd8de1d1ce2d86ecdb561efd5c4e7e86007abf4bc550ecc0c5efaf2e9", size = 71490, upload-time = "2026-06-03T14:46:20.57Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/23/66/af01390a47ba626454fd2ba44766282ffb7174ecc60c1742ab4859bd074f/daytona_toolbox_api_client_async-0.183.0-py3-none-any.whl", hash = "sha256:54a25297cfaf68568d85cecfd5c07da2e7fd862c8ab445df97b76a360951f757", size = 203902, upload-time = "2026-05-29T10:59:02.046Z" },
+ { url = "https://files.pythonhosted.org/packages/db/71/d6e98539e8a855bc63a55ce60f554f0b0063e9275424fea0476eb46f3a2a/daytona_toolbox_api_client_async-0.184.0-py3-none-any.whl", hash = "sha256:b971bc3475c0f658c38a86de40a5d4d31394bf60ad4b4c7f8b7693a5a56647b1", size = 204036, upload-time = "2026-06-03T14:46:18.771Z" },
]
[[package]]
@@ -762,11 +762,11 @@ wheels = [
[[package]]
name = "idna"
-version = "3.17"
+version = "3.18"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/b9/28/99c51f664567218d824af024c0251650fb27e4ca066df188dab0769c5b91/idna-3.17.tar.gz", hash = "sha256:5eb0cb53bc467c12eadcf6de83163ad8527cec9416f44b9b61b19caedad2b87f", size = 196048, upload-time = "2026-05-28T14:32:38.55Z" }
+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/de/a7/f76514cc40ad6234098ecdebda08732d75964776c51a42845b7da10649e2/idna-3.17-py3-none-any.whl", hash = "sha256:466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c", size = 65316, upload-time = "2026-05-28T14:32:37.035Z" },
+ { 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]]
@@ -1375,7 +1375,7 @@ wheels = [
[[package]]
name = "posthog"
-version = "7.16.3"
+version = "7.16.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "backoff" },
@@ -1383,9 +1383,9 @@ dependencies = [
{ name = "requests" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/20/d4/6e1c24823c515683cb6f74bd1dcc3fbe55f60a27743c1694bdc61c5db5d0/posthog-7.16.3.tar.gz", hash = "sha256:ff8972813c836ae4fcb634b499cf06d643bc3c4f49931218fe142e7aa8a39810", size = 226535, upload-time = "2026-06-01T13:24:07.781Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/fe/af/10ba67866a1246e608fccf0d186c63b55054feb66c0fc9d77be458aac9c0/posthog-7.16.4.tar.gz", hash = "sha256:a2baa6595c7089865350826932867ed31355e27307ae4774bc88d42536678848", size = 228616, upload-time = "2026-06-03T13:12:16.006Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f9/0b/562afe6f037ab3dde06d2bbe33f1de9f8516ac22f882ad263e4e0bfb665b/posthog-7.16.3-py3-none-any.whl", hash = "sha256:f0cbaf25ac06211b87c0a43500673fa2d8de86eb1edb75b8bf688f1b884878ce", size = 264300, upload-time = "2026-06-01T13:24:06.074Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/b2/4c9659e06074b473216dc69360fcf7ddba9134e622d16ef10bb45da5cc91/posthog-7.16.4-py3-none-any.whl", hash = "sha256:92ede0237aafb7b90cdb730dacf828cf915676366a69522a76d300fa580f0da0", size = 267073, upload-time = "2026-06-03T13:12:14.415Z" },
]
[[package]]
diff --git a/services/entrypoints/main.py b/services/entrypoints/main.py
index 919698c5ae..72cc291dfb 100644
--- a/services/entrypoints/main.py
+++ b/services/entrypoints/main.py
@@ -38,6 +38,7 @@
builtin_match_app,
custom_code_app,
custom_hook_app,
+ custom_mock_app,
custom_config_app,
)
from oss.src.chat import chat_v0_app
@@ -144,6 +145,7 @@ async def health():
app.mount("/config/v0", custom_config_app)
app.mount("/code/v0", custom_code_app)
app.mount("/hook/v0", custom_hook_app)
+app.mount("/mock/v0", custom_mock_app)
app.mount("/match/v0", builtin_match_app)
app.mount("/llm/v0", builtin_llm_app)
app.mount("/auto_exact_match/v0", builtin_auto_exact_match_app)
@@ -177,4 +179,5 @@ async def health():
port=8080,
reload=True,
reload_dirs=[".", "/sdk"],
+ reload_excludes=["**/tests/**", "/sdk/tests"],
)
diff --git a/services/oss/src/managed.py b/services/oss/src/managed.py
index d2a8081715..8ad8226175 100644
--- a/services/oss/src/managed.py
+++ b/services/oss/src/managed.py
@@ -24,6 +24,7 @@
json_multi_field_match_v0,
llm_v0,
match_v0,
+ mock_v0,
config_v0,
)
@@ -53,6 +54,10 @@ def _create_managed_service(
hook_v0,
uri="agenta:custom:hook:v0",
)
+custom_mock_app = _create_managed_service(
+ mock_v0,
+ uri="agenta:custom:mock:v0",
+)
builtin_match_app = _create_managed_service(
match_v0,
uri="agenta:builtin:match:v0",
diff --git a/services/oss/tests/pytest/acceptance/test_catalog_to_observability.py b/services/oss/tests/pytest/acceptance/test_catalog_to_observability.py
index c5c9645ceb..2783057af1 100644
--- a/services/oss/tests/pytest/acceptance/test_catalog_to_observability.py
+++ b/services/oss/tests/pytest/acceptance/test_catalog_to_observability.py
@@ -34,7 +34,7 @@
# ---------------------------------------------------------------------------
_POLL_INTERVAL = 0.5 # seconds between trace-fetch retries
-_POLL_TIMEOUT = 20.0 # maximum seconds to wait for a trace to appear
+_POLL_TIMEOUT = 30.0 # maximum seconds to wait for a trace to appear
def _uid() -> str:
diff --git a/services/uv.lock b/services/uv.lock
index aeb5e2e243..4246db4e5a 100644
--- a/services/uv.lock
+++ b/services/uv.lock
@@ -33,7 +33,7 @@ dependencies = [
[package.metadata]
requires-dist = [
{ name = "agenta-client", editable = "../clients/python" },
- { name = "daytona", specifier = ">=0.183,<0.184" },
+ { name = "daytona", specifier = ">=0.184,<0.185" },
{ name = "fastapi", specifier = ">=0.136,<0.137" },
{ name = "httpx", specifier = ">=0.28,<0.29" },
{ name = "jinja2", specifier = ">=3,<4" },
@@ -245,30 +245,30 @@ wheels = [
[[package]]
name = "boto3"
-version = "1.43.19"
+version = "1.43.21"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "botocore" },
{ name = "jmespath" },
{ name = "s3transfer" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/97/da/229987ebb70daf5928f959aa8f4dd77dfcf425e6b0e7ff03aaef61ccc333/boto3-1.43.19.tar.gz", hash = "sha256:8b84704719dd3960ac12a8f37d9ff5adb853715baa9742f84fdbe2de0305c4cb", size = 113225, upload-time = "2026-06-01T19:33:06.514Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/1e/f2/0ef88b6584285002a8a8000e34340f56e82681ad2b8a76ea8bd3ecaa5cb9/boto3-1.43.21.tar.gz", hash = "sha256:6dfeb70bf4f9a3514b91c7199f475f71f939199d62f9c63cd555b033fb283f89", size = 113157, upload-time = "2026-06-03T07:09:23.263Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/be/cc/77097be39d83068f864767b710cee0d8f9cd61331de816dd2675a596c328/boto3-1.43.19-py3-none-any.whl", hash = "sha256:ec6825193b75fbb6bfbf12181e4960d00ad2f404343586765394ce620e63783c", size = 140535, upload-time = "2026-06-01T19:33:03.758Z" },
+ { url = "https://files.pythonhosted.org/packages/01/ea/5352950cbee9d1e8392e5396ddbc6defc982414e2abc004b501139bce13c/boto3-1.43.21-py3-none-any.whl", hash = "sha256:8bb863b32dabe5baa4f2e3701778c259243ba117e4811a595411819958c4fb1b", size = 140534, upload-time = "2026-06-03T07:09:21.18Z" },
]
[[package]]
name = "botocore"
-version = "1.43.19"
+version = "1.43.21"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "jmespath" },
{ name = "python-dateutil" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/e2/a7/298986789785b74a954e2347114993be7e6b070417159125a6865f2687b6/botocore-1.43.19.tar.gz", hash = "sha256:18ac2fdd76c89b940707eb10493ff58678adad337d03215caec2d408ccd43cc0", size = 15435441, upload-time = "2026-06-01T19:32:53.126Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/7b/97/d9d26cebf0a8533105e183d8438931c0b196e52484cd5bf00e8443ac1b2d/botocore-1.43.21.tar.gz", hash = "sha256:17604607efe28894e947401379e569cc8f0fe2d69337ece98bd0c82d1bcfaf92", size = 15451979, upload-time = "2026-06-03T07:09:11.489Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/99/75/fe4d45bdd08afd66f3d5273db58f3d8a29365e52ce3a0851f7f5e5900943/botocore-1.43.19-py3-none-any.whl", hash = "sha256:99dbdccbf748974750601e805cecc9362a85d11fee89d6d58cd3f4ff302e6ff9", size = 15117709, upload-time = "2026-06-01T19:32:47.871Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/c7/8c60049357e96d663980d66b98a44cb3626a7e5eaca66480b97826eb5379/botocore-1.43.21-py3-none-any.whl", hash = "sha256:f021ba3e844c36031106fc531ec90259ef005ba5d04f691df53bc4ecbd08f0dd", size = 15135303, upload-time = "2026-06-03T07:09:06.115Z" },
]
[[package]]
@@ -453,7 +453,7 @@ wheels = [
[[package]]
name = "daytona"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiofiles" },
@@ -477,14 +477,14 @@ dependencies = [
{ name = "urllib3" },
{ name = "wsproto" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c8/dd/3914a2ae3dc4ecf3fd861eff221f4222e48ba4e5530ff7e585d4c4aa7965/daytona-0.183.0.tar.gz", hash = "sha256:2f0020537712ae67693fd2341d3008d464ada06dcd8e89baa6183846271e2f76", size = 141636, upload-time = "2026-05-29T10:59:50.565Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ac/6d/482ed38e868e5d6904961bf8c0317a94981bdd2b165f2611acb4f7094357/daytona-0.184.0.tar.gz", hash = "sha256:38a8de4a2daf34cb5940590db4d0f816ee8354d9919ca8ab1051df4a38f2107c", size = 141946, upload-time = "2026-06-03T14:46:56.231Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c8/ae/b23f7e5381ca5d66f2be0f802ebef0110b5e21022946fa7b9d6e873ec6ad/daytona-0.183.0-py3-none-any.whl", hash = "sha256:89af1bcfc9b37c580329fcad01167bcfab786330e2d0ae74ad3fae8cb40397d2", size = 172192, upload-time = "2026-05-29T10:59:48.838Z" },
+ { url = "https://files.pythonhosted.org/packages/10/da/5ff417bbf0ca7d480ee88c310372fec3ab039a66878c27ecab97203d00c0/daytona-0.184.0-py3-none-any.whl", hash = "sha256:630df33c62aebae2ae34679eff79198806014567850c98dcd8d45accdcc5437a", size = 172586, upload-time = "2026-06-03T14:46:54.467Z" },
]
[[package]]
name = "daytona-api-client"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic" },
@@ -492,14 +492,14 @@ dependencies = [
{ name = "typing-extensions" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/1c/40/a5090268e734f804489b8ca3dcdbd4de7c392b1b4d4b02a60c5d85c7198f/daytona_api_client-0.183.0.tar.gz", hash = "sha256:659fff84a6461d1f51986fb814bf6e3fbc51ac203e6502eb6ae6f26029d69814", size = 147714, upload-time = "2026-05-29T10:59:01.709Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/73/63/cdb3ea6dd35fd2091a7e1f988ce1d3194d9bec1accfa6dbbf63ad424e671/daytona_api_client-0.184.0.tar.gz", hash = "sha256:3cdb111cf2a21be13cc648e444162c094d45f80d1eeb638b671fc854be307c23", size = 148346, upload-time = "2026-06-03T14:46:09.888Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/70/6a/8890e773ecf1cd9c1b70ddb0fda57e4941f5a8a44ced1c91574253797f63/daytona_api_client-0.183.0-py3-none-any.whl", hash = "sha256:c319ae3b4666ec15402cacb8ec3aaffbf55802c0dbc33f6826ef07afceae5085", size = 406274, upload-time = "2026-05-29T10:59:00.427Z" },
+ { url = "https://files.pythonhosted.org/packages/88/65/44993d1bb3cb1f5f294ac97bb3246346c14bf7ba3e79cdd4e92c7df0c6df/daytona_api_client-0.184.0-py3-none-any.whl", hash = "sha256:8fec5062d757fb533e82e9bf295fc1625ae294b4a154c24081bbd2bf30bcb5dd", size = 407600, upload-time = "2026-06-03T14:46:08.086Z" },
]
[[package]]
name = "daytona-api-client-async"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohttp" },
@@ -508,14 +508,14 @@ dependencies = [
{ name = "python-dateutil" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/90/aa/c9de46d48ee45228566a53bb699bc4bdab693dc8ce300516ce334bfec82f/daytona_api_client_async-0.183.0.tar.gz", hash = "sha256:4f5b397e375635fe3614c342cf34faa236d5a0918c53588d7059b5061d881407", size = 148190, upload-time = "2026-05-29T10:59:14.315Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/df/2f/caba484cbac693d269b417df73237f117882e2e28d1af4c3878e568bf148/daytona_api_client_async-0.184.0.tar.gz", hash = "sha256:a3cb0ebe5eec2c824b7848d4189a035a13cd84de1e0083c3f0c033f5445f3b71", size = 149131, upload-time = "2026-06-03T14:46:19.64Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/71/db/dde2e2478faf010b048af24227e5ff8b4c635d8104ace26c66ed1f29dd49/daytona_api_client_async-0.183.0-py3-none-any.whl", hash = "sha256:8be2b0bac344893294a8ffd8df7a4703427ec48376f6948975aca85f09dba541", size = 409552, upload-time = "2026-05-29T10:59:12.964Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/fc/c6e304db0bb382a0842cda913474ba42060acbf4f6cc91d8708f7997e337/daytona_api_client_async-0.184.0-py3-none-any.whl", hash = "sha256:19f268e6fb4d4190e7a4ea2ad3f4600bf14c25ab8f4997390d8d07d4a281de61", size = 410889, upload-time = "2026-06-03T14:46:18.051Z" },
]
[[package]]
name = "daytona-toolbox-api-client"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic" },
@@ -523,14 +523,14 @@ dependencies = [
{ name = "typing-extensions" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/ac/ee/1c8b9785c4028a0932f655e131e44417380a1e3d6ff4eb58b4e10b9aac18/daytona_toolbox_api_client-0.183.0.tar.gz", hash = "sha256:7cf4eb8ab36ec488f436695822b0e4c06e82d12d8fb2fe28e3239151dd43c4b7", size = 77732, upload-time = "2026-05-29T10:58:40.866Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/26/8f/78b0c06e91065e573ce1f2f4c6b7941066be939de46128a7e97a30b2e4a7/daytona_toolbox_api_client-0.184.0.tar.gz", hash = "sha256:c325a050ca45e7832c7d05127260634ed0742d8bc75b2d9de65847153fba70e6", size = 77893, upload-time = "2026-06-03T14:45:52.776Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/5e/3a/904bbf95eac89036775051410dbaf55414a73a1e6d074e1486ca29ee3dbb/daytona_toolbox_api_client-0.183.0-py3-none-any.whl", hash = "sha256:bc0c2fb986f50cad23791afa181c04f27d975b59301d7ce59ce519c1f518483c", size = 205626, upload-time = "2026-05-29T10:58:39.381Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/f9/311c8a6d8fdbb48793c1d5504fa212b0325047887e1c8c8dc2560687cff6/daytona_toolbox_api_client-0.184.0-py3-none-any.whl", hash = "sha256:05b6b179018247bf3e7de667b049b0d7bc0e5e83f58b498e0371988e61b3041e", size = 205757, upload-time = "2026-06-03T14:45:51.343Z" },
]
[[package]]
name = "daytona-toolbox-api-client-async"
-version = "0.183.0"
+version = "0.184.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohttp" },
@@ -539,9 +539,9 @@ dependencies = [
{ name = "python-dateutil" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c5/0f/85e2ad6511ae228e1c423944d6d90ba3ace2153685ba8aa3b4035c5ccc6f/daytona_toolbox_api_client_async-0.183.0.tar.gz", hash = "sha256:31984e9fc5c440efbb5d23426f187046fa419c075c42d8691b127304692c4e6b", size = 71347, upload-time = "2026-05-29T10:59:03.772Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/6b/cc/d10617b9bf1eae7f61870d0f98d5f22e6a56b0777ee9643427be5d8ec488/daytona_toolbox_api_client_async-0.184.0.tar.gz", hash = "sha256:495526bbd8de1d1ce2d86ecdb561efd5c4e7e86007abf4bc550ecc0c5efaf2e9", size = 71490, upload-time = "2026-06-03T14:46:20.57Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/23/66/af01390a47ba626454fd2ba44766282ffb7174ecc60c1742ab4859bd074f/daytona_toolbox_api_client_async-0.183.0-py3-none-any.whl", hash = "sha256:54a25297cfaf68568d85cecfd5c07da2e7fd862c8ab445df97b76a360951f757", size = 203902, upload-time = "2026-05-29T10:59:02.046Z" },
+ { url = "https://files.pythonhosted.org/packages/db/71/d6e98539e8a855bc63a55ce60f554f0b0063e9275424fea0476eb46f3a2a/daytona_toolbox_api_client_async-0.184.0-py3-none-any.whl", hash = "sha256:b971bc3475c0f658c38a86de40a5d4d31394bf60ad4b4c7f8b7693a5a56647b1", size = 204036, upload-time = "2026-06-03T14:46:18.771Z" },
]
[[package]]
@@ -733,7 +733,7 @@ wheels = [
[[package]]
name = "google-api-core"
-version = "2.30.3"
+version = "2.31.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "google-auth" },
@@ -742,9 +742,9 @@ dependencies = [
{ name = "protobuf" },
{ name = "requests" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/16/ce/502a57fb0ec752026d24df1280b162294b22a0afb98a326084f9a979138b/google_api_core-2.30.3.tar.gz", hash = "sha256:e601a37f148585319b26db36e219df68c5d07b6382cff2d580e83404e44d641b", size = 177001, upload-time = "2026-04-10T00:41:28.035Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/c6/22/155cadf1d49272a9cf48f3168c0f3874fa13397297e611a5ea00cd093880/google_api_core-2.31.0.tar.gz", hash = "sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2", size = 176492, upload-time = "2026-06-03T14:52:17.257Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/03/15/e56f351cf6ef1cfea58e6ac226a7318ed1deb2218c4b3cc9bd9e4b786c5a/google_api_core-2.30.3-py3-none-any.whl", hash = "sha256:a85761ba72c444dad5d611c2220633480b2b6be2521eca69cca2dbb3ffd6bfe8", size = 173274, upload-time = "2026-04-09T22:57:16.198Z" },
+ { url = "https://files.pythonhosted.org/packages/86/40/9bdbb60b03a332bd45acb8703da08bbc27d991d35286b62e42acc86d243a/google_api_core-2.31.0-py3-none-any.whl", hash = "sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab", size = 173102, upload-time = "2026-06-03T14:51:26.729Z" },
]
[package.optional-dependencies]
@@ -1143,11 +1143,11 @@ wheels = [
[[package]]
name = "idna"
-version = "3.17"
+version = "3.18"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/b9/28/99c51f664567218d824af024c0251650fb27e4ca066df188dab0769c5b91/idna-3.17.tar.gz", hash = "sha256:5eb0cb53bc467c12eadcf6de83163ad8527cec9416f44b9b61b19caedad2b87f", size = 196048, upload-time = "2026-05-28T14:32:38.55Z" }
+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/de/a7/f76514cc40ad6234098ecdebda08732d75964776c51a42845b7da10649e2/idna-3.17-py3-none-any.whl", hash = "sha256:466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c", size = 65316, upload-time = "2026-05-28T14:32:37.035Z" },
+ { 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]]
diff --git a/web/_reference/agenta-sdk/src/vault.ts b/web/_reference/agenta-sdk/src/vault.ts
index b592e52523..cc5580e7d2 100644
--- a/web/_reference/agenta-sdk/src/vault.ts
+++ b/web/_reference/agenta-sdk/src/vault.ts
@@ -17,19 +17,19 @@ export class Vault {
/**
* List all secrets for the current project.
*
- * GET /vault/v1/secrets/
+ * GET /secrets/
*/
async list(): Promise {
- return this.client.request("GET", "/vault/v1/secrets/", {legacy: true})
+ return this.client.request("GET", "/secrets/", {legacy: true})
}
/**
* Get a single secret by ID.
*
- * GET /vault/v1/secrets/{secretId}
+ * GET /secrets/{secretId}
*/
async get(secretId: string): Promise {
- return this.client.request("GET", `/vault/v1/secrets/${secretId}`, {
+ return this.client.request("GET", `/secrets/${secretId}`, {
legacy: true,
})
}
@@ -37,10 +37,10 @@ export class Vault {
/**
* Create a new secret.
*
- * POST /vault/v1/secrets/
+ * POST /secrets/
*/
async create(request: CreateSecretRequest): Promise {
- return this.client.request("POST", "/vault/v1/secrets/", {
+ return this.client.request("POST", "/secrets/", {
body: request,
legacy: true,
})
@@ -49,10 +49,10 @@ export class Vault {
/**
* Update an existing secret.
*
- * PUT /vault/v1/secrets/{secretId}
+ * PUT /secrets/{secretId}
*/
async update(secretId: string, request: UpdateSecretRequest): Promise {
- return this.client.request("PUT", `/vault/v1/secrets/${secretId}`, {
+ return this.client.request("PUT", `/secrets/${secretId}`, {
body: request,
legacy: true,
})
@@ -61,11 +61,11 @@ export class Vault {
/**
* Delete a secret.
*
- * DELETE /vault/v1/secrets/{secretId}
+ * DELETE /secrets/{secretId}
*
* Returns void (204 No Content).
*/
async delete(secretId: string): Promise {
- await this.client.requestRaw("DELETE", `/vault/v1/secrets/${secretId}`, {legacy: true})
+ await this.client.requestRaw("DELETE", `/secrets/${secretId}`, {legacy: true})
}
}
diff --git a/web/ee/package.json b/web/ee/package.json
index 2d33bb2ad3..d0022df036 100644
--- a/web/ee/package.json
+++ b/web/ee/package.json
@@ -43,7 +43,6 @@
"@types/react-dom": "^19.0.4",
"@types/react-resizable": "^3.0.7",
"@types/react-window": "^1.8.8",
- "@types/recharts": "^2.0.1",
"antd": "^6.1.3",
"autoprefixer": "10.4.20",
"axios": "1.16.0",
diff --git a/web/oss/src/components/pages/evaluations/NewEvaluation/Components/AdvancedSettings.tsx b/web/oss/src/components/pages/evaluations/NewEvaluation/Components/AdvancedSettings.tsx
index 4edb5403b0..c825e9af04 100644
--- a/web/oss/src/components/pages/evaluations/NewEvaluation/Components/AdvancedSettings.tsx
+++ b/web/oss/src/components/pages/evaluations/NewEvaluation/Components/AdvancedSettings.tsx
@@ -1,14 +1,26 @@
import {memo, useCallback, useMemo} from "react"
import {QuestionCircleOutlined} from "@ant-design/icons"
-import {Button, Col, Flex, Form, Input, InputNumber, Row, Tooltip, Typography} from "antd"
+import {Button, Flex, Form, InputNumber, Tooltip, Typography} from "antd"
import deepEqual from "fast-deep-equal"
import {DEFAULT_ADVANCE_SETTINGS} from "../assets/constants"
-import {AdvancedSettingsProps} from "../types"
+import {AdvancedSettingsProps, EvaluationConcurrencySettings} from "../types"
+
+const FIELD_LABELS: Record = {
+ batch_size: "Batch Size",
+ max_retries: "Max Retries",
+ retry_delay: "Retry Delay (s)",
+}
+
+const FIELD_TOOLTIPS: Record = {
+ batch_size: "Maximum number of concurrent invocations",
+ max_retries: "How many times to retry a failed invocation",
+ retry_delay: "Seconds to wait before retrying a failed invocation",
+}
const AdvancedSettings = ({advanceSettings, setAdvanceSettings}: AdvancedSettingsProps) => {
- const handleChange = (key: string, value: any) => {
+ const handleChange = (key: keyof EvaluationConcurrencySettings, value: number | null) => {
setAdvanceSettings((prev) => ({
...prev,
[key]: value,
@@ -24,17 +36,14 @@ const AdvancedSettings = ({advanceSettings, setAdvanceSettings}: AdvancedSetting
[advanceSettings],
)
- const {correct_answer_column, ...rateLimitConfig} = advanceSettings
-
return (
- Rate Limit Configuration
+ Concurrency
{isAdvancedSettingsChanged && (
-
- {Object.entries(rateLimitConfig).map(([key, value]) => (
-
-
- {key
- .replace(/_/g, " ")
- .replace(/\b\w/g, (c) => c.toUpperCase())}
-
-
-
-
- >
- }
- rules={[
- {
- validator: (_, value) => {
- if (value !== null) {
- return Promise.resolve()
- }
- return Promise.reject("This field is required")
- },
- },
- ]}
- >
- handleChange(key, value)}
- style={{width: "100%"}}
- min={0}
- />
-
-
- ))}
-
-
-
- Correct Answer Column
-
-
-
- >
- }
- >
- handleChange("correct_answer_column", e.target.value)}
- style={{width: "50%"}}
- />
+ {(
+ Object.keys(
+ DEFAULT_ADVANCE_SETTINGS,
+ ) as (keyof EvaluationConcurrencySettings)[]
+ ).map((key) => (
+
+ {FIELD_LABELS[key]}
+
+
+
+ >
+ }
+ rules={[
+ {
+ validator: (_, value) =>
+ value !== null
+ ? Promise.resolve()
+ : Promise.reject("This field is required"),
+ },
+ ]}
+ >
+ handleChange(key, value)}
+ style={{width: "100%"}}
+ min={0}
+ />
+
+ ))}
diff --git a/web/oss/src/components/pages/evaluations/NewEvaluation/Components/NewEvaluationModalInner.tsx b/web/oss/src/components/pages/evaluations/NewEvaluation/Components/NewEvaluationModalInner.tsx
index 2b4e35f316..4ae6ac2a07 100644
--- a/web/oss/src/components/pages/evaluations/NewEvaluation/Components/NewEvaluationModalInner.tsx
+++ b/web/oss/src/components/pages/evaluations/NewEvaluation/Components/NewEvaluationModalInner.tsx
@@ -49,7 +49,7 @@ import {
selectedTestsetRevisionIdAtom,
selectedTestsetVersionAtom,
} from "../state/selection"
-import type {LLMRunRateLimitWithCorrectAnswer, NewEvaluationModalInnerProps} from "../types"
+import type {EvaluationConcurrencySettings, NewEvaluationModalInnerProps} from "../types"
const NewEvaluationModalContent = dynamic(() => import("./NewEvaluationModalContent"), {
ssr: false,
@@ -243,7 +243,7 @@ const NewEvaluationModalInner = ({
const [evaluationName, setEvaluationName] = useState("")
const [nameFocused, setNameFocused] = useState(false)
const [advanceSettings, setAdvanceSettings] =
- useState(DEFAULT_ADVANCE_SETTINGS)
+ useState(DEFAULT_ADVANCE_SETTINGS)
const allowTestsetAutoAdvance = !(
activeTourId === FIRST_EVALUATION_TOUR_ID &&
@@ -499,7 +499,6 @@ const NewEvaluationModalInner = ({
}
const revisions = filteredVariants
- const {correct_answer_column, ...rateLimitValues} = advanceSettings
if (preview) {
const selectedRevisions = revisions
@@ -538,8 +537,7 @@ const NewEvaluationModalInner = ({
evaluators: selectedEvalConfigs
.map((id) => evaluatorRowsByRevisionId.get(id))
.filter(Boolean),
- rate_limit: rateLimitValues,
- correctAnswerColumn: correct_answer_column,
+ concurrency: advanceSettings,
}
if (
@@ -590,8 +588,7 @@ const NewEvaluationModalInner = ({
testset_revision_id: selectedTestsetRevisionId,
revisions_ids: selectedVariantRevisionIds,
evaluator_revision_ids: selectedEvalConfigs,
- rate_limit: rateLimitValues,
- correct_answer_column: correct_answer_column,
+ concurrency: advanceSettings,
name: evaluationName,
})
diff --git a/web/oss/src/components/pages/evaluations/NewEvaluation/assets/constants.ts b/web/oss/src/components/pages/evaluations/NewEvaluation/assets/constants.ts
index 746f5d838f..d2f65f37ee 100644
--- a/web/oss/src/components/pages/evaluations/NewEvaluation/assets/constants.ts
+++ b/web/oss/src/components/pages/evaluations/NewEvaluation/assets/constants.ts
@@ -2,6 +2,4 @@ export const DEFAULT_ADVANCE_SETTINGS = {
batch_size: 10,
max_retries: 3,
retry_delay: 3,
- delay_between_batches: 5,
- correct_answer_column: "correct_answer",
}
diff --git a/web/oss/src/components/pages/evaluations/NewEvaluation/types.ts b/web/oss/src/components/pages/evaluations/NewEvaluation/types.ts
index 5535315541..c6cbf45b45 100644
--- a/web/oss/src/components/pages/evaluations/NewEvaluation/types.ts
+++ b/web/oss/src/components/pages/evaluations/NewEvaluation/types.ts
@@ -3,7 +3,7 @@ import type {Dispatch, HTMLProps, SetStateAction} from "react"
import type {EvaluatorCatalogTemplate, Workflow} from "@agenta/entities/workflow"
import {ModalProps} from "antd"
-import {LLMRunRateLimit, Evaluator, SimpleEvaluator, testset} from "@/oss/lib/Types"
+import {Evaluator, SimpleEvaluator, testset} from "@/oss/lib/Types"
import {EvaluatorDto} from "@/oss/services/evaluations/api/evaluatorTypes"
export interface NewEvaluationAppOption {
@@ -14,8 +14,10 @@ export interface NewEvaluationAppOption {
updatedAt?: string | null
}
-export interface LLMRunRateLimitWithCorrectAnswer extends LLMRunRateLimit {
- correct_answer_column: string
+export interface EvaluationConcurrencySettings {
+ batch_size: number
+ max_retries: number
+ retry_delay: number
}
export interface NewEvaluationModalProps extends ModalProps {
@@ -53,8 +55,8 @@ export interface NewEvaluationModalContentProps extends HTMLProps[]
evaluatorConfigs: SimpleEvaluator[]
- advanceSettings: LLMRunRateLimitWithCorrectAnswer
- setAdvanceSettings: Dispatch>
+ advanceSettings: EvaluationConcurrencySettings
+ setAdvanceSettings: Dispatch>
appOptions: NewEvaluationAppOption[]
selectedAppId: string
onSelectApp: (value: string, meta?: {label?: string; isEvaluator?: boolean}) => void
@@ -103,8 +105,8 @@ export interface SelectEvaluatorSectionProps extends HTMLProps {
}
export interface AdvancedSettingsProps {
- advanceSettings: LLMRunRateLimitWithCorrectAnswer
- setAdvanceSettings: Dispatch>
+ advanceSettings: EvaluationConcurrencySettings
+ setAdvanceSettings: Dispatch>
preview?: boolean
}
diff --git a/web/oss/src/services/evaluations/api/index.ts b/web/oss/src/services/evaluations/api/index.ts
index 3941541d22..ee4e65e6b6 100644
--- a/web/oss/src/services/evaluations/api/index.ts
+++ b/web/oss/src/services/evaluations/api/index.ts
@@ -1,13 +1,8 @@
+import type {EvaluationConcurrencySettings} from "@/oss/components/pages/evaluations/NewEvaluation/types"
import axios from "@/oss/lib/api/assets/axiosConfig"
import {calcEvalDuration} from "@/oss/lib/evaluations/legacy"
import {assertValidId, isValidId} from "@/oss/lib/helpers/serviceValidations"
-import {
- EvaluationStatus,
- KeyValuePair,
- LLMRunRateLimit,
- _Evaluation,
- _EvaluationScenario,
-} from "@/oss/lib/Types"
+import {EvaluationStatus, KeyValuePair, _Evaluation, _EvaluationScenario} from "@/oss/lib/Types"
import {getProjectValues} from "@/oss/state/project"
//Prefix convention:
@@ -150,18 +145,16 @@ export type CreateEvaluationData =
testset_revision_id?: string
variant_ids?: string[]
evaluator_revision_ids: string[]
- rate_limit: LLMRunRateLimit
+ concurrency?: EvaluationConcurrencySettings
lm_providers_keys?: KeyValuePair
- correct_answer_column: string
}
| {
testset_id: string
testset_revision_id?: string
revisions_ids?: string[]
evaluator_revision_ids: string[]
- rate_limit: LLMRunRateLimit
+ concurrency?: EvaluationConcurrencySettings
lm_providers_keys?: KeyValuePair
- correct_answer_column: string
name: string
}
export const createEvaluation = async (appId: string, evaluation: CreateEvaluationData) => {
@@ -194,6 +187,7 @@ export const createEvaluation = async (appId: string, evaluation: CreateEvaluati
(acc, id) => ({...acc, [id]: "auto"}),
{} as Record,
),
+ concurrency: evaluation.concurrency ?? undefined,
},
flags: {
is_live: false,
diff --git a/web/packages/agenta-api-client/src/generated/Client.ts b/web/packages/agenta-api-client/src/generated/Client.ts
index 6ab7b5ffc4..294bbff9eb 100644
--- a/web/packages/agenta-api-client/src/generated/Client.ts
+++ b/web/packages/agenta-api-client/src/generated/Client.ts
@@ -39,13 +39,13 @@ export class AgentaApiClient {
protected readonly _options: NormalizedClientOptionsWithAuth;
protected _access: AccessClient | undefined;
protected _billing: BillingClient | undefined;
+ protected _events: EventsClient | undefined;
protected _organizations: OrganizationsClient | undefined;
protected _workspaces: WorkspacesClient | undefined;
protected _secrets: SecretsClient | undefined;
protected _webhooks: WebhooksClient | undefined;
protected _legacy: LegacyClient | undefined;
protected _traces: TracesClient | undefined;
- protected _events: EventsClient | undefined;
protected _invocations: InvocationsClient | undefined;
protected _annotations: AnnotationsClient | undefined;
protected _testcases: TestcasesClient | undefined;
@@ -75,6 +75,10 @@ export class AgentaApiClient {
return (this._billing ??= new BillingClient(this._options));
}
+ public get events(): EventsClient {
+ return (this._events ??= new EventsClient(this._options));
+ }
+
public get organizations(): OrganizationsClient {
return (this._organizations ??= new OrganizationsClient(this._options));
}
@@ -99,10 +103,6 @@ export class AgentaApiClient {
return (this._traces ??= new TracesClient(this._options));
}
- public get events(): EventsClient {
- return (this._events ??= new EventsClient(this._options));
- }
-
public get invocations(): InvocationsClient {
return (this._invocations ??= new InvocationsClient(this._options));
}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/access/client/Client.ts b/web/packages/agenta-api-client/src/generated/api/resources/access/client/Client.ts
index eb547cc02d..77c2e86a93 100644
--- a/web/packages/agenta-api-client/src/generated/api/resources/access/client/Client.ts
+++ b/web/packages/agenta-api-client/src/generated/api/resources/access/client/Client.ts
@@ -95,7 +95,7 @@ export class AccessClient {
* verbatim from access-controls, including the `"*"` wildcard for
* `owner` — callers that need to render the full permission list
* should expand the wildcard themselves (see
- * `ee.src.services.converters._expand_permissions`).
+ * `ee.src.services.db_manager_ee._expand_permissions`).
*
* @param {AccessClient.RequestOptions} requestOptions - Request-specific configuration.
*
@@ -469,23 +469,23 @@ export class AccessClient {
}
/**
- * @param {AgentaApi.VerifyPermissionsRequest} request
+ * @param {AgentaApi.CheckPermissionsRequest} request
* @param {AccessClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.access.verifyPermissions()
+ * await client.access.checkPermissions()
*/
- public verifyPermissions(
- request: AgentaApi.VerifyPermissionsRequest = {},
+ public checkPermissions(
+ request: AgentaApi.CheckPermissionsRequest = {},
requestOptions?: AccessClient.RequestOptions,
): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__verifyPermissions(request, requestOptions));
+ return core.HttpResponsePromise.fromPromise(this.__checkPermissions(request, requestOptions));
}
- private async __verifyPermissions(
- request: AgentaApi.VerifyPermissionsRequest = {},
+ private async __checkPermissions(
+ request: AgentaApi.CheckPermissionsRequest = {},
requestOptions?: AccessClient.RequestOptions,
): Promise> {
const {
@@ -513,7 +513,7 @@ export class AccessClient {
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.AgentaApiEnvironment.Default,
- "permissions/verify",
+ "access/permissions/check",
),
method: "GET",
headers: _headers,
@@ -545,6 +545,6 @@ export class AccessClient {
}
}
- return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/permissions/verify");
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/access/permissions/check");
}
}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/access/client/requests/VerifyPermissionsRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/access/client/requests/CheckPermissionsRequest.ts
similarity index 85%
rename from web/packages/agenta-api-client/src/generated/api/resources/access/client/requests/VerifyPermissionsRequest.ts
rename to web/packages/agenta-api-client/src/generated/api/resources/access/client/requests/CheckPermissionsRequest.ts
index e3dc3292a7..6bdb19adb1 100644
--- a/web/packages/agenta-api-client/src/generated/api/resources/access/client/requests/VerifyPermissionsRequest.ts
+++ b/web/packages/agenta-api-client/src/generated/api/resources/access/client/requests/CheckPermissionsRequest.ts
@@ -4,7 +4,7 @@
* @example
* {}
*/
-export interface VerifyPermissionsRequest {
+export interface CheckPermissionsRequest {
action?: string | null;
scope_type?: string | null;
scope_id?: string | null;
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/access/client/requests/index.ts b/web/packages/agenta-api-client/src/generated/api/resources/access/client/requests/index.ts
index 950a4a0dcf..bb9ef609db 100644
--- a/web/packages/agenta-api-client/src/generated/api/resources/access/client/requests/index.ts
+++ b/web/packages/agenta-api-client/src/generated/api/resources/access/client/requests/index.ts
@@ -1,5 +1,5 @@
export type { CheckOrganizationAccessRequest } from "./CheckOrganizationAccessRequest.js";
+export type { CheckPermissionsRequest } from "./CheckPermissionsRequest.js";
export type { DiscoverRequest } from "./DiscoverRequest.js";
export type { SessionIdentitiesUpdate } from "./SessionIdentitiesUpdate.js";
export type { SsoCallbackRedirectRequest } from "./SsoCallbackRedirectRequest.js";
-export type { VerifyPermissionsRequest } from "./VerifyPermissionsRequest.js";
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/Client.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/Client.ts
index 9813056814..a0c887aee5 100644
--- a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/Client.ts
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/Client.ts
@@ -738,29 +738,28 @@ export class EvaluationsClient {
}
/**
- * @param {AgentaApi.CloseRunWithStatusRequest} request
+ * @param {AgentaApi.OpenRunRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.closeRunWithStatus({
- * run_id: "run_id",
- * status: "pending"
+ * await client.evaluations.openRun({
+ * run_id: "run_id"
* })
*/
- public closeRunWithStatus(
- request: AgentaApi.CloseRunWithStatusRequest,
+ public openRun(
+ request: AgentaApi.OpenRunRequest,
requestOptions?: EvaluationsClient.RequestOptions,
): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__closeRunWithStatus(request, requestOptions));
+ return core.HttpResponsePromise.fromPromise(this.__openRun(request, requestOptions));
}
- private async __closeRunWithStatus(
- request: AgentaApi.CloseRunWithStatusRequest,
+ private async __openRun(
+ request: AgentaApi.OpenRunRequest,
requestOptions?: EvaluationsClient.RequestOptions,
): Promise> {
- const { run_id: runId, status } = request;
+ const { run_id: runId } = request;
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
_authRequest.headers,
@@ -772,7 +771,7 @@ export class EvaluationsClient {
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.AgentaApiEnvironment.Default,
- `evaluations/runs/${core.url.encodePathParam(runId)}/close/${core.url.encodePathParam(status)}`,
+ `evaluations/runs/${core.url.encodePathParam(runId)}/open`,
),
method: "POST",
headers: _headers,
@@ -808,32 +807,32 @@ export class EvaluationsClient {
_response.error,
_response.rawResponse,
"POST",
- "/evaluations/runs/{run_id}/close/{status}",
+ "/evaluations/runs/{run_id}/open",
);
}
/**
- * @param {AgentaApi.OpenRunRequest} request
+ * @param {AgentaApi.FetchDefaultQueueRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.openRun({
+ * await client.evaluations.fetchDefaultQueue({
* run_id: "run_id"
* })
*/
- public openRun(
- request: AgentaApi.OpenRunRequest,
+ public fetchDefaultQueue(
+ request: AgentaApi.FetchDefaultQueueRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__openRun(request, requestOptions));
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__fetchDefaultQueue(request, requestOptions));
}
- private async __openRun(
- request: AgentaApi.OpenRunRequest,
+ private async __fetchDefaultQueue(
+ request: AgentaApi.FetchDefaultQueueRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): Promise> {
+ ): Promise> {
const { run_id: runId } = request;
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
@@ -846,9 +845,9 @@ export class EvaluationsClient {
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.AgentaApiEnvironment.Default,
- `evaluations/runs/${core.url.encodePathParam(runId)}/open`,
+ `evaluations/runs/${core.url.encodePathParam(runId)}/queues/default`,
),
- method: "POST",
+ method: "GET",
headers: _headers,
queryParameters: requestOptions?.queryParams,
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
@@ -859,7 +858,7 @@ export class EvaluationsClient {
logging: this._options.logging,
});
if (_response.ok) {
- return { data: _response.body as AgentaApi.EvaluationRunResponse, rawResponse: _response.rawResponse };
+ return { data: _response.body as AgentaApi.EvaluationQueueResponse, rawResponse: _response.rawResponse };
}
if (_response.error.reason === "status-code") {
@@ -881,8 +880,8 @@ export class EvaluationsClient {
return handleNonStatusCodeError(
_response.error,
_response.rawResponse,
- "POST",
- "/evaluations/runs/{run_id}/open",
+ "GET",
+ "/evaluations/runs/{run_id}/queues/default",
);
}
@@ -1412,13 +1411,13 @@ export class EvaluationsClient {
}
/**
- * @param {AgentaApi.EvaluationResultsCreateRequest} request
+ * @param {AgentaApi.EvaluationResultsSetRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.createResults({
+ * await client.evaluations.setResults({
* results: [{
* step_key: "step_key",
* scenario_id: "scenario_id",
@@ -1426,15 +1425,15 @@ export class EvaluationsClient {
* }]
* })
*/
- public createResults(
- request: AgentaApi.EvaluationResultsCreateRequest,
+ public setResults(
+ request: AgentaApi.EvaluationResultsSetRequest,
requestOptions?: EvaluationsClient.RequestOptions,
): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__createResults(request, requestOptions));
+ return core.HttpResponsePromise.fromPromise(this.__setResults(request, requestOptions));
}
- private async __createResults(
- request: AgentaApi.EvaluationResultsCreateRequest,
+ private async __setResults(
+ request: AgentaApi.EvaluationResultsSetRequest,
requestOptions?: EvaluationsClient.RequestOptions,
): Promise> {
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
@@ -1560,77 +1559,6 @@ export class EvaluationsClient {
return handleNonStatusCodeError(_response.error, _response.rawResponse, "DELETE", "/evaluations/results/");
}
- /**
- * @param {AgentaApi.EvaluationResultsEditRequest} request
- * @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
- *
- * @throws {@link AgentaApi.UnprocessableEntityError}
- *
- * @example
- * await client.evaluations.editResults({
- * results: [{}]
- * })
- */
- public editResults(
- request: AgentaApi.EvaluationResultsEditRequest,
- requestOptions?: EvaluationsClient.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__editResults(request, requestOptions));
- }
-
- private async __editResults(
- request: AgentaApi.EvaluationResultsEditRequest,
- requestOptions?: EvaluationsClient.RequestOptions,
- ): Promise> {
- const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
- const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
- _authRequest.headers,
- this._options?.headers,
- requestOptions?.headers,
- );
- const _response = await core.fetcher({
- url: core.url.join(
- (await core.Supplier.get(this._options.baseUrl)) ??
- (await core.Supplier.get(this._options.environment)) ??
- environments.AgentaApiEnvironment.Default,
- "evaluations/results/",
- ),
- method: "PATCH",
- headers: _headers,
- contentType: "application/json",
- queryParameters: requestOptions?.queryParams,
- requestType: "json",
- body: request,
- timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
- maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
- withCredentials: true,
- abortSignal: requestOptions?.abortSignal,
- fetchFn: this._options?.fetch,
- logging: this._options.logging,
- });
- if (_response.ok) {
- return { data: _response.body as AgentaApi.EvaluationResultsResponse, rawResponse: _response.rawResponse };
- }
-
- if (_response.error.reason === "status-code") {
- switch (_response.error.statusCode) {
- case 422:
- throw new AgentaApi.UnprocessableEntityError(
- _response.error.body as AgentaApi.HttpValidationError,
- _response.rawResponse,
- );
- default:
- throw new errors.AgentaApiError({
- statusCode: _response.error.statusCode,
- body: _response.error.body,
- rawResponse: _response.rawResponse,
- });
- }
- }
-
- return handleNonStatusCodeError(_response.error, _response.rawResponse, "PATCH", "/evaluations/results/");
- }
-
/**
* @param {AgentaApi.EvaluationResultQueryRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
@@ -1849,29 +1777,27 @@ export class EvaluationsClient {
}
/**
- * @param {AgentaApi.EvaluationResultEditRequest} request
+ * @param {AgentaApi.EvaluationMetricsRefreshRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.editResult({
- * result_id: "result_id",
- * result: {}
+ * await client.evaluations.refreshMetrics({
+ * metrics: {}
* })
*/
- public editResult(
- request: AgentaApi.EvaluationResultEditRequest,
+ public refreshMetrics(
+ request: AgentaApi.EvaluationMetricsRefreshRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__editResult(request, requestOptions));
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__refreshMetrics(request, requestOptions));
}
- private async __editResult(
- request: AgentaApi.EvaluationResultEditRequest,
+ private async __refreshMetrics(
+ request: AgentaApi.EvaluationMetricsRefreshRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): Promise> {
- const { result_id: resultId, ..._body } = request;
+ ): Promise> {
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
_authRequest.headers,
@@ -1883,14 +1809,14 @@ export class EvaluationsClient {
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.AgentaApiEnvironment.Default,
- `evaluations/results/${core.url.encodePathParam(resultId)}`,
+ "evaluations/metrics/refresh",
),
- method: "PATCH",
+ method: "POST",
headers: _headers,
contentType: "application/json",
queryParameters: requestOptions?.queryParams,
requestType: "json",
- body: _body,
+ body: request,
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
withCredentials: true,
@@ -1899,7 +1825,7 @@ export class EvaluationsClient {
logging: this._options.logging,
});
if (_response.ok) {
- return { data: _response.body as AgentaApi.EvaluationResultResponse, rawResponse: _response.rawResponse };
+ return { data: _response.body as AgentaApi.EvaluationMetricsResponse, rawResponse: _response.rawResponse };
}
if (_response.error.reason === "status-code") {
@@ -1918,34 +1844,31 @@ export class EvaluationsClient {
}
}
- return handleNonStatusCodeError(
- _response.error,
- _response.rawResponse,
- "PATCH",
- "/evaluations/results/{result_id}",
- );
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "POST", "/evaluations/metrics/refresh");
}
/**
- * @param {AgentaApi.EvaluationMetricsRefreshRequest} request
+ * @param {AgentaApi.EvaluationMetricsSetRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.refreshMetrics({
- * metrics: {}
+ * await client.evaluations.setMetrics({
+ * metrics: [{
+ * run_id: "run_id"
+ * }]
* })
*/
- public refreshMetrics(
- request: AgentaApi.EvaluationMetricsRefreshRequest,
+ public setMetrics(
+ request: AgentaApi.EvaluationMetricsSetRequest,
requestOptions?: EvaluationsClient.RequestOptions,
): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__refreshMetrics(request, requestOptions));
+ return core.HttpResponsePromise.fromPromise(this.__setMetrics(request, requestOptions));
}
- private async __refreshMetrics(
- request: AgentaApi.EvaluationMetricsRefreshRequest,
+ private async __setMetrics(
+ request: AgentaApi.EvaluationMetricsSetRequest,
requestOptions?: EvaluationsClient.RequestOptions,
): Promise> {
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
@@ -1959,7 +1882,7 @@ export class EvaluationsClient {
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.AgentaApiEnvironment.Default,
- "evaluations/metrics/refresh",
+ "evaluations/metrics/",
),
method: "POST",
headers: _headers,
@@ -1994,33 +1917,31 @@ export class EvaluationsClient {
}
}
- return handleNonStatusCodeError(_response.error, _response.rawResponse, "POST", "/evaluations/metrics/refresh");
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "POST", "/evaluations/metrics/");
}
/**
- * @param {AgentaApi.EvaluationMetricsCreateRequest} request
+ * @param {AgentaApi.EvaluationMetricsIdsRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.createMetrics({
- * metrics: [{
- * run_id: "run_id"
- * }]
+ * await client.evaluations.deleteMetrics({
+ * metrics_ids: ["metrics_ids"]
* })
*/
- public createMetrics(
- request: AgentaApi.EvaluationMetricsCreateRequest,
+ public deleteMetrics(
+ request: AgentaApi.EvaluationMetricsIdsRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__createMetrics(request, requestOptions));
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__deleteMetrics(request, requestOptions));
}
- private async __createMetrics(
- request: AgentaApi.EvaluationMetricsCreateRequest,
+ private async __deleteMetrics(
+ request: AgentaApi.EvaluationMetricsIdsRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): Promise> {
+ ): Promise> {
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
_authRequest.headers,
@@ -2034,7 +1955,7 @@ export class EvaluationsClient {
environments.AgentaApiEnvironment.Default,
"evaluations/metrics/",
),
- method: "POST",
+ method: "DELETE",
headers: _headers,
contentType: "application/json",
queryParameters: requestOptions?.queryParams,
@@ -2048,7 +1969,10 @@ export class EvaluationsClient {
logging: this._options.logging,
});
if (_response.ok) {
- return { data: _response.body as AgentaApi.EvaluationMetricsResponse, rawResponse: _response.rawResponse };
+ return {
+ data: _response.body as AgentaApi.EvaluationMetricsIdsResponse,
+ rawResponse: _response.rawResponse,
+ };
}
if (_response.error.reason === "status-code") {
@@ -2067,31 +1991,29 @@ export class EvaluationsClient {
}
}
- return handleNonStatusCodeError(_response.error, _response.rawResponse, "POST", "/evaluations/metrics/");
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "DELETE", "/evaluations/metrics/");
}
/**
- * @param {AgentaApi.EvaluationMetricsIdsRequest} request
+ * @param {AgentaApi.EvaluationMetricsQueryRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.deleteMetrics({
- * metrics_ids: ["metrics_ids"]
- * })
+ * await client.evaluations.queryMetrics()
*/
- public deleteMetrics(
- request: AgentaApi.EvaluationMetricsIdsRequest,
+ public queryMetrics(
+ request: AgentaApi.EvaluationMetricsQueryRequest = {},
requestOptions?: EvaluationsClient.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__deleteMetrics(request, requestOptions));
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__queryMetrics(request, requestOptions));
}
- private async __deleteMetrics(
- request: AgentaApi.EvaluationMetricsIdsRequest,
+ private async __queryMetrics(
+ request: AgentaApi.EvaluationMetricsQueryRequest = {},
requestOptions?: EvaluationsClient.RequestOptions,
- ): Promise> {
+ ): Promise> {
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
_authRequest.headers,
@@ -2103,9 +2025,9 @@ export class EvaluationsClient {
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.AgentaApiEnvironment.Default,
- "evaluations/metrics/",
+ "evaluations/metrics/query",
),
- method: "DELETE",
+ method: "POST",
headers: _headers,
contentType: "application/json",
queryParameters: requestOptions?.queryParams,
@@ -2119,10 +2041,7 @@ export class EvaluationsClient {
logging: this._options.logging,
});
if (_response.ok) {
- return {
- data: _response.body as AgentaApi.EvaluationMetricsIdsResponse,
- rawResponse: _response.rawResponse,
- };
+ return { data: _response.body as AgentaApi.EvaluationMetricsResponse, rawResponse: _response.rawResponse };
}
if (_response.error.reason === "status-code") {
@@ -2141,31 +2060,32 @@ export class EvaluationsClient {
}
}
- return handleNonStatusCodeError(_response.error, _response.rawResponse, "DELETE", "/evaluations/metrics/");
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "POST", "/evaluations/metrics/query");
}
/**
- * @param {AgentaApi.EvaluationMetricsEditRequest} request
+ * @param {AgentaApi.FetchMetricRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.editMetrics({
- * metrics: [{}]
+ * await client.evaluations.fetchMetric({
+ * metrics_id: "metrics_id"
* })
*/
- public editMetrics(
- request: AgentaApi.EvaluationMetricsEditRequest,
+ public fetchMetric(
+ request: AgentaApi.FetchMetricRequest,
requestOptions?: EvaluationsClient.RequestOptions,
): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__editMetrics(request, requestOptions));
+ return core.HttpResponsePromise.fromPromise(this.__fetchMetric(request, requestOptions));
}
- private async __editMetrics(
- request: AgentaApi.EvaluationMetricsEditRequest,
+ private async __fetchMetric(
+ request: AgentaApi.FetchMetricRequest,
requestOptions?: EvaluationsClient.RequestOptions,
): Promise> {
+ const { metrics_id: metricsId } = request;
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
_authRequest.headers,
@@ -2177,14 +2097,11 @@ export class EvaluationsClient {
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.AgentaApiEnvironment.Default,
- "evaluations/metrics/",
+ `evaluations/metrics/${core.url.encodePathParam(metricsId)}`,
),
- method: "PATCH",
+ method: "GET",
headers: _headers,
- contentType: "application/json",
queryParameters: requestOptions?.queryParams,
- requestType: "json",
- body: request,
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
withCredentials: true,
@@ -2212,29 +2129,37 @@ export class EvaluationsClient {
}
}
- return handleNonStatusCodeError(_response.error, _response.rawResponse, "PATCH", "/evaluations/metrics/");
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "GET",
+ "/evaluations/metrics/{metrics_id}",
+ );
}
/**
- * @param {AgentaApi.EvaluationMetricsQueryRequest} request
+ * @param {AgentaApi.DeleteMetricRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.queryMetrics()
+ * await client.evaluations.deleteMetric({
+ * metrics_id: "metrics_id"
+ * })
*/
- public queryMetrics(
- request: AgentaApi.EvaluationMetricsQueryRequest = {},
+ public deleteMetric(
+ request: AgentaApi.DeleteMetricRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__queryMetrics(request, requestOptions));
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__deleteMetric(request, requestOptions));
}
- private async __queryMetrics(
- request: AgentaApi.EvaluationMetricsQueryRequest = {},
+ private async __deleteMetric(
+ request: AgentaApi.DeleteMetricRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): Promise> {
+ ): Promise> {
+ const { metrics_id: metricsId } = request;
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
_authRequest.headers,
@@ -2246,14 +2171,11 @@ export class EvaluationsClient {
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.AgentaApiEnvironment.Default,
- "evaluations/metrics/query",
+ `evaluations/metrics/${core.url.encodePathParam(metricsId)}`,
),
- method: "POST",
+ method: "DELETE",
headers: _headers,
- contentType: "application/json",
queryParameters: requestOptions?.queryParams,
- requestType: "json",
- body: request,
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
withCredentials: true,
@@ -2262,7 +2184,10 @@ export class EvaluationsClient {
logging: this._options.logging,
});
if (_response.ok) {
- return { data: _response.body as AgentaApi.EvaluationMetricsResponse, rawResponse: _response.rawResponse };
+ return {
+ data: _response.body as AgentaApi.EvaluationMetricsIdsResponse,
+ rawResponse: _response.rawResponse,
+ };
}
if (_response.error.reason === "status-code") {
@@ -2281,7 +2206,12 @@ export class EvaluationsClient {
}
}
- return handleNonStatusCodeError(_response.error, _response.rawResponse, "POST", "/evaluations/metrics/query");
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "DELETE",
+ "/evaluations/metrics/{metrics_id}",
+ );
}
/**
@@ -2946,28 +2876,25 @@ export class EvaluationsClient {
}
/**
- * @param {AgentaApi.FetchSimpleEvaluationRequest} request
+ * @param {AgentaApi.SimpleEvaluationQueryRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.fetchSimpleEvaluation({
- * evaluation_id: "evaluation_id"
- * })
+ * await client.evaluations.querySimpleEvaluations()
*/
- public fetchSimpleEvaluation(
- request: AgentaApi.FetchSimpleEvaluationRequest,
+ public querySimpleEvaluations(
+ request: AgentaApi.SimpleEvaluationQueryRequest = {},
requestOptions?: EvaluationsClient.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__fetchSimpleEvaluation(request, requestOptions));
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__querySimpleEvaluations(request, requestOptions));
}
- private async __fetchSimpleEvaluation(
- request: AgentaApi.FetchSimpleEvaluationRequest,
+ private async __querySimpleEvaluations(
+ request: AgentaApi.SimpleEvaluationQueryRequest = {},
requestOptions?: EvaluationsClient.RequestOptions,
- ): Promise> {
- const { evaluation_id: evaluationId } = request;
+ ): Promise> {
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
_authRequest.headers,
@@ -2979,11 +2906,14 @@ export class EvaluationsClient {
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.AgentaApiEnvironment.Default,
- `simple/evaluations/${core.url.encodePathParam(evaluationId)}`,
+ "simple/evaluations/query",
),
- method: "GET",
+ method: "POST",
headers: _headers,
+ contentType: "application/json",
queryParameters: requestOptions?.queryParams,
+ requestType: "json",
+ body: request,
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
withCredentials: true,
@@ -2992,7 +2922,7 @@ export class EvaluationsClient {
logging: this._options.logging,
});
if (_response.ok) {
- return { data: _response.body as AgentaApi.SimpleEvaluationResponse, rawResponse: _response.rawResponse };
+ return { data: _response.body as AgentaApi.SimpleEvaluationsResponse, rawResponse: _response.rawResponse };
}
if (_response.error.reason === "status-code") {
@@ -3011,36 +2941,31 @@ export class EvaluationsClient {
}
}
- return handleNonStatusCodeError(
- _response.error,
- _response.rawResponse,
- "GET",
- "/simple/evaluations/{evaluation_id}",
- );
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "POST", "/simple/evaluations/query");
}
/**
- * @param {AgentaApi.DeleteSimpleEvaluationRequest} request
+ * @param {AgentaApi.FetchSimpleEvaluationRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.deleteSimpleEvaluation({
+ * await client.evaluations.fetchSimpleEvaluation({
* evaluation_id: "evaluation_id"
* })
*/
- public deleteSimpleEvaluation(
- request: AgentaApi.DeleteSimpleEvaluationRequest,
+ public fetchSimpleEvaluation(
+ request: AgentaApi.FetchSimpleEvaluationRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__deleteSimpleEvaluation(request, requestOptions));
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__fetchSimpleEvaluation(request, requestOptions));
}
- private async __deleteSimpleEvaluation(
- request: AgentaApi.DeleteSimpleEvaluationRequest,
+ private async __fetchSimpleEvaluation(
+ request: AgentaApi.FetchSimpleEvaluationRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): Promise> {
+ ): Promise> {
const { evaluation_id: evaluationId } = request;
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
@@ -3055,7 +2980,7 @@ export class EvaluationsClient {
environments.AgentaApiEnvironment.Default,
`simple/evaluations/${core.url.encodePathParam(evaluationId)}`,
),
- method: "DELETE",
+ method: "GET",
headers: _headers,
queryParameters: requestOptions?.queryParams,
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
@@ -3066,7 +2991,7 @@ export class EvaluationsClient {
logging: this._options.logging,
});
if (_response.ok) {
- return { data: _response.body as AgentaApi.SimpleEvaluationIdResponse, rawResponse: _response.rawResponse };
+ return { data: _response.body as AgentaApi.SimpleEvaluationResponse, rawResponse: _response.rawResponse };
}
if (_response.error.reason === "status-code") {
@@ -3088,35 +3013,34 @@ export class EvaluationsClient {
return handleNonStatusCodeError(
_response.error,
_response.rawResponse,
- "DELETE",
+ "GET",
"/simple/evaluations/{evaluation_id}",
);
}
/**
- * @param {AgentaApi.SimpleEvaluationEditRequest} request
+ * @param {AgentaApi.DeleteSimpleEvaluationRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.editSimpleEvaluation({
- * evaluation_id: "evaluation_id",
- * evaluation: {}
+ * await client.evaluations.deleteSimpleEvaluation({
+ * evaluation_id: "evaluation_id"
* })
*/
- public editSimpleEvaluation(
- request: AgentaApi.SimpleEvaluationEditRequest,
+ public deleteSimpleEvaluation(
+ request: AgentaApi.DeleteSimpleEvaluationRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__editSimpleEvaluation(request, requestOptions));
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__deleteSimpleEvaluation(request, requestOptions));
}
- private async __editSimpleEvaluation(
- request: AgentaApi.SimpleEvaluationEditRequest,
+ private async __deleteSimpleEvaluation(
+ request: AgentaApi.DeleteSimpleEvaluationRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): Promise> {
- const { evaluation_id: evaluationId, ..._body } = request;
+ ): Promise> {
+ const { evaluation_id: evaluationId } = request;
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
_authRequest.headers,
@@ -3130,12 +3054,9 @@ export class EvaluationsClient {
environments.AgentaApiEnvironment.Default,
`simple/evaluations/${core.url.encodePathParam(evaluationId)}`,
),
- method: "PATCH",
+ method: "DELETE",
headers: _headers,
- contentType: "application/json",
queryParameters: requestOptions?.queryParams,
- requestType: "json",
- body: _body,
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
withCredentials: true,
@@ -3144,7 +3065,7 @@ export class EvaluationsClient {
logging: this._options.logging,
});
if (_response.ok) {
- return { data: _response.body as AgentaApi.SimpleEvaluationResponse, rawResponse: _response.rawResponse };
+ return { data: _response.body as AgentaApi.SimpleEvaluationIdResponse, rawResponse: _response.rawResponse };
}
if (_response.error.reason === "status-code") {
@@ -3166,31 +3087,35 @@ export class EvaluationsClient {
return handleNonStatusCodeError(
_response.error,
_response.rawResponse,
- "PATCH",
+ "DELETE",
"/simple/evaluations/{evaluation_id}",
);
}
/**
- * @param {AgentaApi.SimpleEvaluationQueryRequest} request
+ * @param {AgentaApi.SimpleEvaluationEditRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link AgentaApi.UnprocessableEntityError}
*
* @example
- * await client.evaluations.querySimpleEvaluations()
+ * await client.evaluations.editSimpleEvaluation({
+ * evaluation_id: "evaluation_id",
+ * evaluation: {}
+ * })
*/
- public querySimpleEvaluations(
- request: AgentaApi.SimpleEvaluationQueryRequest = {},
+ public editSimpleEvaluation(
+ request: AgentaApi.SimpleEvaluationEditRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): core.HttpResponsePromise {
- return core.HttpResponsePromise.fromPromise(this.__querySimpleEvaluations(request, requestOptions));
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__editSimpleEvaluation(request, requestOptions));
}
- private async __querySimpleEvaluations(
- request: AgentaApi.SimpleEvaluationQueryRequest = {},
+ private async __editSimpleEvaluation(
+ request: AgentaApi.SimpleEvaluationEditRequest,
requestOptions?: EvaluationsClient.RequestOptions,
- ): Promise> {
+ ): Promise> {
+ const { evaluation_id: evaluationId, ..._body } = request;
const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
_authRequest.headers,
@@ -3202,14 +3127,14 @@ export class EvaluationsClient {
(await core.Supplier.get(this._options.baseUrl)) ??
(await core.Supplier.get(this._options.environment)) ??
environments.AgentaApiEnvironment.Default,
- "simple/evaluations/query",
+ `simple/evaluations/${core.url.encodePathParam(evaluationId)}`,
),
- method: "POST",
+ method: "PATCH",
headers: _headers,
contentType: "application/json",
queryParameters: requestOptions?.queryParams,
requestType: "json",
- body: request,
+ body: _body,
timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
withCredentials: true,
@@ -3218,7 +3143,7 @@ export class EvaluationsClient {
logging: this._options.logging,
});
if (_response.ok) {
- return { data: _response.body as AgentaApi.SimpleEvaluationsResponse, rawResponse: _response.rawResponse };
+ return { data: _response.body as AgentaApi.SimpleEvaluationResponse, rawResponse: _response.rawResponse };
}
if (_response.error.reason === "status-code") {
@@ -3237,7 +3162,12 @@ export class EvaluationsClient {
}
}
- return handleNonStatusCodeError(_response.error, _response.rawResponse, "POST", "/simple/evaluations/query");
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "PATCH",
+ "/simple/evaluations/{evaluation_id}",
+ );
}
/**
@@ -3536,6 +3466,719 @@ export class EvaluationsClient {
);
}
+ /**
+ * @param {AgentaApi.PopulateSliceRequest} request
+ * @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link AgentaApi.UnprocessableEntityError}
+ *
+ * @example
+ * await client.evaluations.populateSlice({
+ * evaluation_id: "evaluation_id",
+ * results: [{
+ * step_key: "step_key",
+ * scenario_id: "scenario_id",
+ * run_id: "run_id"
+ * }]
+ * })
+ */
+ public populateSlice(
+ request: AgentaApi.PopulateSliceRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__populateSlice(request, requestOptions));
+ }
+
+ private async __populateSlice(
+ request: AgentaApi.PopulateSliceRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): Promise> {
+ const { evaluation_id: evaluationId, ..._body } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.AgentaApiEnvironment.Default,
+ `simple/evaluations/${core.url.encodePathParam(evaluationId)}/populate`,
+ ),
+ method: "POST",
+ headers: _headers,
+ contentType: "application/json",
+ queryParameters: requestOptions?.queryParams,
+ requestType: "json",
+ body: _body,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ withCredentials: true,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body as AgentaApi.EvaluationResultsResponse, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 422:
+ throw new AgentaApi.UnprocessableEntityError(
+ _response.error.body as AgentaApi.HttpValidationError,
+ _response.rawResponse,
+ );
+ default:
+ throw new errors.AgentaApiError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "POST",
+ "/simple/evaluations/{evaluation_id}/populate",
+ );
+ }
+
+ /**
+ * @param {AgentaApi.ProcessSliceRequest} request
+ * @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link AgentaApi.UnprocessableEntityError}
+ *
+ * @example
+ * await client.evaluations.processSlice({
+ * evaluation_id: "evaluation_id"
+ * })
+ */
+ public processSlice(
+ request: AgentaApi.ProcessSliceRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__processSlice(request, requestOptions));
+ }
+
+ private async __processSlice(
+ request: AgentaApi.ProcessSliceRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): Promise> {
+ const { evaluation_id: evaluationId, ..._body } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.AgentaApiEnvironment.Default,
+ `simple/evaluations/${core.url.encodePathParam(evaluationId)}/process`,
+ ),
+ method: "POST",
+ headers: _headers,
+ contentType: "application/json",
+ queryParameters: requestOptions?.queryParams,
+ requestType: "json",
+ body: _body,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ withCredentials: true,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 422:
+ throw new AgentaApi.UnprocessableEntityError(
+ _response.error.body as AgentaApi.HttpValidationError,
+ _response.rawResponse,
+ );
+ default:
+ throw new errors.AgentaApiError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "POST",
+ "/simple/evaluations/{evaluation_id}/process",
+ );
+ }
+
+ /**
+ * @param {AgentaApi.ProbeSliceRequest} request
+ * @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link AgentaApi.UnprocessableEntityError}
+ *
+ * @example
+ * await client.evaluations.probeSlice({
+ * evaluation_id: "evaluation_id"
+ * })
+ */
+ public probeSlice(
+ request: AgentaApi.ProbeSliceRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__probeSlice(request, requestOptions));
+ }
+
+ private async __probeSlice(
+ request: AgentaApi.ProbeSliceRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): Promise> {
+ const { evaluation_id: evaluationId, ..._body } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.AgentaApiEnvironment.Default,
+ `simple/evaluations/${core.url.encodePathParam(evaluationId)}/probe`,
+ ),
+ method: "POST",
+ headers: _headers,
+ contentType: "application/json",
+ queryParameters: requestOptions?.queryParams,
+ requestType: "json",
+ body: _body,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ withCredentials: true,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body as AgentaApi.EvaluationResultsResponse, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 422:
+ throw new AgentaApi.UnprocessableEntityError(
+ _response.error.body as AgentaApi.HttpValidationError,
+ _response.rawResponse,
+ );
+ default:
+ throw new errors.AgentaApiError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "POST",
+ "/simple/evaluations/{evaluation_id}/probe",
+ );
+ }
+
+ /**
+ * @param {AgentaApi.PruneSliceRequest} request
+ * @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link AgentaApi.UnprocessableEntityError}
+ *
+ * @example
+ * await client.evaluations.pruneSlice({
+ * evaluation_id: "evaluation_id"
+ * })
+ */
+ public pruneSlice(
+ request: AgentaApi.PruneSliceRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__pruneSlice(request, requestOptions));
+ }
+
+ private async __pruneSlice(
+ request: AgentaApi.PruneSliceRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): Promise> {
+ const { evaluation_id: evaluationId, ..._body } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.AgentaApiEnvironment.Default,
+ `simple/evaluations/${core.url.encodePathParam(evaluationId)}/prune`,
+ ),
+ method: "POST",
+ headers: _headers,
+ contentType: "application/json",
+ queryParameters: requestOptions?.queryParams,
+ requestType: "json",
+ body: _body,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ withCredentials: true,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: undefined, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 422:
+ throw new AgentaApi.UnprocessableEntityError(
+ _response.error.body as AgentaApi.HttpValidationError,
+ _response.rawResponse,
+ );
+ default:
+ throw new errors.AgentaApiError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "POST",
+ "/simple/evaluations/{evaluation_id}/prune",
+ );
+ }
+
+ /**
+ * @param {AgentaApi.AddScenariosRequest} request
+ * @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link AgentaApi.UnprocessableEntityError}
+ *
+ * @example
+ * await client.evaluations.addScenarios({
+ * evaluation_id: "evaluation_id",
+ * count: 1
+ * })
+ */
+ public addScenarios(
+ request: AgentaApi.AddScenariosRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__addScenarios(request, requestOptions));
+ }
+
+ private async __addScenarios(
+ request: AgentaApi.AddScenariosRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): Promise> {
+ const { evaluation_id: evaluationId, ..._body } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.AgentaApiEnvironment.Default,
+ `simple/evaluations/${core.url.encodePathParam(evaluationId)}/scenarios/add`,
+ ),
+ method: "POST",
+ headers: _headers,
+ contentType: "application/json",
+ queryParameters: requestOptions?.queryParams,
+ requestType: "json",
+ body: _body,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ withCredentials: true,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return {
+ data: _response.body as AgentaApi.EvaluationScenariosResponse,
+ rawResponse: _response.rawResponse,
+ };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 422:
+ throw new AgentaApi.UnprocessableEntityError(
+ _response.error.body as AgentaApi.HttpValidationError,
+ _response.rawResponse,
+ );
+ default:
+ throw new errors.AgentaApiError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "POST",
+ "/simple/evaluations/{evaluation_id}/scenarios/add",
+ );
+ }
+
+ /**
+ * @param {AgentaApi.RemoveScenariosRequest} request
+ * @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link AgentaApi.UnprocessableEntityError}
+ *
+ * @example
+ * await client.evaluations.removeScenarios({
+ * evaluation_id: "evaluation_id",
+ * scenario_ids: ["scenario_ids"]
+ * })
+ */
+ public removeScenarios(
+ request: AgentaApi.RemoveScenariosRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__removeScenarios(request, requestOptions));
+ }
+
+ private async __removeScenarios(
+ request: AgentaApi.RemoveScenariosRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): Promise> {
+ const { evaluation_id: evaluationId, ..._body } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.AgentaApiEnvironment.Default,
+ `simple/evaluations/${core.url.encodePathParam(evaluationId)}/scenarios/remove`,
+ ),
+ method: "POST",
+ headers: _headers,
+ contentType: "application/json",
+ queryParameters: requestOptions?.queryParams,
+ requestType: "json",
+ body: _body,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ withCredentials: true,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: undefined, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 422:
+ throw new AgentaApi.UnprocessableEntityError(
+ _response.error.body as AgentaApi.HttpValidationError,
+ _response.rawResponse,
+ );
+ default:
+ throw new errors.AgentaApiError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "POST",
+ "/simple/evaluations/{evaluation_id}/scenarios/remove",
+ );
+ }
+
+ /**
+ * @param {AgentaApi.AddStepsRequest} request
+ * @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link AgentaApi.UnprocessableEntityError}
+ *
+ * @example
+ * await client.evaluations.addSteps({
+ * evaluation_id: "evaluation_id",
+ * steps: [{
+ * key: "key",
+ * type: "input",
+ * origin: "custom",
+ * references: {
+ * "key": {}
+ * }
+ * }]
+ * })
+ */
+ public addSteps(
+ request: AgentaApi.AddStepsRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__addSteps(request, requestOptions));
+ }
+
+ private async __addSteps(
+ request: AgentaApi.AddStepsRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): Promise> {
+ const { evaluation_id: evaluationId, ..._body } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.AgentaApiEnvironment.Default,
+ `simple/evaluations/${core.url.encodePathParam(evaluationId)}/steps/add`,
+ ),
+ method: "POST",
+ headers: _headers,
+ contentType: "application/json",
+ queryParameters: requestOptions?.queryParams,
+ requestType: "json",
+ body: _body,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ withCredentials: true,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body as AgentaApi.EvaluationRunResponse, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 422:
+ throw new AgentaApi.UnprocessableEntityError(
+ _response.error.body as AgentaApi.HttpValidationError,
+ _response.rawResponse,
+ );
+ default:
+ throw new errors.AgentaApiError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "POST",
+ "/simple/evaluations/{evaluation_id}/steps/add",
+ );
+ }
+
+ /**
+ * @param {AgentaApi.RemoveStepsRequest} request
+ * @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link AgentaApi.UnprocessableEntityError}
+ *
+ * @example
+ * await client.evaluations.removeSteps({
+ * evaluation_id: "evaluation_id",
+ * step_keys: ["step_keys"]
+ * })
+ */
+ public removeSteps(
+ request: AgentaApi.RemoveStepsRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__removeSteps(request, requestOptions));
+ }
+
+ private async __removeSteps(
+ request: AgentaApi.RemoveStepsRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): Promise> {
+ const { evaluation_id: evaluationId, ..._body } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.AgentaApiEnvironment.Default,
+ `simple/evaluations/${core.url.encodePathParam(evaluationId)}/steps/remove`,
+ ),
+ method: "POST",
+ headers: _headers,
+ contentType: "application/json",
+ queryParameters: requestOptions?.queryParams,
+ requestType: "json",
+ body: _body,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ withCredentials: true,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body as AgentaApi.EvaluationRunResponse, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 422:
+ throw new AgentaApi.UnprocessableEntityError(
+ _response.error.body as AgentaApi.HttpValidationError,
+ _response.rawResponse,
+ );
+ default:
+ throw new errors.AgentaApiError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "POST",
+ "/simple/evaluations/{evaluation_id}/steps/remove",
+ );
+ }
+
+ /**
+ * @param {AgentaApi.SetRepeatsRequest} request
+ * @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
+ *
+ * @throws {@link AgentaApi.UnprocessableEntityError}
+ *
+ * @example
+ * await client.evaluations.setRepeats({
+ * evaluation_id: "evaluation_id",
+ * repeats: 1
+ * })
+ */
+ public setRepeats(
+ request: AgentaApi.SetRepeatsRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): core.HttpResponsePromise {
+ return core.HttpResponsePromise.fromPromise(this.__setRepeats(request, requestOptions));
+ }
+
+ private async __setRepeats(
+ request: AgentaApi.SetRepeatsRequest,
+ requestOptions?: EvaluationsClient.RequestOptions,
+ ): Promise> {
+ const { evaluation_id: evaluationId, ..._body } = request;
+ const _authRequest: core.AuthRequest = await this._options.authProvider.getAuthRequest();
+ const _headers: core.Fetcher.Args["headers"] = mergeHeaders(
+ _authRequest.headers,
+ this._options?.headers,
+ requestOptions?.headers,
+ );
+ const _response = await core.fetcher({
+ url: core.url.join(
+ (await core.Supplier.get(this._options.baseUrl)) ??
+ (await core.Supplier.get(this._options.environment)) ??
+ environments.AgentaApiEnvironment.Default,
+ `simple/evaluations/${core.url.encodePathParam(evaluationId)}/repeats/set`,
+ ),
+ method: "POST",
+ headers: _headers,
+ contentType: "application/json",
+ queryParameters: requestOptions?.queryParams,
+ requestType: "json",
+ body: _body,
+ timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 30) * 1000,
+ maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries,
+ withCredentials: true,
+ abortSignal: requestOptions?.abortSignal,
+ fetchFn: this._options?.fetch,
+ logging: this._options.logging,
+ });
+ if (_response.ok) {
+ return { data: _response.body as AgentaApi.EvaluationRunResponse, rawResponse: _response.rawResponse };
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 422:
+ throw new AgentaApi.UnprocessableEntityError(
+ _response.error.body as AgentaApi.HttpValidationError,
+ _response.rawResponse,
+ );
+ default:
+ throw new errors.AgentaApiError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ rawResponse: _response.rawResponse,
+ });
+ }
+ }
+
+ return handleNonStatusCodeError(
+ _response.error,
+ _response.rawResponse,
+ "POST",
+ "/simple/evaluations/{evaluation_id}/repeats/set",
+ );
+ }
+
/**
* @param {AgentaApi.SimpleQueueCreateRequest} request
* @param {EvaluationsClient.RequestOptions} requestOptions - Request-specific configuration.
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/AddScenariosRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/AddScenariosRequest.ts
new file mode 100644
index 0000000000..d259680c21
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/AddScenariosRequest.ts
@@ -0,0 +1,14 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * evaluation_id: "evaluation_id",
+ * count: 1
+ * }
+ */
+export interface AddScenariosRequest {
+ evaluation_id: string;
+ count: number;
+ timestamp?: string | null;
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/AddStepsRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/AddStepsRequest.ts
new file mode 100644
index 0000000000..357269fd7d
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/AddStepsRequest.ts
@@ -0,0 +1,22 @@
+// This file was auto-generated by Fern from our API Definition.
+
+import type * as AgentaApi from "../../../../index.js";
+
+/**
+ * @example
+ * {
+ * evaluation_id: "evaluation_id",
+ * steps: [{
+ * key: "key",
+ * type: "input",
+ * origin: "custom",
+ * references: {
+ * "key": {}
+ * }
+ * }]
+ * }
+ */
+export interface AddStepsRequest {
+ evaluation_id: string;
+ steps: AgentaApi.EvaluationRunDataStep[];
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/CloseRunWithStatusRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/CloseRunWithStatusRequest.ts
deleted file mode 100644
index fb65cad5ed..0000000000
--- a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/CloseRunWithStatusRequest.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-import type * as AgentaApi from "../../../../index.js";
-
-/**
- * @example
- * {
- * run_id: "run_id",
- * status: "pending"
- * }
- */
-export interface CloseRunWithStatusRequest {
- run_id: string;
- status: AgentaApi.EvaluationStatus | null;
-}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/DeleteMetricRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/DeleteMetricRequest.ts
new file mode 100644
index 0000000000..09b07a99a5
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/DeleteMetricRequest.ts
@@ -0,0 +1,11 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * metrics_id: "metrics_id"
+ * }
+ */
+export interface DeleteMetricRequest {
+ metrics_id: string;
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsEditRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsEditRequest.ts
deleted file mode 100644
index 3ee9ef0d10..0000000000
--- a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsEditRequest.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-import type * as AgentaApi from "../../../../index.js";
-
-/**
- * @example
- * {
- * metrics: [{}]
- * }
- */
-export interface EvaluationMetricsEditRequest {
- metrics: AgentaApi.EvaluationMetricsEdit[];
-}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsCreateRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsSetRequest.ts
similarity index 85%
rename from web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsCreateRequest.ts
rename to web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsSetRequest.ts
index 7df433e8b3..83157d0da8 100644
--- a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsCreateRequest.ts
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsSetRequest.ts
@@ -10,6 +10,6 @@ import type * as AgentaApi from "../../../../index.js";
* }]
* }
*/
-export interface EvaluationMetricsCreateRequest {
+export interface EvaluationMetricsSetRequest {
metrics: AgentaApi.EvaluationMetricsCreate[];
}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultEditRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultEditRequest.ts
deleted file mode 100644
index b9ba50f4b5..0000000000
--- a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultEditRequest.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-import type * as AgentaApi from "../../../../index.js";
-
-/**
- * @example
- * {
- * result_id: "result_id",
- * result: {}
- * }
- */
-export interface EvaluationResultEditRequest {
- result_id: string;
- result: AgentaApi.EvaluationResultEdit;
-}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultsEditRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultsEditRequest.ts
deleted file mode 100644
index 94fa7b02c6..0000000000
--- a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultsEditRequest.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-import type * as AgentaApi from "../../../../index.js";
-
-/**
- * @example
- * {
- * results: [{}]
- * }
- */
-export interface EvaluationResultsEditRequest {
- results: AgentaApi.EvaluationResultEdit[];
-}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultsCreateRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultsSetRequest.ts
similarity index 88%
rename from web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultsCreateRequest.ts
rename to web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultsSetRequest.ts
index 6a7d6a9a54..a16e3cfad8 100644
--- a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultsCreateRequest.ts
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/EvaluationResultsSetRequest.ts
@@ -12,6 +12,6 @@ import type * as AgentaApi from "../../../../index.js";
* }]
* }
*/
-export interface EvaluationResultsCreateRequest {
+export interface EvaluationResultsSetRequest {
results: AgentaApi.EvaluationResultCreate[];
}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/FetchDefaultQueueRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/FetchDefaultQueueRequest.ts
new file mode 100644
index 0000000000..ebadf853c6
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/FetchDefaultQueueRequest.ts
@@ -0,0 +1,11 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * run_id: "run_id"
+ * }
+ */
+export interface FetchDefaultQueueRequest {
+ run_id: string;
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/FetchMetricRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/FetchMetricRequest.ts
new file mode 100644
index 0000000000..56d5369441
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/FetchMetricRequest.ts
@@ -0,0 +1,11 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * metrics_id: "metrics_id"
+ * }
+ */
+export interface FetchMetricRequest {
+ metrics_id: string;
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/PopulateSliceRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/PopulateSliceRequest.ts
new file mode 100644
index 0000000000..1e26b777c7
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/PopulateSliceRequest.ts
@@ -0,0 +1,19 @@
+// This file was auto-generated by Fern from our API Definition.
+
+import type * as AgentaApi from "../../../../index.js";
+
+/**
+ * @example
+ * {
+ * evaluation_id: "evaluation_id",
+ * results: [{
+ * step_key: "step_key",
+ * scenario_id: "scenario_id",
+ * run_id: "run_id"
+ * }]
+ * }
+ */
+export interface PopulateSliceRequest {
+ evaluation_id: string;
+ results: AgentaApi.EvaluationResultCreate[];
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/ProbeSliceRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/ProbeSliceRequest.ts
new file mode 100644
index 0000000000..bff93fbed8
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/ProbeSliceRequest.ts
@@ -0,0 +1,14 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * evaluation_id: "evaluation_id"
+ * }
+ */
+export interface ProbeSliceRequest {
+ evaluation_id: string;
+ scenario_ids?: string[] | null;
+ step_keys?: string[] | null;
+ repeat_idxs?: number[] | null;
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/ProcessSliceRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/ProcessSliceRequest.ts
new file mode 100644
index 0000000000..dbfa77046b
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/ProcessSliceRequest.ts
@@ -0,0 +1,15 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * evaluation_id: "evaluation_id"
+ * }
+ */
+export interface ProcessSliceRequest {
+ evaluation_id: string;
+ scenario_ids?: string[] | null;
+ step_keys?: string[] | null;
+ repeat_idxs?: number[] | null;
+ overwrite?: boolean;
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/PruneSliceRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/PruneSliceRequest.ts
new file mode 100644
index 0000000000..1bc475dc64
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/PruneSliceRequest.ts
@@ -0,0 +1,14 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * evaluation_id: "evaluation_id"
+ * }
+ */
+export interface PruneSliceRequest {
+ evaluation_id: string;
+ scenario_ids?: string[] | null;
+ step_keys?: string[] | null;
+ repeat_idxs?: number[] | null;
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/RemoveScenariosRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/RemoveScenariosRequest.ts
new file mode 100644
index 0000000000..c13007312d
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/RemoveScenariosRequest.ts
@@ -0,0 +1,13 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * evaluation_id: "evaluation_id",
+ * scenario_ids: ["scenario_ids"]
+ * }
+ */
+export interface RemoveScenariosRequest {
+ evaluation_id: string;
+ scenario_ids: string[];
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/RemoveStepsRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/RemoveStepsRequest.ts
new file mode 100644
index 0000000000..7a1c2f0e1b
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/RemoveStepsRequest.ts
@@ -0,0 +1,13 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * evaluation_id: "evaluation_id",
+ * step_keys: ["step_keys"]
+ * }
+ */
+export interface RemoveStepsRequest {
+ evaluation_id: string;
+ step_keys: string[];
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/SetRepeatsRequest.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/SetRepeatsRequest.ts
new file mode 100644
index 0000000000..2bee7c40d3
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/SetRepeatsRequest.ts
@@ -0,0 +1,13 @@
+// This file was auto-generated by Fern from our API Definition.
+
+/**
+ * @example
+ * {
+ * evaluation_id: "evaluation_id",
+ * repeats: 1
+ * }
+ */
+export interface SetRepeatsRequest {
+ evaluation_id: string;
+ repeats: number;
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/index.ts b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/index.ts
index 9aca9b0438..6d7fa512d5 100644
--- a/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/index.ts
+++ b/web/packages/agenta-api-client/src/generated/api/resources/evaluations/client/requests/index.ts
@@ -1,27 +1,26 @@
+export type { AddScenariosRequest } from "./AddScenariosRequest.js";
+export type { AddStepsRequest } from "./AddStepsRequest.js";
export type { CloseRunRequest } from "./CloseRunRequest.js";
-export type { CloseRunWithStatusRequest } from "./CloseRunWithStatusRequest.js";
export type { CloseSimpleEvaluationRequest } from "./CloseSimpleEvaluationRequest.js";
+export type { DeleteMetricRequest } from "./DeleteMetricRequest.js";
export type { DeleteQueueRequest } from "./DeleteQueueRequest.js";
export type { DeleteResultRequest } from "./DeleteResultRequest.js";
export type { DeleteRunRequest } from "./DeleteRunRequest.js";
export type { DeleteScenarioRequest } from "./DeleteScenarioRequest.js";
export type { DeleteSimpleEvaluationRequest } from "./DeleteSimpleEvaluationRequest.js";
-export type { EvaluationMetricsCreateRequest } from "./EvaluationMetricsCreateRequest.js";
-export type { EvaluationMetricsEditRequest } from "./EvaluationMetricsEditRequest.js";
export type { EvaluationMetricsIdsRequest } from "./EvaluationMetricsIdsRequest.js";
export type { EvaluationMetricsQueryRequest } from "./EvaluationMetricsQueryRequest.js";
export type { EvaluationMetricsRefreshRequest } from "./EvaluationMetricsRefreshRequest.js";
+export type { EvaluationMetricsSetRequest } from "./EvaluationMetricsSetRequest.js";
export type { EvaluationQueueEditRequest } from "./EvaluationQueueEditRequest.js";
export type { EvaluationQueueIdsRequest } from "./EvaluationQueueIdsRequest.js";
export type { EvaluationQueueQueryRequest } from "./EvaluationQueueQueryRequest.js";
export type { EvaluationQueueScenariosQueryRequest } from "./EvaluationQueueScenariosQueryRequest.js";
export type { EvaluationQueuesCreateRequest } from "./EvaluationQueuesCreateRequest.js";
export type { EvaluationQueuesEditRequest } from "./EvaluationQueuesEditRequest.js";
-export type { EvaluationResultEditRequest } from "./EvaluationResultEditRequest.js";
export type { EvaluationResultIdsRequest } from "./EvaluationResultIdsRequest.js";
export type { EvaluationResultQueryRequest } from "./EvaluationResultQueryRequest.js";
-export type { EvaluationResultsCreateRequest } from "./EvaluationResultsCreateRequest.js";
-export type { EvaluationResultsEditRequest } from "./EvaluationResultsEditRequest.js";
+export type { EvaluationResultsSetRequest } from "./EvaluationResultsSetRequest.js";
export type { EvaluationRunEditRequest } from "./EvaluationRunEditRequest.js";
export type { EvaluationRunQueryRequest } from "./EvaluationRunQueryRequest.js";
export type { EvaluationRunsCreateRequest } from "./EvaluationRunsCreateRequest.js";
@@ -31,6 +30,8 @@ export type { EvaluationScenarioIdsRequest } from "./EvaluationScenarioIdsReques
export type { EvaluationScenarioQueryRequest } from "./EvaluationScenarioQueryRequest.js";
export type { EvaluationScenariosCreateRequest } from "./EvaluationScenariosCreateRequest.js";
export type { EvaluationScenariosEditRequest } from "./EvaluationScenariosEditRequest.js";
+export type { FetchDefaultQueueRequest } from "./FetchDefaultQueueRequest.js";
+export type { FetchMetricRequest } from "./FetchMetricRequest.js";
export type { FetchQueueRequest } from "./FetchQueueRequest.js";
export type { FetchResultRequest } from "./FetchResultRequest.js";
export type { FetchRunRequest } from "./FetchRunRequest.js";
@@ -39,6 +40,13 @@ export type { FetchSimpleEvaluationRequest } from "./FetchSimpleEvaluationReques
export type { FetchSimpleQueueRequest } from "./FetchSimpleQueueRequest.js";
export type { OpenRunRequest } from "./OpenRunRequest.js";
export type { OpenSimpleEvaluationRequest } from "./OpenSimpleEvaluationRequest.js";
+export type { PopulateSliceRequest } from "./PopulateSliceRequest.js";
+export type { ProbeSliceRequest } from "./ProbeSliceRequest.js";
+export type { ProcessSliceRequest } from "./ProcessSliceRequest.js";
+export type { PruneSliceRequest } from "./PruneSliceRequest.js";
+export type { RemoveScenariosRequest } from "./RemoveScenariosRequest.js";
+export type { RemoveStepsRequest } from "./RemoveStepsRequest.js";
+export type { SetRepeatsRequest } from "./SetRepeatsRequest.js";
export type { SimpleEvaluationCreateRequest } from "./SimpleEvaluationCreateRequest.js";
export type { SimpleEvaluationEditRequest } from "./SimpleEvaluationEditRequest.js";
export type { SimpleEvaluationQueryRequest } from "./SimpleEvaluationQueryRequest.js";
diff --git a/web/packages/agenta-api-client/src/generated/api/resources/workspaces/client/Client.ts b/web/packages/agenta-api-client/src/generated/api/resources/workspaces/client/Client.ts
index cf812ff935..8f2b5e00dc 100644
--- a/web/packages/agenta-api-client/src/generated/api/resources/workspaces/client/Client.ts
+++ b/web/packages/agenta-api-client/src/generated/api/resources/workspaces/client/Client.ts
@@ -348,7 +348,7 @@ export class WorkspacesClient {
* Returns a list of all available workspace roles.
*
* Returns:
- * List[WorkspaceRoleResponse]: A list of WorkspaceRole objects representing the available workspace roles.
+ * List[WorkspaceRoleResponse]: A list of DefaultRole objects representing the available workspace roles.
*
* Raises:
* HTTPException: If an error occurs while retrieving the workspace roles.
diff --git a/web/packages/agenta-api-client/src/generated/api/types/EvaluationMetricsEdit.ts b/web/packages/agenta-api-client/src/generated/api/types/EvaluationMetricsEdit.ts
deleted file mode 100644
index 7b82dd05c7..0000000000
--- a/web/packages/agenta-api-client/src/generated/api/types/EvaluationMetricsEdit.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-import type * as AgentaApi from "../index.js";
-
-export interface EvaluationMetricsEdit {
- flags?: (Record | null) | undefined;
- tags?: (Record | null) | undefined;
- meta?: (Record | null) | undefined;
- id?: (string | null) | undefined;
- version?: string | undefined;
- status?: (AgentaApi.EvaluationStatus | null) | undefined;
- data?: (Record | null) | undefined;
-}
diff --git a/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueFlags.ts b/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueFlags.ts
index 704bf78a1e..4a1689ddbc 100644
--- a/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueFlags.ts
+++ b/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueFlags.ts
@@ -2,4 +2,5 @@
export interface EvaluationQueueFlags {
is_sequential?: boolean | undefined;
+ is_default?: boolean | undefined;
}
diff --git a/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueQuery.ts b/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueQuery.ts
index 73b9881968..e5d91619ee 100644
--- a/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueQuery.ts
+++ b/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueQuery.ts
@@ -8,6 +8,7 @@ export interface EvaluationQueueQuery {
meta?: (Record | null) | undefined;
name?: (string | null) | undefined;
description?: (string | null) | undefined;
+ include_archived?: (boolean | null) | undefined;
user_id?: (string | null) | undefined;
user_ids?: (string[] | null) | undefined;
run_id?: (string | null) | undefined;
diff --git a/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueQueryFlags.ts b/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueQueryFlags.ts
index d8c6d22cab..147d4e6892 100644
--- a/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueQueryFlags.ts
+++ b/web/packages/agenta-api-client/src/generated/api/types/EvaluationQueueQueryFlags.ts
@@ -2,4 +2,5 @@
export interface EvaluationQueueQueryFlags {
is_sequential?: (boolean | null) | undefined;
+ is_default?: (boolean | null) | undefined;
}
diff --git a/web/packages/agenta-api-client/src/generated/api/types/EvaluationResultEdit.ts b/web/packages/agenta-api-client/src/generated/api/types/EvaluationResultEdit.ts
deleted file mode 100644
index 03bdade81e..0000000000
--- a/web/packages/agenta-api-client/src/generated/api/types/EvaluationResultEdit.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-// This file was auto-generated by Fern from our API Definition.
-
-import type * as AgentaApi from "../index.js";
-
-export interface EvaluationResultEdit {
- flags?: (Record | null) | undefined;
- tags?: (Record | null) | undefined;
- meta?: (Record | null) | undefined;
- id?: (string | null) | undefined;
- version?: string | undefined;
- hash_id?: (string | null) | undefined;
- trace_id?: (string | null) | undefined;
- testcase_id?: (string | null) | undefined;
- error?: (Record | null) | undefined;
- status?: (AgentaApi.EvaluationStatus | null) | undefined;
-}
diff --git a/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunData.ts b/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunData.ts
index fcf1b03d2f..d374ae5d1d 100644
--- a/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunData.ts
+++ b/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunData.ts
@@ -5,5 +5,6 @@ import type * as AgentaApi from "../index.js";
export interface EvaluationRunData {
steps?: (AgentaApi.EvaluationRunDataStep[] | null) | undefined;
repeats?: (number | null) | undefined;
+ concurrency?: (AgentaApi.EvaluationRunDataConcurrency | null) | undefined;
mappings?: (AgentaApi.EvaluationRunDataMapping[] | null) | undefined;
}
diff --git a/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunDataConcurrency.ts b/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunDataConcurrency.ts
new file mode 100644
index 0000000000..acce53bad5
--- /dev/null
+++ b/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunDataConcurrency.ts
@@ -0,0 +1,7 @@
+// This file was auto-generated by Fern from our API Definition.
+
+export interface EvaluationRunDataConcurrency {
+ batch_size?: (number | null) | undefined;
+ max_retries?: (number | null) | undefined;
+ retry_delay?: (number | null) | undefined;
+}
diff --git a/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunFlags.ts b/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunFlags.ts
index 7c69a5dba6..2eaa9f478b 100644
--- a/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunFlags.ts
+++ b/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunFlags.ts
@@ -9,6 +9,8 @@ export interface EvaluationRunFlags {
is_split?: boolean | undefined;
has_queries?: boolean | undefined;
has_testsets?: boolean | undefined;
+ has_traces?: boolean | undefined;
+ has_testcases?: boolean | undefined;
has_evaluators?: boolean | undefined;
has_custom?: boolean | undefined;
has_human?: boolean | undefined;
diff --git a/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunQueryFlags.ts b/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunQueryFlags.ts
index 066aabf75e..5a48f57515 100644
--- a/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunQueryFlags.ts
+++ b/web/packages/agenta-api-client/src/generated/api/types/EvaluationRunQueryFlags.ts
@@ -9,6 +9,8 @@ export interface EvaluationRunQueryFlags {
is_split?: (boolean | null) | undefined;
has_queries?: (boolean | null) | undefined;
has_testsets?: (boolean | null) | undefined;
+ has_traces?: (boolean | null) | undefined;
+ has_testcases?: (boolean | null) | undefined;
has_evaluators?: (boolean | null) | undefined;
has_custom?: (boolean | null) | undefined;
has_human?: (boolean | null) | undefined;
diff --git a/web/packages/agenta-api-client/src/generated/api/types/SimpleEvaluationData.ts b/web/packages/agenta-api-client/src/generated/api/types/SimpleEvaluationData.ts
index 7b5ea0981d..9d3ff08660 100644
--- a/web/packages/agenta-api-client/src/generated/api/types/SimpleEvaluationData.ts
+++ b/web/packages/agenta-api-client/src/generated/api/types/SimpleEvaluationData.ts
@@ -9,6 +9,7 @@ export interface SimpleEvaluationData {
application_steps?: (SimpleEvaluationData.ApplicationSteps | null) | undefined;
evaluator_steps?: (SimpleEvaluationData.EvaluatorSteps | null) | undefined;
repeats?: (number | null) | undefined;
+ concurrency?: (AgentaApi.EvaluationRunDataConcurrency | null) | undefined;
}
export namespace SimpleEvaluationData {
diff --git a/web/packages/agenta-api-client/src/generated/api/types/SimpleQueueKind.ts b/web/packages/agenta-api-client/src/generated/api/types/SimpleQueueKind.ts
index ce4774a2f3..7a25f30cb0 100644
--- a/web/packages/agenta-api-client/src/generated/api/types/SimpleQueueKind.ts
+++ b/web/packages/agenta-api-client/src/generated/api/types/SimpleQueueKind.ts
@@ -1,6 +1,8 @@
// This file was auto-generated by Fern from our API Definition.
export const SimpleQueueKind = {
+ Queries: "queries",
+ Testsets: "testsets",
Traces: "traces",
Testcases: "testcases",
} as const;
diff --git a/web/packages/agenta-api-client/src/generated/api/types/index.ts b/web/packages/agenta-api-client/src/generated/api/types/index.ts
index 70426c2c8b..c59c7bd033 100644
--- a/web/packages/agenta-api-client/src/generated/api/types/index.ts
+++ b/web/packages/agenta-api-client/src/generated/api/types/index.ts
@@ -133,7 +133,6 @@ export * from "./EnvironmentVariantsResponse.js";
export * from "./ErrorPolicy.js";
export * from "./EvaluationMetrics.js";
export * from "./EvaluationMetricsCreate.js";
-export * from "./EvaluationMetricsEdit.js";
export * from "./EvaluationMetricsIdsResponse.js";
export * from "./EvaluationMetricsQuery.js";
export * from "./EvaluationMetricsRefresh.js";
@@ -152,7 +151,6 @@ export * from "./EvaluationQueueScenariosQuery.js";
export * from "./EvaluationQueuesResponse.js";
export * from "./EvaluationResult.js";
export * from "./EvaluationResultCreate.js";
-export * from "./EvaluationResultEdit.js";
export * from "./EvaluationResultIdResponse.js";
export * from "./EvaluationResultIdsResponse.js";
export * from "./EvaluationResultQuery.js";
@@ -161,6 +159,7 @@ export * from "./EvaluationResultsResponse.js";
export * from "./EvaluationRun.js";
export * from "./EvaluationRunCreate.js";
export * from "./EvaluationRunData.js";
+export * from "./EvaluationRunDataConcurrency.js";
export * from "./EvaluationRunDataMapping.js";
export * from "./EvaluationRunDataMappingColumn.js";
export * from "./EvaluationRunDataMappingStep.js";
diff --git a/web/packages/agenta-entities/src/secret/api/api.ts b/web/packages/agenta-entities/src/secret/api/api.ts
index f6000ee32a..35141c8e09 100644
--- a/web/packages/agenta-entities/src/secret/api/api.ts
+++ b/web/packages/agenta-entities/src/secret/api/api.ts
@@ -3,7 +3,7 @@
*
* HTTP functions for the `/secrets/` endpoint family, backed by the
* Fern-generated `@agentaai/api-client` via `@agenta/sdk`. The backend
- * still exposes the deprecated `/vault/v1/secrets/` mount for backwards
+ * still exposes the deprecated `/secrets/` mount for backwards
* compatibility, but new callers go through the canonical path.
*/
diff --git a/web/packages/agenta-playground-ui/package.json b/web/packages/agenta-playground-ui/package.json
index 622709009d..615bca8b57 100644
--- a/web/packages/agenta-playground-ui/package.json
+++ b/web/packages/agenta-playground-ui/package.json
@@ -48,7 +48,7 @@
"antd": ">=5.0.0",
"jotai": ">=2.0.0",
"jotai-family": ">=0.1.0",
- "next": ">=14.0.0",
+ "next": "15.5.18",
"react": ">=18.0.0",
"react-dom": ">=18.0.0"
},
diff --git a/web/packages/agenta-playground/package.json b/web/packages/agenta-playground/package.json
index b6c96380e8..fc6dcc7e21 100644
--- a/web/packages/agenta-playground/package.json
+++ b/web/packages/agenta-playground/package.json
@@ -36,7 +36,6 @@
"react": ">=18.0.0"
},
"devDependencies": {
- "@types/lz-string": "^1.5.0",
"@types/node": "^20.8.10",
"@types/react": "^19.0.10",
"@vitest/coverage-v8": "^4.1.4",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 96ac09f61e..6353ef150e 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -177,9 +177,6 @@ importers:
'@types/react-window':
specifier: ^1.8.8
version: 1.8.8
- '@types/recharts':
- specifier: ^2.0.1
- version: 2.0.1(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react-is@18.3.1)(react@19.2.6)(redux@5.0.1)
antd:
specifier: ^6.1.3
version: 6.3.7(date-fns@3.6.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
@@ -1081,9 +1078,6 @@ importers:
specifier: ^11.1.1
version: 11.1.1
devDependencies:
- '@types/lz-string':
- specifier: ^1.5.0
- version: 1.5.0
'@types/node':
specifier: ^20.8.10
version: 20.19.39
@@ -1139,8 +1133,8 @@ importers:
specifier: ^2.2.3
version: 2.2.3
next:
- specifier: '>=14.0.0'
- version: 15.5.16(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
+ specifier: 15.5.18
+ version: 15.5.18(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
react:
specifier: '>=18.0.0'
version: 19.2.6
@@ -2199,46 +2193,24 @@ packages:
'@next/bundle-analyzer@15.5.18':
resolution: {integrity: sha512-v5/UNFwYbBlRQg/Bt+wU65XuxCxPu1AeCOI6s4s6Cludsj7FdVO9E9uzr7GIj8OykSrYtGuEQAUX0Ulje8W2yw==}
- '@next/env@15.5.16':
- resolution: {integrity: sha512-9QMKolCl+JnJtaRAQSXy4RQrhgfe8W7/G1+Hl3QSB/HZY7zQMzTwPDdTRwwio8BS96ps1MHpHhbS8qxoNV3JIQ==}
-
'@next/env@15.5.18':
resolution: {integrity: sha512-hAV85Ckd9QR6RvH04MEKwsfLTksvFpO47j9xwtoIuvuPnlwecpSi+uZTtm8HirVbtlI2Fnz//xpcSTjFdyJk+g==}
'@next/eslint-plugin-next@15.5.18':
resolution: {integrity: sha512-w4MYq8M26a8PNrfto0JosLf5/3ssln1rsyP96g2DkC8uFVymStM5DLSz5ElxxrPRg2XnTMnFo3kREFlhYvxhWw==}
- '@next/swc-darwin-arm64@15.5.16':
- resolution: {integrity: sha512-wzdER4JZj+31vNkhaZ1Ght3IsNI8DMwj7VqadfIOqJB5sh8FiOqNSopYADQn6mgEPomzDd/DHqBcfo2fmVMYtg==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
-
'@next/swc-darwin-arm64@15.5.18':
resolution: {integrity: sha512-w0WvQf1n+txiwns/9pwIQteCJpZTbxzO2SE0FLcwuD4v0WEh1JPOjdyxWL21XwJsdpx8cFRjyzxzCS/siP7HcQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@15.5.16':
- resolution: {integrity: sha512-PPTo+cvcanxkuDEuDyZGk28ntmu0WjfkxqlG7hw9Mhsiribs4x1C6h2Culn0cJKqsne1gFjjZRK3ax7WYlSxgg==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [darwin]
-
'@next/swc-darwin-x64@15.5.18':
resolution: {integrity: sha512-znn71QmDuxm+BOaglihMZfvyySMnNljkVIY5Z2TCssBmm+WqL6c19VhtH5ktFkHa8EZ2bnTUpcNcmNSQsg67og==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@15.5.16':
- resolution: {integrity: sha512-Jl0IL9P7S8uNl5oI1TqrQmfmLp7OqjWM58000pVnUVIsHrvPP6m9QDW/uNWYUbmd+8IYvc6MTeZKICstBMBpew==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
'@next/swc-linux-arm64-gnu@15.5.18':
resolution: {integrity: sha512-yPPe5MNL+igZUa+OsqQJisqSfh6oarIuA1Q0BDxljGJhRQyZeP+WRHh7rs/jZUGMh5aY0YdIjXZG0VohkKkUdw==}
engines: {node: '>= 10'}
@@ -2246,13 +2218,6 @@ packages:
os: [linux]
libc: [glibc]
- '@next/swc-linux-arm64-musl@15.5.16':
- resolution: {integrity: sha512-Zf0BIqv/o5uOWfyRkzgGhyV2Tky7HLt0bG+w7XWdaU1JpyX0tltM3TrSfa/Y9c597SJG4CzN47+u2InhgZZ4vg==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
'@next/swc-linux-arm64-musl@15.5.18':
resolution: {integrity: sha512-glaCczEWIrHsokFZ3pP08U4BpKxwIdnT+txdOM32OBgpL9Yw4aqx8NejmgtZQZOdstQ5f0L3CasIZudzCuD+nw==}
engines: {node: '>= 10'}
@@ -2260,13 +2225,6 @@ packages:
os: [linux]
libc: [musl]
- '@next/swc-linux-x64-gnu@15.5.16':
- resolution: {integrity: sha512-HCDDU1TRLeUDV180QQTWrs5Oa4lIcI7XH9nF0UVUVmYLN/boZ6LqyFtm3814gc1fv+lOVyKaw5B6bVC9BpXTSQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
'@next/swc-linux-x64-gnu@15.5.18':
resolution: {integrity: sha512-oUfg2EgJmU3R0OCOWiokGFUTvZiPfXtriXiuF3YNxRoROCdgvTedHIzYoeKH34gsZxS/V7mHbfq2hpAHwhH1/A==}
engines: {node: '>= 10'}
@@ -2274,13 +2232,6 @@ packages:
os: [linux]
libc: [glibc]
- '@next/swc-linux-x64-musl@15.5.16':
- resolution: {integrity: sha512-kvXUY1dn5wxKuMkXxQRUbPjEnKxW1PR9uKOm0zpIpj3574+cFfaePhYFmBVtrOuwt+w34OdDzNaJr5Iixf+HBQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
'@next/swc-linux-x64-musl@15.5.18':
resolution: {integrity: sha512-JLxSP3KTd9iu/bvUMQxH7RJo9xKSHf55/6RPE4a6FTSZygGn7uvZbCej0AHXydwkggQGSD9UddSjwv6Xz5ESfA==}
engines: {node: '>= 10'}
@@ -2288,24 +2239,12 @@ packages:
os: [linux]
libc: [musl]
- '@next/swc-win32-arm64-msvc@15.5.16':
- resolution: {integrity: sha512-zpOQuF+eyENMXRjglp2hZCIrUjTdO37suEBnDn1mX4PXSuetXZDMLpjKOh4dYSw3SiDTnOoOUwBl5i5Elr6nnQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [win32]
-
'@next/swc-win32-arm64-msvc@15.5.18':
resolution: {integrity: sha512-ir1v7enP52K2HNz3tQQvwF+x7VNxBk1ciiZ18WBPvxf4C59IqdfmHPJYK3vH7rSxpuCVw/8C712wTXNAtEp+NA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-x64-msvc@15.5.16':
- resolution: {integrity: sha512-LnwKYpiSmIzXlTq76hMeeIzZoDcFwu848p6H+QBkGFJIbZphgzNUPdHruJcHM/bFnaFeco0l1Frie5I27VKglA==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
-
'@next/swc-win32-x64-msvc@15.5.18':
resolution: {integrity: sha512-LIu5me6QTANCd25E7I5uIEfvgQ06RK7tvHAbYo3zCb3VpxQEPvMcSpd87NwUABDT6MbGPdEGR5VRiK4PPTJhQg==}
engines: {node: '>= 10'}
@@ -3259,10 +3198,6 @@ packages:
'@types/lodash@4.17.24':
resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==}
- '@types/lz-string@1.5.0':
- resolution: {integrity: sha512-s84fKOrzqqNCAPljhVyC5TjAo6BH4jKHw9NRNFNiRUY5QSgZCmVm5XILlWbisiKl+0OcS7eWihmKGS5akc2iQw==}
- deprecated: This is a stub types definition. lz-string provides its own type definitions, so you do not need this installed.
-
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
@@ -3292,10 +3227,6 @@ packages:
'@types/react@19.2.14':
resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
- '@types/recharts@2.0.1':
- resolution: {integrity: sha512-/cFs7oiafzByUwBSWA1IzE6FW+ppPwQAWsDTadSgVOwzveY9MESpyLHyyHY0SfPPKLW4+4qVNYHPXd0rFiC8vg==}
- deprecated: This is a stub types definition. recharts provides its own type definitions, so you do not need this installed.
-
'@types/semver@7.7.1':
resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
@@ -5596,27 +5527,6 @@ packages:
neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
- next@15.5.16:
- resolution: {integrity: sha512-aZExBk/V6JCu3NCFc90twdj9L/M3y0+ukeQwUAZbOiqRhAX+h2oMEa0NZFhcpj6HYRYjVS3V2/3xvyOpNnmw7A==}
- engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
- hasBin: true
- peerDependencies:
- '@opentelemetry/api': ^1.1.0
- '@playwright/test': ^1.51.1
- babel-plugin-react-compiler: '*'
- react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
- react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
- sass: ^1.3.0
- peerDependenciesMeta:
- '@opentelemetry/api':
- optional: true
- '@playwright/test':
- optional: true
- babel-plugin-react-compiler:
- optional: true
- sass:
- optional: true
-
next@15.5.18:
resolution: {integrity: sha512-eKL8zUJkX9Y5lE+RX/2YJoItVdGlIscyVyboeD9wSpp0PaGqjoA4tTpT2qPqz9ax+5IzGESyLSeZ/RCwbSZ2uQ==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
@@ -7842,59 +7752,33 @@ snapshots:
- bufferutil
- utf-8-validate
- '@next/env@15.5.16': {}
-
'@next/env@15.5.18': {}
'@next/eslint-plugin-next@15.5.18':
dependencies:
fast-glob: 3.3.1
- '@next/swc-darwin-arm64@15.5.16':
- optional: true
-
'@next/swc-darwin-arm64@15.5.18':
optional: true
- '@next/swc-darwin-x64@15.5.16':
- optional: true
-
'@next/swc-darwin-x64@15.5.18':
optional: true
- '@next/swc-linux-arm64-gnu@15.5.16':
- optional: true
-
'@next/swc-linux-arm64-gnu@15.5.18':
optional: true
- '@next/swc-linux-arm64-musl@15.5.16':
- optional: true
-
'@next/swc-linux-arm64-musl@15.5.18':
optional: true
- '@next/swc-linux-x64-gnu@15.5.16':
- optional: true
-
'@next/swc-linux-x64-gnu@15.5.18':
optional: true
- '@next/swc-linux-x64-musl@15.5.16':
- optional: true
-
'@next/swc-linux-x64-musl@15.5.18':
optional: true
- '@next/swc-win32-arm64-msvc@15.5.16':
- optional: true
-
'@next/swc-win32-arm64-msvc@15.5.18':
optional: true
- '@next/swc-win32-x64-msvc@15.5.16':
- optional: true
-
'@next/swc-win32-x64-msvc@15.5.18':
optional: true
@@ -8840,10 +8724,6 @@ snapshots:
'@types/lodash@4.17.24': {}
- '@types/lz-string@1.5.0':
- dependencies:
- lz-string: 1.5.0
-
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.3
@@ -8878,16 +8758,6 @@ snapshots:
dependencies:
csstype: 3.2.3
- '@types/recharts@2.0.1(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react-is@18.3.1)(react@19.2.6)(redux@5.0.1)':
- dependencies:
- recharts: 3.8.1(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react-is@18.3.1)(react@19.2.6)(redux@5.0.1)
- transitivePeerDependencies:
- - '@types/react'
- - react
- - react-dom
- - react-is
- - redux
-
'@types/semver@7.7.1': {}
'@types/trusted-types@2.0.7':
@@ -11458,31 +11328,6 @@ snapshots:
neo-async@2.6.2: {}
- next@15.5.16(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
- dependencies:
- '@next/env': 15.5.16
- '@swc/helpers': 0.5.15
- caniuse-lite: 1.0.30001792
- postcss: 8.4.31
- react: 19.2.6
- react-dom: 19.2.6(react@19.2.6)
- styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.6)
- optionalDependencies:
- '@next/swc-darwin-arm64': 15.5.16
- '@next/swc-darwin-x64': 15.5.16
- '@next/swc-linux-arm64-gnu': 15.5.16
- '@next/swc-linux-arm64-musl': 15.5.16
- '@next/swc-linux-x64-gnu': 15.5.16
- '@next/swc-linux-x64-musl': 15.5.16
- '@next/swc-win32-arm64-msvc': 15.5.16
- '@next/swc-win32-x64-msvc': 15.5.16
- '@opentelemetry/api': 1.9.1
- '@playwright/test': 1.59.1
- sharp: 0.34.5
- transitivePeerDependencies:
- - '@babel/core'
- - babel-plugin-macros
-
next@15.5.18(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
dependencies:
'@next/env': 15.5.18
diff --git a/web/tests/guides/UTILITIES_AND_FIXTURES_GUIDE.md b/web/tests/guides/UTILITIES_AND_FIXTURES_GUIDE.md
index b586a76b0b..bc78b29ccc 100644
--- a/web/tests/guides/UTILITIES_AND_FIXTURES_GUIDE.md
+++ b/web/tests/guides/UTILITIES_AND_FIXTURES_GUIDE.md
@@ -223,7 +223,7 @@ This approach keeps tests fast, reliable, and focused on application logic, redu
## Best Practices
- **Type Safety:** Always import API response types from `web/oss/src/lib/Types.ts` (never use `any` or define custom interfaces for backend types).
- **API Validation:** Use API helpers to verify server state before asserting DOM state.
-- **API Endpoint Accuracy:** When working with API-driven selectors and type-safe assertions, always verify the actual backend endpoint for a given type. For example, the canonical endpoint for `StandardSecretDTO` is `/api/vault/v1/secrets` (not `/api/secrets`). Do not assume endpoint paths based on type or naming alone—inspect the implementation if unsure.
+- **API Endpoint Accuracy:** When working with API-driven selectors and type-safe assertions, always verify the actual backend endpoint for a given type. For example, the canonical endpoint for `StandardSecretDTO` is `/api/secrets` (not `/api/secrets`). Do not assume endpoint paths based on type or naming alone—inspect the implementation if unsure.
- **Authentication:** Assume the user is already logged in (handled by Playwright globalSetup). Do not use deprecated session/user fixtures.
- **Component Analysis:** Extract UI structure and semantics to create robust selectors and assertions.
- **Documentation:** Update this guide and helper READMEs when adding or changing utilities/fixtures.
diff --git a/web/tests/playwright/global-teardown.ts b/web/tests/playwright/global-teardown.ts
index 97e5bf0a98..1a1f2e3754 100644
--- a/web/tests/playwright/global-teardown.ts
+++ b/web/tests/playwright/global-teardown.ts
@@ -163,7 +163,7 @@ async function cleanupModelHubSecrets(apiURL: string): Promise {
`[teardown] Extracted session token from storage state: ${sessionToken ? "present" : "absent"}`,
)
- const secretsResp = await fetch(`${apiURL}/vault/v1/secrets/`, {
+ const secretsResp = await fetch(`${apiURL}/secrets/`, {
headers: {Authorization: `Bearer ${sessionToken}`},
})
@@ -180,7 +180,7 @@ async function cleanupModelHubSecrets(apiURL: string): Promise {
for (const secret of openaiSecrets) {
try {
- await fetch(`${apiURL}/vault/v1/secrets/${secret.id}`, {
+ await fetch(`${apiURL}/secrets/${secret.id}`, {
method: "DELETE",
headers: {Authorization: `Bearer ${sessionToken}`},
})
diff --git a/web/tests/tests/fixtures/base.fixture/providerHelpers/index.ts b/web/tests/tests/fixtures/base.fixture/providerHelpers/index.ts
index a6eb960c71..e42b1f4d52 100644
--- a/web/tests/tests/fixtures/base.fixture/providerHelpers/index.ts
+++ b/web/tests/tests/fixtures/base.fixture/providerHelpers/index.ts
@@ -209,7 +209,7 @@ async function getCustomProviderRow(page: Page, providerName: string): Promise {
const projectId = getProjectId(page)
- const secretsUrl = new URL(`${getApiURL(page)}/vault/v1/secrets/`)
+ const secretsUrl = new URL(`${getApiURL(page)}/secrets/`)
if (projectId) {
secretsUrl.searchParams.set("project_id", projectId)
diff --git a/web/tsconfig.tsbuildinfo b/web/tsconfig.tsbuildinfo
deleted file mode 100644
index 1b42f5c107..0000000000
--- a/web/tsconfig.tsbuildinfo
+++ /dev/null
@@ -1 +0,0 @@
-{"fileNames":["./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./ee/.next/types/routes.d.ts","./node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/global.d.ts","./node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","./node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/amp.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/get-page-files.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/compatibility/index.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/globals.typedarray.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/buffer.buffer.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/header.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/readable.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/file.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/fetch.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/formdata.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/connector.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/client.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/errors.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/dispatcher.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/global-dispatcher.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/global-origin.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/pool-stats.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/pool.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/handlers.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/balanced-pool.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/agent.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-interceptor.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-agent.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-client.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-pool.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-errors.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/proxy-agent.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/retry-handler.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/retry-agent.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/api.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/interceptors.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/util.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/cookies.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/patch.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/websocket.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/eventsource.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/filereader.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/content-type.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/cache.d.ts","./node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/index.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/globals.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/assert.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/assert/strict.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/async_hooks.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/buffer.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/child_process.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/cluster.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/console.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/constants.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/crypto.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/dgram.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/dns.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/dns/promises.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/domain.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/dom-events.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/events.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/fs.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/fs/promises.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/http.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/http2.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/https.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/inspector.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/module.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/net.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/os.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/path.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/perf_hooks.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/process.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/punycode.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/querystring.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/readline.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/readline/promises.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/repl.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/sea.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/stream.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/stream/promises.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/stream/consumers.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/stream/web.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/string_decoder.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/test.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/timers.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/timers/promises.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/tls.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/trace_events.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/tty.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/url.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/util.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/v8.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/vm.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/wasi.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/worker_threads.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/zlib.d.ts","./node_modules/.pnpm/@types+node@20.17.24/node_modules/@types/node/index.d.ts","./node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/canary.d.ts","./node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/experimental.d.ts","./node_modules/.pnpm/@types+react-dom@19.0.4_@types+react@19.0.10/node_modules/@types/react-dom/index.d.ts","./node_modules/.pnpm/@types+react-dom@19.0.4_@types+react@19.0.10/node_modules/@types/react-dom/canary.d.ts","./node_modules/.pnpm/@types+react-dom@19.0.4_@types+react@19.0.10/node_modules/@types/react-dom/experimental.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/fallback.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/config.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/body-streams.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/worker.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/constants.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/require-hook.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/plugins/app-build-manifest-plugin.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/page-types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/node-environment.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/trace/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/trace/trace.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/trace/shared.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/trace/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/.pnpm/@next+env@15.5.10/node_modules/@next/env/dist/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/telemetry/storage.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/build-context.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack-config.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-kind.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/swc/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/jsx-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/render-result.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/next-url.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/base-http/node.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/with-router.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/router.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/route-loader.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/page-loader.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/client-page.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/request/search-params.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/compiler-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/.pnpm/@types+react-dom@19.0.4_@types+react@19.0.10/node_modules/@types/react-dom/client.d.ts","./node_modules/.pnpm/@types+react-dom@19.0.4_@types+react@19.0.10/node_modules/@types/react-dom/server.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/adapter.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/templates/pages.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/render.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/normalizers/request/prefetch-rsc.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/base-server.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/next-server.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/next.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/load-components.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/http.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/utils.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/export/routes/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/export/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/export/worker.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/worker.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/build/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/after/after.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/after/after-context.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/request/params.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/request-meta.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/cli/next-test.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/config-shared.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/base-http/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/pages/_app.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/app.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/cache.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/config.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/pages/_document.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/document.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dynamic.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/pages/_error.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/error.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/head.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/head.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/request/cookies.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/request/headers.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/headers.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/image-component.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/image.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/link.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/link.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/redirect.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/not-found.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/components/navigation.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/navigation.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/router.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/client/script.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/script.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/after/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/request/root-params.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/server/request/connection.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/server.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/types/global.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/types/compiled.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/image-types/global.d.ts","./ee/next-env.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/responsiveobserver.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/type.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/throttlebyanimationframe.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/affix/index.d.ts","./node_modules/.pnpm/@rc-component+util@1.7.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/util/lib/portal.d.ts","./node_modules/.pnpm/@rc-component+util@1.7.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/util/lib/dom/scrolllocker.d.ts","./node_modules/.pnpm/@rc-component+util@1.7.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/util/lib/portalwrapper.d.ts","./node_modules/.pnpm/@rc-component+dialog@1.5.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/dialog/lib/idialogproptypes.d.ts","./node_modules/.pnpm/@rc-component+dialog@1.5.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/dialog/lib/dialogwrap.d.ts","./node_modules/.pnpm/@rc-component+dialog@1.5.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/dialog/lib/dialog/content/panel.d.ts","./node_modules/.pnpm/@rc-component+dialog@1.5.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/dialog/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/useclosable.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/useforceupdate.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/usemergedmask.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/usemergesemantic.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/usemultipleselect.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/useorientation.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/usepatchelement.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/useproxyimperativehandle.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/usesyncstate.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/usezindex.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/hooks/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/alert/alert.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/alert/errorboundary.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/alert/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/anchor/anchorlink.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/anchor/anchor.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/anchor/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/message/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/config-provider/sizecontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/button/buttongroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/button/buttonhelpers.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/button/button.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/warning.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/lib/namepathtype.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/lib/hooks/useform.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+picker@1.9.0_date-fns@3.6.0_dayjs@1.11.13_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/picker/es/generate/index.d.ts","./node_modules/.pnpm/@rc-component+motion@1.1.6_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/motion/es/interface.d.ts","./node_modules/.pnpm/@rc-component+motion@1.1.6_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/motion/es/cssmotion.d.ts","./node_modules/.pnpm/@rc-component+motion@1.1.6_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/motion/es/util/diff.d.ts","./node_modules/.pnpm/@rc-component+motion@1.1.6_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/motion/es/cssmotionlist.d.ts","./node_modules/.pnpm/@rc-component+motion@1.1.6_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/motion/es/context.d.ts","./node_modules/.pnpm/@rc-component+motion@1.1.6_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/motion/es/index.d.ts","./node_modules/.pnpm/@rc-component+resize-observer@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/resize-observer/lib/collection.d.ts","./node_modules/.pnpm/@rc-component+resize-observer@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/resize-observer/lib/utils/observerutil.d.ts","./node_modules/.pnpm/@rc-component+resize-observer@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/resize-observer/lib/index.d.ts","./node_modules/.pnpm/@rc-component+trigger@3.8.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/trigger/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+portal@2.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/portal/es/portal.d.ts","./node_modules/.pnpm/@rc-component+portal@2.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/portal/es/mock.d.ts","./node_modules/.pnpm/@rc-component+portal@2.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/portal/es/index.d.ts","./node_modules/.pnpm/@rc-component+trigger@3.8.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/trigger/lib/popup/index.d.ts","./node_modules/.pnpm/@rc-component+trigger@3.8.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/trigger/lib/context.d.ts","./node_modules/.pnpm/@rc-component+trigger@3.8.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/trigger/lib/uniqueprovider/index.d.ts","./node_modules/.pnpm/@rc-component+trigger@3.8.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/trigger/lib/index.d.ts","./node_modules/.pnpm/@rc-component+picker@1.9.0_date-fns@3.6.0_dayjs@1.11.13_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/picker/es/interface.d.ts","./node_modules/.pnpm/@rc-component+picker@1.9.0_date-fns@3.6.0_dayjs@1.11.13_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/picker/es/pickerinput/selector/rangeselector.d.ts","./node_modules/.pnpm/@rc-component+picker@1.9.0_date-fns@3.6.0_dayjs@1.11.13_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/picker/es/pickerinput/rangepicker.d.ts","./node_modules/.pnpm/@rc-component+picker@1.9.0_date-fns@3.6.0_dayjs@1.11.13_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/picker/es/pickerinput/singlepicker.d.ts","./node_modules/.pnpm/@rc-component+picker@1.9.0_date-fns@3.6.0_dayjs@1.11.13_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/picker/es/pickerpanel/index.d.ts","./node_modules/.pnpm/@rc-component+picker@1.9.0_date-fns@3.6.0_dayjs@1.11.13_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/picker/es/index.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/lib/field.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/namepathtype.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/hooks/useform.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/interface.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/field.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/list.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/form.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/formcontext.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/fieldcontext.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/listcontext.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/hooks/usewatch.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/es/index.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/lib/form.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/grid/col.d.ts","./node_modules/.pnpm/compute-scroll-into-view@3.1.1/node_modules/compute-scroll-into-view/dist/index.d.ts","./node_modules/.pnpm/scroll-into-view-if-needed@3.1.0/node_modules/scroll-into-view-if-needed/dist/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/hooks/useform.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/form.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/formiteminput.d.ts","./node_modules/.pnpm/@rc-component+tooltip@1.4.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tooltip/lib/placements.d.ts","./node_modules/.pnpm/@rc-component+tooltip@1.4.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tooltip/lib/tooltip.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/cache.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/hooks/useglobalcache.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/linters/interface.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/transformers/interface.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/stylecontext.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/util/css-variables.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/extractstyle.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/theme/interface.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/theme/theme.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/hooks/usecachetoken.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/hooks/usecssvarregister.d.ts","./node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/keyframes.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/linters/contentquoteslinter.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/linters/hashedanimationlinter.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/linters/legacynotselectorlinter.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/linters/logicalpropertieslinter.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/linters/nanlinter.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/linters/parentselectorlinter.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/linters/index.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/hooks/usestyleregister.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/theme/calc/calculator.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/theme/calc/csscalculator.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/theme/calc/numcalculator.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/theme/calc/index.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/theme/createtheme.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/theme/themecache.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/theme/index.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/transformers/autoprefix.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/transformers/legacylogicalproperties.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/transformers/px2rem.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/util/index.d.ts","./node_modules/.pnpm/@ant-design+cssinjs@2.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/presetcolors.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/seeds.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/maps/colors.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/maps/font.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/maps/size.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/maps/style.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/maps/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/alias.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/interface/components.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/interface/index.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/util/calc/calculator.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/hooks/usecsp.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/hooks/useprefix.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/hooks/usetoken.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/util/genstyleutils.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/util/calc/csscalculator.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/util/calc/numcalculator.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/util/calc/index.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/util/statistic.d.ts","./node_modules/.pnpm/@ant-design+cssinjs-utils@2.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/cssinjs-utils/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/themes/shared/genfontsizes.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/themes/default/theme.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/usetoken.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/util/genstyleutils.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/util/genpresetcolor.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/util/usereseticonstyle.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/internal.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/wave/style.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/affix/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/alert/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/anchor/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/app/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/avatar/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/back-top/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/badge/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/breadcrumb/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/button/style/token.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/button/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input/style/token.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/select/style/token.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/style/roundedarrow.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/date-picker/style/token.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/date-picker/style/panel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/date-picker/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/calendar/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/card/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/carousel/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/cascader/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/checkbox/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/collapse/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/color-picker/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/descriptions/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/divider/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/drawer/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/style/placementarrow.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/dropdown/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/empty/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/flex/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/float-button/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/grid/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/image/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input-number/style/token.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input-number/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/layout/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/list/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/masonry/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/mentions/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/menu/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/message/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/modal/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/notification/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/pagination/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/popconfirm/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/popover/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/progress/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/qr-code/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/radio/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/rate/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/result/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/segmented/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/select/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/slider/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/space/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/spin/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/splitter/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/statistic/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/steps/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/switch/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/table/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tabs/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tag/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/timeline/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tooltip/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tour/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/transfer/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tree/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tree-select/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/typography/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/upload/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/components.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/cssinjs-utils.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/interface/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/colors.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/getrenderpropvalue.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/placements.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tooltip/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tooltip/uniqueprovider/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tooltip/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/formitemlabel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/hooks/useformitemstatus.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/formitem/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/statusutils.d.ts","./node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/locale/types.d.ts","./node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/locale/index.d.ts","./node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/time-picker/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/date-picker/generatepicker/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/button/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/date-picker/generatepicker/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/empty/index.d.ts","./node_modules/.pnpm/@rc-component+pagination@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/pagination/lib/options.d.ts","./node_modules/.pnpm/@rc-component+pagination@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/pagination/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+pagination@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/pagination/lib/pagination.d.ts","./node_modules/.pnpm/@rc-component+pagination@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/pagination/lib/index.d.ts","./node_modules/.pnpm/@rc-component+virtual-list@1.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/virtual-list/lib/filler.d.ts","./node_modules/.pnpm/@rc-component+virtual-list@1.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/virtual-list/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+virtual-list@1.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/virtual-list/lib/utils/cachemap.d.ts","./node_modules/.pnpm/@rc-component+virtual-list@1.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/virtual-list/lib/hooks/usescrollto.d.ts","./node_modules/.pnpm/@rc-component+virtual-list@1.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/virtual-list/lib/scrollbar.d.ts","./node_modules/.pnpm/@rc-component+virtual-list@1.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/virtual-list/lib/list.d.ts","./node_modules/.pnpm/@rc-component+select@1.5.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/select/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+select@1.5.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/select/lib/selectinput/index.d.ts","./node_modules/.pnpm/@rc-component+select@1.5.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/select/lib/hooks/usecomponents.d.ts","./node_modules/.pnpm/@rc-component+select@1.5.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/select/lib/baseselect/index.d.ts","./node_modules/.pnpm/@rc-component+select@1.5.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/select/lib/optgroup.d.ts","./node_modules/.pnpm/@rc-component+select@1.5.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/select/lib/option.d.ts","./node_modules/.pnpm/@rc-component+select@1.5.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/select/lib/select.d.ts","./node_modules/.pnpm/@rc-component+select@1.5.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/select/lib/hooks/usebaseprops.d.ts","./node_modules/.pnpm/@rc-component+select@1.5.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/select/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/motion.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/select/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/pagination/pagination.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/popover/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/popover/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/popconfirm/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/popconfirm/purepanel.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/constant.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/namepathtype.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/footer/cell.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/footer/row.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/footer/summary.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/footer/index.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/sugar/column.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/sugar/columngroup.d.ts","./node_modules/.pnpm/@rc-component+context@2.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/context/lib/immutable.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/table.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/utils/legacyutil.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/virtualtable/index.d.ts","./node_modules/.pnpm/@rc-component+table@1.9.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/table/lib/index.d.ts","./node_modules/.pnpm/@rc-component+checkbox@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/checkbox/es/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/checkbox/checkbox.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/checkbox/groupcontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/checkbox/group.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/checkbox/index.d.ts","./node_modules/.pnpm/@rc-component+menu@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/menu/lib/submenu/index.d.ts","./node_modules/.pnpm/@rc-component+menu@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/menu/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+menu@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/menu/lib/menu.d.ts","./node_modules/.pnpm/@rc-component+menu@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/menu/lib/menuitem.d.ts","./node_modules/.pnpm/@rc-component+menu@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/menu/lib/menuitemgroup.d.ts","./node_modules/.pnpm/@rc-component+menu@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/menu/lib/context/pathcontext.d.ts","./node_modules/.pnpm/@rc-component+menu@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/menu/lib/divider.d.ts","./node_modules/.pnpm/@rc-component+menu@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/menu/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/menu/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/layout/sider.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/menu/menucontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/menu/menu.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/menu/menudivider.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/menu/menuitem.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/menu/submenu.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/menu/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/dropdown/dropdown.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/dropdown/dropdown-button.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/dropdown/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/pagination/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/table/hooks/useselection.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/spin/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/table/internaltable.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/table/interface.d.ts","./node_modules/.pnpm/@rc-component+tour@2.2.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tour/es/placements.d.ts","./node_modules/.pnpm/@rc-component+tour@2.2.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tour/es/hooks/usetarget.d.ts","./node_modules/.pnpm/@rc-component+tour@2.2.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tour/es/tourstep/defaultpanel.d.ts","./node_modules/.pnpm/@rc-component+tour@2.2.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tour/es/interface.d.ts","./node_modules/.pnpm/@rc-component+tour@2.2.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tour/es/tour.d.ts","./node_modules/.pnpm/@rc-component+tour@2.2.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tour/es/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tour/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/transfer/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/transfer/listbody.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/transfer/section.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/transfer/actions.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/transfer/search.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/transfer/index.d.ts","./node_modules/.pnpm/@rc-component+upload@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/upload/lib/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/progress/progress.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/progress/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/upload/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/locale/uselocale.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/locale/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/wave/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/wave/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/badge/badge.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/badge/ribbon.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/badge/scrollnumber.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/badge/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/breadcrumb/breadcrumbitem.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/breadcrumb/breadcrumb.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/breadcrumb/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/date-picker/locale/en_us.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/calendar/locale/en_us.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/calendar/generatecalendar.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/calendar/index.d.ts","./node_modules/.pnpm/@rc-component+dropdown@1.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/dropdown/lib/placements.d.ts","./node_modules/.pnpm/@rc-component+dropdown@1.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/dropdown/lib/dropdown.d.ts","./node_modules/.pnpm/@rc-component+dropdown@1.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/dropdown/lib/overlay.d.ts","./node_modules/.pnpm/@rc-component+dropdown@1.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/dropdown/lib/index.d.ts","./node_modules/.pnpm/@rc-component+tabs@1.7.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tabs/lib/hooks/useindicator.d.ts","./node_modules/.pnpm/@rc-component+tabs@1.7.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tabs/lib/tabs.d.ts","./node_modules/.pnpm/@rc-component+tabs@1.7.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tabs/lib/tabnavlist/index.d.ts","./node_modules/.pnpm/@rc-component+tabs@1.7.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tabs/lib/tabpanellist/tabpane.d.ts","./node_modules/.pnpm/@rc-component+tabs@1.7.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tabs/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+tabs@1.7.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tabs/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tabs/tabpane.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tabs/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/card/card.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/card/cardgrid.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/card/cardmeta.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/card/index.d.ts","./node_modules/.pnpm/@rc-component+cascader@1.11.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/cascader/lib/panel.d.ts","./node_modules/.pnpm/@rc-component+cascader@1.11.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/cascader/lib/utils/commonutil.d.ts","./node_modules/.pnpm/@rc-component+cascader@1.11.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/cascader/lib/cascader.d.ts","./node_modules/.pnpm/@rc-component+cascader@1.11.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/cascader/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/cascader/panel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/cascader/index.d.ts","./node_modules/.pnpm/@rc-component+collapse@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/collapse/es/interface.d.ts","./node_modules/.pnpm/@rc-component+collapse@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/collapse/es/collapse.d.ts","./node_modules/.pnpm/@rc-component+collapse@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/collapse/es/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/collapse/collapsepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/collapse/collapse.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/collapse/index.d.ts","./node_modules/.pnpm/@ant-design+fast-color@3.0.0/node_modules/@ant-design/fast-color/lib/types.d.ts","./node_modules/.pnpm/@ant-design+fast-color@3.0.0/node_modules/@ant-design/fast-color/lib/fastcolor.d.ts","./node_modules/.pnpm/@ant-design+fast-color@3.0.0/node_modules/@ant-design/fast-color/lib/index.d.ts","./node_modules/.pnpm/@rc-component+color-picker@3.0.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/color-picker/lib/color.d.ts","./node_modules/.pnpm/@rc-component+color-picker@3.0.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/color-picker/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+color-picker@3.0.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/color-picker/lib/components/slider.d.ts","./node_modules/.pnpm/@rc-component+color-picker@3.0.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/color-picker/lib/hooks/usecomponent.d.ts","./node_modules/.pnpm/@rc-component+color-picker@3.0.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/color-picker/lib/colorpicker.d.ts","./node_modules/.pnpm/@rc-component+color-picker@3.0.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/color-picker/lib/components/colorblock.d.ts","./node_modules/.pnpm/@rc-component+color-picker@3.0.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/color-picker/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/color-picker/color.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/color-picker/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/color-picker/colorpicker.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/color-picker/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/date-picker/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/descriptions/descriptionscontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/descriptions/item.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/descriptions/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/divider/index.d.ts","./node_modules/.pnpm/@rc-component+drawer@1.3.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/drawer/lib/drawerpanel.d.ts","./node_modules/.pnpm/@rc-component+drawer@1.3.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/drawer/lib/inter.d.ts","./node_modules/.pnpm/@rc-component+drawer@1.3.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/drawer/lib/drawerpopup.d.ts","./node_modules/.pnpm/@rc-component+drawer@1.3.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/drawer/lib/drawer.d.ts","./node_modules/.pnpm/@rc-component+drawer@1.3.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/drawer/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/drawer/drawerpanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/drawer/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/flex/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/float-button/backtop.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/float-button/floatbuttongroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/float-button/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/float-button/floatbutton.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/float-button/index.d.ts","./node_modules/.pnpm/@rc-component+form@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/form/lib/formcontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/errorlist.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/formlist.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/hooks/useforminstance.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/form/index.d.ts","./node_modules/.pnpm/@rc-component+image@1.5.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/image/lib/hooks/useimagetransform.d.ts","./node_modules/.pnpm/@rc-component+image@1.5.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/image/lib/preview/footer.d.ts","./node_modules/.pnpm/@rc-component+image@1.5.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/image/lib/preview/index.d.ts","./node_modules/.pnpm/@rc-component+image@1.5.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/image/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+image@1.5.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/image/lib/previewgroup.d.ts","./node_modules/.pnpm/@rc-component+image@1.5.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/image/lib/image.d.ts","./node_modules/.pnpm/@rc-component+image@1.5.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/image/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/image/previewgroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/image/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input/group.d.ts","./node_modules/.pnpm/@rc-component+input@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/input/lib/utils/types.d.ts","./node_modules/.pnpm/@rc-component+util@1.7.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/util/lib/dom/focus.d.ts","./node_modules/.pnpm/@rc-component+input@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/input/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+input@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/input/lib/baseinput.d.ts","./node_modules/.pnpm/@rc-component+input@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/input/lib/input.d.ts","./node_modules/.pnpm/@rc-component+input@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/input/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input/input.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input/otp/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input/password.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input/search.d.ts","./node_modules/.pnpm/@rc-component+textarea@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/textarea/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+textarea@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/textarea/lib/textarea.d.ts","./node_modules/.pnpm/@rc-component+textarea@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/textarea/lib/resizabletextarea.d.ts","./node_modules/.pnpm/@rc-component+textarea@1.1.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/textarea/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input/textarea.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input/index.d.ts","./node_modules/.pnpm/@rc-component+mini-decimal@1.1.0/node_modules/@rc-component/mini-decimal/es/interface.d.ts","./node_modules/.pnpm/@rc-component+mini-decimal@1.1.0/node_modules/@rc-component/mini-decimal/es/bigintdecimal.d.ts","./node_modules/.pnpm/@rc-component+mini-decimal@1.1.0/node_modules/@rc-component/mini-decimal/es/numberdecimal.d.ts","./node_modules/.pnpm/@rc-component+mini-decimal@1.1.0/node_modules/@rc-component/mini-decimal/es/minidecimal.d.ts","./node_modules/.pnpm/@rc-component+mini-decimal@1.1.0/node_modules/@rc-component/mini-decimal/es/numberutil.d.ts","./node_modules/.pnpm/@rc-component+mini-decimal@1.1.0/node_modules/@rc-component/mini-decimal/es/index.d.ts","./node_modules/.pnpm/@rc-component+input-number@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/input-number/es/inputnumber.d.ts","./node_modules/.pnpm/@rc-component+input-number@1.6.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/input-number/es/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/input-number/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/grid/row.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/grid/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/list/item.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/list/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/list/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/masonry/masonryitem.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/masonry/masonry.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/masonry/index.d.ts","./node_modules/.pnpm/@rc-component+mentions@1.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/mentions/lib/option.d.ts","./node_modules/.pnpm/@rc-component+mentions@1.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/mentions/lib/util.d.ts","./node_modules/.pnpm/@rc-component+mentions@1.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/mentions/lib/mentions.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/mentions/index.d.ts","./node_modules/.pnpm/@rc-component+notification@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/notification/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+notification@1.2.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/notification/lib/notice.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/message/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/message/usemessage.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/message/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/modal/modal.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/modal/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/modal/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/notification/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/notification/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/notification/usenotification.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/notification/index.d.ts","./node_modules/.pnpm/@rc-component+qrcode@1.1.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/qrcode/lib/libs/qrcodegen.d.ts","./node_modules/.pnpm/@rc-component+qrcode@1.1.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/qrcode/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+qrcode@1.1.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/qrcode/lib/utils.d.ts","./node_modules/.pnpm/@rc-component+qrcode@1.1.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/qrcode/lib/qrcodecanvas.d.ts","./node_modules/.pnpm/@rc-component+qrcode@1.1.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/qrcode/lib/qrcodesvg.d.ts","./node_modules/.pnpm/@rc-component+qrcode@1.1.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/qrcode/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/qr-code/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/qr-code/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/radio/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/radio/group.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/radio/radio.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/radio/radiobutton.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/radio/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/_util/aria-data-attrs.d.ts","./node_modules/.pnpm/@ant-design+icons-svg@4.4.2/node_modules/@ant-design/icons-svg/lib/types.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/components/icon.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/components/twotoneprimarycolor.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/components/antdicon.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/result/index.d.ts","./node_modules/.pnpm/@rc-component+segmented@1.3.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/segmented/es/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/segmented/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/element.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/avatar.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/button.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/node.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/image.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/input.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/paragraph.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/title.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/skeleton.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/skeleton/index.d.ts","./node_modules/.pnpm/@rc-component+slider@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/slider/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+slider@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/slider/lib/handles/handle.d.ts","./node_modules/.pnpm/@rc-component+slider@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/slider/lib/handles/index.d.ts","./node_modules/.pnpm/@rc-component+slider@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/slider/lib/marks/index.d.ts","./node_modules/.pnpm/@rc-component+slider@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/slider/lib/slider.d.ts","./node_modules/.pnpm/@rc-component+slider@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/slider/lib/context.d.ts","./node_modules/.pnpm/@rc-component+slider@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/slider/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/slider/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/space/compact.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/space/addon.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/space/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/space/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/splitter/splitbar.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/splitter/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/splitter/panel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/splitter/splitter.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/splitter/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/statistic/utils.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/statistic/statistic.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/statistic/countdown.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/statistic/timer.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/statistic/index.d.ts","./node_modules/.pnpm/@rc-component+steps@1.2.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/steps/lib/stepicon.d.ts","./node_modules/.pnpm/@rc-component+steps@1.2.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/steps/lib/steps.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/steps/index.d.ts","./node_modules/.pnpm/@rc-component+switch@1.0.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/switch/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/switch/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/table/column.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/table/columngroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/table/table.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/table/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tag/checkabletag.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tag/checkabletaggroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tag/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/timeline/timeline.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/timeline/index.d.ts","./node_modules/.pnpm/@rc-component+tree@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+tree@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree/lib/contexttypes.d.ts","./node_modules/.pnpm/@rc-component+tree@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree/lib/dropindicator.d.ts","./node_modules/.pnpm/@rc-component+tree@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree/lib/nodelist.d.ts","./node_modules/.pnpm/@rc-component+tree@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree/lib/tree.d.ts","./node_modules/.pnpm/@rc-component+tree@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree/lib/treenode.d.ts","./node_modules/.pnpm/@rc-component+tree@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tree/tree.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tree/directorytree.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tree/index.d.ts","./node_modules/.pnpm/@rc-component+tree-select@1.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree-select/lib/interface.d.ts","./node_modules/.pnpm/@rc-component+tree-select@1.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree-select/lib/treenode.d.ts","./node_modules/.pnpm/@rc-component+tree-select@1.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree-select/lib/utils/strategyutil.d.ts","./node_modules/.pnpm/@rc-component+tree-select@1.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree-select/lib/treeselect.d.ts","./node_modules/.pnpm/@rc-component+tree-select@1.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/tree-select/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tree-select/index.d.ts","./node_modules/.pnpm/@rc-component+upload@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/upload/lib/ajaxuploader.d.ts","./node_modules/.pnpm/@rc-component+upload@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/upload/lib/upload.d.ts","./node_modules/.pnpm/@rc-component+upload@1.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/upload/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/upload/upload.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/upload/dragger.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/upload/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/config-provider/defaultrenderempty.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/config-provider/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/config-provider/hooks/useconfig.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/config-provider/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/modal/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/modal/confirm.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/modal/usemodal/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/app/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/app/app.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/app/useapp.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/app/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/auto-complete/autocomplete.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/auto-complete/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/avatar/avatarcontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/avatar/avatar.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/avatar/avatargroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/avatar/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/back-top/index.d.ts","./node_modules/.pnpm/@ant-design+react-slick@2.0.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/react-slick/types.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/carousel/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/col/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/flex/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/layout/layout.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/layout/index.d.ts","./node_modules/.pnpm/@rc-component+rate@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/rate/lib/star.d.ts","./node_modules/.pnpm/@rc-component+rate@1.0.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/rate/lib/rate.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/rate/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/row/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/themes/default/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/theme/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tour/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/tour/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/typography/typography.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/typography/base/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/typography/link.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/typography/paragraph.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/typography/text.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/typography/title.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/typography/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/version/version.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/version/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/watermark/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/es/index.d.ts","./ee/src/components/pages/settings/billing/modals/autorenewalcancelmodal/assets/types.d.ts","./ee/src/components/pages/settings/billing/modals/pricingmodal/assets/types.d.ts","./ee/src/components/pages/settings/billing/assets/types.d.ts","./ee/src/services/billing/types.d.ts","./oss/.next/types/routes.d.ts","./oss/next-env.d.ts","./oss/src/components/customworkflow/customworkflowbanner/types.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/lib/types.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/lib/context.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/lib/iconbase.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/lib/ssrbase.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/lib/index.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/acorn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/addressbook.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/addressbooktabs.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/airtrafficcontrol.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/airplane.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/airplaneinflight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/airplanelanding.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/airplanetakeoff.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/airplanetaxiing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/airplanetilt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/airplay.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/alarm.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/alien.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/alignbottom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/alignbottomsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/aligncenterhorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/aligncenterhorizontalsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/aligncentervertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/aligncenterverticalsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/alignleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/alignleftsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/alignright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/alignrightsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/aligntop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/aligntopsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/amazonlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/ambulance.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/anchor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/anchorsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/androidlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/angle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/angularlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/aperture.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/appstorelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/appwindow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/applelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/applepodcastslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/approximateequals.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/archive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/armchair.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowarcleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowarcright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowbenddoubleupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowbenddoubleupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowbenddownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowbenddownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowbendleftdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowbendleftup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowbendrightdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowbendrightup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowbendupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowbendupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowcircledown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowcircledownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowcircledownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowcircleleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowcircleright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowcircleup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowcircleupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowcircleupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowcounterclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowdownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowdownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowelbowdownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowelbowdownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowelbowleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowelbowleftdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowelbowleftup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowelbowright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowelbowrightdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowelbowrightup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowelbowupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowelbowupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatlinedown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatlineleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatlineright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatlineup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatlinesdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatlinesleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatlinesright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatlinesup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowfatup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowlinedown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowlinedownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowlinedownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowlineleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowlineright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowlineup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowlineupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowlineupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsquaredown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsquaredownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsquaredownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsquarein.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsquareleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsquareout.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsquareright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsquareup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsquareupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsquareupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowudownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowudownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowuleftdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowuleftup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowurightdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowurightup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowuupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowuupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowscounterclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsdownup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowshorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsincardinal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsinlinehorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsinlinevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsinsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsleftright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsmerge.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsout.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsoutcardinal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsoutlinehorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsoutlinevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsoutsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowssplit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/arrowsvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/article.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/articlemedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/articlenytimes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/asclepius.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/asterisk.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/asterisksimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/at.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/atom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/avocado.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/axe.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/baby.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/babycarriage.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/backpack.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/backspace.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bagsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/balloon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bandaids.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bank.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/barbell.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/barcode.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/barn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/barricade.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/baseball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/baseballcap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/baseballhelmet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/basket.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/basketball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bathtub.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batterycharging.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batterychargingvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batteryempty.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batteryfull.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batteryhigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batterylow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batterymedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batteryplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batteryplusvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batteryverticalempty.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batteryverticalfull.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batteryverticalhigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batteryverticallow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batteryverticalmedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batterywarning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/batterywarningvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/beachball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/beanie.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/beerbottle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/beerstein.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/behancelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bell.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bellringing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bellsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bellsimpleringing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bellsimpleslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bellsimplez.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bellslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bellz.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/belt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/beziercurve.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bicycle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/binary.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/binoculars.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/biohazard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bird.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/blueprint.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bluetooth.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bluetoothconnected.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bluetoothslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bluetoothx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/boat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bomb.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/book.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bookbookmark.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bookopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bookopentext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bookopenuser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bookmark.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bookmarksimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bookmarks.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bookmarkssimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/books.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/boot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/boules.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/boundingbox.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bowlfood.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bowlsteam.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bowlingball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/boxarrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/boxarrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/boxingglove.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bracketsangle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bracketscurly.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bracketsround.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bracketssquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/brain.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/brandy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bread.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bridge.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/briefcase.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/briefcasemetal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/broadcast.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/broom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/browser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/browsers.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bugbeetle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bug.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bugdroid.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/buildingapartment.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/building.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/buildingoffice.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/buildings.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bulldozer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/bus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/butterfly.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cablecar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cactus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cake.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calculator.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendarblank.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendarcheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendardot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendardots.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendarheart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendarminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendarplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendarslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendarstar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/calendarx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/callbell.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/camera.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cameraplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/camerarotate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cameraslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/campfire.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/carbattery.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/car.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/carprofile.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/carsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cardholder.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cards.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cardsthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretcircledoubledown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretcircledoubleleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretcircledoubleright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretcircledoubleup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretcircledown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretcircleleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretcircleright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretcircleup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretcircleupdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretdoubledown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretdoubleleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretdoubleright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretdoubleup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretlinedown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretlineleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretlineright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretlineup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/caretupdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/carrot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cashregister.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cassettetape.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/castleturret.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cellsignalfull.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cellsignalhigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cellsignallow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cellsignalmedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cellsignalnone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cellsignalslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cellsignalx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/celltower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/certificate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chair.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chalkboard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chalkboardsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chalkboardteacher.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/champagne.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chargingstation.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chartbar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chartbarhorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chartdonut.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chartline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chartlinedown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chartlineup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chartpie.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chartpieslice.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chartpolar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chartscatter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatcentered.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatcentereddots.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatcenteredslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatcenteredtext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatcircledots.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatcircleslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatcircletext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatdots.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatteardrop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatteardropdots.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatteardropslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatteardroptext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chattext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chats.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatscircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chatsteardrop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/check.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/checkcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/checkfat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/checksquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/checksquareoffset.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/checkerboard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/checks.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cheers.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cheese.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/chefhat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cherries.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/church.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cigarette.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cigaretteslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/circle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/circledashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/circlehalf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/circlehalftilt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/circlenotch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/circlesfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/circlesthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/circlesthreeplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/circuitry.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/city.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/clipboard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/clipboardtext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/clockafternoon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/clock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/clockclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/clockcountdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/clockcounterclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/clockuser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/closedcaptioning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudarrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudarrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloud.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudcheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudfog.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudlightning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudmoon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudrain.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudsnow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudsun.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudwarning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cloudx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/clover.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/club.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/coathanger.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/codalogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/codeblock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/code.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/codesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/codepenlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/codesandboxlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/coffeebean.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/coffee.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/coin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/coinvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/coins.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/columns.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/columnsplusleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/columnsplusright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/command.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/compass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/compassrose.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/compasstool.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/computertower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/confetti.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/contactlesspayment.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/control.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cookie.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cookingpot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/copy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/copysimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/copyleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/copyright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cornersin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cornersout.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/couch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/courtbasketball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cowboyhat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cpu.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/crane.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cranetower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/creditcard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cricket.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/crop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cross.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/crosshair.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/crosshairsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/crown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/crowncross.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/crownsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cube.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cubefocus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cubetransparent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencybtc.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencycircledollar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencycny.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencydollar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencydollarsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencyeth.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencyeur.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencygbp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencyinr.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencyjpy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencykrw.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencykzt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencyngn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/currencyrub.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cursor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cursorclick.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cursortext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/cylinder.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/database.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/desk.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/desktop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/desktoptower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/detective.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/devtologo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/devicemobile.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/devicemobilecamera.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/devicemobileslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/devicemobilespeaker.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/devicerotate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/devicetablet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/devicetabletcamera.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/devicetabletspeaker.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/devices.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/diamond.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/diamondsfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dicefive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dicefour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/diceone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dicesix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dicethree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dicetwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/disc.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/discoball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/discordlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/divide.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dna.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dog.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/door.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dooropen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dotoutline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dotsnine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dotssix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dotssixvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dotsthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dotsthreecircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dotsthreecirclevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dotsthreeoutline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dotsthreeoutlinevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dotsthreevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/download.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/downloadsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dress.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dresser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dribbblelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/drone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/drop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/drophalf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/drophalfbottom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dropsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dropslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/dropboxlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/ear.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/earslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/egg.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/eggcrack.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/eject.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/ejectsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/elevator.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/empty.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/engine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/envelope.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/envelopeopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/envelopesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/envelopesimpleopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/equalizer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/equals.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/eraser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/escalatordown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/escalatorup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/exam.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/exclamationmark.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/exclude.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/excludesquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/export.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/eye.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/eyeclosed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/eyeslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/eyedropper.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/eyedroppersample.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/eyeglasses.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/eyes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/facemask.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/facebooklogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/factory.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/faders.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fadershorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/falloutshelter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fan.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/farm.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fastforward.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fastforwardcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/feather.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fediverselogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/figmalogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filearchive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filearrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filearrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fileaudio.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/file.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filec.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filecsharp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filecloud.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filecode.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filecpp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filecss.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filecsv.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filedashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filedoc.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filehtml.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fileimage.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fileini.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filejpg.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filejs.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filejsx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filelock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filemagnifyingglass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filemd.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fileminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filepdf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fileplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filepng.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fileppt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filepy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filers.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filesql.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filesvg.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filetext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filets.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filetsx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filetxt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filevideo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filevue.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filexls.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filezip.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/files.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filmreel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filmscript.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filmslate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/filmstrip.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fingerprint.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fingerprintsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/finnthehuman.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fire.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fireextinguisher.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/firesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/firetruck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/firstaid.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/firstaidkit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fish.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fishsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flagbanner.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flagbannerfold.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flagcheckered.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flagpennant.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flame.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flashlight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flask.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fliphorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flipvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/floppydiskback.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/floppydisk.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flowarrow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flowerlotus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flowertulip.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/flyingsaucer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/folder.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/folderdashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/folderlock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/folderminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/folderopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/folderplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/foldersimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/foldersimpledashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/foldersimplelock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/foldersimpleminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/foldersimpleplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/foldersimplestar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/foldersimpleuser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/folderstar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/folderuser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/folders.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/football.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/footballhelmet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/footprints.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/forkknife.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/fourk.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/framecorners.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/framerlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/function.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/funnel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/funnelsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/funnelsimplex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/funnelx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gamecontroller.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/garage.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gascan.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gaspump.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gauge.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gavel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gear.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gearfine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gearsix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/genderfemale.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/genderintersex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gendermale.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/genderneuter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gendernonbinary.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gendertransgender.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/ghost.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gif.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gift.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gitbranch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gitcommit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gitdiff.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gitfork.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gitmerge.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gitpullrequest.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/githublogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gitlablogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gitlablogosimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/globe.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/globehemisphereeast.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/globehemispherewest.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/globesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/globesimplex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/globestand.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/globex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/goggles.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/golf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/goodreadslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/googlecardboardlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/googlechromelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/googledrivelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/googlelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/googlephotoslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/googleplaylogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/googlepodcastslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gps.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gpsfix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gpsslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gradient.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/graduationcap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/grains.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/grainsslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/graph.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/graphicscard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/greaterthan.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/greaterthanorequal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gridfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/gridnine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/guitar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hairdryer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hamburger.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hammer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handarrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handarrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hand.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handcoins.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handdeposit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handeye.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handfist.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handgrabbing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handheart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handpalm.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handpeace.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handpointing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handsoap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handswipeleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handswiperight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handtap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handwaving.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handwithdraw.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handbag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handbagsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handsclapping.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handspraying.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/handshake.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/harddrive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/harddrives.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hardhat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hashstraight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/headcircuit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/headlights.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/headphones.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/headset.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/heart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/heartbreak.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hearthalf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/heartstraight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/heartstraightbreak.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/heartbeat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hexagon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/highdefinition.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/highheel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/highlighter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/highlightercircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hockey.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hoodie.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/horse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hospital.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hourglass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hourglasshigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hourglasslow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hourglassmedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hourglasssimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hourglasssimplehigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hourglasssimplelow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hourglasssimplemedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/house.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/houseline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/housesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/hurricane.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/icecream.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/identificationbadge.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/identificationcard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/image.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/imagebroken.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/imagesquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/images.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/imagessquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/infinity.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/info.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/instagramlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/intersect.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/intersectsquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/intersectthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/intersection.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/invoice.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/island.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/jar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/jarlabel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/jeep.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/joystick.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/kanban.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/key.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/keyreturn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/keyboard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/keyhole.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/knife.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/ladder.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/laddersimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lamp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lamppendant.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/laptop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lasso.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lastfmlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/layout.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/leaf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lectern.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lego.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/legosmiley.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lessthan.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lessthanorequal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lettercircleh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lettercirclep.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lettercirclev.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lifebuoy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lightbulb.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lightbulbfilament.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lighthouse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lightninga.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lightning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lightningslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linesegment.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linesegments.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/link.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linkbreak.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linksimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linksimplebreak.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linksimplehorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linksimplehorizontalbreak.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linkedinlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linktreelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/linuxlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/list.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/listbullets.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/listchecks.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/listdashes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/listheart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/listmagnifyingglass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/listnumbers.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/listplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/liststar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lockkey.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lockkeyopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/locklaminated.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/locklaminatedopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lockopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/locksimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/locksimpleopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/lockers.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/log.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/magicwand.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/magnet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/magnetstraight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/magnifyingglass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/magnifyingglassminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/magnifyingglassplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mailbox.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mappinarea.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mappin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mappinline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mappinplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mappinsimplearea.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mappinsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mappinsimpleline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/maptrifold.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/markdownlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/markercircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/martini.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/maskhappy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/masksad.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mastodonlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mathoperations.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/matrixlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/medal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/medalmilitary.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mediumlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/megaphone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/megaphonesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/memberof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/memory.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/messengerlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/metalogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/meteor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/metronome.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/microphone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/microphoneslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/microphonestage.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/microscope.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/microsoftexcellogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/microsoftoutlooklogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/microsoftpowerpointlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/microsoftteamslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/microsoftwordlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/minus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/minuscircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/minussquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/money.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/moneywavy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/monitorarrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/monitor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/monitorplay.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/moon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/moonstars.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/moped.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mopedfront.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mosque.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/motorcycle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mountains.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mouse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mouseleftclick.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mousemiddleclick.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mouserightclick.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mousescroll.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/mousesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/musicnote.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/musicnotesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/musicnotes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/musicnotesminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/musicnotesplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/musicnotessimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/navigationarrow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/needle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/network.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/networkslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/networkx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/newspaper.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/newspaperclipping.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/notequals.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/notmemberof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/notsubsetof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/notsupersetof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/notches.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/noteblank.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/note.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/notepencil.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/notebook.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/notepad.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/notification.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/notionlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/nuclearplant.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbercircleeight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbercirclefive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbercirclefour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbercirclenine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbercircleone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbercircleseven.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbercirclesix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbercirclethree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbercircletwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbercirclezero.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbereight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numberfive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numberfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbernine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numberone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numberseven.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersquareeight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersquarefive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersquarefour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersquarenine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersquareone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersquareseven.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersquaresix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersquarethree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersquaretwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbersquarezero.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numberthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numbertwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numberzero.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/numpad.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/nut.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/nytimeslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/octagon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/officechair.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/onigiri.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/openailogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/option.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/orange.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/orangeslice.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/oven.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/package.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paintbrush.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paintbrushbroad.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paintbrushhousehold.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paintbucket.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paintroller.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/palette.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/panorama.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pants.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paperplane.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paperplaneright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paperplanetilt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paperclip.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/papercliphorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/parachute.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paragraph.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/parallelogram.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/park.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/password.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/path.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/patreonlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pause.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pausecircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pawprint.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/paypallogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/peace.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pennib.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pennibstraight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pencil.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pencilcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pencilline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pencilruler.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pencilsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pencilsimpleline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pencilsimpleslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pencilslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pentagon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pentagram.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pepper.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/percent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personarmsspread.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/person.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimplebike.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimplecircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimplehike.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimplerun.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimpleski.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimplesnowboard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimpleswim.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimpletaichi.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimplethrow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/personsimplewalk.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/perspective.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phonecall.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phonedisconnect.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phoneincoming.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phonelist.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phoneoutgoing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phonepause.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phoneplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phoneslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phonetransfer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phonex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/phosphorlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pi.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pianokeys.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/picnictable.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pictureinpicture.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/piggybank.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pill.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pingpong.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pintglass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pinterestlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pinwheel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pipe.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pipewrench.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pixlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pizza.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/placeholder.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/planet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/plant.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/play.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/playcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/playpause.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/playlist.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/plug.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/plugcharging.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/plugs.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/plugsconnected.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/plus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pluscircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/plusminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/plussquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pokerchip.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/policecar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/polygon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/popcorn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/popsicle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pottedplant.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/power.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/prescription.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/presentation.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/presentationchart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/printer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/prohibit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/prohibitinset.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/projectorscreen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/projectorscreenchart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pulse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pushpin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pushpinsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pushpinsimpleslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/pushpinslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/puzzlepiece.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/qrcode.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/question.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/questionmark.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/queue.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/quotes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rabbit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/racquet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/radical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/radio.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/radiobutton.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/radioactive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rainbow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rainbowcloud.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/ranking.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/readcvlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/receipt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/receiptx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/record.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rectangle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rectangledashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/recycle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/redditlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/repeat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/repeatonce.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/replitlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/resize.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rewind.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rewindcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/roadhorizon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/robot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rocket.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rocketlaunch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rows.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rowsplusbottom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rowsplustop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rss.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rsssimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/rug.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/ruler.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sailboat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/scales.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/scan.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/scansmiley.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/scissors.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/scooter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/screencast.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/screwdriver.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/scribble.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/scribbleloop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/scroll.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/seal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sealcheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sealpercent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sealquestion.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sealwarning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/seat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/seatbelt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/securitycamera.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/selectionall.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/selectionbackground.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/selection.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/selectionforeground.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/selectioninverse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/selectionplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/selectionslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shapes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/share.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sharefat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sharenetwork.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shield.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shieldcheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shieldcheckered.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shieldchevron.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shieldplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shieldslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shieldstar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shieldwarning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shippingcontainer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shirtfolded.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shootingstar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shoppingbag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shoppingbagopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shoppingcart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shoppingcartsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shovel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shrimp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shuffleangular.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shuffle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/shufflesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sidebar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sidebarsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sigma.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/signin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/signout.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/signature.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/signpost.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/simcard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/siren.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sketchlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/skipback.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/skipbackcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/skipforward.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/skipforwardcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/skull.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/skypelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/slacklogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sliders.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/slidershorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/slideshow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/smileyangry.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/smileyblank.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/smiley.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/smileymeh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/smileymelting.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/smileynervous.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/smileysad.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/smileysticker.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/smileywink.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/smileyxeyes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/snapchatlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sneaker.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sneakermove.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/snowflake.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/soccerball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/solarpanel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/solarroof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sortascending.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sortdescending.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/soundcloudlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/spade.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sparkle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakerhifi.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakerhigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakerlow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakernone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakersimplehigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakersimplelow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakersimplenone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakersimpleslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakersimplex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakerslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speakerx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/speedometer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sphere.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/spinnerball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/spinner.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/spinnergap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/spiral.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/splithorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/splitvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/spotifylogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/spraybottle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/square.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/squarehalf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/squarehalfbottom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/squarelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/squaresplithorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/squaresplitvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/squaresfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stack.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stackminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stackoverflowlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stackplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stacksimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stairs.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stamp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/standarddefinition.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/starandcrescent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/star.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/starfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/starhalf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/starofdavid.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/steamlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/steeringwheel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/steps.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stethoscope.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sticker.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stool.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stopcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/storefront.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/strategy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/stripelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/student.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/subsetof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/subsetproperof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/subtitles.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/subtitlesslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/subtract.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/subtractsquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/subway.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/suitcase.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/suitcaserolling.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/suitcasesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sun.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sundim.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sunhorizon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sunglasses.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/supersetof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/supersetproperof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/swap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/swatches.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/swimmingpool.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/sword.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/synagogue.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/syringe.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tshirt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/table.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tabs.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tagchevron.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tagsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/target.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/taxi.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/teabag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/telegramlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/television.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/televisionsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tennisball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/terminal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/terminalwindow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/testtube.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textaunderline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textaa.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textaligncenter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textalignjustify.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textalignleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textalignright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textb.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textcolumns.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/texth.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/texthfive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/texthfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/texthone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/texthsix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/texththree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/texthtwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textindent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textitalic.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textoutdent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textstrikethrough.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textsubscript.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textsuperscript.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/texttslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textunderline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/textbox.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/thermometer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/thermometercold.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/thermometerhot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/thermometersimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/threadslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/threed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/thumbsdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/thumbsup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/ticket.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tidallogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tiktoklogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tilde.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/timer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tipjar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tipi.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tire.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/toggleleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/toggleright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/toilet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/toiletpaper.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/toolbox.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tooth.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tornado.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tote.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/totesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/towel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tractor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trademark.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trademarkregistered.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trafficcone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trafficsign.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trafficsignal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/train.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trainregional.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trainsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tram.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/translate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trashsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trayarrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trayarrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tray.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/treasurechest.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/treeevergreen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/treepalm.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/treestructure.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/treeview.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trenddown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trendup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/triangle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/triangledashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trolley.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trolleysuitcase.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trophy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/truck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/trucktrailer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/tumblrlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/twitchlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/twitterlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/umbrella.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/umbrellasimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/union.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/unite.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/unitesquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/upload.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/uploadsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usb.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/user.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usercheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usercircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usercirclecheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usercircledashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usercirclegear.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usercircleminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usercircleplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/userfocus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usergear.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/userlist.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/userminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/userplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/userrectangle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usersound.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usersquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/userswitch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/users.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usersfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/usersthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/van.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/vault.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/vectorthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/vectortwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/vibrate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/video.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/videocamera.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/videocameraslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/videoconference.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/vignette.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/vinylrecord.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/virtualreality.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/virus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/visor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/voicemail.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/volleyball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wall.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wallet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/warehouse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/warning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/warningcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/warningdiamond.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/warningoctagon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/washingmachine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/watch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wavesawtooth.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wavesine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wavesquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wavetriangle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/waveform.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/waveformslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/waves.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/webcam.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/webcamslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/webhookslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wechatlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/whatsapplogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wheelchair.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wheelchairmotion.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wifihigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wifilow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wifimedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wifinone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wifislash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wifix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wind.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/windmill.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/windowslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/wrench.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/x.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/xcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/xlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/xsquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/yarn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/yinyang.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/youtubelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/ssr/index.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/acorn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/addressbook.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/addressbooktabs.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/airtrafficcontrol.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/airplane.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/airplaneinflight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/airplanelanding.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/airplanetakeoff.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/airplanetaxiing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/airplanetilt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/airplay.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/alarm.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/alien.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/alignbottom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/alignbottomsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/aligncenterhorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/aligncenterhorizontalsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/aligncentervertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/aligncenterverticalsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/alignleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/alignleftsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/alignright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/alignrightsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/aligntop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/aligntopsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/amazonlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/ambulance.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/anchor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/anchorsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/androidlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/angle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/angularlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/aperture.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/appstorelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/appwindow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/applelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/applepodcastslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/approximateequals.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/archive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/armchair.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowarcleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowarcright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowbenddoubleupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowbenddoubleupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowbenddownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowbenddownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowbendleftdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowbendleftup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowbendrightdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowbendrightup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowbendupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowbendupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowcircledown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowcircledownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowcircledownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowcircleleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowcircleright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowcircleup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowcircleupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowcircleupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowcounterclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowdownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowdownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowelbowdownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowelbowdownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowelbowleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowelbowleftdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowelbowleftup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowelbowright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowelbowrightdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowelbowrightup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowelbowupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowelbowupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatlinedown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatlineleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatlineright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatlineup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatlinesdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatlinesleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatlinesright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatlinesup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowfatup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowlinedown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowlinedownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowlinedownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowlineleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowlineright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowlineup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowlineupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowlineupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsquaredown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsquaredownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsquaredownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsquarein.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsquareleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsquareout.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsquareright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsquareup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsquareupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsquareupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowudownleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowudownright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowuleftdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowuleftup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowurightdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowurightup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowuupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowuupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowupleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowupright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowscounterclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsdownup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowshorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsincardinal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsinlinehorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsinlinevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsinsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsleftright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsmerge.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsout.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsoutcardinal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsoutlinehorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsoutlinevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsoutsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowssplit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/arrowsvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/article.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/articlemedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/articlenytimes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/asclepius.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/asterisk.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/asterisksimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/at.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/atom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/avocado.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/axe.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/baby.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/babycarriage.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/backpack.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/backspace.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bagsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/balloon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bandaids.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bank.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/barbell.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/barcode.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/barn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/barricade.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/baseball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/baseballcap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/baseballhelmet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/basket.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/basketball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bathtub.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batterycharging.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batterychargingvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batteryempty.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batteryfull.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batteryhigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batterylow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batterymedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batteryplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batteryplusvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batteryverticalempty.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batteryverticalfull.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batteryverticalhigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batteryverticallow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batteryverticalmedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batterywarning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/batterywarningvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/beachball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/beanie.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/beerbottle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/beerstein.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/behancelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bell.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bellringing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bellsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bellsimpleringing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bellsimpleslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bellsimplez.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bellslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bellz.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/belt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/beziercurve.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bicycle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/binary.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/binoculars.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/biohazard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bird.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/blueprint.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bluetooth.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bluetoothconnected.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bluetoothslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bluetoothx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/boat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bomb.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/book.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bookbookmark.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bookopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bookopentext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bookopenuser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bookmark.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bookmarksimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bookmarks.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bookmarkssimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/books.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/boot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/boules.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/boundingbox.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bowlfood.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bowlsteam.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bowlingball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/boxarrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/boxarrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/boxingglove.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bracketsangle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bracketscurly.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bracketsround.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bracketssquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/brain.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/brandy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bread.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bridge.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/briefcase.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/briefcasemetal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/broadcast.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/broom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/browser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/browsers.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bugbeetle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bug.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bugdroid.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/buildingapartment.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/building.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/buildingoffice.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/buildings.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bulldozer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/bus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/butterfly.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cablecar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cactus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cake.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calculator.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendarblank.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendarcheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendardot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendardots.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendarheart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendarminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendarplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendarslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendarstar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/calendarx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/callbell.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/camera.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cameraplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/camerarotate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cameraslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/campfire.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/carbattery.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/car.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/carprofile.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/carsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cardholder.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cards.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cardsthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretcircledoubledown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretcircledoubleleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretcircledoubleright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretcircledoubleup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretcircledown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretcircleleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretcircleright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretcircleup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretcircleupdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretdoubledown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretdoubleleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretdoubleright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretdoubleup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretlinedown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretlineleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretlineright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretlineup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/caretupdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/carrot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cashregister.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cassettetape.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/castleturret.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cellsignalfull.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cellsignalhigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cellsignallow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cellsignalmedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cellsignalnone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cellsignalslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cellsignalx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/celltower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/certificate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chair.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chalkboard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chalkboardsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chalkboardteacher.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/champagne.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chargingstation.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chartbar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chartbarhorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chartdonut.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chartline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chartlinedown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chartlineup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chartpie.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chartpieslice.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chartpolar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chartscatter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatcentered.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatcentereddots.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatcenteredslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatcenteredtext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatcircledots.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatcircleslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatcircletext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatdots.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatteardrop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatteardropdots.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatteardropslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatteardroptext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chattext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chats.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatscircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chatsteardrop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/check.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/checkcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/checkfat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/checksquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/checksquareoffset.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/checkerboard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/checks.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cheers.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cheese.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/chefhat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cherries.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/church.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cigarette.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cigaretteslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/circle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/circledashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/circlehalf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/circlehalftilt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/circlenotch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/circlesfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/circlesthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/circlesthreeplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/circuitry.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/city.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/clipboard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/clipboardtext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/clockafternoon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/clock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/clockclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/clockcountdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/clockcounterclockwise.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/clockuser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/closedcaptioning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudarrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudarrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloud.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudcheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudfog.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudlightning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudmoon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudrain.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudsnow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudsun.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudwarning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cloudx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/clover.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/club.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/coathanger.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/codalogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/codeblock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/code.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/codesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/codepenlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/codesandboxlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/coffeebean.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/coffee.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/coin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/coinvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/coins.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/columns.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/columnsplusleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/columnsplusright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/command.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/compass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/compassrose.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/compasstool.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/computertower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/confetti.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/contactlesspayment.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/control.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cookie.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cookingpot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/copy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/copysimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/copyleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/copyright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cornersin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cornersout.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/couch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/courtbasketball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cowboyhat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cpu.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/crane.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cranetower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/creditcard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cricket.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/crop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cross.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/crosshair.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/crosshairsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/crown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/crowncross.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/crownsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cube.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cubefocus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cubetransparent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencybtc.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencycircledollar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencycny.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencydollar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencydollarsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencyeth.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencyeur.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencygbp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencyinr.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencyjpy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencykrw.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencykzt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencyngn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/currencyrub.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cursor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cursorclick.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cursortext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/cylinder.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/database.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/desk.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/desktop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/desktoptower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/detective.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/devtologo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/devicemobile.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/devicemobilecamera.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/devicemobileslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/devicemobilespeaker.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/devicerotate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/devicetablet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/devicetabletcamera.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/devicetabletspeaker.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/devices.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/diamond.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/diamondsfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dicefive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dicefour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/diceone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dicesix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dicethree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dicetwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/disc.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/discoball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/discordlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/divide.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dna.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dog.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/door.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dooropen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dotoutline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dotsnine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dotssix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dotssixvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dotsthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dotsthreecircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dotsthreecirclevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dotsthreeoutline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dotsthreeoutlinevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dotsthreevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/download.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/downloadsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dress.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dresser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dribbblelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/drone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/drop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/drophalf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/drophalfbottom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dropsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dropslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/dropboxlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/ear.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/earslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/egg.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/eggcrack.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/eject.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/ejectsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/elevator.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/empty.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/engine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/envelope.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/envelopeopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/envelopesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/envelopesimpleopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/equalizer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/equals.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/eraser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/escalatordown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/escalatorup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/exam.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/exclamationmark.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/exclude.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/excludesquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/export.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/eye.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/eyeclosed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/eyeslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/eyedropper.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/eyedroppersample.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/eyeglasses.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/eyes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/facemask.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/facebooklogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/factory.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/faders.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fadershorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/falloutshelter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fan.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/farm.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fastforward.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fastforwardcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/feather.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fediverselogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/figmalogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filearchive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filearrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filearrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fileaudio.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/file.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filec.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filecsharp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filecloud.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filecode.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filecpp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filecss.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filecsv.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filedashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filedoc.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filehtml.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fileimage.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fileini.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filejpg.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filejs.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filejsx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filelock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filemagnifyingglass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filemd.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fileminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filepdf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fileplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filepng.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fileppt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filepy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filers.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filesql.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filesvg.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filetext.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filets.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filetsx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filetxt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filevideo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filevue.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filexls.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filezip.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/files.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filmreel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filmscript.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filmslate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/filmstrip.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fingerprint.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fingerprintsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/finnthehuman.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fire.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fireextinguisher.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/firesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/firetruck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/firstaid.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/firstaidkit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fish.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fishsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flagbanner.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flagbannerfold.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flagcheckered.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flagpennant.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flame.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flashlight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flask.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fliphorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flipvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/floppydiskback.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/floppydisk.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flowarrow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flowerlotus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flowertulip.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/flyingsaucer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/folder.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/folderdashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/folderlock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/folderminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/folderopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/folderplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/foldersimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/foldersimpledashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/foldersimplelock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/foldersimpleminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/foldersimpleplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/foldersimplestar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/foldersimpleuser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/folderstar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/folderuser.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/folders.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/football.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/footballhelmet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/footprints.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/forkknife.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/fourk.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/framecorners.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/framerlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/function.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/funnel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/funnelsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/funnelsimplex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/funnelx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gamecontroller.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/garage.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gascan.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gaspump.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gauge.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gavel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gear.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gearfine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gearsix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/genderfemale.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/genderintersex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gendermale.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/genderneuter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gendernonbinary.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gendertransgender.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/ghost.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gif.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gift.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gitbranch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gitcommit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gitdiff.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gitfork.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gitmerge.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gitpullrequest.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/githublogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gitlablogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gitlablogosimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/globe.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/globehemisphereeast.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/globehemispherewest.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/globesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/globesimplex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/globestand.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/globex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/goggles.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/golf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/goodreadslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/googlecardboardlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/googlechromelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/googledrivelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/googlelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/googlephotoslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/googleplaylogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/googlepodcastslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gps.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gpsfix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gpsslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gradient.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/graduationcap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/grains.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/grainsslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/graph.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/graphicscard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/greaterthan.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/greaterthanorequal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gridfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/gridnine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/guitar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hairdryer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hamburger.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hammer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handarrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handarrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hand.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handcoins.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handdeposit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handeye.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handfist.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handgrabbing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handheart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handpalm.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handpeace.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handpointing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handsoap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handswipeleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handswiperight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handtap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handwaving.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handwithdraw.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handbag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handbagsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handsclapping.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handspraying.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/handshake.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/harddrive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/harddrives.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hardhat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hashstraight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/headcircuit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/headlights.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/headphones.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/headset.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/heart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/heartbreak.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hearthalf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/heartstraight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/heartstraightbreak.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/heartbeat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hexagon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/highdefinition.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/highheel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/highlighter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/highlightercircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hockey.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hoodie.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/horse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hospital.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hourglass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hourglasshigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hourglasslow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hourglassmedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hourglasssimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hourglasssimplehigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hourglasssimplelow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hourglasssimplemedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/house.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/houseline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/housesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/hurricane.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/icecream.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/identificationbadge.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/identificationcard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/image.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/imagebroken.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/imagesquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/images.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/imagessquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/infinity.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/info.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/instagramlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/intersect.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/intersectsquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/intersectthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/intersection.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/invoice.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/island.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/jar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/jarlabel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/jeep.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/joystick.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/kanban.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/key.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/keyreturn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/keyboard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/keyhole.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/knife.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/ladder.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/laddersimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lamp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lamppendant.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/laptop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lasso.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lastfmlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/layout.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/leaf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lectern.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lego.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/legosmiley.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lessthan.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lessthanorequal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lettercircleh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lettercirclep.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lettercirclev.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lifebuoy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lightbulb.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lightbulbfilament.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lighthouse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lightninga.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lightning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lightningslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linesegment.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linesegments.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linevertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/link.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linkbreak.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linksimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linksimplebreak.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linksimplehorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linksimplehorizontalbreak.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linkedinlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linktreelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/linuxlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/list.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/listbullets.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/listchecks.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/listdashes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/listheart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/listmagnifyingglass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/listnumbers.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/listplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/liststar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lockkey.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lockkeyopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/locklaminated.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/locklaminatedopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lockopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/locksimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/locksimpleopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/lockers.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/log.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/magicwand.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/magnet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/magnetstraight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/magnifyingglass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/magnifyingglassminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/magnifyingglassplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mailbox.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mappinarea.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mappin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mappinline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mappinplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mappinsimplearea.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mappinsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mappinsimpleline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/maptrifold.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/markdownlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/markercircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/martini.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/maskhappy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/masksad.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mastodonlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mathoperations.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/matrixlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/medal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/medalmilitary.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mediumlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/megaphone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/megaphonesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/memberof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/memory.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/messengerlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/metalogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/meteor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/metronome.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/microphone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/microphoneslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/microphonestage.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/microscope.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/microsoftexcellogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/microsoftoutlooklogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/microsoftpowerpointlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/microsoftteamslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/microsoftwordlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/minus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/minuscircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/minussquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/money.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/moneywavy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/monitorarrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/monitor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/monitorplay.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/moon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/moonstars.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/moped.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mopedfront.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mosque.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/motorcycle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mountains.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mouse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mouseleftclick.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mousemiddleclick.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mouserightclick.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mousescroll.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/mousesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/musicnote.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/musicnotesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/musicnotes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/musicnotesminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/musicnotesplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/musicnotessimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/navigationarrow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/needle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/network.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/networkslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/networkx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/newspaper.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/newspaperclipping.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/notequals.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/notmemberof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/notsubsetof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/notsupersetof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/notches.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/noteblank.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/note.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/notepencil.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/notebook.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/notepad.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/notification.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/notionlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/nuclearplant.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbercircleeight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbercirclefive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbercirclefour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbercirclenine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbercircleone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbercircleseven.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbercirclesix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbercirclethree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbercircletwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbercirclezero.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbereight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numberfive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numberfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbernine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numberone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numberseven.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersquareeight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersquarefive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersquarefour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersquarenine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersquareone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersquareseven.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersquaresix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersquarethree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersquaretwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbersquarezero.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numberthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numbertwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numberzero.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/numpad.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/nut.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/nytimeslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/octagon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/officechair.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/onigiri.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/openailogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/option.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/orange.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/orangeslice.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/oven.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/package.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paintbrush.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paintbrushbroad.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paintbrushhousehold.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paintbucket.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paintroller.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/palette.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/panorama.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pants.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paperplane.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paperplaneright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paperplanetilt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paperclip.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/papercliphorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/parachute.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paragraph.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/parallelogram.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/park.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/password.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/path.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/patreonlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pause.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pausecircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pawprint.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/paypallogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/peace.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pennib.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pennibstraight.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pencil.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pencilcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pencilline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pencilruler.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pencilsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pencilsimpleline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pencilsimpleslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pencilslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pentagon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pentagram.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pepper.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/percent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personarmsspread.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/person.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimplebike.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimplecircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimplehike.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimplerun.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimpleski.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimplesnowboard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimpleswim.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimpletaichi.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimplethrow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/personsimplewalk.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/perspective.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phonecall.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phonedisconnect.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phoneincoming.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phonelist.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phoneoutgoing.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phonepause.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phoneplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phoneslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phonetransfer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phonex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/phosphorlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pi.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pianokeys.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/picnictable.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pictureinpicture.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/piggybank.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pill.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pingpong.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pintglass.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pinterestlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pinwheel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pipe.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pipewrench.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pixlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pizza.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/placeholder.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/planet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/plant.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/play.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/playcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/playpause.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/playlist.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/plug.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/plugcharging.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/plugs.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/plugsconnected.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/plus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pluscircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/plusminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/plussquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pokerchip.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/policecar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/polygon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/popcorn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/popsicle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pottedplant.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/power.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/prescription.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/presentation.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/presentationchart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/printer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/prohibit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/prohibitinset.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/projectorscreen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/projectorscreenchart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pulse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pushpin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pushpinsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pushpinsimpleslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/pushpinslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/puzzlepiece.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/qrcode.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/question.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/questionmark.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/queue.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/quotes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rabbit.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/racquet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/radical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/radio.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/radiobutton.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/radioactive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rainbow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rainbowcloud.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/ranking.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/readcvlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/receipt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/receiptx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/record.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rectangle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rectangledashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/recycle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/redditlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/repeat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/repeatonce.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/replitlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/resize.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rewind.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rewindcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/roadhorizon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/robot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rocket.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rocketlaunch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rows.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rowsplusbottom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rowsplustop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rss.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rsssimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/rug.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/ruler.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sailboat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/scales.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/scan.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/scansmiley.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/scissors.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/scooter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/screencast.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/screwdriver.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/scribble.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/scribbleloop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/scroll.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/seal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sealcheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sealpercent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sealquestion.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sealwarning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/seat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/seatbelt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/securitycamera.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/selectionall.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/selectionbackground.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/selection.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/selectionforeground.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/selectioninverse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/selectionplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/selectionslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shapes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/share.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sharefat.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sharenetwork.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shield.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shieldcheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shieldcheckered.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shieldchevron.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shieldplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shieldslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shieldstar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shieldwarning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shippingcontainer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shirtfolded.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shootingstar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shoppingbag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shoppingbagopen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shoppingcart.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shoppingcartsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shovel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shower.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shrimp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shuffleangular.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shuffle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/shufflesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sidebar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sidebarsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sigma.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/signin.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/signout.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/signature.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/signpost.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/simcard.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/siren.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sketchlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/skipback.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/skipbackcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/skipforward.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/skipforwardcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/skull.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/skypelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/slacklogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sliders.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/slidershorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/slideshow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/smileyangry.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/smileyblank.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/smiley.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/smileymeh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/smileymelting.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/smileynervous.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/smileysad.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/smileysticker.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/smileywink.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/smileyxeyes.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/snapchatlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sneaker.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sneakermove.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/snowflake.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/soccerball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sock.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/solarpanel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/solarroof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sortascending.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sortdescending.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/soundcloudlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/spade.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sparkle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakerhifi.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakerhigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakerlow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakernone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakersimplehigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakersimplelow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakersimplenone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakersimpleslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakersimplex.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakerslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speakerx.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/speedometer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sphere.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/spinnerball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/spinner.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/spinnergap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/spiral.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/splithorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/splitvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/spotifylogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/spraybottle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/square.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/squarehalf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/squarehalfbottom.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/squarelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/squaresplithorizontal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/squaresplitvertical.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/squaresfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stack.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stackminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stackoverflowlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stackplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stacksimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stairs.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stamp.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/standarddefinition.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/starandcrescent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/star.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/starfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/starhalf.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/starofdavid.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/steamlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/steeringwheel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/steps.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stethoscope.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sticker.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stool.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stop.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stopcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/storefront.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/strategy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/stripelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/student.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/subsetof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/subsetproperof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/subtitles.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/subtitlesslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/subtract.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/subtractsquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/subway.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/suitcase.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/suitcaserolling.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/suitcasesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sun.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sundim.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sunhorizon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sunglasses.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/supersetof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/supersetproperof.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/swap.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/swatches.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/swimmingpool.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/sword.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/synagogue.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/syringe.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tshirt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/table.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tabs.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tagchevron.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tagsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/target.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/taxi.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/teabag.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/telegramlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/television.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/televisionsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tennisball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/terminal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/terminalwindow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/testtube.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textaunderline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textaa.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textaligncenter.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textalignjustify.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textalignleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textalignright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textb.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textcolumns.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/texth.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/texthfive.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/texthfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/texthone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/texthsix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/texththree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/texthtwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textindent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textitalic.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textoutdent.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textstrikethrough.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textsubscript.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textsuperscript.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textt.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/texttslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textunderline.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/textbox.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/thermometer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/thermometercold.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/thermometerhot.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/thermometersimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/threadslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/threed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/thumbsdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/thumbsup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/ticket.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tidallogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tiktoklogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tilde.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/timer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tipjar.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tipi.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tire.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/toggleleft.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/toggleright.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/toilet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/toiletpaper.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/toolbox.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tooth.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tornado.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tote.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/totesimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/towel.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tractor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trademark.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trademarkregistered.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trafficcone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trafficsign.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trafficsignal.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/train.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trainregional.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trainsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tram.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/translate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trashsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trayarrowdown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trayarrowup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tray.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/treasurechest.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/treeevergreen.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/treepalm.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/treestructure.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/treeview.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trenddown.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trendup.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/triangle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/triangledashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trolley.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trolleysuitcase.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trophy.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/truck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/trucktrailer.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/tumblrlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/twitchlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/twitterlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/umbrella.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/umbrellasimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/union.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/unite.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/unitesquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/upload.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/uploadsimple.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usb.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/user.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usercheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usercircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usercirclecheck.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usercircledashed.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usercirclegear.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usercircleminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usercircleplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/userfocus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usergear.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/userlist.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/userminus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/userplus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/userrectangle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usersound.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usersquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/userswitch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/users.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usersfour.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/usersthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/van.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/vault.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/vectorthree.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/vectortwo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/vibrate.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/video.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/videocamera.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/videocameraslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/videoconference.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/vignette.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/vinylrecord.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/virtualreality.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/virus.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/visor.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/voicemail.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/volleyball.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wall.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wallet.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/warehouse.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/warning.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/warningcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/warningdiamond.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/warningoctagon.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/washingmachine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/watch.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wavesawtooth.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wavesine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wavesquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wavetriangle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/waveform.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/waveformslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/waves.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/webcam.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/webcamslash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/webhookslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wechatlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/whatsapplogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wheelchair.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wheelchairmotion.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wifihigh.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wifilow.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wifimedium.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wifinone.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wifislash.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wifix.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wind.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/windmill.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/windowslogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wine.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/wrench.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/x.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/xcircle.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/xlogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/xsquare.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/yarn.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/yinyang.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/csr/youtubelogo.d.ts","./node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@phosphor-icons/react/dist/index.d.ts","./oss/src/components/filters/types.d.ts","./oss/src/components/genericdrawer/types.d.ts","./oss/src/components/modelregistry/drawers/configureproviderdrawer/assets/types.d.ts","./oss/src/components/modelregistry/modals/configureprovidermodal/assets/types.d.ts","./oss/src/components/modelregistry/modals/deleteprovidermodal/assets/types.d.ts","./oss/src/components/modelregistry/assets/labelinput/types.d.ts","./oss/src/components/playground/components/types.d.ts","./packages/agenta-entities/src/runnable/types.ts","./packages/agenta-entities/src/loadable/types.ts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/internals.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/store.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/atom.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/typeutils.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/react/provider.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/react/useatomvalue.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/react/usesetatom.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/react/useatom.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/react.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/index.d.mts","./node_modules/.pnpm/jotai-family@1.0.1_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0_/node_modules/jotai-family/dist/atomfamily.d.ts","./node_modules/.pnpm/jotai-family@1.0.1_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0_/node_modules/jotai-family/dist/atomtree.d.ts","./node_modules/.pnpm/jotai-family@1.0.1_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0_/node_modules/jotai-family/dist/index.d.ts","./packages/agenta-entities/src/shared/entitybridge.ts","./packages/agenta-entities/src/shared/user/atoms.ts","./packages/agenta-entities/src/shared/molecule/types.ts","./packages/agenta-entities/src/shared/molecule/createmolecule.ts","./packages/agenta-entities/src/shared/molecule/extendmolecule.ts","./packages/agenta-entities/src/shared/molecule/createlistextension.ts","./packages/agenta-entities/src/shared/molecule/createcontrolleratomfamily.ts","./packages/agenta-entities/src/shared/molecule/createentitycontroller.ts","./packages/agenta-entities/src/shared/molecule/createentitydraftstate.ts","./packages/agenta-entities/src/shared/molecule/createlocalmolecule.ts","./packages/agenta-entities/src/shared/molecule/withentitymeta.ts","./packages/agenta-entities/src/shared/molecule/index.ts","./packages/agenta-entities/src/shared/utils/schema.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/json-schema.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/standard-schema.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/registries.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/to-json-schema.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/util.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/versions.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/schemas.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/checks.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/errors.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/core.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/parse.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/regexes.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ar.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/az.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/be.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/bg.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ca.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/cs.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/da.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/de.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/en.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/eo.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/es.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/fa.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/fi.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/fr.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/fr-ca.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/he.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/hu.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/id.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/is.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/it.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ja.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ka.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/kh.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/km.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ko.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/lt.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/mk.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ms.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/nl.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/no.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ota.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ps.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/pl.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/pt.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ru.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/sl.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/sv.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ta.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/th.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/tr.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ua.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/uk.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ur.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/vi.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/zh-cn.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/zh-tw.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/yo.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/index.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/doc.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/api.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/json-schema-processors.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/json-schema.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/standard-schema.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/util.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/parse.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/versions.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/regexes.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ar.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/az.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/be.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/bg.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ca.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/cs.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/da.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/de.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/en.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/eo.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/es.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/fa.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/fi.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/fr.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/fr-ca.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/he.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/hu.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/id.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/is.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/it.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ja.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ka.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/kh.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/km.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ko.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/lt.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/mk.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ms.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/nl.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/no.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ota.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ps.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/pl.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/pt.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ru.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/sl.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/sv.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ta.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/th.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/tr.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ua.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/uk.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/ur.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/vi.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/zh-cn.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/zh-tw.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/yo.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/locales/index.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/doc.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/api.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/json-schema-processors.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/json-schema-generator.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/index.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/to-json-schema.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/schemas.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/checks.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/errors.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/core.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/registries.d.ts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/json-schema-generator.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/core/index.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/classic/errors.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/classic/parse.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/classic/schemas.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/classic/checks.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/classic/compat.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/classic/from-json-schema.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/classic/iso.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/classic/coerce.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/classic/external.d.cts","./node_modules/.pnpm/zod@4.2.1/node_modules/zod/index.d.cts","./packages/agenta-entities/src/shared/utils/zodschema.ts","./packages/agenta-entities/src/shared/utils/transforms.ts","./packages/agenta-shared/src/utils/createbatchfetcher.ts","./packages/agenta-shared/src/utils/validators.ts","./packages/agenta-shared/src/utils/filteritems.ts","./node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/customparseformat.d.ts","./node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/utc.d.ts","./packages/agenta-shared/src/utils/dayjs.ts","./packages/agenta-shared/src/utils/entitytransforms.ts","./packages/agenta-shared/src/utils/pathutils.ts","./packages/agenta-shared/src/utils/typenarrowing.ts","./node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/parse.d.ts","./node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/stringify.d.ts","./node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/index.d.ts","./packages/agenta-shared/src/types/chatmessage.ts","./packages/agenta-shared/src/utils/_internal/unwrap.ts","./packages/agenta-shared/src/utils/chatmessage.ts","./packages/agenta-shared/src/utils/chatprompts.ts","./packages/agenta-shared/src/utils/createlogger.ts","./node_modules/.pnpm/jsonrepair@3.13.2/node_modules/jsonrepair/lib/types/regular/jsonrepair.d.ts","./node_modules/.pnpm/jsonrepair@3.13.2/node_modules/jsonrepair/lib/types/utils/jsonrepairerror.d.ts","./node_modules/.pnpm/jsonrepair@3.13.2/node_modules/jsonrepair/lib/types/index.d.ts","./packages/agenta-shared/src/utils/jsonparsing.ts","./packages/agenta-shared/src/utils/keyutils.ts","./packages/agenta-shared/src/utils/jsondetection.ts","./packages/agenta-shared/src/utils/editorlanguage.ts","./node_modules/.pnpm/@scalar+json-magic@0.11.4/node_modules/@scalar/json-magic/dist/helpers/escape-json-pointer.d.ts","./node_modules/.pnpm/@scalar+openapi-types@0.5.3/node_modules/@scalar/openapi-types/dist/openapi-types.d.ts","./node_modules/.pnpm/@scalar+openapi-types@0.5.3/node_modules/@scalar/openapi-types/dist/index.d.ts","./node_modules/.pnpm/@scalar+openapi-upgrader@0.1.8/node_modules/@scalar/openapi-upgrader/dist/2.0-to-3.0/upgrade-from-two-to-three.d.ts","./node_modules/.pnpm/@scalar+openapi-upgrader@0.1.8/node_modules/@scalar/openapi-upgrader/dist/2.0-to-3.0/index.d.ts","./node_modules/.pnpm/@scalar+openapi-upgrader@0.1.8/node_modules/@scalar/openapi-upgrader/dist/3.0-to-3.1/upgrade-from-three-to-three-one.d.ts","./node_modules/.pnpm/@scalar+openapi-upgrader@0.1.8/node_modules/@scalar/openapi-upgrader/dist/3.0-to-3.1/index.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/configuration/index.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/types/index.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/resolve-references.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/dereference.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/filter.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/is-json.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/is-yaml.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/join/join.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/join/index.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/load/load.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/load/index.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/normalize.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/validate.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/openapi/openapi.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/to-json.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/to-yaml.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/transform/utils/addinfoobject.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/transform/utils/addlatestopenapiversion.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/transform/sanitize.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/traverse.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/unescape-json-pointer.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/utils/upgrade.d.ts","./node_modules/.pnpm/@scalar+openapi-parser@0.24.13/node_modules/@scalar/openapi-parser/dist/index.d.ts","./packages/agenta-shared/src/utils/openapi.ts","./packages/agenta-shared/src/utils/formatters/formatters.ts","./packages/agenta-shared/src/utils/formatters/index.ts","./packages/agenta-shared/src/utils/formatenumlabel.ts","./packages/agenta-shared/src/utils/schemaoptions.ts","./packages/agenta-shared/src/utils/pluralize.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/types.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/max.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/nil.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/parse.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v1.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v1tov6.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v35.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v3.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v5.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v6.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v6tov1.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v7.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/validate.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/version.d.ts","./node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/index.d.ts","./packages/agenta-shared/src/utils/generateid.ts","./packages/agenta-shared/src/utils/datauri.ts","./packages/agenta-shared/src/utils/valueextraction.ts","./packages/agenta-shared/src/utils/statusinference.ts","./packages/agenta-shared/src/utils/mappingutils.ts","./packages/agenta-shared/src/utils/connectionslug.ts","./packages/agenta-shared/src/utils/toolslug.ts","./packages/agenta-shared/src/utils/shortpoll.ts","./packages/agenta-shared/src/utils/uriutils.ts","./packages/agenta-shared/src/utils/traceids.ts","./packages/agenta-shared/src/utils/index.ts","./packages/agenta-entities/src/shared/utils/datetime.ts","./packages/agenta-entities/src/shared/utils/helpers.ts","./packages/agenta-shared/src/state/project.ts","./packages/agenta-shared/src/state/session.ts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/constants.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/atomwithreset.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/atomwithreducer.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/atomfamily.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/selectatom.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/freezeatom.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/splitatom.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/atomwithdefault.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/atomwithstorage.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/atomwithobservable.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/loadable.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/unwrap.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/atomwithrefresh.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/atomwithlazy.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/react/utils/useresetatom.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/react/utils/usereduceratom.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/react/utils/useatomcallback.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/react/utils/usehydrateatoms.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/react/utils.d.mts","./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/utils.d.mts","./packages/agenta-shared/src/state/recipes/atomwithcompare.ts","./packages/agenta-shared/src/state/recipes/atomwithtoggle.ts","./packages/agenta-shared/src/state/recipes/atomwithtoggleandstorage.ts","./packages/agenta-shared/src/state/recipes/atomwithlisteners.ts","./packages/agenta-shared/src/state/recipes/atomwithbroadcast.ts","./packages/agenta-shared/src/state/recipes/atomwithdebounce.ts","./packages/agenta-shared/src/state/recipes/atomwithrefreshanddefault.ts","./packages/agenta-shared/src/state/recipes/index.ts","./packages/agenta-shared/src/state/logatom.ts","./packages/agenta-shared/src/state/devlog.ts","./packages/agenta-shared/src/state/stringstorage.ts","./packages/agenta-shared/src/state/index.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/subscribable.d.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/focusmanager.d.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/removable.d.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/hydration-blevg2lp.d.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/infinitequeryobserver.d.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/notifymanager.d.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/onlinemanager.d.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/queriesobserver.d.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/timeoutmanager.d.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/streamedquery.d.ts","./node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/index.d.ts","./node_modules/.pnpm/jotai-tanstack-query@0.11.0_@tanstack+query-core@5.90.20_@tanstack+react-query@5.90.21__71f3239e3765efda5e9f64c09f116885/node_modules/jotai-tanstack-query/dist/_queryclientatom.d.ts","./node_modules/.pnpm/jotai-tanstack-query@0.11.0_@tanstack+query-core@5.90.20_@tanstack+react-query@5.90.21__71f3239e3765efda5e9f64c09f116885/node_modules/jotai-tanstack-query/dist/index.d.ts","./packages/agenta-entities/src/shared/utils/latestentityquery.ts","./packages/agenta-entities/src/shared/utils/nullsafeatoms.ts","./packages/agenta-entities/src/shared/utils/revisionlabel.ts","./packages/agenta-entities/src/shared/utils/revisionutils.ts","./packages/agenta-entities/src/shared/utils/index.ts","./packages/agenta-ui/src/infinitevirtualtable/context/columnvisibilitycontext.ts","./packages/agenta-ui/src/infinitevirtualtable/components/columnvisibilityheader.tsx","./packages/agenta-ui/src/infinitevirtualtable/types.ts","./packages/agenta-ui/src/infinitevirtualtable/createinfinitetablestore.ts","./node_modules/.pnpm/jotai-scheduler@0.0.5_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+rea_e64c518d872a6585101d5b6a1436d446/node_modules/jotai-scheduler/dist/src/constants.d.ts","./node_modules/.pnpm/jotai-scheduler@0.0.5_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+rea_e64c518d872a6585101d5b6a1436d446/node_modules/jotai-scheduler/dist/src/types.d.ts","./node_modules/.pnpm/jotai-scheduler@0.0.5_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+rea_e64c518d872a6585101d5b6a1436d446/node_modules/jotai-scheduler/dist/src/useatomvaluewithschedule.d.ts","./node_modules/.pnpm/jotai-scheduler@0.0.5_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+rea_e64c518d872a6585101d5b6a1436d446/node_modules/jotai-scheduler/dist/src/useatomwithschedule.d.ts","./node_modules/.pnpm/jotai-scheduler@0.0.5_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+rea_e64c518d872a6585101d5b6a1436d446/node_modules/jotai-scheduler/dist/src/usesetatomwithschedule.d.ts","./node_modules/.pnpm/jotai-scheduler@0.0.5_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+rea_e64c518d872a6585101d5b6a1436d446/node_modules/jotai-scheduler/dist/src/index.d.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/useinfinitetablepagination.ts","./packages/agenta-ui/src/infinitevirtualtable/createinfinitedatasetstore.ts","./packages/agenta-ui/src/utils/styles.ts","./packages/agenta-ui/src/infinitevirtualtable/columns/types.ts","./packages/agenta-ui/src/infinitevirtualtable/columns/createtablecolumns.ts","./packages/agenta-ui/src/utils/appmessagecontext.tsx","./packages/agenta-ui/src/cellrenderers/cellcontentpopover.tsx","./packages/agenta-ui/src/cellrenderers/constants.ts","./packages/agenta-ui/src/cellrenderers/utils.ts","./packages/agenta-ui/src/cellrenderers/jsoncellcontent.tsx","./packages/agenta-ui/src/cellrenderers/textcellcontent.tsx","./packages/agenta-ui/src/cellrenderers/chatmessagescellcontent.tsx","./packages/agenta-ui/src/infinitevirtualtable/hooks/userowheight.tsx","./packages/agenta-ui/src/infinitevirtualtable/context/rowheightcontext.tsx","./packages/agenta-ui/src/cellrenderers/smartcellcontent.tsx","./packages/agenta-ui/src/cellrenderers/lastinputmessagecell.tsx","./node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/clsx.d.mts","./packages/agenta-ui/src/cellrenderers/metricutils.ts","./packages/agenta-ui/src/cellrenderers/evaluatormetricbar.tsx","./packages/agenta-ui/src/cellrenderers/metriccellcontent.tsx","./packages/agenta-ui/src/cellrenderers/index.ts","./packages/agenta-ui/src/utils/groupcolumns.ts","./packages/agenta-ui/src/infinitevirtualtable/columns/buildentitycolumns.tsx","./node_modules/.pnpm/immer@10.1.3/node_modules/immer/dist/immer.d.ts","./node_modules/.pnpm/jotai-immer@0.4.1_immer@10.1.3_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0_/node_modules/jotai-immer/dist/atomwithimmer.d.ts","./node_modules/.pnpm/jotai-immer@0.4.1_immer@10.1.3_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0_/node_modules/jotai-immer/dist/withimmer.d.ts","./node_modules/.pnpm/jotai-immer@0.4.1_immer@10.1.3_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0_/node_modules/jotai-immer/dist/useimmeratom.d.ts","./node_modules/.pnpm/jotai-immer@0.4.1_immer@10.1.3_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0_/node_modules/jotai-immer/dist/usesetimmeratom.d.ts","./node_modules/.pnpm/jotai-immer@0.4.1_immer@10.1.3_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0_/node_modules/jotai-immer/dist/index.d.ts","./packages/agenta-ui/src/infinitevirtualtable/atoms/columnvisibility.ts","./packages/agenta-ui/src/infinitevirtualtable/context/columnvisibilityflagcontext.tsx","./packages/agenta-ui/src/infinitevirtualtable/columns/cells.tsx","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/accountbookfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/accountbookoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/accountbooktwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/aimoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/alertfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/alertoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/alerttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/alibabaoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/aligncenteroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/alignleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/alignrightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/alipaycirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/alipaycircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/alipayoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/alipaysquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/aliwangwangfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/aliwangwangoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/aliyunoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/amazoncirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/amazonoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/amazonsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/androidfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/androidoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/antcloudoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/antdesignoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/apartmentoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/apifilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/apioutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/apitwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/applefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/appleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/appstoreaddoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/appstorefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/appstoreoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/appstoretwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/areachartoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/arrowdownoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/arrowleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/arrowrightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/arrowupoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/arrowsaltoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/audiofilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/audiomutedoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/audiooutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/audiotwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/auditoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/backwardfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/backwardoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/baiduoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bankfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bankoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/banktwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/barchartoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/barcodeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/barsoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/behancecirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/behanceoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/behancesquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/behancesquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bellfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/belloutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/belltwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bgcolorsoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bilibilifilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bilibilioutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/blockoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/boldoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bookfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bookoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/booktwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/borderbottomoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/borderhorizontaloutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/borderinneroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/borderleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/borderouteroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/borderoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/borderrightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bordertopoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/borderverticleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/borderlesstableoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/boxplotfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/boxplotoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/boxplottwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/branchesoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bugfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bugoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bugtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/buildfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/buildoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/buildtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bulbfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bulboutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/bulbtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/calculatorfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/calculatoroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/calculatortwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/calendarfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/calendaroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/calendartwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/camerafilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cameraoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cameratwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/carfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/caroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cartwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/caretdownfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/caretdownoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/caretleftfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/caretleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/caretrightfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/caretrightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/caretupfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/caretupoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/carryoutfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/carryoutoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/carryouttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/checkcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/checkcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/checkcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/checkoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/checksquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/checksquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/checksquaretwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/chromefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/chromeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cicirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cicircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cicircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cioutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/citwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/clearoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/clockcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/clockcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/clockcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/closecirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/closecircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/closecircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/closeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/closesquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/closesquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/closesquaretwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/clouddownloadoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cloudfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cloudoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cloudserveroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cloudsyncoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/cloudtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/clouduploadoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/clusteroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/codefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/codeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/codesandboxcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/codesandboxoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/codesandboxsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/codetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/codepencirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/codepencircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/codepenoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/codepensquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/coffeeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/columnheightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/columnwidthoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/commentoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/compassfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/compassoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/compasstwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/compressoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/consolesqloutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/contactsfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/contactsoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/contactstwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/containerfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/containeroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/containertwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/controlfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/controloutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/controltwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/copyfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/copyoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/copytwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/copyrightcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/copyrightcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/copyrightcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/copyrightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/copyrighttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/creditcardfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/creditcardoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/creditcardtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/crownfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/crownoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/crowntwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/customerservicefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/customerserviceoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/customerservicetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dashoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dashboardfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dashboardoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dashboardtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/databasefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/databaseoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/databasetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/deletecolumnoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/deletefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/deleteoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/deleterowoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/deletetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/deliveredprocedureoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/deploymentunitoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/desktopoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/difffilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/diffoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/difftwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dingdingoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dingtalkcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dingtalkoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dingtalksquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/disconnectoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/discordfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/discordoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dislikefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dislikeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/disliketwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dockeroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dollarcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dollarcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dollarcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dollaroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dollartwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dotchartoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dotnetoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/doubleleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/doublerightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/downcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/downcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/downcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/downoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/downsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/downsquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/downsquaretwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/downloadoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dragoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dribbblecirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dribbbleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dribbblesquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dribbblesquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dropboxcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dropboxoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/dropboxsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/editfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/editoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/edittwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/ellipsisoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/enteroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/environmentfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/environmentoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/environmenttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eurocirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eurocircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eurocircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eurooutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eurotwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/exceptionoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/exclamationcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/exclamationcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/exclamationcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/exclamationoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/expandaltoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/expandoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/experimentfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/experimentoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/experimenttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/exportoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eyefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eyeinvisiblefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eyeinvisibleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eyeinvisibletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eyeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/eyetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/facebookfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/facebookoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/falloutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fastbackwardfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fastbackwardoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fastforwardfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fastforwardoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fieldbinaryoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fieldnumberoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fieldstringoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fieldtimeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileaddfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileaddoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileaddtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filedoneoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileexcelfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileexceloutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileexceltwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileexclamationfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileexclamationoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileexclamationtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filegifoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileimagefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileimageoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileimagetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filejpgoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filemarkdownfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filemarkdownoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filemarkdowntwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filepdffilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filepdfoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filepdftwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filepptfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filepptoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileppttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileprotectoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filesearchoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filesyncoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filetextfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filetextoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filetexttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileunknownfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileunknownoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileunknowntwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filewordfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filewordoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filewordtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filezipfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filezipoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fileziptwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filterfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filteroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/filtertwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/firefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fireoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/firetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/flagfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/flagoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/flagtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/folderaddfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/folderaddoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/folderaddtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/folderfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/folderopenfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/folderopenoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/folderopentwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/folderoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/foldertwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/folderviewoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fontcolorsoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fontsizeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/forkoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/formoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/formatpainterfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/formatpainteroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/forwardfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/forwardoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/frownfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/frownoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/frowntwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fullscreenexitoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fullscreenoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/functionoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fundfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fundoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fundprojectionscreenoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fundtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/fundviewoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/funnelplotfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/funnelplotoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/funnelplottwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/gatewayoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/gifoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/giftfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/giftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/gifttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/githubfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/githuboutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/gitlabfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/gitlaboutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/globaloutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/goldfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/goldoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/goldtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/goldenfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/googlecirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/googleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/googlepluscirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/googleplusoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/googleplussquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/googlesquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/groupoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/harmonyosoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/hddfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/hddoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/hddtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/heartfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/heartoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/hearttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/heatmapoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/highlightfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/highlightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/highlighttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/historyoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/holderoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/homefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/homeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/hometwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/hourglassfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/hourglassoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/hourglasstwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/html5filled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/html5outlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/html5twotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/idcardfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/idcardoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/idcardtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/iecirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/ieoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/iesquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/importoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/inboxoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/infocirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/infocircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/infocircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/infooutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/insertrowaboveoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/insertrowbelowoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/insertrowleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/insertrowrightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/instagramfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/instagramoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/insurancefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/insuranceoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/insurancetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/interactionfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/interactionoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/interactiontwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/issuescloseoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/italicoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/javaoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/javascriptoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/keyoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/kubernetesoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/laptopoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/layoutfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/layoutoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/layouttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/leftcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/leftcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/leftcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/leftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/leftsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/leftsquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/leftsquaretwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/likefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/likeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/liketwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/linechartoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/lineheightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/lineoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/linkoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/linkedinfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/linkedinoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/linuxoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/loading3quartersoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/loadingoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/lockfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/lockoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/locktwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/loginoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/logoutoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/maccommandfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/maccommandoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mailfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mailoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mailtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/manoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/medicineboxfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/medicineboxoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/medicineboxtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mediumcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mediumoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mediumsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mediumworkmarkoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mehfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mehoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mehtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/menufoldoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/menuoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/menuunfoldoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mergecellsoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mergefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mergeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/messagefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/messageoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/messagetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/minuscirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/minuscircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/minuscircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/minusoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/minussquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/minussquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/minussquaretwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mobilefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mobileoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mobiletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/moneycollectfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/moneycollectoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/moneycollecttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/monitoroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/moonfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/moonoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/moreoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mutedfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/mutedoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/nodecollapseoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/nodeexpandoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/nodeindexoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/notificationfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/notificationoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/notificationtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/numberoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/onetooneoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/openaifilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/openaioutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/orderedlistoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/paperclipoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/partitionoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pausecirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pausecircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pausecircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pauseoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/paycirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/paycircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/percentageoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/phonefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/phoneoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/phonetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/piccenteroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/picleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/picrightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/picturefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pictureoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/picturetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/piechartfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/piechartoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/piecharttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pinterestfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pinterestoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/playcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/playcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/playcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/playsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/playsquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/playsquaretwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pluscirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pluscircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pluscircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/plusoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/plussquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/plussquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/plussquaretwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/poundcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/poundcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/poundcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/poundoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/poweroffoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/printerfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/printeroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/printertwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/productfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/productoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/profilefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/profileoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/profiletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/projectfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/projectoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/projecttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/propertysafetyfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/propertysafetyoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/propertysafetytwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pullrequestoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pushpinfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pushpinoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pushpintwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/pythonoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/qqcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/qqoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/qqsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/qrcodeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/questioncirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/questioncircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/questioncircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/questionoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/radarchartoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/radiusbottomleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/radiusbottomrightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/radiussettingoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/radiusupleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/radiusuprightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/readfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/readoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/reconciliationfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/reconciliationoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/reconciliationtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/redenvelopefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/redenvelopeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/redenvelopetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/redditcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/redditoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/redditsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/redooutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/reloadoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/restfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/restoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/resttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/retweetoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rightcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rightcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rightcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rightsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rightsquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rightsquaretwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/riseoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/robotfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/robotoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rocketfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rocketoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rockettwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rollbackoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rotateleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rotaterightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/rubyoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/safetycertificatefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/safetycertificateoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/safetycertificatetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/safetyoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/savefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/saveoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/savetwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/scanoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/schedulefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/scheduleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/scheduletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/scissoroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/searchoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/securityscanfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/securityscanoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/securityscantwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/selectoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sendoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/settingfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/settingoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/settingtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/shakeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sharealtoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/shopfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/shopoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/shoptwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/shoppingcartoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/shoppingfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/shoppingoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/shoppingtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/shrinkoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/signalfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/signaturefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/signatureoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sisternodeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sketchcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sketchoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sketchsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/skinfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/skinoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/skintwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/skypefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/skypeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/slackcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/slackoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/slacksquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/slacksquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/slidersfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/slidersoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sliderstwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/smalldashoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/smilefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/smileoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/smiletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/snippetsfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/snippetsoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/snippetstwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/solutionoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sortascendingoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sortdescendingoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/soundfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/soundoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/soundtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/splitcellsoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/spotifyfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/spotifyoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/starfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/staroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/startwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/stepbackwardfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/stepbackwardoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/stepforwardfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/stepforwardoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/stockoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/stopfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/stopoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/stoptwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/strikethroughoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/subnodeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sunfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/sunoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/swapleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/swapoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/swaprightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/switcherfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/switcheroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/switchertwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/syncoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tableoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tabletfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tabletoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tablettwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tagfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tagoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tagtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tagsfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tagsoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tagstwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/taobaocirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/taobaocircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/taobaooutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/taobaosquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/teamoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/thunderboltfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/thunderboltoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/thunderbolttwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tiktokfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tiktokoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/totopoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/toolfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tooloutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/tooltwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/trademarkcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/trademarkcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/trademarkcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/trademarkoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/transactionoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/translationoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/trophyfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/trophyoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/trophytwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/truckfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/truckoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/twitchfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/twitchoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/twittercirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/twitteroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/twittersquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/underlineoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/undooutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/ungroupoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/unlockfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/unlockoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/unlocktwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/unorderedlistoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/upcirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/upcircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/upcircletwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/upoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/upsquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/upsquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/upsquaretwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/uploadoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/usbfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/usboutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/usbtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/useraddoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/userdeleteoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/useroutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/userswitchoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/usergroupaddoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/usergroupdeleteoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/verifiedoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/verticalalignbottomoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/verticalalignmiddleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/verticalaligntopoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/verticalleftoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/verticalrightoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/videocameraaddoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/videocamerafilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/videocameraoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/videocameratwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/walletfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/walletoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/wallettwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/warningfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/warningoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/warningtwotone.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/wechatfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/wechatoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/wechatworkfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/wechatworkoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/weibocirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/weibocircleoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/weibooutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/weibosquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/weibosquareoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/whatsappoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/wifioutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/windowsfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/windowsoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/womanoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/xfilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/xoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/yahoofilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/yahoooutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/youtubefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/youtubeoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/yuquefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/yuqueoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/zhihucirclefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/zhihuoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/zhihusquarefilled.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/zoominoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/zoomoutoutlined.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/icons/index.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/components/iconfont.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/components/context.d.ts","./node_modules/.pnpm/@ant-design+icons@6.1.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@ant-design/icons/lib/index.d.ts","./packages/agenta-ui/src/infinitevirtualtable/atoms/columnwidths.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/types.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/usequeries.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/queryoptions.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/usequery.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/usesuspensequery.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/usesuspenseinfinitequery.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/usesuspensequeries.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/useprefetchquery.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/useprefetchinfinitequery.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/infinitequeryoptions.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/queryclientprovider.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/queryerrorresetboundary.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/hydrationboundary.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/useisfetching.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/usemutationstate.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/usemutation.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/mutationoptions.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/useinfinitequery.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/isrestoringprovider.d.ts","./node_modules/.pnpm/@tanstack+react-query@5.90.21_react@19.0.0/node_modules/@tanstack/react-query/build/modern/index.d.ts","./packages/agenta-ui/src/infinitevirtualtable/context/virtualtablescrollcontainercontext.ts","./packages/agenta-ui/src/infinitevirtualtable/atoms/columnhiddenkeys.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/usecolumnvisibility.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/usecolumnvisibilitycontrols.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/usecontainerresize.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/useexpandablerows.tsx","./packages/agenta-ui/src/infinitevirtualtable/hooks/useheaderviewportvisibility.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/useinfinitescroll.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/usescrollcontainer.ts","./node_modules/.pnpm/@types+react-resizable@3.0.8/node_modules/@types/react-resizable/index.d.ts","./packages/agenta-ui/src/infinitevirtualtable/components/common/resizabletitle.tsx","./packages/agenta-ui/src/infinitevirtualtable/hooks/usesmartresizablecolumns.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/usetablekeyboardshortcuts.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/usetablerowselection.ts","./packages/agenta-ui/src/infinitevirtualtable/providers/columnvisibilityprovider.tsx","./packages/agenta-ui/src/infinitevirtualtable/utils/columnutils.ts","./packages/agenta-ui/src/infinitevirtualtable/components/infinitevirtualtableinner.tsx","./packages/agenta-ui/src/infinitevirtualtable/providers/infinitevirtualtablestoreprovider.tsx","./packages/agenta-ui/src/infinitevirtualtable/infinitevirtualtable.tsx","./packages/agenta-ui/src/infinitevirtualtable/components/columnvisibility/columnvisibilitypopovercontent.tsx","./packages/agenta-ui/src/infinitevirtualtable/components/columnvisibility/tablesettingsdropdown.tsx","./packages/agenta-ui/src/infinitevirtualtable/components/tableshell.tsx","./packages/agenta-ui/src/infinitevirtualtable/hooks/userowheightfeature.tsx","./packages/agenta-ui/src/infinitevirtualtable/hooks/usetableexport.ts","./packages/agenta-ui/src/infinitevirtualtable/features/infinitevirtualtablefeatureshell.tsx","./packages/agenta-ui/src/infinitevirtualtable/hooks/usetablemanager.tsx","./packages/agenta-ui/src/infinitevirtualtable/hooks/usetableactions.tsx","./packages/agenta-ui/src/utils/copytoclipboard.ts","./packages/agenta-ui/src/infinitevirtualtable/components/columnvisibilitytrigger.tsx","./packages/agenta-ui/src/infinitevirtualtable/components/columnvisibility/columnvisibilitymenutrigger.tsx","./packages/agenta-ui/src/infinitevirtualtable/columns/createstandardcolumns.tsx","./packages/agenta-ui/src/infinitevirtualtable/helpers/createtablerowhelpers.ts","./packages/agenta-ui/src/infinitevirtualtable/helpers/createsimpletablestore.ts","./packages/agenta-ui/src/infinitevirtualtable/helpers/index.ts","./packages/agenta-ui/src/infinitevirtualtable/components/filters/filterspopovertrigger.tsx","./packages/agenta-ui/src/infinitevirtualtable/components/tabledescription.tsx","./packages/agenta-ui/src/infinitevirtualtable/features/useinfinitetablefeaturepagination.ts","./packages/agenta-ui/src/infinitevirtualtable/features/index.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/useeditabletable.ts","./packages/agenta-ui/src/infinitevirtualtable/components/common/skeletonline.tsx","./packages/agenta-ui/src/infinitevirtualtable/paginated/createpaginatedentitystore.ts","./packages/agenta-ui/src/infinitevirtualtable/paginated/index.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/useentitytablestate.ts","./packages/agenta-ui/src/infinitevirtualtable/index.ts","./node_modules/.pnpm/lucide-react@0.479.0_react@19.0.0/node_modules/lucide-react/dist/lucide-react.d.ts","./packages/agenta-ui/src/components/selection/searchinput.tsx","./packages/agenta-ui/src/components/selection/listitem.tsx","./node_modules/.pnpm/@tanstack+virtual-core@3.13.2/node_modules/@tanstack/virtual-core/dist/esm/utils.d.ts","./node_modules/.pnpm/@tanstack+virtual-core@3.13.2/node_modules/@tanstack/virtual-core/dist/esm/index.d.ts","./node_modules/.pnpm/@tanstack+react-virtual@3.13.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@tanstack/react-virtual/dist/esm/index.d.ts","./packages/agenta-ui/src/components/selection/virtuallist.tsx","./packages/agenta-ui/src/components/selection/loadmorebutton.tsx","./packages/agenta-ui/src/components/selection/loadallbutton.tsx","./packages/agenta-ui/src/components/selection/breadcrumb.tsx","./packages/agenta-ui/src/components/selection/searchablelist.tsx","./packages/agenta-ui/src/components/enhancedmodal.tsx","./packages/agenta-ui/src/components/presentational/layout/panelfooter.tsx","./packages/agenta-ui/src/components/presentational/layout/splitpanellayout.tsx","./packages/agenta-ui/src/components/presentational/layout/modalcontentlayout.tsx","./packages/agenta-ui/src/components/selection/selectionmodalshell.tsx","./packages/agenta-ui/src/components/selection/hierarchylevelselect.tsx","./packages/agenta-ui/src/components/selection/searchablepopoverlist.tsx","./packages/agenta-ui/src/components/selection/index.ts","./packages/agenta-ui/src/components/presentational/version/versionbadge.tsx","./packages/agenta-ui/src/components/presentational/version/index.ts","./packages/agenta-ui/src/components/presentational/revision/revisionlabel.tsx","./packages/agenta-ui/src/components/presentational/revision/authorlabel.tsx","./packages/agenta-ui/src/components/presentational/revision/index.ts","./packages/agenta-ui/src/components/presentational/entity/entitypathlabel.tsx","./packages/agenta-ui/src/components/presentational/entity/entitynamewithversion.tsx","./packages/agenta-ui/src/components/presentational/entity/entitylistitemlabel.tsx","./packages/agenta-ui/src/components/presentational/entity/entitytypeicon.tsx","./packages/agenta-ui/src/components/presentational/entity/index.ts","./packages/agenta-ui/src/components/presentational/section/index.tsx","./packages/agenta-ui/src/components/presentational/copybutton.tsx","./packages/agenta-ui/src/components/presentational/enhancedbutton.tsx","./packages/agenta-ui/src/components/presentational/select/simpledropdownselect.tsx","./packages/agenta-ui/src/components/presentational/select/pathselectordropdown.tsx","./packages/agenta-ui/src/components/presentational/select/index.ts","./packages/agenta-ui/src/components/presentational/metadata/metadataheader.tsx","./packages/agenta-ui/src/components/presentational/metadata/index.ts","./packages/agenta-ui/src/components/presentational/attachments/imageattachment.tsx","./packages/agenta-ui/src/components/presentational/attachments/fileattachment.tsx","./packages/agenta-ui/src/components/presentational/attachments/attachmentgrid.tsx","./packages/agenta-ui/src/components/presentational/attachments/utils.ts","./packages/agenta-ui/src/components/presentational/attachments/imagewithfallback.tsx","./packages/agenta-ui/src/components/presentational/attachments/imagepreview.tsx","./packages/agenta-ui/src/components/presentational/attachments/promptimageupload.tsx","./packages/agenta-ui/src/components/presentational/attachments/promptdocumentupload.tsx","./packages/agenta-ui/src/components/presentational/attachments/index.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/nodes/lexicalelementnode.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/nodes/lexicaltextnode.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicalselection.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/nodes/lexicalrootnode.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicaleditorstate.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicalconstants.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicalnodestate.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicalupdatetags.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicaleditor.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicalnode.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/caret/lexicalcaret.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/caret/lexicalcaretutils.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicalcommands.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicalevents.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicalnormalization.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicalupdates.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/lexicalutils.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/nodes/artificialnode.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/nodes/lexicaldecoratornode.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/nodes/lexicallinebreaknode.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/nodes/lexicalparagraphnode.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/nodes/lexicaltabnode.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/extension-core/internal.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/extension-core/types.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/extension-core/defineextension.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/extension-core/safecast.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/extension-core/shallowmergeconfig.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/extension-core/index.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/utils/classnames.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/utils/mergeregister.d.ts","./node_modules/.pnpm/lexical@0.40.0/node_modules/lexical/index.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalcomposercontext.d.ts","./packages/agenta-ui/src/editor/plugins/markdown/commands/index.tsx","./packages/agenta-ui/src/editor/state/assets/atoms.ts","./packages/agenta-ui/src/components/presentational/field/fieldheader.tsx","./packages/agenta-ui/src/components/presentational/field/index.ts","./packages/agenta-ui/src/components/presentational/editable/editabletext.tsx","./packages/agenta-ui/src/components/presentational/editable/index.ts","./packages/agenta-ui/src/components/presentational/status/index.tsx","./packages/agenta-ui/src/components/presentational/entity-icon-label/index.tsx","./packages/agenta-ui/src/components/presentational/source-indicator/index.tsx","./packages/agenta-ui/src/components/presentational/inputs/sliderinput.tsx","./packages/agenta-ui/src/components/presentational/inputs/labeledfield.tsx","./packages/agenta-ui/src/components/presentational/inputs/commitmessageinput.tsx","./packages/agenta-ui/src/components/presentational/inputs/index.ts","./packages/agenta-ui/src/components/presentational/skeleton/listitemskeleton.tsx","./packages/agenta-ui/src/components/presentational/skeleton/index.ts","./packages/agenta-ui/src/components/presentational/layout/index.tsx","./packages/agenta-ui/src/components/presentational/table-states/tableloadingstate.tsx","./packages/agenta-ui/src/components/presentational/table-states/tableemptystate.tsx","./packages/agenta-ui/src/components/presentational/table-states/collapsiblegroupheader.tsx","./packages/agenta-ui/src/components/presentational/table-states/index.ts","./packages/agenta-ui/src/components/presentational/metrics/executionmetricsdisplay.tsx","./packages/agenta-ui/src/components/presentational/metrics/mappingstatustag.tsx","./packages/agenta-ui/src/components/presentational/metrics/index.ts","./packages/agenta-ui/src/components/presentational/formatteddate.tsx","./packages/agenta-ui/src/components/presentational/avatar/utils.ts","./packages/agenta-ui/src/components/presentational/avatar/initialsavatar.tsx","./packages/agenta-ui/src/components/presentational/avatar/index.ts","./packages/agenta-ui/src/components/presentational/buttons/addbutton.tsx","./packages/agenta-ui/src/components/presentational/buttons/runbutton.tsx","./packages/agenta-ui/src/components/presentational/buttons/collapsetogglebutton.tsx","./packages/agenta-ui/src/components/presentational/buttons/index.ts","./packages/agenta-ui/src/components/presentational/index.ts","./packages/agenta-ui/src/components/modal/modalfooter.tsx","./packages/agenta-ui/src/components/modal/modalcontent.tsx","./packages/agenta-ui/src/components/modal/index.ts","./packages/agenta-ui/src/components/dropdownbutton.tsx","./packages/agenta-ui/src/components/copybuttondropdown.tsx","./packages/agenta-ui/src/components/drafttag.tsx","./packages/agenta-ui/src/components/heightcollapse.tsx","./packages/agenta-ui/src/components/syncstatetag.tsx","./packages/agenta-ui/src/components/pagelayout.tsx","./packages/agenta-ui/src/components/scrollsentinel.tsx","./packages/agenta-ui/src/components/scrolltotopbutton.tsx","./packages/agenta-ui/src/components/index.ts","./packages/agenta-ui/src/llmicons/assets/types.d.ts","./packages/agenta-ui/src/llmicons/assets/alephalpha.tsx","./packages/agenta-ui/src/llmicons/assets/anthropic.tsx","./packages/agenta-ui/src/llmicons/assets/anyscale.tsx","./packages/agenta-ui/src/llmicons/assets/azure.tsx","./packages/agenta-ui/src/llmicons/assets/bedrock.tsx","./packages/agenta-ui/src/llmicons/assets/cerebus.tsx","./packages/agenta-ui/src/llmicons/assets/deepinfra.tsx","./packages/agenta-ui/src/llmicons/assets/fireworks.tsx","./packages/agenta-ui/src/llmicons/assets/gemini.tsx","./packages/agenta-ui/src/llmicons/assets/groq.tsx","./packages/agenta-ui/src/llmicons/assets/lepton.tsx","./packages/agenta-ui/src/llmicons/assets/mistral.tsx","./packages/agenta-ui/src/llmicons/assets/openai.tsx","./packages/agenta-ui/src/llmicons/assets/openrouter.tsx","./packages/agenta-ui/src/llmicons/assets/perplexity.tsx","./packages/agenta-ui/src/llmicons/assets/replicate.tsx","./packages/agenta-ui/src/llmicons/assets/sagemaker.tsx","./packages/agenta-ui/src/llmicons/assets/together.tsx","./packages/agenta-ui/src/llmicons/assets/vertex.tsx","./packages/agenta-ui/src/llmicons/assets/xai.tsx","./packages/agenta-ui/src/llmicons/index.ts","./packages/agenta-ui/src/selectllmprovider/types.ts","./packages/agenta-ui/src/selectllmprovider/utils.ts","./packages/agenta-ui/src/selectllmprovider/selectllmproviderbase.tsx","./packages/agenta-ui/src/selectllmprovider/index.ts","./node_modules/.pnpm/@lexical+code@0.40.0/node_modules/@lexical/code/codehighlightnode.d.ts","./node_modules/.pnpm/@lexical+code@0.40.0/node_modules/@lexical/code/flatstructureutils.d.ts","./node_modules/.pnpm/@lexical+code@0.40.0/node_modules/@lexical/code/codeextension.d.ts","./node_modules/.pnpm/@lexical+code@0.40.0/node_modules/@lexical/code/codenode.d.ts","./node_modules/.pnpm/@lexical+code@0.40.0/node_modules/@lexical/code/codehighlighterprism.d.ts","./node_modules/.pnpm/@types+prismjs@1.26.5/node_modules/@types/prismjs/index.d.ts","./node_modules/.pnpm/@lexical+code@0.40.0/node_modules/@lexical/code/facadeprism.d.ts","./node_modules/.pnpm/@lexical+code@0.40.0/node_modules/@lexical/code/index.d.ts","./node_modules/.pnpm/@lexical+markdown@0.40.0/node_modules/@lexical/markdown/markdowntransformers.d.ts","./node_modules/.pnpm/@lexical+markdown@0.40.0/node_modules/@lexical/markdown/markdownshortcuts.d.ts","./node_modules/.pnpm/@lexical+markdown@0.40.0/node_modules/@lexical/markdown/index.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/shared/types.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/reactextension.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalextensioncomposer.d.ts","./node_modules/.pnpm/@lexical+utils@0.40.0/node_modules/@lexical/utils/markselection.d.ts","./node_modules/.pnpm/@lexical+utils@0.40.0/node_modules/@lexical/utils/positionnodeonrange.d.ts","./node_modules/.pnpm/@lexical+utils@0.40.0/node_modules/@lexical/utils/selectionalwaysondisplay.d.ts","./node_modules/.pnpm/@lexical+utils@0.40.0/node_modules/@lexical/utils/index.d.ts","./node_modules/.pnpm/@types+js-yaml@4.0.9/node_modules/@types/js-yaml/index.d.ts","./node_modules/.pnpm/@types+js-yaml@4.0.9/node_modules/@types/js-yaml/index.d.mts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/common.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/array.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/collection.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/date.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/function.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/lang.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/math.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/number.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/object.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/seq.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/string.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/common/util.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/index.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/merge.d.ts","./packages/agenta-ui/src/editor/form/nodes/nodetypes.ts","./packages/agenta-ui/src/editor/form/shared/treerow.tsx","./packages/agenta-ui/src/editor/form/shared/nodeheader.tsx","./packages/agenta-ui/src/editor/form/nodes/arraynode.tsx","./packages/agenta-ui/src/editor/form/nodes/objectnode.tsx","./packages/agenta-ui/src/editor/form/nodes/primitivenode.tsx","./packages/agenta-ui/src/editor/form/nodes/rendernode.tsx","./packages/agenta-ui/src/editor/form/formview.tsx","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalcomposer.d.ts","./packages/agenta-ui/src/editor/assets/theme.ts","./packages/agenta-ui/src/editor/plugins/token/tokeninputnode.tsx","./packages/agenta-ui/src/editor/plugins/token/tokennode.ts","./packages/agenta-ui/src/editor/types.d.ts","./packages/agenta-ui/src/editor/plugins/code/types.ts","./packages/agenta-ui/src/editor/plugins/code/nodes/codeblocknode.ts","./packages/agenta-ui/src/editor/plugins/code/nodes/codehighlightnode.ts","./packages/agenta-ui/src/editor/plugins/code/core/validation/context.ts","./packages/agenta-ui/src/editor/plugins/code/core/validation/types.ts","./packages/agenta-ui/src/editor/plugins/code/utils/validationutils.ts","./packages/agenta-ui/src/editor/plugins/code/core/validation/manager.ts","./packages/agenta-ui/src/editor/plugins/code/nodes/codelinenode.ts","./packages/agenta-ui/src/editor/plugins/code/components/codeblockerrorindicator.tsx","./packages/agenta-ui/src/editor/plugins/code/nodes/codeblockerrorindicatornode.tsx","./packages/agenta-ui/src/editor/plugins/code/nodes/codetabnode.ts","./packages/agenta-ui/src/editor/plugins/code/nodes/base64node.tsx","./packages/agenta-ui/src/editor/plugins/code/context/drillincontext.tsx","./packages/agenta-ui/src/editor/plugins/code/nodes/longtextnode.tsx","./packages/agenta-ui/src/editor/plugins/code/nodes/codesegmentnode.ts","./node_modules/.pnpm/@lexical+rich-text@0.40.0/node_modules/@lexical/rich-text/index.d.ts","./node_modules/.pnpm/@lexical+list@0.40.0/node_modules/@lexical/list/lexicallistitemnode.d.ts","./node_modules/.pnpm/@lexical+list@0.40.0/node_modules/@lexical/list/lexicallistnode.d.ts","./node_modules/.pnpm/@lexical+list@0.40.0/node_modules/@lexical/list/checklist.d.ts","./node_modules/.pnpm/@lexical+list@0.40.0/node_modules/@lexical/list/formatlist.d.ts","./node_modules/.pnpm/@lexical+list@0.40.0/node_modules/@lexical/list/utils.d.ts","./node_modules/.pnpm/@preact+signals-core@1.12.1/node_modules/@preact/signals-core/dist/signals-core.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/signals.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/namedsignals.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/autofocusextension.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/cleareditorextension.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/config.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/editorstateextension.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/getextensiondependencyfromeditor.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/getpeerdependencyfromeditor.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/horizontalruleextension.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/initialstateextension.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/extensionrep.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/lexicalbuilder.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/nodeselectionextension.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/tabindentationextension.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/watchedsignal.d.ts","./node_modules/.pnpm/@lexical+extension@0.40.0/node_modules/@lexical/extension/index.d.ts","./node_modules/.pnpm/@lexical+list@0.40.0/node_modules/@lexical/list/index.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/lexicaltablecellnode.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/lexicaltablecommands.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/lexicaltableextension.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/lexicaltableselection.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/lexicaltableselectionhelpers.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/lexicaltableobserver.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/lexicaltablenode.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/lexicaltablepluginhelpers.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/lexicaltablerownode.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/lexicaltableutils.d.ts","./node_modules/.pnpm/@lexical+table@0.40.0/node_modules/@lexical/table/index.d.ts","./node_modules/.pnpm/@lexical+hashtag@0.40.0/node_modules/@lexical/hashtag/lexicalhashtagextension.d.ts","./node_modules/.pnpm/@lexical+hashtag@0.40.0/node_modules/@lexical/hashtag/lexicalhashtagnode.d.ts","./node_modules/.pnpm/@lexical+hashtag@0.40.0/node_modules/@lexical/hashtag/index.d.ts","./node_modules/.pnpm/@lexical+link@0.40.0/node_modules/@lexical/link/lexicallinknode.d.ts","./node_modules/.pnpm/@lexical+link@0.40.0/node_modules/@lexical/link/clickablelinkextension.d.ts","./node_modules/.pnpm/@lexical+link@0.40.0/node_modules/@lexical/link/lexicalautolinkextension.d.ts","./node_modules/.pnpm/@lexical+link@0.40.0/node_modules/@lexical/link/lexicallinkextension.d.ts","./node_modules/.pnpm/@lexical+link@0.40.0/node_modules/@lexical/link/index.d.ts","./node_modules/.pnpm/@lexical+overflow@0.40.0/node_modules/@lexical/overflow/index.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalhorizontalrulenode.d.ts","./node_modules/.pnpm/@lexical+mark@0.40.0/node_modules/@lexical/mark/marknode.d.ts","./node_modules/.pnpm/@lexical+mark@0.40.0/node_modules/@lexical/mark/index.d.ts","./packages/agenta-ui/src/editor/hooks/useeditorconfig/index.ts","./packages/agenta-ui/src/editor/hooks/useeditorinvariant.ts","./packages/agenta-ui/src/editor/hooks/useeditorresize.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalautofocusplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/shared/lexicalcontenteditableelement.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalcontenteditable.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalerrorboundary.d.ts","./node_modules/.pnpm/@lexical+history@0.40.0/node_modules/@lexical/history/index.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalhistoryplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalonchangeplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/shared/usedecorators.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/shared/legacydecorators.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalrichtextplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalautolinkplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalchecklistplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalclickablelinkplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalhorizontalruleplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicallinkplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicallistplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicalmarkdownshortcutplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicaltabindentationplugin.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicaltableplugin.d.ts","./packages/agenta-ui/src/editor/utils/largedocument.ts","./packages/agenta-ui/src/editor/plugins/code/utils/loadingoverlay.ts","./packages/agenta-ui/src/editor/plugins/markdown/utils/textcleanup.ts","./packages/agenta-ui/src/editor/plugins/markdown/assets/transformers.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/uselexicaleditable.d.ts","./packages/agenta-ui/src/editor/plugins/markdown/tablecellresizerplugin.tsx","./node_modules/.pnpm/@lexical+html@0.40.0/node_modules/@lexical/html/index.d.ts","./node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types/lib/index.d.ts","./node_modules/.pnpm/dompurify@3.3.3/node_modules/dompurify/dist/purify.es.d.mts","./node_modules/.pnpm/marked@17.0.4/node_modules/marked/lib/marked.d.ts","./packages/agenta-ui/src/editor/plugins/markdown/utils/htmlimport.ts","./packages/agenta-ui/src/editor/plugins/markdown/markdownplugin.tsx","./packages/agenta-ui/src/editor/plugins/toolbar/toolbarplugin.tsx","./node_modules/.pnpm/@lexical+devtools-core@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@lexical/devtools-core/uselexicalcommandslog.d.ts","./node_modules/.pnpm/@lexical+devtools-core@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@lexical/devtools-core/generatecontent.d.ts","./node_modules/.pnpm/@lexical+devtools-core@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@lexical/devtools-core/treeview.d.ts","./node_modules/.pnpm/@lexical+devtools-core@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@lexical/devtools-core/index.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/lexicaltreeview.d.ts","./packages/agenta-ui/src/editor/plugins/debug/debugplugin.tsx","./packages/agenta-ui/src/editor/plugins/singleline/singlelineplugin.tsx","./node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.d.ts","./packages/agenta-ui/src/editor/commands/initialcontentcommand.ts","./packages/agenta-ui/src/editor/plugins/code/extensions/propertyclick.tsx","./packages/agenta-ui/src/editor/plugins/code/utils/segmentutils.ts","./packages/agenta-ui/src/editor/plugins/code/utils/editorcodeutils.ts","./node_modules/.pnpm/@lexical+code-shiki@0.40.0/node_modules/@lexical/code-shiki/codehighlightershiki.d.ts","./node_modules/.pnpm/@lexical+code-shiki@0.40.0/node_modules/@lexical/code-shiki/facadeshiki.d.ts","./node_modules/.pnpm/@lexical+code-shiki@0.40.0/node_modules/@lexical/code-shiki/index.d.ts","./packages/agenta-ui/src/editor/plugins/code/utils/tokenizer.ts","./packages/agenta-ui/src/editor/plugins/code/index.tsx","./packages/agenta-ui/src/editor/plugins/code/nativecodeonlyplugin.tsx","./packages/agenta-ui/src/editor/plugins/index.tsx","./packages/agenta-ui/src/editor/plugins/code/core/highlight/updatetags.ts","./packages/agenta-ui/src/editor/plugins/code/core/commands/registerautoclosebracketscommands.ts","./packages/agenta-ui/src/editor/plugins/code/utils/indent.ts","./packages/agenta-ui/src/editor/plugins/code/utils/indentationutils.ts","./packages/agenta-ui/src/editor/plugins/code/utils/pasteutils.ts","./packages/agenta-ui/src/editor/plugins/code/core/commands/registerautoformatandvalidateonpastecommands.ts","./packages/agenta-ui/src/editor/plugins/code/core/commands/registerbasicentercommands.ts","./packages/agenta-ui/src/editor/plugins/code/core/commands/registerclosingbracketindentationcommands.ts","./packages/agenta-ui/src/editor/plugins/code/core/commands/registerindentationcommands.ts","./packages/agenta-ui/src/editor/plugins/code/utils/navigation.ts","./packages/agenta-ui/src/editor/plugins/code/core/commands/registerverticalnavigationcommands.ts","./packages/agenta-ui/src/editor/plugins/code/extensions/codebehaviorcommands.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/extensioncomponent.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/useextensioncomponent.d.ts","./packages/agenta-ui/src/editor/plugins/code/core/folding/types.ts","./packages/agenta-ui/src/editor/plugins/code/core/folding/controller.ts","./packages/agenta-ui/src/editor/plugins/code/utils/getdiffrange.ts","./packages/agenta-ui/src/editor/plugins/code/utils/pluginlocks.ts","./packages/agenta-ui/src/editor/plugins/code/core/highlight/register.ts","./packages/agenta-ui/src/editor/plugins/code/extensions/highlightcore.ts","./packages/agenta-ui/src/editor/plugins/code/extensions/codefoldingcore.ts","./packages/agenta-ui/src/editor/plugins/code/extensions/codefoldingreact.tsx","./packages/agenta-ui/src/editor/plugins/code/core/model/types.ts","./packages/agenta-ui/src/editor/plugins/code/core/model/store.ts","./packages/agenta-ui/src/editor/plugins/code/utils/language.ts","./packages/agenta-ui/src/editor/plugins/code/extensions/codemodel.ts","./packages/agenta-ui/src/editor/plugins/code/utils/lexicalobserver.ts","./packages/agenta-ui/src/editor/plugins/code/core/virtualization/controller.ts","./packages/agenta-ui/src/editor/plugins/code/extensions/codevirtualization.ts","./packages/agenta-ui/src/editor/utils/diffutils.ts","./packages/agenta-ui/src/editor/plugins/code/extensions/diffhighlight.tsx","./packages/agenta-ui/src/editor/plugins/code/core/validation/runtime.ts","./packages/agenta-ui/src/editor/plugins/code/extensions/validationcore.ts","./node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","./node_modules/.pnpm/@floating-ui+core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","./node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","./node_modules/.pnpm/@floating-ui+dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","./node_modules/.pnpm/@floating-ui+react-dom@2.1.6_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts","./node_modules/.pnpm/@floating-ui+react@0.26.28_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@floating-ui/react/dist/floating-ui.react.d.mts","./packages/agenta-ui/src/editor/plugins/code/extensions/validationreact.tsx","./packages/agenta-ui/src/editor/plugins/token/assets/selectionutils.ts","./packages/agenta-ui/src/editor/plugins/token/autoclosetokenbracesplugin.tsx","./node_modules/.pnpm/@lexical+text@0.40.0/node_modules/@lexical/text/canshowplaceholder.d.ts","./node_modules/.pnpm/@lexical+text@0.40.0/node_modules/@lexical/text/findtextintersectionfromcharacters.d.ts","./node_modules/.pnpm/@lexical+text@0.40.0/node_modules/@lexical/text/isroottextcontentempty.d.ts","./node_modules/.pnpm/@lexical+text@0.40.0/node_modules/@lexical/text/registerlexicaltextentity.d.ts","./node_modules/.pnpm/@lexical+text@0.40.0/node_modules/@lexical/text/roottextcontent.d.ts","./node_modules/.pnpm/@lexical+text@0.40.0/node_modules/@lexical/text/index.d.ts","./node_modules/.pnpm/@lexical+react@0.40.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_yjs@13.6.24/node_modules/@lexical/react/uselexicaltextentity.d.ts","./packages/agenta-ui/src/editor/plugins/token/tokenplugin.tsx","./packages/agenta-ui/src/editor/plugins/token/tokentypeaheadplugin.tsx","./packages/agenta-ui/src/editor/plugins/token/extensions/tokenbehavior.tsx","./packages/agenta-ui/src/editor/editor.tsx","./packages/agenta-ui/src/editor/diffview.tsx","./packages/agenta-ui/src/editor/state/types.d.ts","./packages/agenta-ui/src/editor/state/index.tsx","./packages/agenta-ui/src/editor/plugins/search/searchplugin.tsx","./packages/agenta-ui/src/editor/index.ts","./packages/agenta-shared/src/hooks/usedebounceinput.ts","./packages/agenta-shared/src/hooks/uselazyeffect.ts","./packages/agenta-shared/src/hooks/useselectionstate.ts","./packages/agenta-shared/src/hooks/userunallshortcut.ts","./packages/agenta-shared/src/hooks/usereduceratom.ts","./packages/agenta-shared/src/hooks/index.ts","./packages/agenta-ui/src/sharededitor/types.ts","./packages/agenta-ui/src/sharededitor/sharededitorimpl.tsx","./packages/agenta-ui/src/sharededitor/index.ts","./packages/agenta-shared/src/types/index.ts","./packages/agenta-shared/src/schemas/chatmessage.ts","./packages/agenta-shared/src/schemas/index.ts","./packages/agenta-ui/src/chatmessage/components/chatmessageeditor.tsx","./packages/agenta-ui/src/chatmessage/components/attachmentbutton.tsx","./packages/agenta-ui/src/chatmessage/components/markdowntogglebutton.tsx","./packages/agenta-ui/src/chatmessage/components/messageattachments.tsx","./packages/agenta-ui/src/chatmessage/components/toolmessageheader.tsx","./packages/agenta-ui/src/chatmessage/components/chatmessagelist.tsx","./packages/agenta-ui/src/chatmessage/components/simpledropdownselect.tsx","./packages/agenta-ui/src/chatmessage/components/index.ts","./packages/agenta-ui/src/chatmessage/index.ts","./packages/agenta-ui/src/hooks/useselectionstate.ts","./packages/agenta-ui/src/hooks/userunallshortcut.ts","./packages/agenta-ui/src/hooks/index.ts","./packages/agenta-ui/src/copytooltip/types.ts","./packages/agenta-ui/src/copytooltip/copytooltip.tsx","./packages/agenta-ui/src/copytooltip/index.ts","./packages/agenta-ui/src/index.ts","./packages/agenta-entities/src/shared/user/userauthorlabel.tsx","./packages/agenta-entities/src/shared/user/index.ts","./packages/agenta-entities/src/shared/stubmolecule.ts","./packages/agenta-entities/src/shared/createentitybridge.ts","./packages/agenta-entities/src/shared/relations/registry.ts","./packages/agenta-entities/src/shared/relations/extendwithrelations.ts","./packages/agenta-entities/src/shared/relations/bindings.ts","./packages/agenta-entities/src/shared/relations/index.ts","./packages/agenta-entities/src/shared/tabletypes.ts","./packages/agenta-entities/src/shared/createentitydatacontroller.ts","./packages/agenta-entities/src/shared/listcounts.ts","./packages/agenta-entities/src/shared/paginated/createinfinitetablestore.ts","./packages/agenta-entities/src/shared/paginated/useinfinitetablepagination.ts","./packages/agenta-entities/src/shared/paginated/createinfinitedatasetstore.ts","./packages/agenta-entities/src/shared/paginated/createtablerowhelpers.ts","./packages/agenta-entities/src/shared/paginated/createsimpletablestore.ts","./packages/agenta-entities/src/shared/paginated/createpaginatedentitystore.ts","./packages/agenta-entities/src/shared/paginated/index.ts","./packages/agenta-entities/src/shared/index.ts","./packages/agenta-entities/src/testcase/core/schema.ts","./packages/agenta-entities/src/testcase/core/types.ts","./packages/agenta-entities/src/testcase/core/columnextraction.ts","./packages/agenta-entities/src/testcase/core/index.ts","./packages/agenta-shared/src/api/env.ts","./node_modules/.pnpm/axios@1.13.5/node_modules/axios/index.d.ts","./packages/agenta-shared/src/api/axios.ts","./packages/agenta-shared/src/api/queryclient.ts","./packages/agenta-shared/src/api/index.ts","./packages/agenta-entities/src/testcase/api/api.ts","./packages/agenta-entities/src/testcase/api/index.ts","./packages/agenta-entities/src/testset/core/schema.ts","./packages/agenta-entities/src/testset/core/types.ts","./packages/agenta-entities/src/testset/core/index.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/get.d.ts","./packages/agenta-entities/src/testset/state/revisiontablestate.ts","./packages/agenta-entities/src/testcase/state/store.ts","./packages/agenta-entities/src/testcase/state/paginatedstore.ts","./packages/agenta-entities/src/testcase/state/molecule.ts","./packages/agenta-entities/src/testcase/state/datacontroller.ts","./packages/agenta-entities/src/testcase/state/index.ts","./packages/agenta-entities/src/testcase/index.ts","./packages/agenta-entities/src/loadable/bridge.ts","./packages/agenta-entities/src/loadable/store.ts","./packages/agenta-entities/src/runnable/snapshotadapter.ts","./packages/agenta-entities/src/runnable/snapshotdiff.ts","./packages/agenta-entities/src/workflow/core/schema.ts","./packages/agenta-entities/src/workflow/core/types.ts","./packages/agenta-entities/src/workflow/core/evaluatorresolution.ts","./packages/agenta-entities/src/workflow/core/index.ts","./packages/agenta-entities/src/runnable/evaluatortransforms.ts","./packages/agenta-entities/src/runnable/utils.ts","./packages/agenta-entities/src/shared/openapi/types.ts","./node_modules/.pnpm/@types+json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts","./node_modules/.pnpm/openapi-json-schema@2.0.0/node_modules/openapi-json-schema/dist/lib/types.d.ts","./node_modules/.pnpm/openapi-json-schema@2.0.0/node_modules/openapi-json-schema/dist/lib/index.d.ts","./node_modules/.pnpm/openapi-json-schema@2.0.0/node_modules/openapi-json-schema/dist/lib/utils.d.ts","./node_modules/.pnpm/openapi-json-schema@2.0.0/node_modules/openapi-json-schema/dist/index.d.ts","./packages/agenta-entities/src/shared/openapi/schemautils.ts","./packages/agenta-entities/src/shared/openapi/schemafetcher.ts","./packages/agenta-entities/src/shared/openapi/index.ts","./packages/agenta-entities/src/workflow/api/api.ts","./packages/agenta-entities/src/workflow/api/createfromtemplate.ts","./packages/agenta-entities/src/workflow/api/templates.ts","./packages/agenta-entities/src/workflow/api/index.ts","./packages/agenta-entities/src/workflow/state/helpers.ts","./packages/agenta-entities/src/workflow/state/store.ts","./packages/agenta-entities/src/workflow/snapshotadapter.ts","./packages/agenta-entities/src/runnable/porthelpers.ts","./packages/agenta-entities/src/runnable/responsehelpers.ts","./packages/agenta-entities/src/workflow/state/evaluatorutils.ts","./packages/agenta-entities/src/workflow/state/allworkflows.ts","./packages/agenta-entities/src/workflow/state/runnablesetup.ts","./packages/agenta-entities/src/workflow/state/molecule.ts","./packages/agenta-entities/src/workflow/state/selectionconfig.ts","./packages/agenta-entities/src/workflow/state/commit.ts","./packages/agenta-entities/src/workflow/state/index.ts","./packages/agenta-entities/src/workflow/relations.ts","./packages/agenta-entities/src/workflow/index.ts","./packages/agenta-entities/src/runnable/bridge.ts","./packages/agenta-entities/src/testset/api/api.ts","./packages/agenta-entities/src/testset/api/mutations.ts","./packages/agenta-entities/src/testset/api/helpers.ts","./packages/agenta-entities/src/testset/api/index.ts","./packages/agenta-entities/src/testset/state/store.ts","./packages/agenta-entities/src/testset/state/mutations.ts","./packages/agenta-entities/src/testset/state/revisionmolecule.ts","./packages/agenta-entities/src/testset/state/paginatedstore.ts","./packages/agenta-entities/src/testset/state/testsetmolecule.ts","./packages/agenta-entities/src/testset/state/selectionconfig.ts","./packages/agenta-entities/src/testset/state/index.ts","./packages/agenta-entities/src/trace/core/schema.ts","./packages/agenta-entities/src/trace/core/types.ts","./packages/agenta-entities/src/trace/core/index.ts","./packages/agenta-entities/src/trace/utils/selectors.ts","./packages/agenta-entities/src/trace/utils/index.ts","./packages/agenta-entities/src/trace/api/api.ts","./packages/agenta-entities/src/trace/api/helpers.ts","./packages/agenta-entities/src/trace/api/index.ts","./packages/agenta-entities/src/trace/state/store.ts","./packages/agenta-entities/src/trace/state/molecule.ts","./packages/agenta-entities/src/trace/state/index.ts","./packages/agenta-entities/src/trace/index.ts","./packages/agenta-entities/src/loadable/utils.ts","./packages/agenta-entities/src/loadable/controller.ts","./packages/agenta-entities/src/loadable/index.ts","./packages/agenta-entities/src/environment/core/schema.ts","./packages/agenta-entities/src/environment/core/types.ts","./packages/agenta-entities/src/environment/core/index.ts","./packages/agenta-entities/src/environment/api/mutations.ts","./packages/agenta-entities/src/environment/api/api.ts","./packages/agenta-entities/src/environment/api/index.ts","./packages/agenta-entities/src/environment/state/store.ts","./packages/agenta-entities/src/environment/state/environmentmolecule.ts","./packages/agenta-entities/src/runnable/deploy.ts","./packages/agenta-entities/src/runnable/providertypes.ts","./packages/agenta-entities/src/runnable/index.ts","./packages/agenta-playground/src/state/types.ts","./packages/agenta-playground/src/state/execution/types.ts","./packages/agenta-entities/src/shared/execution/enhanced.ts","./packages/agenta-entities/src/shared/execution/schema.ts","./packages/agenta-entities/src/shared/execution/types.ts","./packages/agenta-entities/src/shared/execution/valueextraction.ts","./packages/agenta-entities/src/shared/execution/requestbodybuilder.ts","./packages/agenta-entities/src/shared/execution/index.ts","./packages/agenta-playground/src/state/atoms/playground.ts","./packages/agenta-playground/src/state/chat/messagetypes.ts","./packages/agenta-playground/src/state/chat/messageatoms.ts","./packages/agenta-playground/src/state/chat/messageselectors.ts","./packages/agenta-playground/src/state/chat/utils.ts","./packages/agenta-playground/src/state/chat/index.ts","./packages/agenta-playground/src/state/execution/atoms.ts","./packages/agenta-playground/src/snapshot/snapshotschema.ts","./node_modules/.pnpm/lz-string@1.5.0/node_modules/lz-string/typings/lz-string.d.ts","./packages/agenta-playground/src/snapshot/snapshotcodec.ts","./packages/agenta-playground/src/snapshot/index.ts","./packages/agenta-playground/src/state/controllers/playgroundsnapshotcontroller.ts","./packages/agenta-playground/src/state/execution/displayedentities.ts","./packages/agenta-playground/src/state/execution/selectors.ts","./packages/agenta-playground/src/state/helpers/messagefactory.ts","./packages/agenta-playground/src/state/helpers/syncchatmessagestoentity.ts","./packages/agenta-playground/src/state/chat/messagereducer.ts","./packages/agenta-playground/src/state/atoms/connections.ts","./packages/agenta-playground/src/state/atoms/entityselector.ts","./packages/agenta-playground/src/state/atoms/index.ts","./packages/agenta-playground/src/state/execution/trace.ts","./packages/agenta-playground/src/state/execution/executionrunner.ts","./packages/agenta-playground/src/state/execution/reducer.ts","./packages/agenta-playground/src/state/execution/executionitems.ts","./packages/agenta-playground/src/state/execution/webworkerintegration.ts","./packages/agenta-playground/src/utils/assistantdisplay.ts","./packages/agenta-playground/src/utils/evaluatorverdict.ts","./packages/agenta-playground/src/utils/index.ts","./packages/agenta-playground/src/state/execution/generationselectors.ts","./packages/agenta-playground/src/state/execution/index.ts","./packages/agenta-playground/src/state/helpers/extractandloadchatmessages.ts","./packages/agenta-playground/src/state/helpers/testcaserownormalization.ts","./packages/agenta-playground/src/state/helpers/loadtestsetnormalizedmutation.ts","./packages/agenta-playground/src/state/context/playgroundentitycontext.tsx","./packages/agenta-playground/src/state/context/index.ts","./packages/agenta-playground/src/state/controllers/urlsnapshotcontroller.ts","./packages/agenta-playground/src/state/controllers/playgroundcontroller.ts","./packages/agenta-playground/src/state/controllers/outputconnectioncontroller.ts","./packages/agenta-playground/src/state/controllers/entityselectorcontroller.ts","./packages/agenta-playground/src/state/controllers/executioncontroller.ts","./packages/agenta-playground/src/state/controllers/executionitemcontroller.ts","./packages/agenta-playground/src/state/controllers/index.ts","./packages/agenta-playground/src/state/index.ts","./packages/agenta-playground/src/executeworkflowrevision.ts","./packages/agenta-playground/src/index.ts","./oss/src/components/enhanceduis/button/types.ts","./oss/src/components/playground/components/drawers/testsetdrawer/types.d.ts","./oss/src/components/playground/components/menus/playgroundgenerationvariablemenu/types.d.ts","./oss/src/components/playground/components/menus/playgroundvariantheadermenu/types.d.ts","./packages/agenta-entity-ui/src/selection/types.ts","./packages/agenta-entity-ui/src/selection/adapters/types.ts","./packages/agenta-entity-ui/src/selection/adapters/createadapter.ts","./packages/agenta-entity-ui/src/selection/adapters/revisionlevelfactory.ts","./packages/agenta-entity-ui/src/selection/adapters/createlevelfromrelation.ts","./packages/agenta-entity-ui/src/selection/adapters/createadapterfromrelations.ts","./packages/agenta-entities/src/testset/relations.ts","./packages/agenta-entities/src/testset/index.ts","./packages/agenta-entity-ui/src/selection/adapters/testsetrelationadapter.ts","./packages/agenta-entity-ui/src/selection/adapters/evaluatoradapter.ts","./packages/agenta-entity-ui/src/selection/adapters/workflowrevisionrelationadapter.ts","./packages/agenta-entity-ui/src/selection/adapters/evaluatorlabelutils.ts","./packages/agenta-entity-ui/src/selection/adapters/useenrichedevaluatoradapter.ts","./packages/agenta-entity-ui/src/selection/adapters/index.ts","./packages/agenta-entity-ui/src/selection/state/selectionstate.ts","./packages/agenta-entity-ui/src/selection/state/modalstate.ts","./packages/agenta-entity-ui/src/selection/state/index.ts","./packages/agenta-entity-ui/src/selection/hooks/useentityselectioncore.ts","./packages/agenta-entity-ui/src/selection/hooks/utilities/useautoselect.ts","./packages/agenta-entity-ui/src/selection/hooks/utilities/useleveldata.ts","./packages/agenta-entity-ui/src/selection/hooks/utilities/usepathbuilder.ts","./packages/agenta-entity-ui/src/selection/hooks/utilities/index.ts","./packages/agenta-entity-ui/src/selection/hooks/modes/usecascadingmode.ts","./packages/agenta-entity-ui/src/selection/hooks/modes/usebreadcrumbmode.ts","./packages/agenta-entity-ui/src/selection/hooks/modes/uselistpopovermode.ts","./packages/agenta-entity-ui/src/selection/hooks/modes/usetreeselectmode.ts","./packages/agenta-entity-ui/src/selection/hooks/modes/index.ts","./packages/agenta-entity-ui/src/selection/hooks/useentityselection.ts","./packages/agenta-entity-ui/src/selection/hooks/index.ts","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/types.ts","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/shared/levelselect.tsx","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/shared/childpopovercontent.tsx","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/shared/autoselecthandler.tsx","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/shared/index.ts","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/variants/cascadingvariant.tsx","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/variants/cascadervariant.tsx","./node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/lucide-react.d.ts","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/variants/breadcrumbvariant.tsx","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/variants/listpopovervariant.tsx","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/variants/treeselectvariant.tsx","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/variants/treeselectpopupcontent.tsx","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/variants/popovercascadervariant.tsx","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/variants/index.ts","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/unifiedentitypicker.tsx","./packages/agenta-entity-ui/src/selection/components/unifiedentitypicker/index.ts","./packages/agenta-entity-ui/src/selection/components/entityselectormodal.tsx","./packages/agenta-entity-ui/src/selection/components/hooks/useentityselector.ts","./packages/agenta-entity-ui/src/selection/components/hooks/index.ts","./packages/agenta-entity-ui/src/selection/components/index.ts","./packages/agenta-entity-ui/src/selection/initializeselection.ts","./packages/agenta-entity-ui/src/selection/index.ts","./oss/src/components/playground/components/menus/selectvariant/types.d.ts","./oss/src/components/playground/components/modals/commitvariantchangesmodal/assets/types.d.ts","./oss/src/components/playground/components/modals/createvariantmodal/types.d.ts","./oss/src/components/playground/components/modals/createvariantmodal/assets/types.d.ts","./oss/src/components/playground/components/modals/deletevariantmodal/types.d.ts","./oss/src/components/playground/components/modals/deletevariantmodal/assets/deletevariantbutton/types.d.ts","./packages/agenta-entities/src/environment/state/appdeployments.ts","./packages/agenta-entities/src/environment/state/index.ts","./packages/agenta-entities/src/environment/index.ts","./oss/src/components/playground/components/modals/deployvariantmodal/types.d.ts","./oss/src/components/playground/components/modals/deployvariantmodal/assets/deployvariantbutton/types.d.ts","./oss/src/components/playground/components/modals/deployvariantmodal/assets/deployvariantmodalcontent/types.d.ts","./oss/src/components/playground/components/playgroundpromptcomparisonview/promptcomparisonvariantnavigation/types.d.ts","./oss/src/components/playground/components/playgroundpromptcomparisonview/promptcomparisonvariantnavigation/assets/variantnavigationcard/types.d.ts","./oss/src/components/playground/components/playgroundvariantconfig/types.d.ts","./oss/src/components/playground/components/playgroundvariantconfig/assets/types.d.ts","./oss/src/components/playground/assets/utilities/errors/types.d.ts","./oss/src/components/playground/hooks/usewebworker/types.d.ts","./oss/src/components/resulttag/types.d.ts","./oss/src/components/shareddrawers/annotatedrawer/assets/enum.ts","./oss/src/components/shareddrawers/annotatedrawer/assets/types.d.ts","./oss/src/components/shareddrawers/annotatedrawer/assets/annotate/assets/types.d.ts","./oss/src/components/shareddrawers/annotatedrawer/assets/createevaluator/assets/types.d.ts","./oss/src/components/sidebar/types.d.ts","./oss/src/components/sidebar/hooks/usedropdownitems/types.d.ts","./oss/src/components/variantscomponents/drawers/variantdrawer/assets/types.d.ts","./oss/src/components/variantscomponents/dropdown/types.d.ts","./oss/src/components/pages/app-management/drawers/customworkflowhistory/types.d.ts","./oss/src/components/pages/app-management/modals/addappfromtemplatemodal/types.d.ts","./oss/src/components/pages/app-management/modals/customworkflowmodal/types.d.ts","./oss/src/components/pages/app-management/modals/customworkflowmodal/hooks/types.d.ts","./oss/src/components/pages/auth/assets/types.d.ts","./oss/src/components/pages/observability/assets/types.d.ts","./oss/src/components/pages/overview/deployments/deploymentdrawer/types.d.ts","./oss/src/components/pages/settings/workspacemanage/modals/assets/types.d.ts","./node_modules/.pnpm/posthog-js@1.229.5/node_modules/posthog-js/dist/module.d.ts","./oss/src/lib/helpers/analytics/types.d.ts","./oss/src/lib/helpers/auth/types.d.ts","./packages/css-modules.d.ts","./packages/agenta-ui/src/editor/types/css-modules.d.ts","./tests/playwright/config/testtags.ts","./tests/playwright/config/types.d.ts","./tests/tests/fixtures/types.d.ts","./oss/src/lib/types.ts","./tests/tests/fixtures/base.fixture/apihelpers/types.d.ts","./tests/tests/fixtures/base.fixture/providerhelpers/types.d.ts","./node_modules/.pnpm/playwright-core@1.57.0/node_modules/playwright-core/types/protocol.d.ts","./node_modules/.pnpm/playwright-core@1.57.0/node_modules/playwright-core/types/structs.d.ts","./node_modules/.pnpm/playwright-core@1.57.0/node_modules/playwright-core/types/types.d.ts","./node_modules/.pnpm/playwright-core@1.57.0/node_modules/playwright-core/index.d.ts","./node_modules/.pnpm/playwright@1.57.0/node_modules/playwright/types/test.d.ts","./node_modules/.pnpm/playwright@1.57.0/node_modules/playwright/test.d.ts","./node_modules/.pnpm/@playwright+test@1.57.0/node_modules/@playwright/test/index.d.ts","./tests/tests/fixtures/base.fixture/uihelpers/types.d.ts","./tests/tests/fixtures/base.fixture/types.ts","./tests/tests/fixtures/user.fixture/authhelpers/types.d.ts","./tests/utils/testmail/types.d.ts","./node_modules/.pnpm/@next+bundle-analyzer@15.5.10/node_modules/@next/bundle-analyzer/index.d.ts","./oss/next.config.ts","./ee/next.config.ts","./node_modules/.pnpm/source-map-js@1.2.1/node_modules/source-map-js/source-map.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/previous-map.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/input.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/declaration.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/root.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/warning.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/lazy-result.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/no-work-result.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/processor.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/result.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/document.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/rule.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/node.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/comment.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/container.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/at-rule.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/list.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/postcss.d.ts","./node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/postcss.d.mts","./node_modules/.pnpm/tailwindcss@3.4.17_ts-node@10.9.2_@swc+core@1.11.8_@swc+helpers@0.5.17__@types+node@20.17.24_typescript@5.8.3_/node_modules/tailwindcss/types/generated/corepluginlist.d.ts","./node_modules/.pnpm/tailwindcss@3.4.17_ts-node@10.9.2_@swc+core@1.11.8_@swc+helpers@0.5.17__@types+node@20.17.24_typescript@5.8.3_/node_modules/tailwindcss/types/generated/colors.d.ts","./node_modules/.pnpm/tailwindcss@3.4.17_ts-node@10.9.2_@swc+core@1.11.8_@swc+helpers@0.5.17__@types+node@20.17.24_typescript@5.8.3_/node_modules/tailwindcss/types/config.d.ts","./node_modules/.pnpm/tailwindcss@3.4.17_ts-node@10.9.2_@swc+core@1.11.8_@swc+helpers@0.5.17__@types+node@20.17.24_typescript@5.8.3_/node_modules/tailwindcss/types/index.d.ts","./node_modules/.pnpm/tailwindcss@3.4.17_ts-node@10.9.2_@swc+core@1.11.8_@swc+helpers@0.5.17__@types+node@20.17.24_typescript@5.8.3_/node_modules/tailwindcss/colors.d.ts","./oss/src/styles/tokens/antd-tailwind.json","./oss/tailwind.config.ts","./ee/tailwind.config.ts","./node_modules/.pnpm/jss@10.10.0/node_modules/jss/src/index.d.ts","./node_modules/.pnpm/theming@3.3.0_react@19.0.0/node_modules/theming/src/index.d.ts","./node_modules/.pnpm/react-jss@10.10.0_react@19.0.0/node_modules/react-jss/src/index.d.ts","./ee/src/components/postsignupform/assets/styles.ts","./node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/duration.d.ts","./node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/relativetime.d.ts","./ee/src/state/billing/atoms.ts","./ee/src/components/sidebarbanners/state/atoms.ts","./ee/src/components/pages/evaluations/autoevaluation/evaluatorsmodal/configureevaluator/components/modals/loadevaluatorpreset/assets/types.ts","./ee/src/components/pages/settings/billing/modals/autorenewalcancelmodal/assets/constants.ts","./ee/src/components/pages/settings/billing/modals/pricingmodal/assets/constants.ts","./node_modules/.pnpm/crisp-sdk-web@1.0.26/node_modules/crisp-sdk-web/dist/crisp.d.ts","./ee/src/hooks/usecrispchat.ts","./ee/src/state/billing/hooks.ts","./ee/src/state/billing/index.ts","./oss/tests/playwright/acceptance/app/assets/types.ts","./tests/playwright/config/runtime.ts","./oss/src/lib/hooks/usepreviewevaluations/types.ts","./tests/tests/fixtures/base.fixture/apihelpers/index.ts","./tests/tests/fixtures/base.fixture/providerhelpers/index.ts","./tests/tests/fixtures/base.fixture/uihelpers/helpers.ts","./tests/tests/fixtures/base.fixture/uihelpers/index.ts","./tests/tests/fixtures/base.fixture/index.ts","./tests/utils/index.ts","./oss/tests/playwright/acceptance/app/test.ts","./oss/tests/playwright/acceptance/app/index.ts","./oss/tests/playwright/2-app.ts","./ee/tests/playwright/acceptance/app/create.spec.ts","./ee/tests/playwright/acceptance/auto-evaluation/assets/types.ts","./ee/tests/playwright/acceptance/auto-evaluation/tests.ts","./ee/tests/playwright/acceptance/auto-evaluation/index.ts","./ee/tests/playwright/acceptance/auto-evaluation/run-auto-evaluation.spec.ts","./oss/tests/playwright/acceptance/deployment/index.ts","./oss/tests/playwright/8-deployment.ts","./ee/tests/playwright/acceptance/deployment/deploy-variant.spec.ts","./ee/tests/playwright/acceptance/human-annotation/assets/types.ts","./ee/tests/playwright/acceptance/human-annotation/tests.ts","./ee/tests/playwright/acceptance/human-annotation/index.ts","./ee/tests/playwright/acceptance/human-annotation/human-annotation.spec.ts","./oss/tests/playwright/acceptance/observability/index.ts","./oss/tests/playwright/7-observability.ts","./ee/tests/playwright/acceptance/observability/observability.spec.ts","./oss/tests/playwright/acceptance/playground/assets/types.ts","./oss/tests/playwright/acceptance/playground/assets/constants.ts","./oss/tests/playwright/acceptance/playground/tests.ts","./oss/tests/playwright/acceptance/playground/index.ts","./oss/tests/playwright/3-playground.ts","./ee/tests/playwright/acceptance/playground/run-variant.spec.ts","./oss/tests/playwright/acceptance/prompt-registry/index.ts","./oss/tests/playwright/4-prompt-registry.ts","./ee/tests/playwright/acceptance/prompt-registry/prompt-registry-flow.spec.ts","./oss/tests/playwright/acceptance/settings/api-keys.ts","./oss/tests/playwright/1-settings/api-keys.ts","./ee/tests/playwright/acceptance/settings/api-keys-management.spec.ts","./oss/tests/playwright/acceptance/settings/model-hub.ts","./oss/tests/playwright/1-settings/model-hub.ts","./ee/tests/playwright/acceptance/settings/model-hub.spec.ts","./oss/tests/playwright/acceptance/testsset/index.ts","./oss/tests/playwright/5-testsset.ts","./ee/tests/playwright/acceptance/testsset/testset.spec.ts","./oss/src/code_snippets/endpoints/fetch_config/curl.ts","./oss/src/code_snippets/endpoints/fetch_config/python.ts","./node_modules/.pnpm/@types+js-beautify@1.14.3/node_modules/@types/js-beautify/index.d.ts","./oss/src/code_snippets/endpoints/fetch_config/typescript.ts","./oss/src/code_snippets/endpoints/fetch_variant/curl.ts","./oss/src/code_snippets/endpoints/fetch_variant/python.ts","./oss/src/code_snippets/endpoints/fetch_variant/typescript.ts","./oss/src/code_snippets/endpoints/invoke_llm_app/curl.ts","./oss/src/code_snippets/endpoints/invoke_llm_app/python.ts","./oss/src/code_snippets/endpoints/invoke_llm_app/typescript.ts","./oss/src/code_snippets/testsets/create_with_json/curl.ts","./oss/src/code_snippets/testsets/create_with_json/python.ts","./oss/src/code_snippets/testsets/create_with_json/typescript.ts","./oss/src/code_snippets/testsets/create_with_upload/curl.ts","./oss/src/code_snippets/testsets/create_with_upload/python.ts","./oss/src/code_snippets/testsets/create_with_upload/typescript.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/useclosable.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/useforceupdate.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/usemergedmask.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/type.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/usemergesemantic.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/usemultipleselect.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/useorientation.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/usepatchelement.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/useproxyimperativehandle.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/usesyncstate.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/usezindex.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/hooks/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/responsiveobserver.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/grid/col.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/warning.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/formiteminput.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/presetcolors.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/seeds.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/maps/colors.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/maps/font.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/maps/size.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/maps/style.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/maps/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/alias.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/themes/shared/genfontsizes.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/themes/default/theme.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/usetoken.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/util/genstyleutils.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/util/genpresetcolor.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/util/usereseticonstyle.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/internal.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/wave/style.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/affix/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/alert/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/anchor/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/app/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/avatar/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/back-top/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/badge/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/breadcrumb/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/button/style/token.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/button/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input/style/token.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/select/style/token.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/style/roundedarrow.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/date-picker/style/token.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/date-picker/style/panel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/date-picker/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/calendar/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/card/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/carousel/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/cascader/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/checkbox/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/collapse/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/color-picker/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/descriptions/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/divider/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/drawer/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/style/placementarrow.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/dropdown/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/empty/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/flex/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/float-button/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/grid/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/image/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input-number/style/token.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input-number/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/layout/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/list/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/masonry/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/mentions/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/menu/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/message/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/modal/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/notification/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/pagination/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/popconfirm/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/popover/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/progress/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/qr-code/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/radio/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/rate/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/result/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/segmented/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/select/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/slider/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/space/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/spin/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/splitter/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/statistic/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/steps/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/switch/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/table/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tabs/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tag/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/timeline/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tooltip/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tour/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/transfer/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tree/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tree-select/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/typography/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/upload/style/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/components.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/cssinjs-utils.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/interface/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/colors.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/getrenderpropvalue.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/placements.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tooltip/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tooltip/uniqueprovider/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tooltip/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/formitemlabel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/hooks/useformitemstatus.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/formitem/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/statusutils.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/config-provider/sizecontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/time-picker/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/date-picker/generatepicker/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/button/buttongroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/button/buttonhelpers.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/button/button.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/button/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/date-picker/generatepicker/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/empty/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/modal/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/motion.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/select/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/pagination/pagination.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/popover/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/popover/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/popconfirm/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/popconfirm/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/checkbox/checkbox.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/checkbox/groupcontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/checkbox/group.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/checkbox/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/menu/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/layout/sider.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/menu/menucontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/menu/menu.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/menu/menudivider.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/menu/menuitem.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/menu/submenu.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/menu/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/dropdown/dropdown.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/dropdown/dropdown-button.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/dropdown/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/pagination/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/table/hooks/useselection.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/spin/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/table/internaltable.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/table/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tour/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/transfer/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/transfer/listbody.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/transfer/section.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/transfer/actions.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/transfer/search.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/transfer/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/progress/progress.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/progress/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/upload/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/locale/uselocale.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/locale/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/wave/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/wave/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/alert/alert.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/alert/errorboundary.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/alert/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/throttlebyanimationframe.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/affix/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/anchor/anchorlink.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/anchor/anchor.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/anchor/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/badge/badge.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/badge/ribbon.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/badge/scrollnumber.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/badge/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/breadcrumb/breadcrumbitem.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/breadcrumb/breadcrumb.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/breadcrumb/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/date-picker/locale/en_us.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/calendar/locale/en_us.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/calendar/generatecalendar.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/calendar/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tabs/tabpane.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tabs/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/card/card.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/card/cardgrid.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/card/cardmeta.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/card/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/cascader/panel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/cascader/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/collapse/collapsepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/collapse/collapse.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/collapse/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/color-picker/color.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/color-picker/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/color-picker/colorpicker.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/color-picker/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/date-picker/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/descriptions/descriptionscontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/descriptions/item.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/descriptions/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/divider/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/drawer/drawerpanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/drawer/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/flex/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/float-button/backtop.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/float-button/floatbuttongroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/float-button/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/float-button/floatbutton.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/float-button/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/image/previewgroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/image/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input/group.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input/input.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input/otp/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input/password.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input/search.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input/textarea.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/input-number/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/grid/row.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/message/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/modal/confirm.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/modal/usemodal/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/notification/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/app/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/app/app.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/app/useapp.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/app/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/auto-complete/autocomplete.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/auto-complete/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/avatar/avatarcontext.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/avatar/avatar.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/avatar/avatargroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/avatar/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/back-top/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/carousel/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/col/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/flex/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/layout/layout.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/layout/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/masonry/masonryitem.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/masonry/masonry.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/masonry/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/mentions/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/message/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/message/usemessage.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/message/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/modal/modal.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/modal/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/modal/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/notification/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/notification/usenotification.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/notification/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/qr-code/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/qr-code/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/radio/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/radio/group.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/radio/radio.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/radio/radiobutton.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/radio/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/rate/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/_util/aria-data-attrs.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/result/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/row/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/segmented/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/element.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/avatar.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/button.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/node.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/image.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/input.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/paragraph.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/title.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/skeleton.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/skeleton/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/slider/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/space/compact.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/space/addon.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/space/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/space/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/splitter/splitbar.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/splitter/interface.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/splitter/panel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/splitter/splitter.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/splitter/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/statistic/utils.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/statistic/statistic.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/statistic/countdown.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/statistic/timer.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/statistic/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/steps/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/switch/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/table/column.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/table/columngroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/table/table.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/table/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tag/checkabletag.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tag/checkabletaggroup.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tag/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/themes/default/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/theme/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/timeline/timeline.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/timeline/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tour/purepanel.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tour/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tree/tree.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tree/directorytree.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tree/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/tree-select/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/typography/typography.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/typography/base/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/typography/link.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/typography/paragraph.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/typography/text.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/typography/title.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/typography/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/upload/upload.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/upload/dragger.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/upload/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/version/version.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/version/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/watermark/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/grid/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/list/item.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/list/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/list/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/config-provider/defaultrenderempty.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/config-provider/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/config-provider/hooks/useconfig.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/config-provider/index.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/hooks/useform.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/form.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/context.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/errorlist.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/formlist.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/hooks/useforminstance.d.ts","./node_modules/.pnpm/antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/antd/lib/form/index.d.ts","./oss/src/components/automations/assets/types.ts","./oss/src/components/automations/assets/constants.ts","./oss/src/components/automations/utils/buildpreviewrequest.ts","./oss/src/components/automations/utils/buildsubscription.ts","./oss/src/components/automations/utils/handletestresult.ts","./oss/src/components/customuis/customtreecomponent/assets/styles.ts","./oss/src/components/customworkflow/customworkflowbanner/atoms.ts","./oss/src/components/deleteevaluationmodal/types.ts","./oss/src/components/deleteevaluationmodal/store/deleteevaluationmodalstore.ts","./oss/src/components/deploymentsdashboard/components/deploymentcard/styles.ts","./oss/src/components/deploymentsdashboard/modals/store/deploymentdrawerstore.ts","./oss/src/components/deploymentsdashboard/store/deploymentfilteratoms.ts","./oss/src/components/deploymentsdashboard/modals/store/deploymentmodalsstore.ts","./oss/src/components/deploymentsdashboard/store/deploymentstore.ts","./oss/src/components/drillinview/drillinfieldheader.tsx","./oss/src/components/drillinview/drillinbreadcrumb.tsx","./oss/src/components/drillinview/drillincontrols.tsx","./oss/src/components/drillinview/editormarkdowntoggleexposer.tsx","./oss/src/components/drillinview/jsoneditorwithlocalstate.tsx","./oss/src/components/drillinview/utils.ts","./oss/src/components/drillinview/drillincontent.tsx","./oss/src/components/drillinview/entitydrillinview.tsx","./oss/src/components/drillinview/testcasedrillinview.tsx","./oss/src/components/drillinview/tracespandrillinview.tsx","./oss/src/components/drillinview/entitydualvieweditor.tsx","./oss/src/components/drillinview/index.ts","./oss/src/components/enhanceduis/button/index.tsx","./oss/src/components/editorviews/simplesharededitor/types.ts","./oss/src/components/editorviews/assets/helper.ts","./node_modules/.pnpm/@cloudflare+stream-react@1.9.3_react@19.0.0/node_modules/@cloudflare/stream-react/dist/types.d.ts","./node_modules/.pnpm/@cloudflare+stream-react@1.9.3_react@19.0.0/node_modules/@cloudflare/stream-react/dist/stream.d.ts","./node_modules/.pnpm/@cloudflare+stream-react@1.9.3_react@19.0.0/node_modules/@cloudflare/stream-react/dist/usestreamsdk.d.ts","./node_modules/.pnpm/@cloudflare+stream-react@1.9.3_react@19.0.0/node_modules/@cloudflare/stream-react/dist/index.d.ts","./oss/src/components/emptystate/emptystate.tsx","./oss/src/components/emptystate/videos.ts","./oss/src/components/emptystate/index.ts","./oss/src/components/enhanceduis/drawer/types.ts","./oss/src/components/enhanceduis/modal/types.ts","./oss/src/components/enhanceduis/table/types.ts","./oss/src/components/evalrundetails/atoms/run.ts","./oss/src/components/evalrundetails/constants/table.ts","./oss/src/components/evalrundetails/atoms/compare.ts","./oss/src/components/evalrundetails/atoms/table/run.ts","./oss/src/components/evalrundetails/state/evaltype.ts","./oss/src/components/evalrundetails/atoms/table/types.ts","./oss/src/components/evalrundetails/utils/labelhelpers.ts","./oss/src/components/evalrundetails/atoms/table/evaluators.ts","./oss/src/components/evalrundetails/atoms/table/columns.ts","./oss/src/components/evalrundetails/utils/valueaccess.ts","./oss/src/components/evalrundetails/atoms/table/columnaccess.ts","./oss/src/components/evalrundetails/atoms/table/constants.ts","./oss/src/components/evalrundetails/atoms/runmetrics/types.ts","./oss/src/components/evalrundetails/atoms/metricprocessor.ts","./oss/src/components/evalrundetails/atoms/metrics.ts","./oss/src/components/evalrundetails/atoms/table/scenarios.ts","./oss/src/components/evalrundetails/atoms/table/state.ts","./oss/src/components/evalrundetails/atoms/table/testcases.ts","./oss/src/components/evalrundetails/atoms/table/index.ts","./oss/src/components/evalrundetails/atoms/tablerows.ts","./oss/src/components/evalrundetails/evaluationpreviewtablestore.ts","./oss/src/components/evalrundetails/atoms/annotations.ts","./oss/src/components/evalrundetails/utils/tracevalue.ts","./oss/src/components/evalrundetails/atoms/scenariosteps.ts","./oss/src/components/evalrundetails/atoms/traces.ts","./oss/src/components/evalrundetails/atoms/invocationtracesummary.ts","./oss/src/services/onlineevaluations/api.ts","./oss/src/components/evalrundetails/atoms/query.ts","./oss/src/components/evalrundetails/atoms/references.ts","./oss/src/components/evalrundetails/atoms/runderived.ts","./oss/src/components/evalrundetails/atoms/runinvocationaction.ts","./oss/src/components/evalrundetails/atoms/runmetrics.ts","./oss/src/lib/traces/traceutils.ts","./oss/src/components/evalrundetails/atoms/scenariotestcase.ts","./oss/src/components/evalrundetails/atoms/scenariocolumnvalues.ts","./oss/src/components/evalrundetails/atoms/testsetdetails.ts","./oss/src/components/evalrundetails/atoms/variantconfig.ts","./oss/src/components/evalrundetails/components/evaluatormetricschart/utils/chartdata.ts","./oss/src/components/evalrundetails/components/evaluatormetricsspiderchart/types.ts","./oss/src/components/evalrundetails/hooks/userunidentifiers.ts","./oss/src/components/evalrundetails/hooks/userunscopedurls.ts","./oss/src/components/evalrundetails/components/references/evalreferencelabels.tsx","./oss/src/components/evalrundetails/components/references/index.ts","./oss/src/components/evalrundetails/components/views/configurationview/utils.ts","./oss/src/components/evalrundetails/components/views/overviewview/constants.ts","./oss/src/components/evalrundetails/components/views/overviewview/types.ts","./oss/src/components/evalrundetails/components/views/overviewview/utils/evaluatormetrics.ts","./oss/src/components/evalrundetails/components/views/overviewview/hooks/userunmetricdata.ts","./oss/src/components/evalrundetails/components/views/overviewview/utils/metrics.ts","./oss/src/components/evalrundetails/components/views/overviewview/components/runnametag.tsx","./oss/src/components/evalrundetails/components/views/overviewview/components/metadatasummarytable.tsx","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/container/surface.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/container/layer.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/shape/dot.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/synchronisation/types.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/types.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/defaulttooltipcontent.d.ts","./node_modules/.pnpm/@types+d3-path@3.1.1/node_modules/@types/d3-path/index.d.ts","./node_modules/.pnpm/@types+d3-shape@3.1.7/node_modules/@types/d3-shape/index.d.ts","./node_modules/.pnpm/victory-vendor@37.3.6/node_modules/victory-vendor/d3-shape.d.ts","./node_modules/.pnpm/redux@5.0.1/node_modules/redux/dist/redux.d.ts","./node_modules/.pnpm/reselect@5.1.1/node_modules/reselect/dist/reselect.d.ts","./node_modules/.pnpm/redux-thunk@3.1.0_redux@5.0.1/node_modules/redux-thunk/dist/redux-thunk.d.ts","./node_modules/.pnpm/@reduxjs+toolkit@2.8.2_react-redux@9.2.0_@types+react@19.0.10_react@19.0.0_redux@5.0.1__react@19.0.0/node_modules/@reduxjs/toolkit/dist/uncheckedindexed.ts","./node_modules/.pnpm/@reduxjs+toolkit@2.8.2_react-redux@9.2.0_@types+react@19.0.10_react@19.0.0_redux@5.0.1__react@19.0.0/node_modules/@reduxjs/toolkit/dist/index.d.mts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/legendslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/brushslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/chartdataslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/shape/rectangle.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/label.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/util/barutils.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/selectors/barselectors.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/bar.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/shape/curve.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/line.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/labellist.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/shape/symbols.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/selectors/scatterselectors.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/scatter.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/errorbar.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/graphicalitemsslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/optionsslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/polaraxisslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/polaroptionsslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/util/ifoverflow.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/referenceelementsslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/rootpropsslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/store.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/getticks.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/cartesiangrid.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/selectors/axisselectors.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/util/chartutils.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/cartesianaxis.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/cartesianaxisslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/tooltipslice.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/util/types.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/defaultlegendcontent.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/util/payload/getuniqpayload.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/util/useelementoffset.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/legend.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/cursor.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/tooltip.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/responsivecontainer.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/cell.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/text.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/component/customized.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/shape/sector.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/shape/polygon.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/shape/cross.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/polar/polargrid.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/polar/polarradiusaxis.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/polar/polarangleaxis.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/polar/pie.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/polar/radar.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/polar/radialbar.d.ts","./node_modules/.pnpm/@types+d3-time@3.0.4/node_modules/@types/d3-time/index.d.ts","./node_modules/.pnpm/@types+d3-scale@4.0.9/node_modules/@types/d3-scale/index.d.ts","./node_modules/.pnpm/victory-vendor@37.3.6/node_modules/victory-vendor/d3-scale.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/context/brushupdatecontext.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/brush.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/xaxis.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/yaxis.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/referenceline.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/referencedot.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/referencearea.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/state/selectors/areaselectors.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/area.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/zaxis.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/linechart.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/barchart.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/piechart.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/treemap.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/sankey.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/radarchart.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/scatterchart.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/areachart.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/radialbarchart.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/composedchart.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/sunburstchart.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/shape/trapezoid.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/cartesian/funnel.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/chart/funnelchart.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/util/global.d.ts","./node_modules/.pnpm/decimal.js-light@2.5.1/node_modules/decimal.js-light/decimal.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/util/scale/getnicetickvalues.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/types.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/hooks.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/context/chartlayoutcontext.d.ts","./node_modules/.pnpm/recharts@3.1.0_@types+react@19.0.10_react-dom@19.0.0_react@19.0.0__react-is@18.3.1_react@19.0.0_redux@5.0.1/node_modules/recharts/types/index.d.ts","./oss/src/components/evalrundetails/components/evaluatormetricsspiderchart/evaluatormetricsspiderchart.tsx","./oss/src/components/evalrundetails/components/evaluatormetricsspiderchart/index.tsx","./oss/src/components/evalrundetails/components/views/overviewview/components/overviewplaceholders.tsx","./oss/src/components/evalrundetails/components/views/overviewview/components/overviewspiderchart.tsx","./oss/src/components/evalrundetails/components/views/overviewview/components/aggregatedoverviewsection.tsx","./oss/src/components/evalrundetails/components/views/overviewview/components/metriccomparisoncard.tsx","./oss/src/components/evalrundetails/utils/metricdistributions.ts","./oss/src/components/evalrundetails/components/evaluatormetricschart/histogramchart.tsx","./oss/src/components/evalrundetails/components/evaluatormetricschart/index.tsx","./oss/src/components/evalrundetails/components/views/overviewview/components/evaluatortemporalmetricschart.tsx","./oss/src/components/evalrundetails/components/views/overviewview/components/baserunmetricssection.tsx","./oss/src/components/evalrundetails/components/views/overviewview/components/index.ts","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/types.ts","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/utils.ts","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarioannotationpanel/atoms.ts","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarioannotationpanel/useannotationstate.ts","./oss/src/components/evalrundetails/export/helpers.ts","./oss/src/components/evalrundetails/export/types.ts","./oss/src/components/evalrundetails/export/columnresolvers.ts","./oss/src/components/evalrundetails/export/labelresolvers.ts","./oss/src/components/evalrundetails/hooks/usecellvisibility.ts","./oss/src/components/evalrundetails/hooks/usepreviewtabledata.ts","./oss/src/components/evalrundetails/hooks/usescenariocellvalue.ts","./oss/src/components/evalrundetails/hooks/usescenariostepsselectors.ts","./oss/src/components/evalrundetails/state/focusdraweratom.ts","./oss/src/components/evalrundetails/state/rowheight.ts","./oss/src/components/evalrundetails/state/urlcompare.ts","./oss/src/components/evalrundetails/state/urlfocusdrawer.ts","./oss/src/components/evalrundetails/state/urlstate.ts","./oss/src/components/evalrundetails/utils/buildannotationmetricdata.ts","./oss/src/components/evalrundetails/utils/buildskeletoncolumns.ts","./oss/src/components/evalrundetails/utils/chatmessages.ts","./oss/src/components/evalrundetails2/hooks/usecomparisonpaginations.ts","./oss/src/components/evaluationrunstablepoc/types.ts","./oss/src/components/evaluationrunstablepoc/types/runmetrics.ts","./oss/src/components/evaluationrunstablepoc/constants.ts","./oss/src/components/evaluationrunstablepoc/utils/runhelpers.ts","./oss/src/components/evaluationrunstablepoc/actions/navigationactions.ts","./oss/src/components/evaluationrunstablepoc/atoms/context.ts","./oss/src/components/evaluationrunstablepoc/utils/referencepayload.ts","./oss/src/components/evaluationrunstablepoc/atoms/fetchautoevaluationruns.ts","./oss/src/components/evaluationrunstablepoc/atoms/tablestore.ts","./oss/src/components/pages/evaluations/onlineevaluation/assets/helpers.ts","./oss/src/components/evaluationrunstablepoc/utils/querysummary.ts","./oss/src/components/evaluationrunstablepoc/atoms/runsummaries.ts","./oss/src/components/evaluationrunstablepoc/atoms/view.ts","./oss/src/components/evaluationrunstablepoc/hooks/useevaluationrunnavigationactions.ts","./oss/src/components/evaluationrunstablepoc/atoms/evaluatoroutputtypes.ts","./oss/src/components/evaluationrunstablepoc/hooks/usepreviewrundetails.ts","./oss/src/components/evaluationrunstablepoc/hooks/usepreviewrunsummary.ts","./oss/src/components/evaluationrunstablepoc/utils/referenceschema.ts","./oss/src/components/evaluationrunstablepoc/context/runrowdatacontext.tsx","./oss/src/components/evaluationrunstablepoc/components/cells/actionscell/index.tsx","./oss/src/components/evaluationrunstablepoc/components/cells/createdcells.tsx","./oss/src/components/evaluationrunstablepoc/components/cells/kindcell.tsx","./oss/src/lib/runmetrics/formatters.ts","./oss/src/components/evaluationrunstablepoc/hooks/userunmetricselection.ts","./oss/src/components/evaluationrunstablepoc/components/common/metricvaluewithpopover.tsx","./oss/src/components/evaluationrunstablepoc/components/cells/runmetriccell/categorytags.tsx","./oss/src/components/evaluationrunstablepoc/components/cells/runmetriccell/index.tsx","./oss/src/components/evaluationrunstablepoc/components/cells/runnamecells.tsx","./oss/src/components/evaluationrunstablepoc/components/cells/statuscells.tsx","./oss/src/components/evaluationrunstablepoc/hooks/useevaluatorheaderreference.ts","./oss/src/components/evaluationrunstablepoc/components/headers/metriccolumnheader.tsx","./oss/src/components/evaluationrunstablepoc/components/headers/metricgroupheader.tsx","./oss/src/components/evaluationrunstablepoc/types/exportmetadata.ts","./oss/src/components/evaluationrunstablepoc/hooks/useevaluationrunscolumns/types.ts","./oss/src/components/evaluationrunstablepoc/hooks/useevaluationrunscolumns/utils.tsx","./oss/src/components/evaluationrunstablepoc/hooks/useevaluationrunscolumns/constants.tsx","./oss/src/components/evaluationrunstablepoc/hooks/useevaluationrunscolumns/index.tsx","./oss/src/components/evaluationrunstablepoc/hooks/useevaluationrunspolling.ts","./oss/src/components/evaluationrunstablepoc/components/columnvisibility/columnvisibilitypopovercontent.tsx","./oss/src/components/evaluationrunstablepoc/components/evaluationrunscreatebutton.tsx","./oss/src/components/evaluationrunstablepoc/utils/testsetoptions.ts","./oss/src/components/evaluationrunstablepoc/components/filters/queryfilteroption.tsx","./oss/src/components/evaluationrunstablepoc/components/filters/quickdaterangepicker.tsx","./oss/src/components/evaluationrunstablepoc/components/filters/evaluationrunsfilterscontent.tsx","./oss/src/components/evaluationrunstablepoc/components/filters/evaluationrunsheaderfilters.tsx","./oss/src/components/evaluationrunstablepoc/components/evaluationrunstable/assets/constants.ts","./oss/src/components/evaluationrunstablepoc/components/evaluationrunstable/export/helpers.ts","./oss/src/components/evaluationrunstablepoc/components/evaluationrunstable/export/metricresolvers.ts","./oss/src/components/evaluationrunstablepoc/components/evaluationrunstable/export/store.ts","./oss/src/components/evaluationrunstablepoc/components/evaluationrunstable/export/referenceresolvers.ts","./oss/src/components/evaluationrunstablepoc/components/evaluationrunstable/export/runresolvers.ts","./oss/src/components/evaluationrunstablepoc/components/evaluationrunstable/types.ts","./oss/src/components/evaluationrunstablepoc/components/evaluationrunstable/index.tsx","./oss/src/components/evaluationrunstablepoc/providers/evaluationrunstablestoreprovider.tsx","./oss/src/components/evaluationrunstablepoc/components/latestevaluationrunstable/index.tsx","./oss/src/components/evaluationrunstablepoc/index.ts","./oss/src/components/evaluations/metricdetailspopover/types.ts","./oss/src/components/evaluations/metricdetailspopover/assets/utils.ts","./oss/src/components/evaluations/metricdetailspopover/assets/chartaxis.tsx","./node_modules/.pnpm/usehooks-ts@3.1.1_react@19.0.0/node_modules/usehooks-ts/dist/index.d.ts","./oss/src/components/evaluations/metricdetailspopover/assets/chartframe.tsx","./oss/src/components/evaluations/metricdetailspopover/assets/chartutils.ts","./oss/src/components/evaluations/metricdetailspopover/assets/responsivefrequencychart.tsx","./oss/src/components/evaluations/metricdetailspopover/assets/responsivemetricchart.tsx","./oss/src/components/evaluations/metricdetailspopover/index.ts","./oss/src/components/evaluations/atoms/runmetrics.ts","./packages/agenta-playground-ui/src/components/workflowrevisiondrawer/drawercontext.tsx","./packages/agenta-playground-ui/src/components/workflowrevisiondrawer/store.ts","./packages/agenta-playground-ui/src/components/workflowrevisiondrawer/metadatasidebar.tsx","./packages/agenta-playground-ui/src/components/workflowrevisiondrawer/drawercontent.tsx","./packages/agenta-playground-ui/src/components/workflowrevisiondrawer/drawerheader.tsx","./packages/agenta-playground-ui/src/components/workflowrevisiondrawer/workflowrevisiondrawer.tsx","./packages/agenta-playground-ui/src/components/workflowrevisiondrawer/index.ts","./oss/src/components/evaluators/drawers/evaluatordrawer/store/evaluatordrawerstore.ts","./oss/src/components/evaluators/drawers/humanevaluatordrawer/store.ts","./oss/src/components/evaluators/assets/types.ts","./oss/src/components/evaluators/assets/constants.ts","./oss/src/components/evaluators/assets/evaluatorfiltering.ts","./oss/src/components/evaluators/assets/cells/tabledropdownmenu/types.ts","./oss/src/components/evaluators/components/configureevaluator/atoms.ts","./oss/src/components/evaluators/components/deleteevaluatorsmodal/types.ts","./oss/src/components/evaluators/components/selectevaluatormodal/types.ts","./oss/src/components/evaluators/store/evaluatorfilteratoms.ts","./oss/src/components/evaluators/store/evaluatorspaginatedstore.ts","./oss/src/components/filters/editcolumns/assets/helper.ts","./oss/src/components/filters/editcolumns/assets/types.ts","./oss/src/components/filters/assets/styles.ts","./oss/src/components/pages/observability/assets/utils.ts","./oss/src/components/pages/observability/assets/constants.ts","./oss/src/components/pages/observability/assets/filters/operatorregistry.ts","./oss/src/components/pages/observability/assets/filters/fieldadapter.ts","./oss/src/components/filters/helpers/utils.ts","./oss/src/components/infinitevirtualtable/context/columnvisibilitycontext.ts","./oss/src/components/infinitevirtualtable/components/columnvisibilityheader.tsx","./oss/src/components/infinitevirtualtable/types.ts","./oss/src/components/infinitevirtualtable/createinfinitetablestore.ts","./oss/src/components/infinitevirtualtable/hooks/useinfinitetablepagination.ts","./oss/src/components/infinitevirtualtable/createinfinitedatasetstore.ts","./oss/src/components/infinitevirtualtable/columns/types.ts","./oss/src/components/infinitevirtualtable/columns/createtablecolumns.ts","./oss/src/components/infinitevirtualtable/atoms/columnvisibility.ts","./oss/src/components/infinitevirtualtable/context/columnvisibilityflagcontext.tsx","./oss/src/components/infinitevirtualtable/columns/cells.tsx","./oss/src/components/infinitevirtualtable/atoms/columnwidths.ts","./oss/src/components/infinitevirtualtable/context/virtualtablescrollcontainercontext.ts","./oss/src/components/infinitevirtualtable/atoms/columnhiddenkeys.ts","./oss/src/components/infinitevirtualtable/hooks/usecolumnvisibility.ts","./oss/src/components/infinitevirtualtable/hooks/usecolumnvisibilitycontrols.ts","./oss/src/components/infinitevirtualtable/hooks/usecontainerresize.ts","./oss/src/components/infinitevirtualtable/hooks/useexpandablerows.tsx","./oss/src/components/infinitevirtualtable/hooks/useheaderviewportvisibility.ts","./oss/src/components/infinitevirtualtable/hooks/useinfinitescroll.ts","./oss/src/components/infinitevirtualtable/hooks/usescrollcontainer.ts","./oss/src/components/infinitevirtualtable/hooks/usesmartresizablecolumns.ts","./oss/src/components/infinitevirtualtable/hooks/usetablekeyboardshortcuts.ts","./oss/src/components/infinitevirtualtable/hooks/usetablerowselection.ts","./oss/src/components/infinitevirtualtable/providers/columnvisibilityprovider.tsx","./oss/src/components/infinitevirtualtable/utils/columnutils.ts","./oss/src/components/infinitevirtualtable/components/infinitevirtualtableinner.tsx","./oss/src/components/infinitevirtualtable/providers/infinitevirtualtablestoreprovider.tsx","./oss/src/components/infinitevirtualtable/infinitevirtualtable.tsx","./oss/src/components/infinitevirtualtable/components/columnvisibility/columnvisibilitypopovercontent.tsx","./oss/src/components/infinitevirtualtable/components/columnvisibility/tablesettingsdropdown.tsx","./oss/src/components/infinitevirtualtable/components/tableshell.tsx","./oss/src/components/infinitevirtualtable/hooks/usetableexport.ts","./oss/src/components/infinitevirtualtable/features/infinitevirtualtablefeatureshell.tsx","./oss/src/components/infinitevirtualtable/hooks/usetablemanager.tsx","./oss/src/components/infinitevirtualtable/hooks/usetableactions.tsx","./oss/src/components/infinitevirtualtable/components/columnvisibilitytrigger.tsx","./oss/src/components/infinitevirtualtable/components/columnvisibility/columnvisibilitymenutrigger.tsx","./oss/src/components/infinitevirtualtable/columns/createstandardcolumns.tsx","./oss/src/components/infinitevirtualtable/helpers/createtablerowhelpers.ts","./oss/src/components/infinitevirtualtable/helpers/createsimpletablestore.ts","./oss/src/components/infinitevirtualtable/helpers/index.ts","./oss/src/components/infinitevirtualtable/components/filters/filterspopovertrigger.tsx","./oss/src/components/infinitevirtualtable/components/tabledescription.tsx","./oss/src/components/infinitevirtualtable/features/useinfinitetablefeaturepagination.ts","./oss/src/components/infinitevirtualtable/features/index.ts","./oss/src/components/infinitevirtualtable/hooks/useeditabletable.ts","./oss/src/components/infinitevirtualtable/hooks/userowheight.tsx","./oss/src/components/infinitevirtualtable/index.ts","./oss/src/components/infinitevirtualtable/hooks/usecolumndomrefs.ts","./oss/src/components/infinitevirtualtable/hooks/usecontainersize.ts","./oss/src/components/infinitevirtualtable/hooks/useresizablecolumns.ts","./oss/src/components/infinitevirtualtable/hooks/usescrollconfig.ts","./oss/src/components/infinitevirtualtable/hooks/usetableheaderheight.ts","./oss/src/components/layout/assets/styles.ts","./oss/src/components/layout/assets/utils.ts","./oss/src/components/modelregistry/drawers/configureproviderdrawer/assets/constants.ts","./node_modules/.pnpm/motion-utils@12.23.6/node_modules/motion-utils/dist/index.d.ts","./node_modules/.pnpm/motion-dom@12.23.23/node_modules/motion-dom/dist/index.d.ts","./node_modules/.pnpm/framer-motion@12.23.26_@emotion+is-prop-valid@0.7.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/framer-motion/dist/types.d-dagzkals.d.ts","./node_modules/.pnpm/framer-motion@12.23.26_@emotion+is-prop-valid@0.7.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/framer-motion/dist/types/index.d.ts","./node_modules/.pnpm/motion@12.23.26_@emotion+is-prop-valid@0.7.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/motion/dist/react.d.ts","./node_modules/.pnpm/@agentaai+nextstepjs@2.1.3-agenta.1_motion@12.23.26_@emotion+is-prop-valid@0.7.3_react-_f96c13741ebab3a30649d4cc9531a320/node_modules/@agentaai/nextstepjs/dist/types/navigation.d.ts","./node_modules/.pnpm/@agentaai+nextstepjs@2.1.3-agenta.1_motion@12.23.26_@emotion+is-prop-valid@0.7.3_react-_f96c13741ebab3a30649d4cc9531a320/node_modules/@agentaai/nextstepjs/dist/types/index.d.ts","./node_modules/.pnpm/@agentaai+nextstepjs@2.1.3-agenta.1_motion@12.23.26_@emotion+is-prop-valid@0.7.3_react-_f96c13741ebab3a30649d4cc9531a320/node_modules/@agentaai/nextstepjs/dist/nextstepcontext.d.ts","./node_modules/.pnpm/@agentaai+nextstepjs@2.1.3-agenta.1_motion@12.23.26_@emotion+is-prop-valid@0.7.3_react-_f96c13741ebab3a30649d4cc9531a320/node_modules/@agentaai/nextstepjs/dist/nextstep.d.ts","./node_modules/.pnpm/@agentaai+nextstepjs@2.1.3-agenta.1_motion@12.23.26_@emotion+is-prop-valid@0.7.3_react-_f96c13741ebab3a30649d4cc9531a320/node_modules/@agentaai/nextstepjs/dist/nextstepreact.d.ts","./node_modules/.pnpm/@agentaai+nextstepjs@2.1.3-agenta.1_motion@12.23.26_@emotion+is-prop-valid@0.7.3_react-_f96c13741ebab3a30649d4cc9531a320/node_modules/@agentaai/nextstepjs/dist/nextstepviewport.d.ts","./node_modules/.pnpm/@agentaai+nextstepjs@2.1.3-agenta.1_motion@12.23.26_@emotion+is-prop-valid@0.7.3_react-_f96c13741ebab3a30649d4cc9531a320/node_modules/@agentaai/nextstepjs/dist/index.d.ts","./oss/src/components/onboarding/onboardingcard.tsx","./oss/src/components/onboarding/onboardingprovider.tsx","./oss/src/components/onboarding/tours/annotatetracestour.ts","./oss/src/components/onboarding/tours/firstevaluationtour.ts","./oss/src/components/onboarding/tours/deployprompttour.ts","./oss/src/components/onboarding/tours/testsetfromtracestour.ts","./oss/src/components/onboarding/tours/widgetclosedtour.ts","./oss/src/components/onboarding/widget/analytics.ts","./oss/src/components/onboarding/widget/components/widgetsectionitem.tsx","./oss/src/components/onboarding/widget/components/widgetsection.tsx","./oss/src/components/onboarding/widget/components/index.ts","./oss/src/components/onboarding/widget/constants.ts","./oss/src/components/onboarding/widget/onboardingwidget.tsx","./oss/src/components/onboarding/widget/index.ts","./oss/src/components/onboarding/hooks/usetourreducer.ts","./oss/src/components/onboarding/hooks/useonboardingtour.ts","./oss/src/components/onboarding/tours/evaluationresultstour.ts","./oss/src/components/onboarding/tours/exploreplaygroundtour.ts","./oss/src/components/onboarding/index.ts","./oss/src/components/placeholders/nomobilepagewrapper/assets/constants.ts","./oss/src/components/playground/components/modals/deletevariantmodal/store/deletevariantmodalstore.ts","./oss/src/components/playground/components/modals/deployvariantmodal/assets/deployvariantmodalcontent/tabledataatom.ts","./oss/src/components/playground/components/modals/deployvariantmodal/store/deployvariantmodalstore.ts","./oss/src/components/playground/components/modals/refinepromptmodal/types.ts","./oss/src/components/playground/components/modals/refinepromptmodal/store/refinepromptstore.ts","./oss/src/components/playground/components/modals/refinepromptmodal/hooks/userefineprompt.ts","./oss/src/components/playground/components/modals/testsetdisconnectconfirmmodal/store/state.ts","./oss/src/components/playground/components/playgroundheader/styles.ts","./oss/src/components/playground/components/playgroundpromptcomparisonview/promptcomparisonvariantnavigation/assets/variantnavigationcard/styles.ts","./oss/src/components/playground/components/playgroundvariantconfig/assets/styles.ts","./packages/agenta-playground-ui/src/components/emptystate.tsx","./packages/agenta-ui/src/utils/index.ts","./packages/agenta-entity-ui/src/shared/entitytable.tsx","./packages/agenta-entity-ui/src/shared/sharedgenerationresultutils.tsx","./packages/agenta-entities/src/simplequeue/core/schema.ts","./packages/agenta-entities/src/evaluationqueue/core/schema.ts","./packages/agenta-entities/src/evaluationqueue/core/types.ts","./packages/agenta-entities/src/evaluationqueue/core/index.ts","./packages/agenta-entities/src/evaluationqueue/api/api.ts","./packages/agenta-entities/src/evaluationqueue/api/index.ts","./packages/agenta-entities/src/simplequeue/core/types.ts","./packages/agenta-entities/src/simplequeue/core/index.ts","./packages/agenta-entities/src/simplequeue/api/api.ts","./packages/agenta-entities/src/simplequeue/api/index.ts","./packages/agenta-entities/src/simplequeue/state/paginatedstore.ts","./packages/agenta-entities/src/simplequeue/state/taskspaginatedstore.ts","./packages/agenta-entities/src/simplequeue/state/molecule.ts","./packages/agenta-entities/src/simplequeue/state/index.ts","./packages/agenta-entities/src/simplequeue/index.ts","./packages/agenta-entities/src/evaluationqueue/state/molecule.ts","./packages/agenta-entities/src/evaluationqueue/state/index.ts","./packages/agenta-entities/src/evaluationqueue/index.ts","./packages/agenta-entities/src/queue/types.ts","./packages/agenta-entities/src/queue/controller.ts","./packages/agenta-entities/src/queue/index.ts","./packages/agenta-entities/src/evaluationrun/core/schema.ts","./packages/agenta-entities/src/evaluationrun/core/types.ts","./packages/agenta-entities/src/evaluationrun/core/index.ts","./packages/agenta-entities/src/evaluationrun/api/api.ts","./packages/agenta-entities/src/evaluationrun/api/index.ts","./packages/agenta-entities/src/evaluationrun/state/molecule.ts","./packages/agenta-entities/src/evaluationrun/state/index.ts","./packages/agenta-entities/src/evaluationrun/index.ts","./packages/agenta-entities/src/annotation/core/schema.ts","./packages/agenta-entities/src/annotation/core/types.ts","./packages/agenta-entities/src/annotation/core/index.ts","./packages/agenta-entities/src/annotation/api/api.ts","./packages/agenta-entities/src/annotation/api/index.ts","./packages/agenta-entities/src/annotation/state/molecule.ts","./packages/agenta-entities/src/annotation/state/index.ts","./packages/agenta-entities/src/annotation/index.ts","./packages/agenta-entities/src/index.ts","./packages/agenta-entity-ui/src/drillinview/schemacontrols/schemautils.ts","./packages/agenta-entity-ui/src/shared/runnableoutputvalue.tsx","./packages/agenta-entity-ui/src/shared/index.ts","./packages/agenta-entity-ui/src/drillinview/types.ts","./packages/agenta-entity-ui/src/drillinview/context/drillinuicontext.tsx","./packages/agenta-entity-ui/src/drillinview/context.ts","./packages/agenta-entity-ui/src/drillinview/utils/classnames.ts","./packages/agenta-entity-ui/src/drillinview/components/moleculedrillincontext.tsx","./packages/agenta-entity-ui/src/drillinview/components/moleculedrillinbreadcrumb.tsx","./packages/agenta-entity-ui/src/drillinview/components/fielditemactions.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/messagesschemacontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/responseformatcontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/toolutils.ts","./packages/agenta-entity-ui/src/drillinview/schemacontrols/toolitemcontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/toolselectorpopover.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/promptschemacontrol.tsx","./packages/agenta-entity-ui/src/drillinview/utils/adapters.ts","./packages/agenta-entity-ui/src/drillinview/coretypes.ts","./packages/agenta-entity-ui/src/drillinview/utils/drillinutils.ts","./packages/agenta-entity-ui/src/drillinview/utils/index.ts","./packages/agenta-entity-ui/src/drillinview/schemacontrols/booleantogglecontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/codeeditorcontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/enumselectcontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/feedbackconfigurationcontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/fieldstagseditorcontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/groupedchoicecontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/numberslidercontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/objectschemacontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/textinputcontrol.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/schemapropertyrenderer.tsx","./packages/agenta-entity-ui/src/drillinview/components/fielditemcontent.tsx","./packages/agenta-entity-ui/src/drillinview/components/fielditemheader.tsx","./packages/agenta-entity-ui/src/drillinview/components/moleculedrillinfielditem.tsx","./packages/agenta-entity-ui/src/drillinview/components/moleculedrillinfieldlist.tsx","./packages/agenta-entity-ui/src/drillinview/components/moleculedrillinview.tsx","./packages/agenta-entity-ui/src/drillinview/schemacontrols/index.ts","./packages/agenta-entity-ui/src/drillinview/components/playgroundconfigsection.tsx","./packages/agenta-entity-ui/src/drillinview/components/index.ts","./packages/agenta-entity-ui/src/drillinview/core/drillinbreadcrumb.tsx","./packages/agenta-entity-ui/src/drillinview/core/drillincontrols.tsx","./packages/agenta-entity-ui/src/drillinview/core/drillinfieldheader.tsx","./packages/agenta-entity-ui/src/drillinview/core/drillincontent.tsx","./packages/agenta-entity-ui/src/drillinview/core/index.ts","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/types.ts","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/booleanfield.tsx","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/jsoneditorwithlocalstate.tsx","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/jsonarrayfield.tsx","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/fieldutils.ts","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/jsonobjectfield.tsx","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/messagesfield.tsx","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/numberfield.tsx","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/rawmodedisplay.tsx","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/textfield.tsx","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/drillinfieldrenderer.tsx","./packages/agenta-entity-ui/src/drillinview/fieldrenderers/index.ts","./packages/agenta-entity-ui/src/drillinview/index.ts","./packages/agenta-entity-ui/src/modals/types.ts","./packages/agenta-entity-ui/src/modals/adapters.ts","./packages/agenta-entity-ui/src/modals/delete/state.ts","./packages/agenta-entity-ui/src/modals/delete/components/entitydeletecontent.tsx","./packages/agenta-entity-ui/src/modals/delete/components/entitydeletefooter.tsx","./packages/agenta-entity-ui/src/modals/delete/components/entitydeletetitle.tsx","./packages/agenta-entity-ui/src/modals/delete/components/entitydeletemodal.tsx","./packages/agenta-entity-ui/src/modals/delete/components/index.ts","./packages/agenta-entity-ui/src/modals/delete/hooks/useentitydelete.ts","./packages/agenta-entity-ui/src/modals/delete/hooks/index.ts","./packages/agenta-entity-ui/src/modals/delete/index.ts","./packages/agenta-entity-ui/src/adapters/testsetadapters.ts","./packages/agenta-entity-ui/src/adapters/simplequeueadapters.ts","./packages/agenta-entity-ui/src/adapters/variantadapters.ts","./packages/agenta-entity-ui/src/adapters/index.ts","./packages/agenta-entity-ui/src/modals/commit/state.ts","./packages/agenta-entity-ui/src/modals/commit/components/entitycommitcontent.tsx","./packages/agenta-entity-ui/src/modals/commit/components/entitycommitfooter.tsx","./packages/agenta-entity-ui/src/modals/commit/components/entitycommittitle.tsx","./packages/agenta-entity-ui/src/modals/commit/components/entitycommitmodal.tsx","./packages/agenta-entity-ui/src/modals/commit/components/index.ts","./packages/agenta-entity-ui/src/modals/shared/types.ts","./packages/agenta-entity-ui/src/modals/shared/hooks/createentityactionhook.ts","./packages/agenta-entity-ui/src/modals/shared/hooks/index.ts","./packages/agenta-entity-ui/src/modals/shared/index.ts","./packages/agenta-entity-ui/src/modals/commit/hooks/useentitycommit.ts","./packages/agenta-entity-ui/src/modals/commit/hooks/index.ts","./packages/agenta-entity-ui/src/modals/commit/index.ts","./packages/agenta-entity-ui/src/modals/save/state.ts","./packages/agenta-entity-ui/src/modals/save/components/entitysavecontent.tsx","./packages/agenta-entity-ui/src/modals/save/components/entitysavefooter.tsx","./packages/agenta-entity-ui/src/modals/save/components/entitysavetitle.tsx","./packages/agenta-entity-ui/src/modals/save/components/entitysavemodal.tsx","./packages/agenta-entity-ui/src/modals/save/components/index.ts","./packages/agenta-entity-ui/src/modals/save/hooks/useentitysave.ts","./packages/agenta-entity-ui/src/modals/save/hooks/index.ts","./packages/agenta-entity-ui/src/modals/save/index.ts","./packages/agenta-entity-ui/src/modals/usesaveorcommit.ts","./packages/agenta-entity-ui/src/modals/actions/types.ts","./packages/agenta-entity-ui/src/modals/actions/reducer.ts","./packages/agenta-entity-ui/src/modals/actions/context.tsx","./packages/agenta-entity-ui/src/modals/actions/index.ts","./packages/agenta-entity-ui/src/modals/entityactionprovider.tsx","./packages/agenta-entity-ui/src/modals/preset/types.ts","./packages/agenta-entity-ui/src/modals/preset/presetcontent.tsx","./packages/agenta-entity-ui/src/modals/preset/loadevaluatorpresetmodal.tsx","./packages/agenta-entity-ui/src/modals/preset/index.ts","./packages/agenta-entity-ui/src/modals/index.ts","./packages/agenta-entity-ui/src/testcase/testcasetable.tsx","./packages/agenta-entity-ui/src/testcase/index.ts","./packages/agenta-entity-ui/src/index.ts","./packages/agenta-playground-ui/src/components/entityselector/entityselector.tsx","./packages/agenta-playground-ui/src/components/entityselector/index.ts","./packages/agenta-playground-ui/src/context/playgrounduicontext.tsx","./packages/agenta-playground-ui/src/components/executionitems/assets/repetitionnavigation/index.tsx","./packages/agenta-playground-ui/src/components/executionitems/assets/resultplaceholder.tsx","./packages/agenta-playground-ui/src/components/executionitems/assets/typingindicator.tsx","./packages/agenta-playground-ui/src/components/shared/evaluatorfieldgrid/utils.ts","./packages/agenta-playground-ui/src/components/shared/evaluatorfieldgrid/index.tsx","./packages/agenta-playground-ui/src/components/toolcallview/index.tsx","./packages/agenta-playground-ui/src/components/executionresultview/index.tsx","./packages/agenta-playground-ui/src/components/executionheader/index.tsx","./packages/agenta-playground-ui/src/components/controlsbar.tsx","./packages/agenta-playground-ui/src/state/focusdrawer.ts","./packages/agenta-playground-ui/src/state/index.ts","./packages/agenta-playground-ui/src/hooks/userepetitionresult.ts","./packages/agenta-playground-ui/src/components/shared/noderesultcard/index.tsx","./packages/agenta-playground-ui/src/components/focusdrawer/components/focusdrawercontent.tsx","./packages/agenta-playground-ui/src/components/focusdrawer/components/enhanceddrawer.tsx","./packages/agenta-playground-ui/src/components/focusdrawer/components/genericdrawer.tsx","./packages/agenta-playground-ui/src/components/focusdrawer/index.tsx","./packages/agenta-playground-ui/src/hooks/useexecutioncell.ts","./packages/agenta-playground-ui/src/components/shared/collapsetogglebutton.tsx","./packages/agenta-playground-ui/src/components/turnmessageheaderoptions/index.tsx","./packages/agenta-playground-ui/src/components/adapters/turnmessageadapter.tsx","./packages/agenta-playground-ui/src/components/adapters/variablecontroladapter.tsx","./packages/agenta-playground-ui/src/components/adapters/index.ts","./packages/agenta-playground-ui/src/components/executionitems/assets/chatturnview/index.tsx","./packages/agenta-playground-ui/src/components/executionitems/assets/executionrow/shared.tsx","./packages/agenta-playground-ui/src/components/executionitems/assets/executionrow/comparisonlayout.tsx","./packages/agenta-playground-ui/src/components/executionitems/assets/executionrow/hooks/useexecutionrow.ts","./packages/agenta-playground-ui/src/utils/testcaselabel.ts","./packages/agenta-playground-ui/src/components/executionitems/assets/executionrow/singlelayout.tsx","./packages/agenta-playground-ui/src/components/executionitems/assets/executionrow/index.tsx","./packages/agenta-playground-ui/src/components/executionitems/assets/chatmode/index.tsx","./packages/agenta-playground-ui/src/hooks/useplaygroundlayout.ts","./packages/agenta-playground-ui/src/components/executionitems/assets/completionmode/index.tsx","./packages/agenta-playground-ui/src/context/index.ts","./packages/agenta-playground-ui/src/components/types.ts","./packages/agenta-playground-ui/src/index.ts","./packages/agenta-playground-ui/src/components/executionitems/gatewaytoolexecutebutton.tsx","./packages/agenta-playground-ui/src/components/executionitems/gatewaytoolassistantactions.tsx","./packages/agenta-playground-ui/src/components/executionitems/index.tsx","./packages/agenta-playground-ui/src/hooks/userunnableloading.ts","./packages/agenta-playground-ui/src/components/executionitemcomparisonview/generationcomparisonchatoutput/index.tsx","./packages/agenta-playground-ui/src/components/executionitemcomparisonview/generationcomparisoncompletionoutput/index.tsx","./packages/agenta-playground-ui/src/components/executionitemcomparisonview/assets/generationcomparisoninputheader/index.tsx","./packages/agenta-playground-ui/src/components/executionitemcomparisonview/assets/generationcomparisonoutputheader/index.tsx","./packages/agenta-playground-ui/src/components/executionitemcomparisonview/index.tsx","./packages/agenta-playground-ui/src/components/testsetselectionmodal/types.ts","./packages/agenta-playground-ui/src/components/testsetselectionmodal/hooks/usetestsetselection.ts","./packages/agenta-playground-ui/src/components/testsetselectionmodal/components/selectionsummary.tsx","./packages/agenta-playground-ui/src/components/testsetselectionmodal/components/testsetselectionpreview.tsx","./packages/agenta-playground-ui/src/components/testsetselectionmodal/components/testsetselectionsidebar.tsx","./packages/agenta-playground-ui/src/components/testsetselectionmodal/components/loadmodecontent.tsx","./packages/agenta-playground-ui/src/components/testsetselectionmodal/components/testsetselectionmodalcontent.tsx","./packages/agenta-playground-ui/src/components/testsetselectionmodal/testsetselectionmodal.tsx","./packages/agenta-playground-ui/src/components/testsetselectionmodal/hooks/index.ts","./packages/agenta-playground-ui/src/components/testsetselectionmodal/components/createtestsetcard.tsx","./packages/agenta-playground-ui/src/components/testsetselectionmodal/components/index.ts","./packages/agenta-playground-ui/src/components/testsetselectionmodal/index.ts","./packages/agenta-playground-ui/src/components/index.ts","./oss/src/components/playground/components/testsetdropdown/store/modalstate.ts","./oss/src/components/playground/assets/entityhelpers.ts","./oss/src/components/playground/assets/utilities/componentlogger.ts","./oss/src/components/playground/assets/utilities/errors/constants.ts","./oss/src/components/playground/assets/utilities/errors/utils.ts","./oss/src/components/playground/assets/utilities/errors/index.ts","./oss/src/components/playground/assets/utilities/utilityfunctions/index.ts","./node_modules/.pnpm/use-animation-frame@0.2.1_react@19.0.0/node_modules/use-animation-frame/src/index.d.ts","./oss/src/components/playground/hooks/useplaygroundscrollsync.ts","./oss/src/components/playground/hooks/usewebworker/state/index.ts","./oss/src/components/playground/hooks/usewebworker/index.ts","./oss/src/components/playground/hooks/usewebworker/assets/playground.worker.ts","./oss/src/components/references/referencecolors.ts","./oss/src/components/references/referencetag.tsx","./oss/src/components/references/userreference.tsx","./oss/src/components/references/atoms/entityreferences.ts","./oss/src/components/references/referencelabels.tsx","./oss/src/components/references/referencechips.tsx","./oss/src/components/references/index.ts","./oss/src/components/references/atoms/metricblueprint.ts","./oss/src/components/references/atoms/resolvedmetriclabels.ts","./oss/src/components/references/atoms/resolvedmetricpaths.ts","./oss/src/components/references/cache/referencecache.ts","./oss/src/components/references/hooks/useevaluatorreference.ts","./oss/src/components/references/hooks/usepreviewqueryrevision.ts","./oss/src/components/references/hooks/usepreviewvariantconfig.ts","./oss/src/components/resizabletitle/styles.ts","./oss/src/components/resulttag/assets/styles.ts","./oss/src/components/sharedactions/addactionsdropdown/types.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/assets/helpers.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/assets/types.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/components/revisionlabel.tsx","./oss/src/components/shareddrawers/addtotestsetdrawer/atoms/testsetqueries.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/atoms/cascaderstate.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/atoms/drawerstate.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/atoms/localentities.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/atoms/savestate.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/atoms/actions.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/atoms/previewsync.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/components/testsetselector.tsx","./oss/src/components/shareddrawers/addtotestsetdrawer/components/dataprevieweditor.tsx","./oss/src/components/shareddrawers/addtotestsetdrawer/components/mappingsection.tsx","./oss/src/components/shareddrawers/addtotestsetdrawer/components/previewsection.tsx","./oss/src/components/shareddrawers/addtotestsetdrawer/components/confirmsavemodal.tsx","./oss/src/components/shareddrawers/addtotestsetdrawer/components/index.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/components/addtotestsetbutton/types.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/hooks/usetestsetrevisionselect.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/hooks/usesavetestset.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/hooks/usetestsetdrawer.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/hooks/index.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/hooks/usetestsetdrawer.new.ts","./oss/src/components/shareddrawers/addtotestsetdrawer/store/atom.ts","./oss/src/components/shareddrawers/annotatedrawer/assets/constants.ts","./oss/src/components/shareddrawers/annotatedrawer/assets/transforms.ts","./oss/src/components/shareddrawers/annotatedrawer/assets/utils.ts","./oss/src/components/shareddrawers/annotatedrawer/assets/createevaluator/assets/helper.ts","./oss/src/components/shareddrawers/sessiondrawer/types.ts","./oss/src/components/shareddrawers/sessiondrawer/assets/utils.ts","./oss/src/components/shareddrawers/sessiondrawer/components/sessioncontent/types.ts","./oss/src/components/shareddrawers/sessiondrawer/components/sessionheader/assets/helper.ts","./oss/src/components/shareddrawers/sessiondrawer/components/sessionheader/assets/types.ts","./oss/src/components/shareddrawers/sessiondrawer/components/sessiontree/assets/types.ts","./oss/src/components/shareddrawers/sessiondrawer/store/sessiondrawerstore.ts","./oss/src/components/shareddrawers/sessiondrawer/hooks/usesessiondrawer.ts","./oss/src/components/shareddrawers/tracedrawer/types.ts","./oss/src/components/shareddrawers/tracedrawer/components/deletetracemodal/store/atom.ts","./oss/src/components/shareddrawers/tracedrawer/components/tracecontent/assets/styles.ts","./oss/src/components/shareddrawers/tracedrawer/components/tracecontent/assets/types.ts","./oss/src/components/shareddrawers/tracedrawer/components/tracecontent/components/tracetypeheader/types.ts","./oss/src/components/shareddrawers/tracedrawer/components/tracecontent/utils/index.ts","./oss/src/components/shareddrawers/tracedrawer/components/traceheader/assets/helper.ts","./oss/src/components/shareddrawers/tracedrawer/components/traceheader/assets/types.ts","./oss/src/components/shareddrawers/tracedrawer/components/tracesidepanel/traceannotations/assets/styles.ts","./oss/src/components/shareddrawers/tracedrawer/components/tracesidepanel/tracedetails/assets/styles.ts","./oss/src/components/shareddrawers/tracedrawer/components/tracetree/assets/styles.ts","./oss/src/components/shareddrawers/tracedrawer/components/tracetree/assets/types.ts","./oss/src/components/shareddrawers/tracedrawer/components/tracetreesettings/types.ts","./oss/src/components/shareddrawers/tracedrawer/hooks/useevaluatornavigation.ts","./oss/src/components/shareddrawers/tracedrawer/hooks/usetracedrawer.ts","./oss/src/components/shareddrawers/tracedrawer/store/atoms.ts","./oss/src/components/shareddrawers/tracedrawer/store/tracedrawerstore.ts","./oss/src/components/shareddrawers/tracedrawer/store/openinplayground.ts","./oss/src/components/sidebarbanners/types.ts","./oss/src/components/sidebarbanners/data/changelog.json","./oss/src/components/sidebarbanners/state/atoms.ts","./oss/src/components/testcasestablenew/atoms/revisioncontext.ts","./oss/src/components/testcasestablenew/atoms/tablestore.ts","./oss/src/components/testcasestablenew/components/testcaseeditdrawer/fieldutils.ts","./oss/src/components/testcasestablenew/components/testcaseeditdrawer/usetreestyles.ts","./oss/src/components/testcasestablenew/hooks/types.ts","./oss/src/components/testcasestablenew/hooks/api.ts","./oss/src/components/testcasestablenew/hooks/constants.ts","./oss/src/components/testcasestablenew/hooks/usetestcasestable.ts","./oss/src/components/testcasestablenew/hooks/index.ts","./oss/src/components/alertpopup/alertpopup.tsx","./oss/src/components/testcasestablenew/hooks/usetestcaseactions.ts","./oss/src/components/testcasestablenew/state/collapsedgroups.ts","./oss/src/components/testcasestablenew/state/rowheight.ts","./oss/src/components/testcasestablenew/utils/groupcolumns.ts","./oss/src/components/testsetstable/atoms/fetchtestsetrevisions.ts","./oss/src/components/testsetstable/atoms/tablestore.ts","./oss/src/components/testsetstable/atoms/fetchtestsets.ts","./oss/src/components/testsetstable/atoms/filters.ts","./oss/src/components/variantdetailswithstatus/types.ts","./oss/src/components/variantscomponents/drawers/variantdrawer/assets/styles.ts","./oss/src/components/variantscomponents/drawers/variantdrawer/store/variantdrawerstore.ts","./oss/src/components/variantscomponents/drawers/variantdrawer/utils/index.ts","./oss/src/components/variantscomponents/store/registryfilteratoms.ts","./oss/src/components/variantscomponents/store/registrystore.ts","./oss/src/components/variantscomponents/store/selectionatoms.ts","./oss/src/components/variantscomponents/modals/variantcomparisonmodal/store/comparisonmodalstore.ts","./oss/src/components/pages/app-management/assets/helpers.ts","./oss/src/components/pages/app-management/assets/styles.ts","./oss/src/components/pages/app-management/components/welcomecardssection/assets/styles.ts","./oss/src/components/pages/app-management/components/welcomecardssection/assets/store/welcomecards.ts","./oss/src/components/pages/app-management/modals/addappfromtemplatemodal/assets/styles.ts","./oss/src/components/pages/app-management/modals/customworkflowmodal/assets/styles.ts","./oss/src/components/pages/app-management/modals/deleteappmodal/store/deleteappmodalstore.ts","./oss/src/components/pages/app-management/modals/editappmodal/store/editappmodalstore.ts","./oss/src/components/pages/app-management/modals/setuptracingmodal/assets/generatecodeblocks.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/.pnpm/next@15.5.10_@babel+core@7.28.5_@playwright+test@1.57.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/font/google/index.d.ts","./oss/src/components/pages/app-management/modals/setuptracingmodal/assets/styles.ts","./oss/src/components/pages/app-management/store/appworkflowfilteratoms.ts","./oss/src/components/pages/app-management/store/appworkflowstore.ts","./oss/src/components/pages/app-management/store/index.ts","./oss/src/components/pages/auth/regionselector/useregionselector.ts","./oss/src/components/pages/auth/assets/style.ts","./oss/src/components/pages/evaluations/utils.ts","./oss/src/components/pages/evaluations/newevaluation/types.ts","./oss/src/components/pages/evaluations/newevaluation/components/createevaluatordrawer/state.ts","./oss/src/components/pages/evaluations/newevaluation/components/createhumanevaluatordrawer/state.ts","./oss/src/components/pages/evaluations/newevaluation/components/hooks/usegroupedtreeselection.ts","./oss/src/components/pages/evaluations/newevaluation/assets/constants.ts","./oss/src/components/pages/evaluations/newevaluation/assets/styles.ts","./oss/src/components/pages/evaluations/newevaluation/assets/tablabel/types.ts","./oss/src/components/pages/evaluations/newevaluation/state/panel.ts","./oss/src/components/pages/evaluations/newevaluation/state/selection.ts","./oss/src/components/pages/evaluations/allevaluations/emptystateallevaluations/emptystateallevaluations.tsx","./oss/src/components/pages/evaluations/allevaluations/emptystateallevaluations/index.ts","./oss/src/components/pages/evaluations/autoevaluation/emptystateevaluation/emptystateevaluation.tsx","./oss/src/components/pages/evaluations/autoevaluation/emptystateevaluation/index.ts","./oss/src/components/pages/evaluations/humanevaluation/emptystatehumanevaluation/emptystatehumanevaluation.tsx","./oss/src/components/pages/evaluations/humanevaluation/emptystatehumanevaluation/index.ts","./oss/src/components/pages/evaluations/onlineevaluation/constants.ts","./oss/src/components/pages/evaluations/onlineevaluation/types.ts","./oss/src/components/pages/evaluations/onlineevaluation/emptystateonlineevaluation/emptystateonlineevaluation.tsx","./oss/src/components/pages/evaluations/onlineevaluation/emptystateonlineevaluation/index.ts","./oss/src/components/pages/evaluations/onlineevaluation/assets/state.ts","./oss/src/components/pages/evaluations/onlineevaluation/assets/styles.ts","./oss/src/components/pages/evaluations/onlineevaluation/utils/evaluatordetails.ts","./oss/src/components/pages/evaluations/onlineevaluation/hooks/useevaluatordetails.ts","./oss/src/components/pages/evaluations/onlineevaluation/hooks/useevaluatortypefromconfigs.ts","./oss/src/components/pages/evaluations/onlineevaluation/hooks/useevaluatortypemeta.ts","./oss/src/components/pages/evaluations/sdkevaluation/emptystatesdkevaluation/emptystatesdkevaluation.tsx","./oss/src/components/pages/evaluations/sdkevaluation/emptystatesdkevaluation/index.ts","./oss/src/components/pages/observability/constants.ts","./oss/src/components/pages/observability/assets/exportutils.ts","./oss/src/components/pages/observability/assets/filters/attributekeyoptions.ts","./oss/src/components/pages/observability/assets/getfiltercolumns.ts","./oss/src/components/pages/observability/assets/filters/referenceutils.ts","./oss/src/components/pages/observability/assets/filters/rulesengine.ts","./oss/src/components/pages/observability/assets/filters/valuecodec.ts","./oss/src/components/pages/observability/components/durationcell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/durationcell.tsx","./oss/src/components/pages/observability/components/timestampcell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/endtimecell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/firstinputcell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/lastoutputcell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/sessionidcell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/starttimecell.tsx","./oss/src/components/pages/observability/components/costcell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/totalcostcell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/totallatencycell.tsx","./oss/src/components/pages/observability/components/usagecell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/totalusagecell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/tracescountcell.tsx","./oss/src/components/pages/observability/components/sessionstable/components/cells/index.ts","./oss/src/components/pages/prompts/store.ts","./oss/src/components/pages/prompts/assets/utils.ts","./oss/src/components/pages/prompts/types.ts","./oss/src/components/pages/prompts/hooks/usepromptsselection.ts","./oss/src/components/pages/settings/apikeys/assets/constants.ts","./oss/src/components/pages/settings/tools/hooks/useintegrationdetail.ts","./oss/src/components/pages/settings/tools/hooks/usetoolsconnections.ts","./oss/src/components/pages/settings/tools/hooks/usetoolsintegrations.ts","./oss/src/lib/helpers/dynamicenv.ts","./oss/src/config/appinfo.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/lib/build/utils/dateprovider/types.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/utils/dateprovider/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/dateprovider/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/utils/dateprovider/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/dateprovider/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/authrecipe/components/theme/authpage/authpagecomponentlist.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/authrecipe/components/theme/authpage/authpagefooter.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/authrecipe/components/theme/authpage/authpageheader.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/components/componentoverride/componentoverride.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/recipemodule/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/authrecipe/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/emailpassword/components/library/input.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/recipemodule/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/normalisedurlpath.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/normalisedurldomain.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/lib/build/utils/cookiehandler/types.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/utils/cookiehandler/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/cookiehandler/types.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/lib/build/utils/windowhandler/types.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/utils/windowhandler/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/windowhandler/types.d.ts","./node_modules/.pnpm/supertokens-js-override@0.0.4/node_modules/supertokens-js-override/lib/build/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/emailverification/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/authrecipe/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/multitenancy/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/multifactorauth/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/oauth2provider/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/passwordless/types.d.ts","./node_modules/.pnpm/browser-tabs-lock@1.3.0/node_modules/browser-tabs-lock/index.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/lib/build/utils/lockfactory/types.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/lib/build/types.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/lib/build/claims/primitiveclaim.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/lib/build/claims/primitivearrayclaim.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/lib/build/claims/booleanclaim.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/lib/build/index.d.ts","./node_modules/.pnpm/supertokens-website@20.1.6/node_modules/supertokens-website/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/session/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/thirdparty/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/totp/types.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/types/dom.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/types/index.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/methods/startregistration.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/methods/startauthentication.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/helpers/browsersupportswebauthn.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/helpers/platformauthenticatorisavailable.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/helpers/browsersupportswebauthnautofill.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/helpers/base64urlstringtobuffer.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/helpers/buffertobase64urlstring.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/helpers/webauthnabortservice.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/helpers/webauthnerror.d.ts","./node_modules/.pnpm/@simplewebauthn+browser@13.2.2/node_modules/@simplewebauthn/browser/esm/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/webauthn/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/recipemodule/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/emailpassword/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/emailpassword/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/emailpassword/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/emailpassword/components/themes/resetpasswordusingtoken/resetpasswordemail.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/emailpassword/components/themes/resetpasswordusingtoken/submitnewpassword.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/types/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/emailpassword/components/themes/signin/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/emailpassword/components/themes/signup/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/emailpassword/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/session/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/emailverification/emailverificationclaim.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/emailverification/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/emailverification/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/emailverification/components/themes/emailverification/sendverifyemail.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/emailverification/components/themes/emailverification/verifyemaillinkclicked.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/emailverification/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/multifactorauth/components/themes/factorchooser/factorchooserfooter.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/multifactorauth/components/themes/factorchooser/factorchooserheader.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/multifactorauth/components/themes/factorchooser/factorlist.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/multifactorauth/components/themes/factorchooser/factoroption.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/multifactorauth/multifactorauthclaim.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/multifactorauth/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/multifactorauth/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/multifactorauth/types/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/multifactorauth/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/multitenancy/components/themes/dynamicloginmethodsspinner/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/multitenancy/types/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/multitenancy/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/oauth2provider/components/themes/oauth2logoutscreen/oauth2logoutscreeninner.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/oauth2provider/types/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/oauth2provider/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/continuewithpasswordless/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/linkclickedscreen/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/linksent/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/mfa/loadingscreen.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/mfa/mfafooter.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/mfa/mfaheader.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/mfa/mfaotpfooter.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/mfa/mfaotpheader.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/signinup/emailform.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/signinup/emailorphoneform.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/signinup/phoneform.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/signinupepcombo/emailform.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/signinupepcombo/emailorphoneform.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/userinputcodeform/userinputcodeformfooter.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/userinputcodeform/userinputcodeformheader.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/components/themes/userinputcodeform/userinputcodeformscreen.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/passwordless/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/passwordless/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/recipemodule/baserecipemodule.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/session/components/themes/accessdeniedscreentheme/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/session/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/recipemodule/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/session/recipe.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/session/types/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/session/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/thirdparty/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/components/themes/signinandup/providersform.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/components/themes/signinandupcallback/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/thirdparty/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/totp/components/themes/mfa/blockedscreen.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/totp/components/themes/mfa/loadingscreen.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/totp/components/themes/mfa/totpcodeform.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/totp/components/themes/mfa/totpcodeverificationfooter.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/totp/components/themes/mfa/totpcodeverificationheader.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/totp/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/totp/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/totp/components/themes/mfa/totpdeviceinfosection.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/totp/components/themes/mfa/totpdevicesetupfooter.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/totp/components/themes/mfa/totpdevicesetupheader.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/totp/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/continuewithpasskey/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/error/passkeynotsupportederror.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/mfa/mfafooter.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/mfa/mfaloadingscreen.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/mfa/mfasignin.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/mfa/mfasignup.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/mfa/mfasignupconfirmation.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/mfa/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/sendrecoveryemail/emailsent.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/sendrecoveryemail/recoveraccountform.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/signup/confirmation.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/signup/continuewithoutpasskey.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/signup/featureblocks.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/signup/signupform.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/components/themes/signup/somethingwentwrong.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/lib/build/recipe/webauthn/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/components/assets/passkeyicon.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/authrecipe/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/recipe.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/webauthn/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/webauthn/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/translation/translationhelpers.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/utils/cookiehandler/types.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/utils/normalisedurldomain.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/utils/normalisedurlpath.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/utils/windowhandler/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/types.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/emailpassword/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/recipe/emailpassword/index.d.ts","./node_modules/.pnpm/supertokens-web-js@0.16.0/node_modules/supertokens-web-js/recipe/passwordless/types/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/passwordless/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/recipe/passwordless/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/claims/booleanclaim.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/claims/primitivearrayclaim.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/claims/primitiveclaim.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/session/sessioncontext.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/session/sessionauth.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/session/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/recipe/session/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/activedirectory.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/apple.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/bitbucket.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/boxysaml.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/discord.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/facebook.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/github.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/gitlab.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/google.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/googleworkspaces.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/linkedin.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/okta.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/providers/twitter.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/recipe/thirdparty/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/recipe/thirdparty/index.d.ts","./oss/src/config/frontendconfig.ts","./oss/src/features/gateway-tools/state/atoms.ts","./oss/src/features/gateway-tools/hooks/useactiondetail.ts","./oss/src/features/gateway-tools/hooks/usecatalogactions.ts","./oss/src/features/gateway-tools/hooks/usecatalogintegrations.ts","./oss/src/features/gateway-tools/hooks/useconnectionactions.ts","./oss/src/features/gateway-tools/hooks/useconnectionquery.ts","./oss/src/features/gateway-tools/hooks/useconnectionsquery.ts","./oss/src/features/gateway-tools/hooks/useintegrationdetail.ts","./oss/src/features/gateway-tools/hooks/usetoolexecution.ts","./oss/src/features/gateway-tools/prompt/atoms.ts","./oss/src/features/gateway-tools/index.ts","./oss/src/features/gateway-tools/hooks/usedebouncedatomsearch.ts","./oss/src/features/gateway-tools/hooks/useintegrationconnections.ts","./oss/src/features/gateway-tools/utils/schema.ts","./oss/src/features/gateway-tools/utils/slugify.ts","./oss/src/state/app/assets/constants.ts","./oss/src/state/app/atoms/fetcher.ts","./oss/src/state/project/selectors/project.ts","./oss/src/state/app/atoms/templates.ts","./oss/src/state/session/atoms.ts","./oss/src/state/session/hooks.ts","./oss/src/state/session/index.ts","./oss/src/state/profile/selectors/user.ts","./oss/src/state/project/hooks.ts","./oss/src/state/org/selectors/org.ts","./oss/src/state/org/hooks.ts","./oss/src/state/org/index.ts","./oss/src/state/project/index.ts","./oss/src/state/app/atoms/vault.ts","./node_modules/.pnpm/jotai-eager@0.2.4_jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0_/node_modules/jotai-eager/dist/index.d.mts","./oss/src/state/app/selectors/app.ts","./oss/src/state/app/hooks.ts","./oss/src/state/app/hooks/usetemplates.ts","./oss/src/state/app/hooks/usevaultsecret.ts","./oss/src/state/appstate/types.ts","./oss/src/state/appstate/parse.ts","./oss/src/state/appstate/atoms.ts","./oss/src/state/appstate/hooks.ts","./oss/src/state/appstate/index.ts","./oss/src/state/app/index.ts","./oss/src/hooks/useappid.ts","./oss/src/hooks/useblocknavigation.ts","./oss/src/hooks/usecrispchat.ts","./oss/src/hooks/usedebounceinput.ts","./oss/src/hooks/usedurationcounter.ts","./oss/src/hooks/usefocusinput.ts","./oss/src/hooks/useforceremount.ts","./oss/src/hooks/useisomorphiclayouteffect.ts","./oss/src/hooks/uselazyeffect.ts","./oss/src/hooks/useloading.ts","./oss/src/hooks/usepagination.ts","./oss/src/hooks/useplaygroundnavigation.ts","./oss/src/hooks/usepostauthredirect.ts","./oss/src/hooks/usequery.ts","./oss/src/hooks/useresizeobserver.ts","./oss/src/hooks/usesession.ts","./oss/src/hooks/usestatecallback.ts","./oss/src/hooks/usetestsetfileupload.ts","./oss/src/hooks/useurl.ts","./oss/src/hooks/usevaultsecret.ts","./oss/src/hooks/useworkspacepermissions.ts","./oss/src/lib/enums.ts","./oss/src/lib/metricutils.ts","./oss/src/lib/tableutils.ts","./oss/src/lib/transformers.ts","./oss/src/lib/types_ee.ts","./oss/src/lib/api/queryclient.ts","./node_modules/.pnpm/swr@2.4.0_react@19.0.0/node_modules/swr/dist/_internal/events.d.mts","./node_modules/.pnpm/swr@2.4.0_react@19.0.0/node_modules/swr/dist/_internal/types.d.mts","./node_modules/.pnpm/swr@2.4.0_react@19.0.0/node_modules/swr/dist/_internal/constants.d.mts","./node_modules/.pnpm/dequal@2.0.3/node_modules/dequal/index.d.ts","./node_modules/.pnpm/swr@2.4.0_react@19.0.0/node_modules/swr/dist/_internal/index.d.mts","./node_modules/.pnpm/swr@2.4.0_react@19.0.0/node_modules/swr/dist/index/index.d.mts","./oss/src/lib/api/types.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/isobject.d.ts","./oss/src/lib/helpers/api.ts","./oss/src/lib/helpers/errorhandler.ts","./oss/src/lib/helpers/isee.ts","./oss/src/lib/helpers/utils.ts","./oss/src/lib/api/assets/axiosconfig.ts","./oss/src/lib/api/assets/axiospure.ts","./oss/src/lib/api/assets/fetchclient.ts","./oss/src/lib/atoms/evaluation.ts","./oss/src/lib/atoms/organization.ts","./oss/src/lib/atoms/sidebar.ts","./oss/src/lib/atoms/virtualtable.ts","./oss/src/lib/helpers/buildbreadcrumbs.ts","./oss/src/lib/atoms/breadcrumb/types.ts","./oss/src/lib/atoms/breadcrumb/index.ts","./oss/src/lib/constants/statuslabels.ts","./oss/src/lib/evalrunner/types.ts","./oss/src/lib/evaluations/buildrunindex.ts","./oss/src/lib/evaluations/types.ts","./oss/src/lib/evaluations/index.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/capitalize.d.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/round.d.ts","./oss/src/lib/evaluations/legacy.ts","./oss/src/lib/evaluations/utils/evaluationkind.ts","./oss/src/lib/evaluations/utils/metrics.ts","./oss/src/lib/evaluators/utils.ts","./oss/src/lib/helpers/authmessages.ts","./oss/src/lib/helpers/authmethodfilter.ts","./oss/src/lib/helpers/casing.ts","./oss/src/lib/helpers/colors.ts","./oss/src/lib/helpers/copytoclipboard.ts","./oss/src/lib/helpers/extractjsonpaths.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/compatibility/index.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/globals.typedarray.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/buffer.buffer.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/globals.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/assert.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/assert/strict.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/async_hooks.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/buffer.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/child_process.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/cluster.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/console.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/constants.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/crypto.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/dgram.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/dns.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/dns/promises.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/domain.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/dom-events.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/events.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/fs.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/fs/promises.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/http.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/http2.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/https.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/inspector.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/module.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/net.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/os.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/path.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/perf_hooks.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/process.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/punycode.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/querystring.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/readline.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/readline/promises.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/repl.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/sea.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/stream.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/stream/promises.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/stream/consumers.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/stream/web.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/string_decoder.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/test.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/timers.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/timers/promises.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/tls.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/trace_events.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/tty.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/url.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/util.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/v8.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/vm.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/wasi.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/worker_threads.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/zlib.d.ts","./node_modules/.pnpm/@types+node@20.19.11/node_modules/@types/node/index.d.ts","./node_modules/.pnpm/@types+papaparse@5.3.15/node_modules/@types/papaparse/index.d.ts","./oss/src/lib/helpers/filemanipulations.ts","./oss/src/lib/helpers/llmproviders.ts","./oss/src/lib/helpers/region.ts","./oss/src/lib/helpers/servicevalidations.ts","./oss/src/lib/helpers/url.ts","./oss/src/lib/helpers/usesubscriptiondatawrapper.ts","./oss/src/lib/helpers/useentitlements.ts","./oss/src/lib/helpers/validators.ts","./oss/src/lib/helpers/analytics/assets/constants.ts","./oss/src/lib/helpers/analytics/store/atoms.ts","./oss/src/lib/helpers/analytics/hooks/useposthogag.ts","./oss/src/lib/helpers/analytics/hooks/usesurvey.ts","./oss/src/lib/helpers/auth/turnstile.ts","./oss/src/lib/helpers/datetimehelper/dayjs.ts","./oss/src/lib/helpers/datetimehelper/index.ts","./oss/src/lib/hooks/usebreadcrumbs.ts","./oss/src/lib/hooks/usejwt.ts","./oss/src/lib/hooks/useevaluators/types.ts","./oss/src/lib/hooks/useannotations/types/index.ts","./oss/src/lib/hooks/useannotations/assets/helpers.ts","./oss/src/lib/hooks/useannotations/assets/transformer.ts","./oss/src/lib/hooks/useannotations/index.ts","./oss/src/lib/hooks/useevaluationrunmetrics/types.ts","./oss/src/lib/hooks/useevaluationrunmetrics/assets/utils.ts","./oss/src/lib/hooks/useevaluationrunmetrics/index.ts","./oss/src/lib/hooks/usepreviewevaluations/assets/previewrunbatcher.ts","./oss/src/lib/hooks/usepreviewevaluations/assets/previewrunsrequest.ts","./oss/src/lib/hooks/usepreviewevaluations/states/queryfilteratoms.ts","./oss/src/lib/hooks/usepreviewevaluations/index.ts","./oss/src/lib/metrics/utils.ts","./oss/src/lib/onboarding/types.ts","./oss/src/lib/onboarding/atoms.ts","./oss/src/lib/onboarding/registry.ts","./oss/src/lib/onboarding/widget/types.ts","./oss/src/lib/onboarding/widget/store.ts","./oss/src/lib/onboarding/widget/config.ts","./oss/src/lib/onboarding/widget/index.ts","./oss/src/lib/onboarding/index.ts","./oss/src/lib/traces/observability_helpers.ts","./oss/src/lib/utils/slugify.ts","./oss/src/services/profile/index.ts","./oss/src/services/api.ts","./oss/src/services/aiservices/api.ts","./oss/src/services/aiservices/atoms.ts","./oss/src/services/annotations/api/index.ts","./oss/src/services/apikeys/api/index.ts","./oss/src/services/app-selector/api/index.ts","./oss/src/services/app-selector/hooks/usetemplates.ts","./oss/src/services/auth/api.ts","./oss/src/services/automations/types.ts","./oss/src/services/automations/api.ts","./oss/src/services/evaluationruns/utils.ts","./oss/src/services/evaluationruns/api/types.ts","./oss/src/services/evaluationruns/api/index.ts","./oss/src/services/evaluations/workerutils.ts","./oss/src/services/evaluations/api/index.ts","./oss/src/services/evaluations/results/api.ts","./oss/src/services/evaluations/invocations/api.ts","./oss/src/services/evaluations/scenarios/api.ts","./oss/src/services/folders/types.ts","./oss/src/services/folders/index.ts","./oss/src/services/observability/types/index.ts","./oss/src/services/organization/api/index.ts","./oss/src/services/project/types.ts","./oss/src/services/project/index.ts","./oss/src/services/queries/api/types.ts","./oss/src/services/queries/api/index.ts","./oss/src/services/runmetrics/api/assets/contants.ts","./oss/src/services/runmetrics/api/types.ts","./oss/src/services/runmetrics/api/index.ts","./oss/src/services/testsets/api/types.ts","./oss/src/services/testsets/api/index.ts","./oss/src/services/tools/api/types.ts","./oss/src/services/tools/api/index.ts","./oss/src/services/tracing/types/index.ts","./oss/src/services/tracing/lib/helpers.ts","./oss/src/services/tracing/api/index.ts","./oss/src/services/variantconfigs/api/index.ts","./oss/src/services/vault/api/index.ts","./oss/src/services/workspace/index.ts","./oss/src/services/workspace/api/index.ts","./oss/src/state/router.ts","./oss/src/state/appcreation/status.ts","./oss/src/state/automations/atoms.ts","./oss/src/state/automations/state.ts","./oss/src/state/customworkflow/modalatoms.ts","./oss/src/state/entities/shared/createstatefulentityatomfamily.ts","./oss/src/state/entities/shared/createentitydraftstate.ts","./oss/src/state/entities/shared/createentitycontroller.ts","./oss/src/state/entities/shared/createpaginatedentitystore.ts","./oss/src/state/entities/shared/index.ts","./oss/src/state/entities/index.ts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/standard-schema.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ar.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/az.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/be.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/bg.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ca.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/cs.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/da.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/de.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/en.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/eo.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/es.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fa.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fi.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr-ca.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/he.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hu.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hy.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/id.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/is.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/it.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ja.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ka.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/kh.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/km.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ko.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/lt.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/mk.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ms.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/nl.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/no.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ota.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ps.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pl.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pt.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ru.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sl.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sv.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ta.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/th.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/tr.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ua.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uk.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ur.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uz.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/vi.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-cn.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-tw.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/yo.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/index.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-generator.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/index.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/checks.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/compat.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/from-json-schema.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/coerce.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.d.cts","./node_modules/.pnpm/zod@4.3.6/node_modules/zod/index.d.cts","./oss/src/state/entities/testcase/schema.ts","./oss/src/state/entities/testcase/api.ts","./oss/src/state/entities/testset/revisionschema.ts","./oss/src/state/entities/testset/store.ts","./oss/src/state/entities/testset/revisionentity.ts","./oss/src/state/entities/testcase/paginatedstore.ts","./oss/src/state/entities/testcase/testcasemutations.ts","./oss/src/state/entities/testcase/controller.ts","./oss/src/state/entities/testset/dirtystate.ts","./oss/src/state/entities/testset/mutations.ts","./oss/src/state/entities/testset/controller.ts","./oss/src/state/entities/testset/paginatedstore.ts","./oss/src/state/entities/testset/testsetcontroller.ts","./oss/src/state/entities/testset/index.ts","./oss/src/state/entities/testcase/queries.ts","./oss/src/state/entities/testcase/columnstate.ts","./oss/src/state/entities/testcase/testcaseentity.ts","./oss/src/state/entities/testcase/atomcleanup.ts","./oss/src/state/entities/testcase/dirtystate.ts","./oss/src/state/entities/testcase/displayrows.ts","./oss/src/state/entities/testcase/editsession.ts","./oss/src/state/entities/testcase/index.ts","./oss/src/state/environment/appenvironmentatoms.ts","./oss/src/state/environment/useappenvironments.ts","./oss/src/state/newobservability/atoms/controls.ts","./oss/src/state/newobservability/atoms/queryhelpers.ts","./oss/src/state/newobservability/atoms/queries.ts","./oss/src/state/newobservability/selectors/tracing.ts","./oss/src/state/newobservability/hooks/index.ts","./oss/src/state/newobservability/helpers/index.ts","./oss/src/state/newobservability/index.ts","./oss/src/state/newobservability/hooks/usesessions.ts","./oss/src/state/newobservability/stores/sessionsstore.ts","./oss/src/state/newobservability/utils/buildtracequeryparams.ts","./packages/agenta-entities/src/shared/invalidation/index.ts","./oss/src/state/newplayground/workflowentitybridge.ts","./oss/src/state/observability/dashboard.ts","./oss/src/state/observability/index.ts","./oss/src/state/profile/hooks.ts","./oss/src/state/profile/index.ts","./oss/src/state/queries/atoms/fetcher.ts","./oss/src/state/queries/index.ts","./oss/src/state/session/jwt.ts","./oss/src/state/settings/index.ts","./oss/src/state/testsetselection/atoms.ts","./oss/src/state/testsetselection/index.ts","./oss/src/state/url/auth.ts","./oss/src/state/url/focusdrawer.ts","./oss/src/state/url/routematchers.ts","./oss/src/state/url/session.ts","./oss/src/state/url/testcase.ts","./oss/src/state/url/trace.ts","./oss/src/state/url/index.ts","./oss/src/state/url/playground.ts","./oss/src/state/url/postloginredirect.ts","./oss/src/state/url/variant.ts","./oss/src/state/url/test.ts","./oss/src/state/workspace/atoms/mutations.ts","./oss/src/state/workspace/atoms/selectors.ts","./oss/src/state/workspace/hooks.ts","./oss/src/state/workspace/index.ts","./oss/tests/manual/cell-renderers/test-extract-chat-messages.ts","./node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv/config.d.ts","./oss/tests/manual/datalayer/utils/test-analysis.ts","./oss/tests/manual/datalayer/utils/shared-test-setup.ts","./oss/tests/manual/datalayer/test-apps.ts","./oss/tests/manual/datalayer/test-observability.ts","./oss/tests/manual/datalayer/utils/test-types.ts","./oss/tests/playwright/acceptance/smoke.spec.ts","./oss/tests/playwright/acceptance/app/create.spec.ts","./oss/tests/playwright/acceptance/deployment/deploy-variant.spec.ts","./oss/tests/playwright/acceptance/observability/observability.spec.ts","./oss/tests/playwright/acceptance/playground/run-variant.spec.ts","./oss/tests/playwright/acceptance/prompt-registry/prompt-registry-flow.spec.ts","./oss/tests/playwright/acceptance/settings/api-keys-management.spec.ts","./oss/tests/playwright/acceptance/settings/model-hub.spec.ts","./oss/tests/playwright/acceptance/testsset/testset.spec.ts","./packages/agenta-annotation/src/state/testsetsync.ts","./packages/agenta-annotation/src/state/types.ts","./packages/agenta-annotation/src/state/controllers/annotationsessioncontroller.ts","./packages/agenta-annotation/src/state/controllers/annotationformcontroller.ts","./packages/agenta-annotation/src/state/controllers/index.ts","./packages/agenta-annotation/src/state/index.ts","./packages/agenta-annotation/src/index.ts","./packages/agenta-annotation-ui/src/context/annotationuicontext.tsx","./packages/agenta-annotation-ui/src/state/atoms.ts","./packages/agenta-annotation-ui/src/components/createqueuedrawer/entityevaluatorselector.tsx","./packages/agenta-annotation-ui/src/components/createqueuedrawer/selectedevaluatorcard.tsx","./packages/agenta-annotation-ui/src/components/createqueuedrawer/index.tsx","./packages/agenta-annotation-ui/src/components/queuestatustag.tsx","./packages/agenta-annotation-ui/src/components/annotationqueuesview/cells/assignmentscell.tsx","./packages/agenta-annotation-ui/src/components/annotationqueuesview/cells/createdbycell.tsx","./packages/agenta-annotation-ui/src/components/annotationqueuesview/cells/queueprogresscell.tsx","./packages/agenta-annotation-ui/src/components/annotationqueuesview/index.tsx","./packages/agenta-annotation-ui/src/components/annotationsession/configurationview.tsx","./packages/agenta-annotation-ui/src/components/scenariocontent/index.tsx","./packages/agenta-annotation-ui/src/hooks/useannotationformstate.ts","./packages/agenta-annotation-ui/src/components/annotationsession/annotationformfield.tsx","./packages/agenta-annotation-ui/src/components/annotationsession/annotationpanel.tsx","./packages/agenta-annotation-ui/src/context/index.ts","./packages/agenta-annotation-ui/src/components/annotationsession/sessionnavigation.tsx","./packages/agenta-annotation-ui/src/components/annotationsession/focusview.tsx","./packages/agenta-annotation-ui/src/components/annotationsession/scenariolistview.tsx","./packages/agenta-annotation-ui/src/components/annotationsession/index.tsx","./packages/agenta-annotation-ui/src/components/addtoqueuepopover/index.tsx","./packages/agenta-annotation-ui/src/components/annotationstatusfilterselect.tsx","./packages/agenta-annotation-ui/src/components/annotationtasksview/index.tsx","./packages/agenta-annotation-ui/src/components/index.ts","./packages/agenta-annotation-ui/src/state/index.ts","./packages/agenta-annotation-ui/src/index.ts","./packages/agenta-annotation-ui/src/hooks/useannotationsubmit.ts","./packages/agenta-annotation-ui/src/hooks/index.ts","./packages/agenta-entities/src/shared/openapi/serviceschemaatoms.ts","./packages/agenta-entity-ui/src/drillinview/context/index.ts","./packages/agenta-playground/src/react/index.ts","./packages/agenta-playground-ui/src/hooks/uselocaldraftwarning.ts","./packages/agenta-playground-ui/src/hooks/index.ts","./packages/agenta-shared/src/index.ts","./packages/agenta-ui/src/editor/plugins/code/utils/validationtypes.ts","./packages/agenta-ui/src/editor/plugins/code/utils/multilinetracker.ts","./packages/agenta-ui/src/editor/plugins/code/utils/enhancedvalidationcontext.ts","./packages/agenta-ui/src/editor/plugins/code/utils/structuralvalidators.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/usecolumndomrefs.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/usecontainersize.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/useresizablecolumns.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/usescrollconfig.ts","./packages/agenta-ui/src/infinitevirtualtable/hooks/usetableheaderheight.ts","./node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv/lib/main.d.ts","./tests/playwright.config.ts","./tests/utils/testmail/index.ts","./tests/playwright/global-setup.ts","./tests/playwright/global-teardown.ts","./tests/playwright/config/projects.ts","./tests/playwright/scripts/bootstrap-auth.ts","./tests/playwright/scripts/run-tests.ts","./tests/tests/fixtures/base.fixture/llmkeyssettingshelpers/index.ts","./tests/tests/fixtures/session.fixture/types.ts","./tests/tests/fixtures/session.fixture/index.ts","./tests/tests/fixtures/user.fixture/types.ts","./tests/tests/fixtures/user.fixture/authhelpers/index.ts","./tests/tests/fixtures/user.fixture/authhelpers/utilities.ts","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/debounce.d.ts","./ee/src/components/deploymenthistory/deploymenthistory.tsx","./oss/src/components/getstarted/views/runevaluationview.tsx","./ee/src/components/getstarted/getstarted.tsx","./ee/src/components/postsignupform/postsignupform.tsx","./ee/src/components/scripts/assets/cloudscripts.tsx","./oss/src/components/sidebarbanners/sidebarbanner.tsx","./oss/src/components/sidebarbanners/index.tsx","./ee/src/components/sidebarbanners/index.tsx","./ee/src/components/sidepanel/subscription.tsx","./ee/src/components/pages/app-management/components/apikeyinput.tsx","./ee/src/components/pages/app-management/components/demoapplicationssection.tsx","./ee/src/components/pages/evaluations/autoevaluation/evaluatorsmodal/configureevaluator/components/modals/loadevaluatorpreset/components/loadevaluatorpresetcontent.tsx","./ee/src/components/pages/evaluations/autoevaluation/evaluatorsmodal/configureevaluator/components/modals/loadevaluatorpreset/components/loadevaluatorpresetfooter.tsx","./ee/src/components/pages/evaluations/autoevaluation/evaluatorsmodal/configureevaluator/components/modals/loadevaluatorpreset/index.tsx","./ee/src/components/pages/overview/deployments/deploymentrevertmodal.tsx","./ee/src/components/pages/overview/deployments/historyconfig.tsx","./ee/src/components/pages/overview/deployments/deploymenthistorymodal.tsx","./ee/src/components/pages/settings/billing/assets/usageprogressbar/index.tsx","./ee/src/components/pages/settings/billing/modals/autorenewalcancelmodal/assets/autorenewalcancelmodalcontent/index.tsx","./ee/src/components/pages/settings/billing/modals/autorenewalcancelmodal/index.tsx","./ee/src/components/pages/settings/billing/modals/pricingmodal/assets/pricingmodaltitle/index.tsx","./ee/src/components/pages/settings/billing/modals/pricingmodal/assets/pricingcard/index.tsx","./ee/src/components/pages/settings/billing/modals/pricingmodal/assets/pricingmodalcontent/index.tsx","./ee/src/components/pages/settings/billing/modals/pricingmodal/index.tsx","./ee/src/components/pages/settings/billing/modals/pricingmodal/assets/subscriptionplandetails/index.tsx","./ee/src/components/pages/settings/billing/index.tsx","./ee/src/pages/_app.tsx","./oss/src/pages/_document.tsx","./ee/src/pages/_document.tsx","./oss/src/components/protectedroute/protectedroute.tsx","./oss/src/pages/auth/[[...path]].tsx","./ee/src/pages/auth/[[...path]].tsx","./oss/src/pages/auth/callback/[[...callback]].tsx","./ee/src/pages/auth/callback/[[...callback]].tsx","./ee/src/pages/get-started/index.tsx","./ee/src/pages/post-signup/index.tsx","./ee/src/pages/w/index.tsx","./ee/src/pages/w/[workspace_id]/index.tsx","./ee/src/pages/w/[workspace_id]/p/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/annotations/[queue_id].tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/annotations/[queue_id].tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/annotations/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/annotations/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/apps/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/deployments/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/deployments/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/endpoints/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/endpoints/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/evaluations/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/evaluations/results/[evaluation_id]/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/overview/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/overview/index.tsx","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/hooks/usecombinedrefs.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/hooks/useevent.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/hooks/useisomorphiclayouteffect.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/hooks/useinterval.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/hooks/uselatestvalue.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/hooks/uselazymemo.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/hooks/usenoderef.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/hooks/useprevious.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/hooks/useuniqueid.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/hooks/index.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/adjustment.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/coordinates/types.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/coordinates/geteventcoordinates.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/coordinates/index.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/css.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/event/hasviewportrelativecoordinates.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/event/iskeyboardevent.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/event/istouchevent.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/event/index.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/execution-context/canusedom.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/execution-context/getownerdocument.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/execution-context/getwindow.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/execution-context/index.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/focus/findfirstfocusablenode.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/focus/index.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/type-guards/isdocument.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/type-guards/ishtmlelement.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/type-guards/isnode.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/type-guards/issvgelement.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/type-guards/iswindow.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/type-guards/index.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/types.d.ts","./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.0.0/node_modules/@dnd-kit/utilities/dist/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/types/coordinates.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/types/direction.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/algorithms/types.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/algorithms/closestcenter.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/algorithms/closestcorners.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/algorithms/rectintersection.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/algorithms/pointerwithin.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/algorithms/helpers.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/algorithms/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/pointer/abstractpointersensor.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/pointer/pointersensor.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/pointer/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/types.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/usesensor.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/usesensors.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/mouse/mousesensor.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/mouse/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/touch/touchsensor.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/touch/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/keyboard/types.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/keyboard/keyboardsensor.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/keyboard/defaults.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/keyboard/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/sensors/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/types/events.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/types/other.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/types/react.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/types/rect.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/types/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/useautoscroller.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usecachednode.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usesyntheticlisteners.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usecombineactivators.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usedroppablemeasuring.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/useinitialvalue.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/useinitialrect.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/userect.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/userectdelta.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/useresizeobserver.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usescrollableancestors.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usescrollintoviewifneeded.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usescrolloffsets.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usescrolloffsetsdelta.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usesensorsetup.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/userects.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usewindowrect.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/usedragoverlaymeasuring.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/utilities/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/store/constructors.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/store/types.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/store/actions.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/store/context.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/store/reducer.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/store/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/accessibility/types.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/accessibility/accessibility.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/accessibility/components/restorefocus.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/accessibility/components/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/accessibility/defaults.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/accessibility/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/coordinates/constants.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/coordinates/distancebetweenpoints.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/coordinates/getrelativetransformorigin.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/coordinates/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/rect/adjustscale.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/rect/getrectdelta.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/rect/rectadjustment.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/rect/getrect.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/rect/getwindowclientrect.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/rect/rect.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/rect/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/other/noop.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/other/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollableancestors.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollableelement.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollcoordinates.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/getscrolldirectionandspeed.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollelementrect.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/getscrolloffsets.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollposition.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/documentscrollingelement.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/isscrollable.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/scrollintoviewifneeded.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/scroll/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/utilities/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/modifiers/types.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/modifiers/applymodifiers.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/modifiers/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dndcontext/types.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dndcontext/dndcontext.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dndcontext/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dndmonitor/types.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dndmonitor/context.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dndmonitor/usedndmonitor.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dndmonitor/usedndmonitorprovider.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dndmonitor/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/components/animationmanager/animationmanager.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/components/animationmanager/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/components/nullifiedcontextprovider/nullifiedcontextprovider.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/components/nullifiedcontextprovider/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/components/positionedoverlay/positionedoverlay.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/components/positionedoverlay/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/components/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/usedropanimation.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/usekey.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/dragoverlay.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/dragoverlay/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/components/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/usedraggable.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/usedndcontext.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/usedroppable.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/hooks/index.d.ts","./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@dnd-kit/core/dist/index.d.ts","./node_modules/.pnpm/@dnd-kit+modifiers@9.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/modifiers/dist/createsnapmodifier.d.ts","./node_modules/.pnpm/@dnd-kit+modifiers@9.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/modifiers/dist/restricttohorizontalaxis.d.ts","./node_modules/.pnpm/@dnd-kit+modifiers@9.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/modifiers/dist/restricttoparentelement.d.ts","./node_modules/.pnpm/@dnd-kit+modifiers@9.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/modifiers/dist/restricttofirstscrollableancestor.d.ts","./node_modules/.pnpm/@dnd-kit+modifiers@9.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/modifiers/dist/restricttoverticalaxis.d.ts","./node_modules/.pnpm/@dnd-kit+modifiers@9.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/modifiers/dist/restricttowindowedges.d.ts","./node_modules/.pnpm/@dnd-kit+modifiers@9.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/modifiers/dist/snapcentertocursor.d.ts","./node_modules/.pnpm/@dnd-kit+modifiers@9.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/modifiers/dist/index.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/types/disabled.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/types/data.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/types/strategies.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/types/type-guard.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/types/index.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/components/sortablecontext.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/components/index.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/hooks/types.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/hooks/usesortable.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/hooks/defaults.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/hooks/index.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/strategies/horizontallistsorting.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/strategies/rectsorting.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/strategies/rectswapping.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/strategies/verticallistsorting.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/strategies/index.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/sensors/keyboard/sortablekeyboardcoordinates.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/sensors/keyboard/index.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/sensors/index.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/utilities/arraymove.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/utilities/arrayswap.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/utilities/getsortedrects.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/utilities/isvalidindex.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/utilities/itemsequal.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/utilities/normalizedisabled.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/utilities/index.d.ts","./node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.0.0_react@19.0.0__react@19.0.0__react@19.0.0/node_modules/@dnd-kit/sortable/dist/index.d.ts","./oss/src/components/playground/assets/version.tsx","./oss/src/components/playground/components/playgroundpromptcomparisonview/promptcomparisonvariantnavigation/assets/variantnavigationcard/index.tsx","./oss/src/components/playground/components/playgroundpromptcomparisonview/promptcomparisonvariantnavigation/index.tsx","./oss/src/components/playground/components/menus/selectvariant/components/revisionchildtitle.tsx","./oss/src/components/playground/components/menus/selectvariant/components/variantgrouptitle.tsx","./oss/src/components/playground/components/menus/selectvariant/index.tsx","./oss/src/components/playground/components/modals/commitvariantchangesmodal/index.tsx","./oss/src/components/playground/components/modals/commitvariantchangesmodal/assets/commitvariantchangesbutton/index.tsx","./oss/src/components/playground/components/modals/deployvariantmodal/assets/deployvariantmodalcontent/index.tsx","./oss/src/components/playground/components/modals/deployvariantmodal/index.tsx","./oss/src/components/playground/components/modals/deployvariantmodal/assets/deployvariantbutton/index.tsx","./oss/src/components/playground/components/modals/deletevariantmodal/assets/deletevariantbutton/index.tsx","./oss/src/components/playground/components/menus/playgroundvariantheadermenu/index.tsx","./oss/src/components/playground/components/playgroundvariantconfig/assets/playgroundvariantconfigheader.tsx","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/actions/actionsitem.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/actions/actionsaudio.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/actions/actionscopy.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/actions/actionsfeedback.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/actions/interface.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/actions/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/file-card/filecard.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/file-card/list.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/file-card/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/attachments/filelist/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/attachments/placeholderuploader.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/attachments/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/_util/type.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/bubble/interface.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/bubble/bubble.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/bubble/bubblelist.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/bubble/divider.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/bubble/system.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/bubble/index.d.ts","./node_modules/.pnpm/@types+react-syntax-highlighter@15.5.13/node_modules/@types/react-syntax-highlighter/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/code-highlighter/interface.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/code-highlighter/codehighlighter.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/code-highlighter/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/locale/uselocale.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/locale/index.d.ts","./node_modules/.pnpm/@iconify+types@2.0.0/node_modules/@iconify/types/types.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/colors/types.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/colors/index.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/colors/keywords.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/css/types.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/css/icon.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/css/icons.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/customisations/bool.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/customisations/defaults.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/customisations/flip.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/customisations/merge.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/customisations/rotate.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/cleanup.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/convert.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/format.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/parse.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/regex/create.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/replace/find.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/replace/replace.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/test/parse.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/data.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/test/components.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/test/name.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/test/similar.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/test/tree.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/test/missing.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/emoji/test/variations.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon-set/convert-info.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon-set/expand.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon-set/get-icon.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon-set/get-icons.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon-set/minify.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon-set/parse.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon-set/tree.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon-set/validate-basic.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon-set/validate.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon/defaults.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon/merge.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon/name.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/viewbox.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon/square.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/icon/transformations.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/build.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/defs.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/id.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/size.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/encode-svg-for-css.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/trim.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/pretty.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/html.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/url.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/inner-html.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/svg/parse.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/loader/types.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/loader/utils.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/loader/custom.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/loader/modern.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/loader/loader.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/misc/strings.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/misc/objects.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/misc/title.d.ts","./node_modules/.pnpm/@iconify+utils@3.1.0/node_modules/@iconify/utils/lib/index.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/icons.d.ts","./node_modules/.pnpm/dompurify@3.3.1/node_modules/dompurify/dist/purify.es.d.mts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/config.type.d.ts","./node_modules/.pnpm/@types+d3-array@3.2.1/node_modules/@types/d3-array/index.d.ts","./node_modules/.pnpm/@types+d3-selection@3.0.11/node_modules/@types/d3-selection/index.d.ts","./node_modules/.pnpm/@types+d3-axis@3.0.6/node_modules/@types/d3-axis/index.d.ts","./node_modules/.pnpm/@types+d3-brush@3.0.6/node_modules/@types/d3-brush/index.d.ts","./node_modules/.pnpm/@types+d3-chord@3.0.6/node_modules/@types/d3-chord/index.d.ts","./node_modules/.pnpm/@types+d3-color@3.1.3/node_modules/@types/d3-color/index.d.ts","./node_modules/.pnpm/@types+geojson@7946.0.16/node_modules/@types/geojson/index.d.ts","./node_modules/.pnpm/@types+d3-contour@3.0.6/node_modules/@types/d3-contour/index.d.ts","./node_modules/.pnpm/@types+d3-delaunay@6.0.4/node_modules/@types/d3-delaunay/index.d.ts","./node_modules/.pnpm/@types+d3-dispatch@3.0.7/node_modules/@types/d3-dispatch/index.d.ts","./node_modules/.pnpm/@types+d3-drag@3.0.7/node_modules/@types/d3-drag/index.d.ts","./node_modules/.pnpm/@types+d3-dsv@3.0.7/node_modules/@types/d3-dsv/index.d.ts","./node_modules/.pnpm/@types+d3-ease@3.0.2/node_modules/@types/d3-ease/index.d.ts","./node_modules/.pnpm/@types+d3-fetch@3.0.7/node_modules/@types/d3-fetch/index.d.ts","./node_modules/.pnpm/@types+d3-force@3.0.10/node_modules/@types/d3-force/index.d.ts","./node_modules/.pnpm/@types+d3-format@3.0.4/node_modules/@types/d3-format/index.d.ts","./node_modules/.pnpm/@types+d3-geo@3.1.0/node_modules/@types/d3-geo/index.d.ts","./node_modules/.pnpm/@types+d3-hierarchy@3.1.7/node_modules/@types/d3-hierarchy/index.d.ts","./node_modules/.pnpm/@types+d3-interpolate@3.0.4/node_modules/@types/d3-interpolate/index.d.ts","./node_modules/.pnpm/@types+d3-polygon@3.0.2/node_modules/@types/d3-polygon/index.d.ts","./node_modules/.pnpm/@types+d3-quadtree@3.0.6/node_modules/@types/d3-quadtree/index.d.ts","./node_modules/.pnpm/@types+d3-random@3.0.3/node_modules/@types/d3-random/index.d.ts","./node_modules/.pnpm/@types+d3-scale-chromatic@3.1.0/node_modules/@types/d3-scale-chromatic/index.d.ts","./node_modules/.pnpm/@types+d3-time-format@4.0.3/node_modules/@types/d3-time-format/index.d.ts","./node_modules/.pnpm/@types+d3-timer@3.0.2/node_modules/@types/d3-timer/index.d.ts","./node_modules/.pnpm/@types+d3-transition@3.0.9/node_modules/@types/d3-transition/index.d.ts","./node_modules/.pnpm/@types+d3-zoom@3.0.8/node_modules/@types/d3-zoom/index.d.ts","./node_modules/.pnpm/@types+d3@7.4.3/node_modules/@types/d3/index.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/basic.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/except.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/mutable.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/merge.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/merge-exclusive.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/require-at-least-one.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/require-exactly-one.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/partial-deep.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/readonly-deep.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/literal-union.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/promisable.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/opaque.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/set-optional.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/set-required.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/value-of.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/promise-value.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/async-return-type.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/conditional-keys.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/conditional-except.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/conditional-pick.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/union-to-intersection.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/stringified.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/fixed-length-array.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/iterable-element.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/entry.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/entries.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/set-return-type.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/asyncify.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/package-json.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/tsconfig-json.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/base.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/source/utilities.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/ts41/camel-case.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/ts41/delimiter-case.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/ts41/kebab-case.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/ts41/pascal-case.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/ts41/snake-case.d.ts","./node_modules/.pnpm/type-fest@0.20.2/node_modules/type-fest/ts41/index.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/types.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/utils.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/diagram.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/diagrams/git/gitgraphtypes.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/diagram-api/types.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/diagram-api/detecttype.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/errors.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/clusters.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/types.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/anchor.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/bowtierect.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/card.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/choice.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/circle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/crossedcircle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceleft.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceright.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraces.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curvedtrapezoid.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/cylinder.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/dividedrect.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/doublecircle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/filledcircle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/flippedtriangle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/forkjoin.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/halfroundedrectangle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hexagon.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hourglass.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/icon.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconcircle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconrounded.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconsquare.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/imagesquare.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/invertedtrapezoid.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/labelrect.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanleft.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanright.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/lightningbolt.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedcylinder.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedwaveedgedrect.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multirect.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multiwaveedgedrectangle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/note.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/question.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectleftinvarrow.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectwithtitle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/roundedrect.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/shadedprocess.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/slopedrect.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/squarerect.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stadium.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/state.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stateend.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/statestart.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/subroutine.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedrect.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedwaveedgedrectangle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/text.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/tiltedcylinder.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoid.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoidalpentagon.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/triangle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waveedgedrectangle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waverectangle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/windowpane.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/erbox.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/classbox.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/requirementbox.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/kanbanitem.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/bang.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/cloud.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/defaultmindmapnode.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/mindmapcircle.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/shapes.d.ts","./node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/graph.d.ts","./node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/index.d.ts","./node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.d.ts","./node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.d.ts","./node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.d.ts","./node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.d.ts","./node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.d.ts","./node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre-js/intersect/index.d.ts","./node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre-js/render.d.ts","./node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/index.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/rendering-elements/nodes.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/logger.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/internals.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/mermaidapi.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/rendering-util/render.d.ts","./node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/mermaid.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/mermaid/mermaid.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/mermaid/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/prompts/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sender/components/slottextarea.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sender/components/textarea.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sender/hooks/use-speech.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sender/interface.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sender/context.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sender/sender.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sender/senderheader.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sender/senderswitch.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sender/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sources/sources.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sources/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/suggestion/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/presetcolors.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/seeds.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/maps/colors.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/maps/font.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/maps/size.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/maps/style.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/maps/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/alias.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/actions/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/attachments/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/bubble/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/code-highlighter/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/conversations/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/file-card/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/mermaid/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/prompts/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sender/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/sources/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/suggestion/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/think/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/thought-chain/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/welcome/style/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/components.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/cssinjs-utils.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/theme/interface/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/think/think.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/think/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/thought-chain/status.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/thought-chain/item.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/_util/hooks/use-collapsible.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/thought-chain/interface.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/thought-chain/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/welcome/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/x-provider/context.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/_util/hooks/use-shortcut-keys.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/conversations/hooks/usecreation.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/conversations/creation.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/conversations/hooks/usegroupable.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/conversations/interface.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/conversations/item.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/conversations/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/notification/interface.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/notification/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/version/version.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/version/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/x-provider/hooks/use-x-provider-context.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/x-provider/index.d.ts","./node_modules/.pnpm/@ant-design+x@2.2.2_antd@6.1.4_date-fns@3.6.0_react-dom@19.0.0_react@19.0.0__react@19.0_969f0483efe57d642ee9a685cd677702/node_modules/@ant-design/x/es/index.d.ts","./oss/src/components/playground/components/modals/refinepromptmodal/assets/instructionspanel.tsx","./oss/src/components/playground/components/modals/refinepromptmodal/assets/previewpanel.tsx","./oss/src/components/playground/components/modals/refinepromptmodal/assets/refinepromptmodalcontent.tsx","./oss/src/components/playground/components/modals/refinepromptmodal/index.tsx","./oss/src/components/playground/components/playgroundvariantconfig/index.tsx","./oss/src/components/playground/components/mainlayout/index.tsx","./oss/src/components/playground/components/playgroundheader/runevaluationbutton.tsx","./oss/src/components/playground/components/modals/testsetdisconnectconfirmmodal/index.tsx","./oss/src/components/playground/components/testsetdropdown/createtestsetcardwrapper.tsx","./oss/src/components/playground/components/testsetdropdown/testsetpreviewpanelwrapper.tsx","./oss/src/components/playground/components/testsetdropdown/index.tsx","./oss/src/components/playground/components/playgroundheader/index.tsx","./oss/src/components/playground/components/playgroundtestcaseeditor.tsx","./oss/src/components/playground/ossplaygroundentityprovider.tsx","./oss/src/components/playground/playgroundonboarding.tsx","./oss/src/components/playground/playground.tsx","./oss/src/components/playgroundrouter/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/playground/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/traces/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/traces/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/variants/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/variants/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/evaluations/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/evaluations/results/[evaluation_id]/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/evaluators/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/evaluators/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/evaluators/playground/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/evaluators/playground/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/observability/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/observability/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/playground/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/playground/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/prompts/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/prompts/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/settings/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/settings/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/testsets/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/testsets/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/testsets/[testset_id]/index.tsx","./ee/src/pages/w/[workspace_id]/p/[project_id]/testsets/[testset_id]/index.tsx","./oss/src/pages/workspaces/accept.tsx","./ee/src/pages/workspaces/accept.tsx","./ee/src/services/billing/index.tsx","./oss/src/themecontextbridge.tsx","./oss/src/components/annotations/annotationtestcasecontent.tsx","./oss/src/components/annotations/annotationtracecontent.tsx","./oss/src/components/appglobalwrappers/index.tsx","./oss/src/components/automations/widgets/advanceconfigwidget.tsx","./oss/src/components/automations/widgets/dispatchalertwidget.tsx","./oss/src/components/automations/widgets/headerlistwidget.tsx","./oss/src/components/automations/automationfieldrenderer.tsx","./oss/src/components/automations/automationlogstab.tsx","./oss/src/components/automations/requestpreview.tsx","./oss/src/components/automations/automationdrawer.tsx","./oss/src/components/automations/modals/deleteautomationmodal.tsx","./oss/src/components/automations/modals/secretrevealmodal.tsx","./oss/src/components/copybutton/copybutton.tsx","./oss/src/components/customuis/customantdbadge.tsx","./oss/src/components/customuis/customantdtag.tsx","./oss/src/components/customuis/labelvaluepill.tsx","./oss/src/components/customuis/customtreecomponent/index.tsx","./oss/src/components/customworkflow/customworkflowmodalmount.tsx","./oss/src/components/customworkflow/customworkflowbanner/index.tsx","./oss/src/components/enhanceduis/modal/index.tsx","./oss/src/components/deleteevaluationmodal/deleteevaluationmodalcontent.tsx","./oss/src/components/deleteevaluationmodal/deleteevaluationmodalbutton.tsx","./oss/src/components/deleteevaluationmodal/deleteevaluationmodal.tsx","./oss/src/components/deleteevaluationmodal/deleteevaluationmodalwrapper.tsx","./oss/src/components/deploymentsdashboard/table/assets/deploymentcolumns.tsx","./oss/src/components/deploymentsdashboard/table/deploymentstable.tsx","./oss/src/components/deploymentsdashboard/index.tsx","./oss/src/components/deploymentsdashboard/assets/useapicontent.tsx","./oss/src/components/deploymentsdashboard/assets/variantuseapicontent.tsx","./oss/src/components/deploymentsdashboard/components/deploymentcard/skeleton.tsx","./oss/src/components/deploymentsdashboard/components/deploymentcard/index.tsx","./oss/src/components/deploymentsdashboard/components/deploymentcard/environmentcardrow.tsx","./oss/src/components/deploymentsdashboard/components/drawer/assets/drawerdetails.tsx","./oss/src/components/deploymentsdashboard/components/drawer/assets/drawertitle.tsx","./oss/src/components/deploymentsdashboard/components/drawer/index.tsx","./oss/src/components/deploymentsdashboard/components/modal/deploymentconfirmationmodal.tsx","./oss/src/components/deploymentsdashboard/components/modal/selectdeployvariantmodal.tsx","./oss/src/components/deploymentsdashboard/modals/deploymentconfirmationmodalwrapper.tsx","./oss/src/components/deploymentsdashboard/modals/deploymentsdrawerwrapper.tsx","./oss/src/components/deploymentsdashboard/modals/selectdeployvariantmodalcontent.tsx","./oss/src/components/deploymentsdashboard/modals/selectdeployvariantmodalwrapper.tsx","./oss/src/components/drillinview/ossdrillinuiprovider.tsx","./oss/src/components/dynamiccodeblock/codeblock.tsx","./oss/src/components/dynamiccodeblock/dynamiccodeblock.tsx","./oss/src/components/editorviews/simplesharededitor/index.tsx","./node_modules/.pnpm/@types+react-window@1.8.8/node_modules/@types/react-window/index.d.ts","./oss/src/components/editorviews/virtualizedsharededitors/index.tsx","./oss/src/components/enhanceduis/drawer/index.tsx","./oss/src/components/enhanceduis/table/assets/customcells.tsx","./oss/src/components/enhanceduis/table/index.tsx","./oss/src/components/evalrundetails/evalresultsonboarding.tsx","./oss/src/components/evalrundetails/components/tableheaders/stepgroupheader.tsx","./oss/src/components/evalrundetails/components/columnvisibility/columnvisibilitypopovercontent.tsx","./oss/src/components/evalrundetails/components/tablecells/inputcell.tsx","./oss/src/components/evalrundetails/components/tablecells/actions/annotateactionbutton.tsx","./oss/src/components/evalrundetails/components/tablecells/actions/runactionbutton.tsx","./oss/src/components/evalrundetails/components/tablecells/actioncell.tsx","./oss/src/components/evalrundetails/components/tablecells/invocationtracesummary.tsx","./oss/src/components/evalrundetails/components/tablecells/invocationcell.tsx","./oss/src/components/evalrundetails/components/tablecells/metriccell.tsx","./oss/src/components/evalrundetails/utils/buildpreviewcolumns.tsx","./oss/src/components/evalrundetails/hooks/usepreviewcolumns.tsx","./oss/src/components/evalrundetails/hooks/userowheightmenuitems.tsx","./oss/src/components/evalrundetails/table.tsx","./oss/src/components/evalrundetails/components/comparerunsmenu.tsx","./oss/src/components/evalrundetails/components/evaluationruntag.tsx","./oss/src/components/evalrundetails/components/previewevalrunheader.tsx","./oss/src/components/evalrundetails/components/views/configurationview/components/sectionprimitives.tsx","./oss/src/components/evalrundetails/components/views/configurationview/components/evaluatorsection.tsx","./oss/src/components/evalrundetails/components/views/configurationview/components/generalsection.tsx","./oss/src/components/evalrundetails/components/views/configurationview/components/copyablefields.tsx","./oss/src/components/evalrundetails/components/views/configurationview/components/promptconfigcardskeleton.tsx","./oss/src/components/evalrundetails/components/views/configurationview/components/promptconfigcard.tsx","./oss/src/components/evalrundetails/components/views/configurationview/components/invocationsection.tsx","./oss/src/components/evalrundetails/components/views/configurationview/components/testsetsection.tsx","./oss/src/components/evalrundetails/components/views/configurationview/index.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/columnvalueview.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarioannotationpanel/annotationinputs.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarioannotationpanel/annotationform.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarioannotationpanel/runoverlay.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarioannotationpanel/index.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarioloadingindicator.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarionavigator.tsx","./oss/src/components/sharedgenerationresultutils/index.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/stepcontentrenderer.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/index.tsx","./oss/src/components/evalrundetails/components/views/focusview.tsx","./oss/src/components/evalrundetails/components/views/overviewview.tsx","./oss/src/components/evalrundetails/components/page.tsx","./oss/src/components/evalrundetails/test.tsx","./oss/src/components/evalrundetails/components/focusdrawerheader.tsx","./oss/src/components/evalrundetails/components/focusdrawersidepanel.tsx","./oss/src/components/evalrundetails/components/focusdrawer.tsx","./oss/src/components/evalrundetails/components/tabledebugpanel.tsx","./oss/src/components/evalrundetails/components/annotatedrawer/virtualizedscenariotableannotatedrawer.tsx","./oss/src/components/evalrundetails/components/evaluatormetricschart/barchart.tsx","./oss/src/components/evalrundetails/components/tablecells/cellcontentpopover.tsx","./oss/src/components/evalrundetails/components/tablecells/actions/viewtracebutton.tsx","./oss/src/components/evalrundetails/components/views/configurationview/components/contextchiplist.tsx","./oss/src/components/evalrundetails/components/views/configurationview/components/querysection.tsx","./oss/src/components/evalrundetails/components/views/overviewview/components/overviewmetriccomparison.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarioheader.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarioinputscard.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenariooutputcard.tsx","./oss/src/components/evalrundetails/components/views/singlescenarioviewerpoc/scenarioannotationpanel/metricfield.tsx","./oss/src/components/evalrundetails/utils/renderchatmessages.tsx","./oss/src/components/evaluationrunstablepoc/components/evaluationrunsdeletebutton.tsx","./oss/src/components/evaluationrunstablepoc/components/evaluationrunstableheader.tsx","./oss/src/components/evaluations/components/metricdetailspreviewpopover.tsx","./oss/src/components/evaluators/components/deleteevaluatorsmodal/assets/deleteevaluatorsmodalcontent/index.tsx","./oss/src/components/evaluators/components/deleteevaluatorsmodal/index.tsx","./oss/src/components/evaluators/components/evaluatortemplatedropdown.tsx","./oss/src/components/evaluators/table/assets/evaluatorcolumns.tsx","./oss/src/components/evaluators/table/evaluatorstable.tsx","./oss/src/components/evaluators/index.tsx","./oss/src/components/evaluators/drawers/evaluatordrawerswrapper.tsx","./oss/src/components/evaluators/drawers/evaluatordrawer/index.tsx","./oss/src/components/evaluators/drawers/humanevaluatordrawer/index.tsx","./oss/src/components/evaluators/assets/cells/evaluatortagscell.tsx","./oss/src/components/evaluators/assets/cells/evaluatortypepill.tsx","./oss/src/components/evaluators/assets/cells/tabledropdownmenu/index.tsx","./oss/src/components/evaluators/assets/getcolumns.tsx","./oss/src/components/evaluators/components/configureevaluator/evaluatorplaygroundheader.tsx","./oss/src/components/evaluators/components/configureevaluator/index.tsx","./oss/src/components/evaluators/components/configureevaluator/assets/configureevaluatorskeleton.tsx","./oss/src/components/evaluators/components/selectevaluatormodal/assets/selectevaluatormodalcontent/index.tsx","./oss/src/components/evaluators/components/selectevaluatormodal/index.tsx","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/isequal.d.ts","./oss/src/components/filters/filters.tsx","./oss/src/components/filters/sort.tsx","./oss/src/components/filters/editcolumns/index.tsx","./oss/src/components/genericdrawer/index.tsx","./oss/src/components/getstarted/getstarted.tsx","./oss/src/components/infinitevirtualtable/components/common/skeletonline.tsx","./oss/src/components/infinitevirtualtable/hooks/usescopedcolumnvisibility.tsx","./node_modules/.pnpm/react-error-boundary@4.1.2_react@19.0.0/node_modules/react-error-boundary/dist/declarations/src/types.d.ts","./node_modules/.pnpm/react-error-boundary@4.1.2_react@19.0.0/node_modules/react-error-boundary/dist/declarations/src/errorboundarycontext.d.ts","./node_modules/.pnpm/react-error-boundary@4.1.2_react@19.0.0/node_modules/react-error-boundary/dist/declarations/src/errorboundary.d.ts","./node_modules/.pnpm/react-error-boundary@4.1.2_react@19.0.0/node_modules/react-error-boundary/dist/declarations/src/useerrorboundary.d.ts","./node_modules/.pnpm/react-error-boundary@4.1.2_react@19.0.0/node_modules/react-error-boundary/dist/declarations/src/witherrorboundary.d.ts","./node_modules/.pnpm/react-error-boundary@4.1.2_react@19.0.0/node_modules/react-error-boundary/dist/declarations/src/index.d.ts","./node_modules/.pnpm/react-error-boundary@4.1.2_react@19.0.0/node_modules/react-error-boundary/dist/react-error-boundary.cjs.d.mts","./oss/src/components/layout/errorfallback.tsx","./oss/src/components/layout/footerisland.tsx","./oss/package.json","./oss/src/components/layout/assets/breadcrumbs.tsx","./oss/src/components/layout/themecontextprovider.tsx","./oss/src/components/layout/posthogthemecapture.tsx","./oss/src/components/sidebar/components/listofapps.tsx","./oss/src/components/sidebar/components/authupgrademodal.tsx","./oss/src/components/sidebar/components/listofprojects.tsx","./oss/src/components/sidebar/components/listoforgs.tsx","./oss/src/components/sidebar/components/sidebarmenu.tsx","./oss/src/components/sidebar/hooks/usesidebarconfig/index.tsx","./oss/src/components/sidebar/settingssidebar.tsx","./oss/src/components/sidebar/sidebar.tsx","./oss/src/components/layout/sidebarisland.tsx","./oss/src/components/layout/layout.tsx","./oss/src/components/logo/logo.tsx","./oss/src/components/modelregistry/assets/labelinput/index.tsx","./oss/src/components/modelregistry/drawers/configureproviderdrawer/assets/modelnameinput.tsx","./oss/src/components/modelregistry/drawers/configureproviderdrawer/assets/configureproviderdrawercontent.tsx","./oss/src/components/modelregistry/drawers/configureproviderdrawer/assets/configureproviderdrawertitle.tsx","./oss/src/components/modelregistry/drawers/configureproviderdrawer/index.tsx","./oss/src/components/modelregistry/modals/configureprovidermodal/assets/configureprovidermodalcontent.tsx","./oss/src/components/modelregistry/modals/configureprovidermodal/index.tsx","./oss/src/components/modelregistry/modals/deleteprovidermodal/assets/deleteprovidermodalcontent.tsx","./oss/src/components/modelregistry/modals/deleteprovidermodal/index.tsx","./oss/src/components/placeholders/emptycomponent/index.tsx","./oss/src/components/placeholders/errorstate/index.tsx","./oss/src/components/placeholders/nomobilepagewrapper/nomobilepagewrapper.tsx","./oss/src/components/placeholders/noresultsfound/noresultsfound.tsx","./oss/src/components/placeholders/nossrwrapper/nossrwrapper.tsx","./oss/src/components/playground/components/chatcommon/controlsbar.tsx","./oss/src/components/playground/components/chatcommon/lastturnfootercontrols.tsx","./oss/src/components/playground/components/drawers/testsetdrawer/index.tsx","./oss/src/components/playground/components/mainlayout/assets/comparisonvariantconfigskeleton.tsx","./oss/src/components/playground/components/mainlayout/assets/comparisonvariantnavigationskeleton.tsx","./oss/src/components/playground/components/mainlayout/assets/generationpanelskeleton.tsx","./oss/src/components/playground/components/menus/playgroundgenerationvariablemenu/index.tsx","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/groupby.d.ts","./oss/src/components/playground/components/modals/createvariantmodal/assets/createvariantmodalcontent/index.tsx","./oss/src/components/playground/components/modals/createvariantmodal/index.tsx","./oss/src/components/playground/components/modals/createvariantmodal/assets/newvariantbutton/index.tsx","./oss/src/components/playground/components/menus/selectvariant/assets/treeselectitemrenderer/index.tsx","./oss/src/components/playground/components/modals/deletevariantmodal/content.tsx","./oss/src/components/playground/components/modals/deletevariantmodal/index.tsx","./oss/src/components/playground/components/modals/deletevariantmodal/deletevariantmodalwrapper.tsx","./oss/src/components/playground/components/modals/deployvariantmodal/deployvariantmodalwrapper.tsx","./oss/src/components/playground/components/playgroundgenerations/assets/gatewaytoolexecutebutton.tsx","./oss/src/components/playground/components/playgroundvariantconfigprompt/assets/gatewaytoolspanel.tsx","./oss/src/components/playground/components/webworkerprovider/index.tsx","./oss/src/components/playground/assets/deploybutton.tsx","./oss/src/components/playground/assets/deploymenttag.tsx","./oss/src/components/playground/assets/runbutton.tsx","./oss/src/components/references/cells/variantcells.tsx","./oss/src/components/references/cells/applicationcells.tsx","./oss/src/components/references/cells/createdbycells.tsx","./oss/src/components/references/cells/evaluatorcells.tsx","./oss/src/components/pages/evaluations/onlineevaluation/components/readonlybox.tsx","./oss/src/components/pages/evaluations/onlineevaluation/components/filterspreview.tsx","./oss/src/components/references/cells/querycells.tsx","./oss/src/components/references/cells/testsetcells.tsx","./oss/src/components/resizabletitle/index.tsx","./oss/src/components/resultcomponent/resultcomponent.tsx","./oss/src/components/resulttag/resulttag.tsx","./oss/src/components/scripts/globalscripts.tsx","./oss/src/components/sharedactions/addactionsdropdown/index.tsx","./oss/src/components/shareddrawers/addtotestsetdrawer/testsetdrawer.tsx","./oss/src/components/shareddrawers/addtotestsetdrawer/components/addtotestsetbutton/index.tsx","./oss/src/components/shareddrawers/annotatedrawer/assets/annotate/assets/annotatecollapsecontent/index.tsx","./oss/src/components/shareddrawers/annotatedrawer/assets/annotate/index.tsx","./oss/src/components/shareddrawers/annotatedrawer/assets/selectevaluators/index.tsx","./oss/src/components/shareddrawers/annotatedrawer/assets/createevaluator/assets/createnewmetric/index.tsx","./oss/src/components/shareddrawers/annotatedrawer/assets/createevaluator/index.tsx","./oss/src/components/shareddrawers/annotatedrawer/assets/annotatedrawertitle/index.tsx","./oss/src/components/shareddrawers/annotatedrawer/index.tsx","./oss/src/components/shareddrawers/annotatedrawer/assets/annotatedrawerbutton/index.tsx","./oss/src/components/shareddrawers/sessiondrawer/components/sessiondrawercontent.tsx","./oss/src/components/shareddrawers/sessiondrawer/components/sessiondrawer.tsx","./oss/src/components/shareddrawers/sessiondrawer/index.tsx","./oss/src/components/shareddrawers/sessiondrawer/components/sessioncontentsummary/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracesidepanel/traceannotations/components/notraceannotations.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracesidepanel/traceannotations/index.tsx","./oss/src/components/shareddrawers/sessiondrawer/components/sessionmessagepanel/index.tsx","./oss/src/components/shareddrawers/sessiondrawer/components/sessioncontent/index.tsx","./oss/src/components/shareddrawers/sessiondrawer/components/sessiondrawerbutton/index.tsx","./oss/src/components/shareddrawers/sessiondrawer/components/sessionheader/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracetreesettings/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracetree/index.tsx","./oss/src/components/shareddrawers/sessiondrawer/components/sessiontree/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracedrawercontent.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracedrawer.tsx","./oss/src/components/shareddrawers/tracedrawer/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/accordiontreepanel.tsx","./oss/src/components/shareddrawers/tracedrawer/components/evaluatordetailspopover.tsx","./oss/src/components/shareddrawers/tracedrawer/components/deletetracemodal/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracesidepanel/tracedetails/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracesidepanel/tracelinkedspans/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracesidepanel/tracereferences/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracesidepanel/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracecontent/components/annotationtabitem/assets/getannotationtablecolumns.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracecontent/components/annotationtabitem/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracecontent/components/linkedspanstabitem/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracecontent/components/overviewtabitem/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracecontent/components/tracetypeheader/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/tracecontent/index.tsx","./oss/src/components/shareddrawers/tracedrawer/components/traceheader/index.tsx","./oss/src/components/sidepanel/subscription.tsx","./oss/src/components/sidebar/components/sidebarskeletonloader.tsx","./oss/src/components/sidebar/hooks/usedropdownitems/index.tsx","./oss/src/components/spinner/contentspinner.tsx","./oss/src/components/tables/expandablecell.tsx","./oss/src/components/testcasestablenew/components/importtestsetrevisionmodal.tsx","./oss/src/components/testcasestablenew/components/testcaseactions.tsx","./oss/src/components/testcasestablenew/components/testcaseeditdrawer/index.tsx","./oss/src/components/testcasestablenew/components/testcaseeditdrawer.tsx","./oss/src/components/testcasestablenew/components/revisionmenuitems.tsx","./oss/src/components/testcasestablenew/components/testcaseheader.tsx","./oss/src/components/testcasestablenew/components/committestsetmodal.tsx","./oss/src/components/testcasestablenew/components/testcasemodals.tsx","./oss/src/components/testcasestablenew/components/editablecolumnheader.tsx","./oss/src/components/testcasestablenew/components/testcasecellcontent.tsx","./oss/src/components/testcasestablenew/components/testcasecell.tsx","./oss/src/components/testcasestablenew/components/testcaserowactionsdropdown.tsx","./oss/src/components/testcasestablenew/components/testcaseselectioncell.tsx","./oss/src/components/testcasestablenew/components/testcasestableshell.tsx","./oss/src/components/testcasestablenew/index.tsx","./oss/src/components/testcasestablenew/components/testcaseeditdrawercontent.tsx","./oss/src/components/testcasestablenew/components/testcasefieldheader.tsx","./oss/src/components/testcasestablenew/components/testcaseeditdrawer/nestedfieldeditor.tsx","./oss/src/components/testcasestablenew/components/testcaseeditdrawer/testcasefieldrenderer.tsx","./oss/src/components/testsetstable/testsetstable.tsx","./oss/src/components/testsetstable/components/commitmessagecell.tsx","./oss/src/components/testsetstable/components/latestcommitmessage.tsx","./oss/src/components/testsetstable/components/testsetsfilterscontent.tsx","./oss/src/components/testsetstable/components/testsetsfilterssummary.tsx","./oss/src/components/testsetstable/components/testsetsheaderfilters.tsx","./oss/src/components/testsetstable/hooks/usetestsetscolumns.tsx","./oss/src/components/truncatedtooltiptag/index.tsx","./oss/src/components/variantdetailswithstatus/components/environmentstatus.tsx","./oss/src/components/variantdetailswithstatus/components/variantdetails.tsx","./oss/src/components/variantdetailswithstatus/index.tsx","./oss/src/components/variantnamecell/index.tsx","./oss/src/components/variantscomponents/table/assets/registrycolumns.tsx","./oss/src/components/variantscomponents/table/registrytable.tsx","./oss/src/components/variantscomponents/index.tsx","./oss/src/components/variantscomponents/drawers/variantdrawer/assets/deploymentdrawertitle/index.tsx","./oss/src/components/variantscomponents/drawers/variantdrawer/assets/parameters/index.tsx","./oss/src/components/variantscomponents/drawers/variantdrawer/assets/variantdrawercontent/index.tsx","./oss/src/components/variantscomponents/drawers/variantdrawer/assets/variantdrawertitle/index.tsx","./oss/src/components/variantscomponents/drawers/variantdrawer/index.tsx","./oss/src/components/variantscomponents/drawers/variantdrawer/variantdrawerwrapper.tsx","./oss/src/components/variantscomponents/dropdown/variantdrawertitlemenu/index.tsx","./oss/src/components/variantscomponents/dropdown/variantdropdown/index.tsx","./oss/src/components/variantscomponents/modals/variantcomparisonmodal/content.tsx","./oss/src/components/variantscomponents/modals/variantcomparisonmodal/index.tsx","./oss/src/components/variantscomponents/modals/variantcomparisonmodal/variantcomparisonmodalwrapper.tsx","./oss/src/components/workflowrevisiondrawerwrapper/index.tsx","./oss/src/components/pages/workspaceprojectredirect/index.tsx","./oss/src/components/pages/workspaceredirect/index.tsx","./oss/src/components/pages/workspaceselection/index.tsx","./oss/src/components/pages/_app/index.tsx","./oss/src/components/pages/prompts/components/completionappicon.tsx","./oss/src/components/pages/prompts/components/setupworkflowicon.tsx","./oss/src/components/pages/prompts/assets/iconhelpers.tsx","./oss/src/components/pages/app-management/components/appworkflowcolumns.tsx","./oss/src/components/pages/app-management/components/emptyappview.tsx","./oss/src/components/pages/app-management/components/applicationmanagementsection.tsx","./oss/src/components/pages/app-management/components/helpandsupportsection.tsx","./oss/src/components/pages/app-management/components/welcomecardssection/assets/components/welcomecard.tsx","./oss/src/components/pages/app-management/components/welcomecardssection/index.tsx","./oss/src/components/pages/app-management/index.tsx","./oss/src/components/pages/app-management/components/apikeyinput.tsx","./oss/src/components/pages/app-management/components/observabilitydashboardsection.tsx","./oss/src/components/pages/app-management/drawers/customworkflowhistory/components/configurationtable.tsx","./oss/src/components/pages/app-management/drawers/customworkflowhistory/components/configurationview.tsx","./oss/src/components/pages/app-management/drawers/customworkflowhistory/index.tsx","./oss/src/components/pages/app-management/modals/customappcreationloader.tsx","./oss/src/components/pages/app-management/modals/createappstatusmodal.tsx","./oss/src/components/pages/app-management/modals/maxappmodal.tsx","./oss/src/components/pages/app-management/modals/addappfromtemplatemodal/components/addappfromtemplatemodalcontent.tsx","./oss/src/components/pages/app-management/modals/addappfromtemplatemodal/index.tsx","./oss/src/components/pages/app-management/modals/customworkflowmodal/components/customworkflowmodalfooter.tsx","./oss/src/components/pages/app-management/modals/customworkflowmodal/components/customworkflowmodalcontent.tsx","./oss/src/components/pages/app-management/modals/customworkflowmodal/index.tsx","./oss/src/components/pages/app-management/modals/customworkflowmodal/hooks/usecustomworkflowconfig.tsx","./oss/src/components/pages/app-management/modals/deleteappmodal/index.tsx","./oss/src/components/pages/app-management/modals/editappmodal/index.tsx","./oss/src/components/pages/app-management/modals/setuptracingmodal/components/tracingcodecomponent.tsx","./oss/src/components/pages/app-management/modals/setuptracingmodal/components/tracingtabcontent.tsx","./oss/src/components/pages/app-management/modals/setuptracingmodal/index.tsx","./oss/src/components/pages/auth/assets/showerrormessage.tsx","./oss/src/components/pages/auth/emailfirst/index.tsx","./oss/src/components/pages/auth/turnstile/index.tsx","./oss/src/components/pages/auth/emailpasswordauth/index.tsx","./oss/src/components/pages/auth/emailpasswordsignin/index.tsx","./oss/src/components/pages/auth/passwordlessauth/index.tsx","./oss/src/components/pages/auth/regionselector/regioninfomodal.tsx","./oss/src/components/pages/auth/regionselector/index.tsx","./oss/src/components/pages/auth/sendotp/index.tsx","./oss/src/components/pages/auth/sidebanner/index.tsx","./oss/src/components/pages/auth/socialauth/index.tsx","./oss/src/components/pages/evaluations/evaluationsview.tsx","./oss/src/components/pages/evaluations/newevaluation/assets/tablabel/index.tsx","./oss/src/components/pages/evaluations/newevaluation/components/selectappsection.tsx","./oss/src/components/pages/evaluations/newevaluation/components/selectevaluatorsection/selectevaluatorsection.tsx","./oss/src/components/pages/evaluations/newevaluation/components/selecttestsetsection.tsx","./oss/src/components/pages/evaluations/newevaluation/components/selectvariantsection.tsx","./oss/src/components/pages/evaluations/newevaluation/components/advancedsettings.tsx","./oss/src/components/pages/evaluations/newevaluation/components/newevaluationmodalcontent.tsx","./oss/src/components/pages/evaluations/newevaluation/components/newevaluationmodalinner.tsx","./oss/src/components/pages/evaluations/newevaluation/index.tsx","./oss/src/components/pages/evaluations/newevaluation/components/createevaluatordrawer/index.tsx","./oss/src/components/pages/evaluations/newevaluation/components/createhumanevaluatordrawer/index.tsx","./oss/src/components/pages/evaluations/setupevaluationmodal/index.tsx","./oss/src/components/pages/evaluations/cellrenderers/cellrenderers.tsx","./oss/src/components/pages/evaluations/onlineevaluation/components/evaluatortypetag.tsx","./oss/src/components/pages/evaluations/onlineevaluation/components/promptpreview.tsx","./oss/src/components/pages/evaluations/onlineevaluation/components/evaluatordetailspreview.tsx","./oss/src/components/pages/evaluations/onlineevaluation/components/samplingratecontrol.tsx","./oss/src/components/pages/evaluations/onlineevaluation/hooks/useevaluatorselection.tsx","./oss/src/components/pages/evaluations/onlineevaluation/onlineevaluationdrawer.tsx","./oss/src/components/pages/evaluations/onlineevaluation/components/queryfilterscell.tsx","./oss/src/components/pages/evaluations/onlineevaluation/components/queryfilterssummarycard.tsx","./oss/src/components/pages/observability/components/evaluatormetricscell.tsx","./oss/src/components/pages/observability/components/nodenamecell.tsx","./oss/src/components/pages/observability/components/statusrenderer.tsx","./oss/src/components/pages/observability/assets/getobservabilitycolumns.tsx","./oss/src/components/pages/observability/components/observabilityheader/index.tsx","./oss/src/components/pages/observability/components/emptyobservability/index.tsx","./oss/src/components/pages/observability/components/observabilitytable/index.tsx","./oss/src/components/pages/observability/components/sessionstable/assets/emptysessions.tsx","./oss/src/components/pages/observability/components/sessionstable/assets/getsessioncolumns.tsx","./oss/src/components/pages/observability/components/sessionstable/index.tsx","./oss/src/components/pages/observability/index.tsx","./oss/src/components/pages/observability/components/avatartreecontent.tsx","./oss/src/components/pages/observability/dashboard/customareachart.tsx","./oss/src/components/pages/observability/dashboard/widgetcard.tsx","./oss/src/components/pages/observability/dashboard/analyticsdashboard.tsx","./oss/src/components/pages/overview/deployments/deploymentmodal.tsx","./oss/src/components/pages/overview/deployments/changevariantmodal.tsx","./oss/src/components/pages/overview/deployments/deploymentoverview.tsx","./oss/src/components/pages/overview/deployments/historyconfig.tsx","./oss/src/components/pages/overview/deployments/deploymentdrawer/assets/languagecodeblock.tsx","./oss/src/components/pages/overview/deployments/deploymentdrawer/index.tsx","./oss/src/components/pages/overview/observability/observabilityoverview.tsx","./oss/src/components/pages/overview/variants/variantpopover.tsx","./oss/src/components/pages/overview/variants/variantsoverview.tsx","./oss/src/components/pages/prompts/components/promptshouseicon.tsx","./oss/src/components/pages/prompts/components/promptsbreadcrumb.tsx","./oss/src/components/pages/prompts/components/promptstablesection.tsx","./oss/src/components/pages/prompts/hooks/usepromptscolumns.tsx","./oss/src/components/pages/prompts/hooks/usepromptsfoldertree.tsx","./oss/src/components/pages/prompts/modals/deletefoldermodal.tsx","./oss/src/components/pages/prompts/modals/movefoldermodal.tsx","./oss/src/components/pages/prompts/modals/newfoldermodal.tsx","./oss/src/components/pages/prompts/promptspage.tsx","./oss/src/components/pages/prompts/index.tsx","./oss/src/components/pages/settings/apikeys/apikeys.tsx","./oss/src/components/pages/settings/automations/automations.tsx","./oss/src/components/pages/settings/organization/upgradeprompt.tsx","./oss/src/components/pages/settings/organization/index.tsx","./oss/src/components/pages/settings/projects/index.tsx","./oss/src/components/pages/settings/secrets/secretprovidertable/index.tsx","./oss/src/components/pages/settings/secrets/secrets.tsx","./oss/src/components/pages/settings/tools/components/connectionstatusbadge.tsx","./oss/src/components/pages/settings/tools/components/gatewaytoolssection.tsx","./oss/src/components/pages/settings/tools/tools.tsx","./oss/src/components/pages/settings/tools/components/actionslist.tsx","./oss/src/components/pages/settings/tools/components/agentatoolsplaceholder.tsx","./oss/src/components/pages/settings/tools/components/connectmodal.tsx","./oss/src/components/pages/settings/tools/components/connectionslist.tsx","./oss/src/components/pages/settings/tools/components/integrationdetail.tsx","./oss/src/components/pages/settings/tools/components/integrationgrid.tsx","./oss/src/components/pages/settings/workspacemanage/assets/avatarwithlabel.tsx","./oss/src/components/pages/settings/workspacemanage/cellrenderers.tsx","./oss/src/components/pages/settings/workspacemanage/modals/inviteduserlinkmodal.tsx","./oss/src/components/pages/settings/workspacemanage/modals/inviteusersmodal.tsx","./oss/src/components/pages/settings/workspacemanage/workspacemanage.tsx","./oss/src/components/pages/settings/workspacemanage/modals/generateresetlinkmodal.tsx","./oss/src/components/pages/settings/workspacemanage/modals/passwordresetlinkmodal.tsx","./oss/src/components/pages/testset/modals/components/filepreviewtable.tsx","./oss/src/components/pages/testset/modals/createtestset.tsx","./oss/src/components/pages/testset/modals/createtestsetfromapi.tsx","./oss/src/components/pages/testset/modals/createtestsetfromscratch.tsx","./oss/src/components/pages/testset/modals/deletetestset.tsx","./oss/src/components/pages/testset/modals/uploadtestset.tsx","./oss/src/components/pages/testset/modals/index.tsx","./oss/src/contexts/runidcontext.tsx","./oss/src/features/gateway-tools/components/resultviewer.tsx","./oss/src/features/gateway-tools/components/schemaform.tsx","./oss/src/features/gateway-tools/components/scrollsentinel.tsx","./oss/src/features/gateway-tools/components/scrolltotopbutton.tsx","./oss/src/features/gateway-tools/drawers/connectdrawer.tsx","./oss/src/features/gateway-tools/drawers/catalogdrawer.tsx","./oss/src/features/gateway-tools/drawers/connectionmanagerdrawer.tsx","./oss/src/features/gateway-tools/drawers/toolexecutiondrawer.tsx","./oss/src/hooks/usellmproviderconfig.tsx","./oss/src/lib/api/swrconfig.tsx","./oss/src/lib/helpers/analytics/agposthogprovider.tsx","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/components/supertokenswrapper.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/translation/translationcontext.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/usercontext/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/lib/build/index.d.ts","./node_modules/.pnpm/supertokens-auth-react@0.51.0_react-dom@19.0.0_react@19.0.0__react@19.0.0_supertokens-web-js@0.16.0/node_modules/supertokens-auth-react/index.d.ts","./oss/src/lib/helpers/auth/authprovider.tsx","./oss/src/lib/noop/index.tsx","./oss/src/pages/_app.tsx","./oss/src/pages/get-started/index.tsx","./oss/src/pages/w/index.tsx","./oss/src/pages/w/[workspace_id]/index.tsx","./oss/src/pages/w/[workspace_id]/p/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/evaluations/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/evaluations/results/[evaluation_id]/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/evaluations/results/compare/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/evaluations/single_model_test/[evaluation_id]/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/apps/[app_id]/playground/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/evaluations/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/evaluations/results/[evaluation_id]/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/evaluations/results/compare/index.tsx","./oss/src/pages/w/[workspace_id]/p/[project_id]/evaluations/single_model_test/[evaluation_id]/index.tsx","./oss/src/state/providers.tsx","./packages/agenta-annotation-ui/src/components/annotationqueuesview/cells/evaluatornamescell.tsx","./packages/agenta-annotation-ui/src/components/annotationsession/instructionspanel.tsx","./packages/agenta-annotation-ui/src/components/annotationsession/scenariolistsidebar.tsx","./packages/agenta-annotation-ui/src/components/annotationsession/sessionheader.tsx","./packages/agenta-playground-ui/src/components/executionitems/assets/executionrowactions/index.tsx","./packages/agenta-playground-ui/src/components/executionitems/assets/runoptionspopover/index.tsx","./packages/agenta-playground-ui/src/components/shared/entitystatustag.tsx","./node_modules/.pnpm/@types+lodash@4.17.23/node_modules/@types/lodash/clonedeep.d.ts","./packages/agenta-ui/src/chatmessage/components/chatinputs.tsx","./packages/agenta-ui/src/editor/plugins/markdown/markdownhovertogglebutton.tsx","./packages/agenta-ui/src/infinitevirtualtable/hooks/usescopedcolumnvisibility.tsx","./packages/agenta-ui/src/sharededitor/sharededitor.tsx"],"fileIdsList":[[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[81,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,489,490,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6070,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,1089,4147,4430,5789,6020,6050,6051,6102,6105,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8033],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8035],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4464,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5558,5768,6050,6051,6108,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6108,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,6050,6051,6108,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8045,8046],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,4147,4430,4464,5325,5789,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8048,8049],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,1092,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,726,1089,4464,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8051,8053,8057,8058],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,1090,6050,6051,6109,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1090,4464,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8052],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,1091,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,1091,4464,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8055],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6104,6105,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1091,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8054,8056],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,473,486,1089,4127,6047,6050,6051,6103,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,452,475,486,6050,6051,6111,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6107,7230,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8040],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6104,6105,6106,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8041],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6111,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8061],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8064],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8066],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8073],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8075],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8081],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8083],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8079],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8087],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8610],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8612],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8614],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8077],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8618],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8620],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8622],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8624],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8626],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8628],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8632],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8630],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8634],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6114,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1093,4147,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6106,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6106,6113,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6098,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6126,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5847,5865,5911,6050,6051,6066,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6052,6123,6129,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6130,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6123,6128,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6133,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6066,6123,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6137,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6052,6136,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6118,6122,6123,6135,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6140,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6146,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6149,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6152,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6155,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6158,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6899,6900,6901,6902,6903,6904,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6900,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6898,6899,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,617,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,617,618,622,625,626,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,616,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,618,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,618,623,624,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,616,617,618,619,620,621,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,617,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,575,576,580,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,576,583,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,576,580,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,575,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,576,579,586,587,594,607,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,578,579,580,581,584,585,587,594,595,602,603,604,605,606,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,595,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,577,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,577,588,589,590,591,592,593,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,575,577,578,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,596,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,596,597,598,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,582,583,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,582,583,596,599,600,601,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,582,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,578,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,579,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,861,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,861,862,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,972,973,974,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,973,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,975,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,4643,4644,4645,4646,4647,4648,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690,4691,4692,4693,4694,4695,4696,4697,4698,4699,4700,4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,973,974,5322,5323,5324,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,535,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8297,8579],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8285],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8285,8286,8287,8288,8289],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8570],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8291,8292,8296],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8291,8292,8293,8294,8295],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8298],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8298,8299,8300,8301,8302],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8297],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8305],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8305,8306],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8304],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8580,8581],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8582],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8575,8584,8586],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8297,8582,8584,8585],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8297,8575,8583],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8297,8584,8586],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8291,8292],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8291],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8285,8288,8289,8290,8293,8296,8303,8307,8532,8533,8541,8542,8544,8545,8572,8577,8578,8586,8588,8590,8592],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6345,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8308],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6344,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8309],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8531],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8289,8304,8530],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8587],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8588],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8537],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8537],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8537,8539,8540,8541],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8534,8535,8536],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8537,8538],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8543],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8552],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,627,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8297,8553,8568],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,627,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8297,8546,8547,8552,8553,8568,8569],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8546,8547,8548,8549,8550,8551],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8546],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8571],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8574,8576],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8573,8575],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8573],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8589],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8289,8293,8296,8297,8303,8307,8309,8532,8533,8542,8544,8545,8570,8572,8577,8578,8586],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1050,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8579,8591],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6553,6554,6555,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6553,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6553,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8176],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8178],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8176],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8176,8177,8179,8180],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8175],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8145,8150,8169,8181,8206,8209,8210],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8210,8211],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8150,8169],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8213],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8213,8214,8215,8216],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8150],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8213],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8150],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8218],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8219,8221,8223],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8220],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8222],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8150],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8209,8224,8227],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8225,8226],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8150,8175,8212],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8227,8228],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8181,8212,8217,8229],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8169,8231,8232,8233],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8175],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8150,8169,8175],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8150,8175],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8150,8175],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8145,8153],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8150,8171],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8100,8150],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8145],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8235],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8145,8150,8175,8206,8209,8230,8234],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8207],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8207,8208],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8150,8175],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8133,8134,8135,8136,8138,8140,8144],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8141],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8141,8142,8143],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8134,8141],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8134,8150],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8137],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8133,8134],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8131,8132],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8131,8134],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8139],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8130,8133,8150,8175],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8134],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8171],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8171,8172,8173,8174],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8171,8172],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8130,8150,8169,8170,8172,8230],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8122,8130,8145,8150,8175],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8122,8123,8146,8147,8148,8149],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8124],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8124,8150],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8124,8125,8126,8127,8128,8129],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8182,8183,8184],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8130,8185,8192,8194,8205],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8193],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8150],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8186,8187,8188,8189,8190,8191],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8149],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8236,8237,8238,8239,8240,8241,8242],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8249],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8235,8248],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8251],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8251,8252,8253],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8235],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8169,8235,8248,8251],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8248,8250,8254,8259,8262,8269],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8261],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8260],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8248],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8255,8256,8257,8258],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8244,8245,8246,8247],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8235,8245],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8263,8264,8265,8266,8267,8268],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8100],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8100,8101],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8104,8105,8106],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8108,8109,8110],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8112],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8089,8090,8091,8092,8093,8094,8095,8096,8097],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8098,8099,8102,8103,8107,8111,8113,8119,8120],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8114,8115,8116,8117,8118],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5735,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5736,5737,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5738,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5739,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8311],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8310,8314],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8310],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8318],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8327],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8329,8330],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8334],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8331],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8329,8331,8332],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8330,8333],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8346],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8310,8349],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8312,8313,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8328,8329,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8363],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8310,8363],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8310,8318],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8318,8346,8349],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8310,8352],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5546,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5695,5696,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5542,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5542,5544,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5539,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5539,5540,5541,5542,5543,5545,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5683,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5683,5684,5685,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5683,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5609,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5607,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5619,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5619,5620,5621,5622,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5618,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5608,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5608,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5607,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5608,5609,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5636,5637,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5623,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5639,5640,5641,5642,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5639,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5623,5639,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5603,5624,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5602,5603,5604,5605,5606,5623,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5624,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5646,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5547,5548,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5547,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5643,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5652,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,5467,5551,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5655,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5623,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5643,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5549,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5659,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5623,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5686,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,5467,5468,5550,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5658,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5468,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5749,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5625,5630,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5625,5628,5629,5631,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5625,5631,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5625,5628,5630,5631,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5625,5628,5630,5631,5633,5635,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5744,5745,5746,5747,5748,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5553,5554,5555,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,489,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1097,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1101,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327,3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3422,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3463,3464,3465,3466,3467,3468,3469,3470,3471,3472,3473,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,3512,3513,3514,3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1097,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1097,1098,1099,1100,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1100,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6063,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,539,745,750,849,850,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,849,851,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,851,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,851,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,855,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,855,856,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,535,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,863,865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,865,867,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,864,865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,866,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,864,865,866,868,869,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,864,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,499,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,498,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,499,500,501,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,542,880,881,882,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,535,880,881,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,883,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,539,546,833,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,546,834,835,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,834,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,556,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,556,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,555,556,557,558,559,560,561,562,563,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,554,555,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,528,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,528,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,526,527,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,899,901,903,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,904,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,899,901,904,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,542,899,900,904,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,899,901,902,904,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,931,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,910,930,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,911,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,911,912,913,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,909,910,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,911,922,942,943,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,942,944,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,778,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,777,778,779,780,781,782,783,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,777,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,535,777,778,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,925,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,928,929,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,925,926,927,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,530,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,531,532,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,530,531,533,534,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,946,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,733,734,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,732,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,733,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,547,549,550,551,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,529,546,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,547,548,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,547,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,540,541,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,959,960,961,962,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,958,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,959,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,959,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1071,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,538,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,536,537,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,539,741,742,744,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,745,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,743,745,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,745,746,747,748,749,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,748,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,742,745,746,747,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,742,744,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,989,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,989,990,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,993,994,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,989,991,992,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1011,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,760,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,760,761,762,763,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,761,762,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,758,760,764,765,766,768,769,770,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,759,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,760,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,760,765,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,758,760,764,765,766,767,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,760,767,768,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,841,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,838,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,535,836,839,840,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,837,838,841,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,837,841,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,919,920,921,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,911,914,919,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,546,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,539,546,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,806,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,804,805,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,546,801,802,803,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,804,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1036,1037,1038,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1025,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1035,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,745,750,1025,1029,1035,1036,1037,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1025,1035,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1025,1029,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1025,1026,1029,1030,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,741,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1025,1026,1027,1028,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,535,539,542,546,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,535,539,543,545,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,535,538,539,542,546,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,544,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,814,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,814,1042,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,814,1041,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,496,497,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,737,738,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,736,737,739,740,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4482,6050,6051,6623,6624,6625,6626,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4330,4334,4336,4338,4340,4341,4342,4343,4345,4347,4348,4349,4350,4351,4352,4355,4356,4357,4358,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4332,4337,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4338,4339,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4338,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4344,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4332,4338,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4346,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4338,4340,4346,4349,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4332,4338,4353,4354,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4331,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4333,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4332,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4335,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7375,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7374,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4431,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4431,4433,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4431,4433,4434,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4441,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,4441,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4441,5327,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4441,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4441,5327,5336,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4441,5327,5329,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5395,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5394,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8376,8400],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8375,8381],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8386],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8381],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8380],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6678,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6620,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8376,8393,8400],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6620,6621,6678,6679,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8375,8376,8377,8378,8379,8380,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5557,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5561,5563,5564,5565,5566,5567,5568,5569,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5561,5562,5564,5565,5566,5567,5568,5569,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5561,5562,5563,5565,5566,5567,5568,5569,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5561,5562,5563,5564,5566,5567,5568,5569,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5561,5562,5563,5564,5565,5567,5568,5569,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5561,5562,5563,5564,5565,5566,5568,5569,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5561,5562,5563,5564,5565,5566,5567,5569,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5570,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[93,94,95,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[96,97,98,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7625,7626,7627,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7667,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7628,7629,7630,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,192,194,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,88,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,190,191,192,193,433,481,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,349,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,88,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,191,194,433,481,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,88,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,190,194,433,481,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[82,83,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,713,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,503,504,505,506,507,508,509,510,511,512,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,502,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,546,663,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,722,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,821,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,635,820,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,635,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,494,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,514,515,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,635,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,495,513,517,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,517,518,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,1054,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,520,954,1053,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1055,1056,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1054,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,723,750,752,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,747,1058,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1060,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,492,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,755,1060,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1061,1062,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,635,714,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,822,823,824,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,714,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,795,826,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,793,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,826,827,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,522,523,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,521,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,524,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,521,522,523,524,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,645,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,529,547,830,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,831,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,829,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,635,652,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,841,844,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,845,846,847,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1065,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,521,723,751,852,853,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,849,854,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,772,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,773,774,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,775,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,772,773,775,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,635,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,935,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,857,858,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,858,859,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,863,872,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,872,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,871,872,873,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,719,755,870,871,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,516,519,525,713,719,727,729,731,752,755,756,776,792,795,796,798,807,813,816,819,821,823,825,828,832,844,848,854,860,874,875,878,879,886,887,892,898,907,916,924,933,938,941,945,950,953,957,965,970,976,978,988,996,1000,1005,1010,1013,1015,1019,1022,1024,1034,1040,1046,1047,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,521,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,521,525,819,1047,1048,1049,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,529,552,723,728,729,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,521,547,552,723,727,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,552,723,726,728,729,730,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,730,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,650,651,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,635,650,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,635,647,648,649,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,492,513,876,877,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,492,513,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,884,886,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,883,884,885,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,522,729,793,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,546,716,784,792,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,793,794,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,635,649,663,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,887,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,521,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,891,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,523,524,719,825,888,889,890,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,891,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,889,891,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,889,891,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,528,566,569,571,722,893,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,722,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,528,564,565,566,569,570,722,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,553,571,572,720,721,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,566,722,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,566,569,719,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,564,569,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,570,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,528,571,722,894,895,896,897,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,528,568,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,492,493,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,566,934,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,905,906,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,905,907,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,492,493,495,516,519,719,727,729,731,752,755,756,776,792,795,796,798,807,813,816,825,828,832,844,847,848,853,854,860,874,875,878,879,886,887,892,898,907,924,933,935,938,941,945,950,953,957,964,965,970,976,978,988,996,1000,1005,1010,1013,1015,1019,1022,1024,1034,1040,1046,1050,1057,1059,1063,1064,1066,1067,1068,1070,1073,1074,1076,1078,1085,1087,1088,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,723,932,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,671,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,635,647,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,908,915,916,917,918,923,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,723,910,914,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,723,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,915,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,524,915,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,635,647,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,723,915,922,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,786,1069,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,938,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,796,798,935,936,937,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,528,730,731,753,757,800,807,813,817,818,1051,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,819,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,940,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,492,513,935,939,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,940,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,521,723,942,944,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,784,785,787,788,789,790,791,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,778,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,784,785,786,787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,788,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,784,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,785,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,520,948,949,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,520,947,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,520,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1051,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,951,952,1051,1052,1053,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,492,502,513,524,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1051,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,501,1051,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1052,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,954,955,956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,947,954,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,954,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,753,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,735,752,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,524,715,719,755,757,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,755,756,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,715,719,754,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,755,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,635,649,663,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,815,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,964,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,819,963,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,966,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,966,967,968,969,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,772,773,775,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,773,966,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,719,1072,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,971,975,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,719,977,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,521,723,747,748,750,751,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,648,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,979,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,982,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,987,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,980,981,982,983,984,985,986,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,719,993,995,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,723,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,997,998,999,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1002,1003,1004,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,1001,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1002,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1006,1007,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1007,1008,1009,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,971,1006,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,1012,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,635,649,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,635,713,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,1014,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,800,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,800,1016,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,771,799,800,1016,1018,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,492,493,719,760,771,776,795,796,797,799,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,521,753,771,798,800,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,771,797,800,1016,1017,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,521,837,841,842,843,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,840,844,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,714,1020,1021,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,629,713,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,630,713,1075,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,614,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,636,637,638,639,640,641,642,643,644,646,652,653,654,655,656,657,658,659,660,661,662,664,665,666,667,668,669,670,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,615,627,711,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,607,608,609,614,615,711,712,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,608,609,610,611,612,613,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,608,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,627,628,630,631,632,633,634,713,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,630,713,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,622,627,713,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,547,552,723,726,728,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1023,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,1013,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,573,574,714,715,716,717,718,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,719,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,807,1077,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,806,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,807,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,723,808,810,811,812,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,808,810,813,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,808,809,813,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,493,513,521,723,750,751,1032,1034,1035,1039,1050,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,635,707,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1025,1031,1032,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1025,1031,1032,1033,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,1025,1031,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,719,922,1079,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1079,1081,1082,1083,1084,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1080,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,817,1044,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,817,1044,1045,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,513,814,816,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,817,1043,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1086,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6285,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6176,6177,6178,6180,6181,6182,6183,6184,6185,6186,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,546,6050,6051,6235,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6295,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6347,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6207,6346,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6207,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6351,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6348,6349,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6207,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6352,6353,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6353,6354,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6410,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6406,6408,6409,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6411,6412,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6410,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,750,6050,6051,6187,6296,6308,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,747,6050,6051,6179,6414,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6416,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6188,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6311,6416,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6417,6418,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6187,6207,6286,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6356,6357,6358,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6187,6286,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6187,6328,6360,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6326,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6360,6361,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6297,6300,6301,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6297,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6302,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6297,6300,6301,6302,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6217,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,529,547,6050,6051,6179,6187,6364,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,6050,6051,6365,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6363,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,6207,6224,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,841,6050,6051,6187,6368,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6369,6370,6371,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,852,6050,6051,6179,6187,6296,6297,6307,6373,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,849,6050,6051,6374,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,772,6050,6051,6187,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6314,6315,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6316,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,772,6050,6051,6314,6316,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,6207,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6509,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,857,6050,6051,6187,6297,6375,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6375,6376,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,863,6050,6051,6379,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6379,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6378,6379,6380,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,870,6050,6051,6187,6291,6297,6311,6378,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6187,6190,6285,6291,6298,6303,6305,6308,6311,6312,6317,6325,6328,6329,6331,6334,6340,6342,6345,6347,6350,6355,6357,6359,6362,6366,6368,6372,6374,6377,6381,6382,6385,6386,6388,6389,6394,6396,6399,6403,6404,6428,6429,6432,6435,6438,6440,6445,6448,6450,6460,6461,6465,6470,6475,6476,6477,6481,6484,6488,6493,6494,6504,6512,6513,6523,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6297,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6190,6297,6345,6513,6514,6515,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,529,552,6050,6051,6179,6296,6299,6303,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,547,552,6050,6051,6179,6187,6296,6297,6298,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,552,726,6050,6051,6179,6296,6299,6303,6304,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6304,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6222,6223,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,6207,6222,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6207,6219,6220,6221,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6188,6383,6384,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6188,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6297,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,884,6050,6051,6187,6388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,883,884,6050,6051,6187,6387,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6300,6303,6326,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,546,784,6050,6051,6187,6288,6325,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6326,6327,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6207,6221,6235,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6389,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6187,6297,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6393,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6291,6301,6302,6359,6390,6391,6392,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6393,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6391,6393,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6391,6393,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,528,893,6050,6051,6187,6189,6292,6295,6518,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6295,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,528,564,565,6050,6051,6187,6189,6292,6295,6297,6516,6517,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,553,6050,6051,6191,6293,6294,6518,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6189,6295,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6189,6291,6292,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,564,6050,6051,6292,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6517,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,528,6050,6051,6295,6518,6519,6520,6521,6522,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6188,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6189,6405,6508,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,905,6050,6051,6187,6395,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,905,6050,6051,6179,6187,6396,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6188,6291,6298,6303,6305,6308,6311,6312,6317,6325,6328,6329,6331,6334,6340,6342,6350,6352,6355,6359,6362,6366,6368,6371,6372,6373,6374,6377,6381,6382,6385,6386,6388,6389,6394,6396,6403,6404,6413,6415,6419,6420,6421,6422,6423,6425,6428,6429,6432,6435,6438,6439,6440,6445,6446,6448,6449,6450,6460,6461,6465,6470,6475,6476,6477,6481,6484,6486,6488,6490,6493,6494,6501,6504,6506,6507,6509,6512,6516,6523,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,932,6050,6051,6187,6296,6297,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6243,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6207,6219,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6397,6398,6399,6400,6401,6402,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,910,914,6050,6051,6187,6296,6297,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6296,6297,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6398,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6302,6398,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,6207,6219,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,922,6050,6051,6187,6296,6297,6398,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6319,6424,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6512,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6329,6331,6509,6510,6511,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,528,6050,6051,6304,6305,6306,6309,6313,6333,6334,6340,6343,6344,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6345,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6427,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6188,6426,6509,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6427,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,942,944,6050,6051,6179,6187,6296,6297,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,784,6050,6051,6318,6320,6321,6322,6323,6324,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,784,6050,6051,6187,6318,6319,6320,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6321,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6318,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6406,6430,6431,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,947,6050,6051,6187,6406,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6406,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6306,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6306,6407,6408,6433,6434,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,502,6050,6051,6187,6188,6302,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6306,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,501,6050,6051,6306,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6407,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6409,6436,6437,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,947,6050,6051,6187,6409,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6409,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6309,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,735,6050,6051,6187,6308,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6287,6291,6302,6311,6313,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6311,6312,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6287,6291,6310,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6311,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6207,6221,6235,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6341,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6439,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,963,6050,6051,6187,6345,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6441,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6441,6442,6443,6444,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,772,6050,6051,6187,6297,6314,6316,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6314,6441,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1072,6050,6051,6291,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,975,6050,6051,6187,6447,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,977,6050,6051,6187,6291,6297,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,747,748,750,6050,6051,6179,6187,6296,6297,6307,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6220,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6451,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6454,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6459,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6452,6453,6454,6455,6456,6457,6458,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,993,995,6050,6051,6179,6187,6291,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6296,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6297,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6297,6462,6463,6464,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6467,6468,6469,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6466,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6467,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6471,6472,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6472,6473,6474,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6447,6471,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1012,6050,6051,6179,6187,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,6207,6221,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,6207,6285,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1014,6050,6051,6187,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6333,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6333,6478,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,771,6050,6051,6332,6333,6478,6480,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,760,771,6050,6051,6179,6188,6291,6317,6328,6329,6330,6332,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,771,6050,6051,6179,6187,6297,6309,6331,6333,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,771,6050,6051,6330,6333,6478,6479,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,837,841,842,6050,6051,6187,6297,6367,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,840,6050,6051,6368,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6187,6286,6482,6483,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,6201,6285,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,6202,6285,6485,6508,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6198,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6208,6209,6210,6211,6212,6213,6214,6215,6216,6218,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6236,6237,6238,6239,6240,6241,6242,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,627,6050,6051,6199,6283,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,6179,6192,6193,6198,6199,6283,6284,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6192,6193,6194,6195,6196,6197,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6192,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,627,6050,6051,6200,6202,6203,6204,6205,6206,6285,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,607,6050,6051,6202,6285,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,622,627,6050,6051,6285,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,547,552,726,6050,6051,6179,6187,6296,6299,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6487,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6179,6187,6476,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,573,574,6050,6051,6179,6187,6286,6287,6288,6289,6290,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6291,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6334,6489,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,806,6050,6051,6187,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6334,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6296,6335,6337,6338,6339,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6335,6337,6340,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6187,6335,6336,6340,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,750,1035,1039,6050,6051,6179,6187,6296,6297,6307,6491,6493,6516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6207,6279,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1025,1031,6050,6051,6491,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1025,1031,6050,6051,6491,6492,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1025,1031,6050,6051,6187,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,922,6050,6051,6291,6495,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6495,6497,6498,6499,6500,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6496,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6343,6502,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6343,6502,6503,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,814,6050,6051,6187,6342,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1043,6050,6051,6343,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6505,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8517,8518,8519,8520,8521],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8515],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8516,8522,8523],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,725,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,724,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,4310,6050,6051,6105,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,4310,6050,6051,6104,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,6050,6051,6104,6105,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5677,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6894,6895,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,6050,6051,6894,6895,6896,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4148,4149,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4482,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4483,4484,4485,4486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4146,4482,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4453,4454,4455,4456,4457,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4453,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4454,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4441,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4441,4442,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4146,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4142,4143,4144,4145,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4143,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4142,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4413,4414,4415,4416,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4146,4412,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4412,4417,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4138,4139,4140,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4138,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4139,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4137,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4398,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4315,4316,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4323,4324,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[83,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5437,5438,5446,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5437,5438,5439,5446,5447,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5460,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5459,5460,5461,5462,5463,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5459,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5437,5438,5439,5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5464,5465,5466,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5437,5438,5439,5445,5446,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5437,5438,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5441,5443,5444,5446,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5439,5440,5445,5446,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5445,5446,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5439,5442,5443,5445,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5442,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5437,5438,5441,5445,5446,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5441,5445,5446,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5438,5439,5440,5441,5445,5446,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5437,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5437,5445,5446,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5439,5446,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5437,5439,5445,5446,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5437,5446,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5438,5445,5446,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8373],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8374,8445],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8374,8402,8440,8443,8444],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8442,8445],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8374,8376,8400,8441,8442,8449,8525,8526],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8372,8374,8441,8442,8443,8445,8446,8447,8449,8527,8528,8529],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8374,8441,8443,8445],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8310,8371],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8445,8449,8527],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8449],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8376,8400,8441,8449,8514,8524,8530],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8441,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8376,8400,8441,8449],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8374,8441,8448,8514],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8374],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8374,8376,8400,8402,8441],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6894,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6897,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[90,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,436,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,438,439,440,441,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,443,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,198,212,213,214,216,430,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,198,237,239,241,242,245,430,432,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,198,202,204,205,206,207,208,419,430,432,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,430,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,213,315,400,409,426,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,198,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,195,426,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,249,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,248,430,432,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,297,315,344,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,308,324,409,425,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,361,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,413,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,412,413,414,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,412,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[92,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,195,198,202,205,209,210,211,213,217,225,226,354,379,410,430,433,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,198,215,233,237,238,243,244,430,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,215,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,226,233,295,430,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,198,215,216,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,240,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,209,411,418,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,426,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,316,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,312,359,426,469,470,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,406,463,464,465,466,468,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,405,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,405,406,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,206,355,356,357,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,355,358,359,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,467,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,355,359,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,199,457,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,215,285,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,215,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,283,287,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,284,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7266,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,88,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,194,433,479,480,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,202,264,355,365,380,400,415,416,430,431,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,225,417,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,433,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,197,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,297,311,323,333,335,425,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,297,311,332,333,334,425,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,326,327,328,329,330,331,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,328,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,332,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,255,256,257,259,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,250,251,252,258,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,255,258,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,253,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,254,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,284,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,434,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,380,422,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,422,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,431,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,320,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,319,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,227,265,303,305,307,308,309,310,352,355,425,428,431,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,227,341,355,359,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,308,425,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,308,317,318,320,321,322,323,324,325,336,337,338,339,340,342,343,425,426,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,302,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,227,228,264,279,309,352,353,354,359,380,400,421,430,431,432,433,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,425,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,213,306,309,354,421,423,424,431,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,308,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,264,269,298,299,300,301,302,303,304,305,307,425,426,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,269,270,298,431,432,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,213,354,355,380,421,425,431,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,430,432,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,428,431,432,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,195,202,215,227,228,230,265,266,271,276,279,305,309,355,365,367,370,372,375,376,377,378,379,400,420,421,426,428,430,431,432,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,198,199,200,202,207,210,215,233,420,428,429,433,435,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,245,247,249,250,251,252,259,486,487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,195,237,247,275,276,277,278,305,355,370,379,380,386,389,390,400,421,426,428,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,209,210,225,354,379,421,430,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,199,202,305,384,428,430,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,296,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,387,388,397,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,428,430,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,303,306,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,305,309,420,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,231,237,278,370,380,386,389,392,428,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,209,225,237,393,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,198,230,395,420,430,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,215,229,230,231,242,260,394,396,420,430,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[92,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,227,309,399,433,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,202,209,217,225,228,265,271,275,276,277,278,279,305,355,367,380,381,383,385,400,420,421,426,427,428,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,209,386,391,397,428,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,220,221,222,223,224,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,266,371,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,373,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,371,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,373,374,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,202,205,206,264,431,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,197,199,227,265,279,309,363,364,400,428,432,433,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,201,206,305,364,427,431,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,298,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,299,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,300,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,426,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,246,262,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,202,246,265,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,261,262,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,263,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,246,247,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,246,280,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,246,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,266,369,427,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,368,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,247,426,427,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,366,427,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,247,426,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,352,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,202,207,265,294,297,303,305,309,311,314,345,348,351,355,399,420,428,431,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,288,291,292,293,312,313,359,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,192,194,257,346,347,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,192,194,257,346,347,350,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,408,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,213,270,308,309,320,324,355,399,401,402,403,404,406,407,410,420,425,430,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,359,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,363,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,265,281,360,362,365,399,428,433,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,288,289,290,291,292,293,312,313,359,434,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[92,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,228,246,247,279,305,309,397,398,400,420,421,430,431,433,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,270,272,275,421,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,266,430,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,269,308,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,268,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,270,271,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,267,269,430,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,201,270,272,273,274,430,431,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,355,356,358,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,232,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,199,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,426,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,92,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,279,309,433,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,199,457,458,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,287,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,197,244,282,284,286,435,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,215,426,431,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,382,426,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,355,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,197,233,239,287,433,434,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,190,191,194,433,481,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,85,86,87,88,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,234,235,236,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,234,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,88,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,194,195,197,228,332,392,430,432,435,481,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,445,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,447,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,449,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7267,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,451,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,453,454,455,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,459,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[89,91,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,437,442,444,446,448,450,452,456,460,462,472,473,475,485,486,487,488,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,461,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,471,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,284,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,474,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,270,272,273,275,323,426,476,477,478,481,482,483,484,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5841,5842,5843,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5840,5841,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5840,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6060,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6058,6059,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6062,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6061,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6087,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6085,6087,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6076,6084,6085,6086,6088,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6074,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6077,6082,6087,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6073,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6077,6078,6081,6082,6083,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6077,6078,6079,6081,6082,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6074,6075,6076,6077,6078,6082,6083,6084,6086,6087,6088,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6072,6074,6075,6076,6077,6078,6079,6081,6082,6083,6084,6085,6086,6087,6088,6089,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6072,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6077,6079,6080,6082,6083,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6081,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6082,6083,6087,6090,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6075,6085,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8773,8774],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8773,8774,8775,8776,8777],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8773],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8778],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6100,6101,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6630,6636,6653,6658,6688,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6622,6631,6632,6633,6634,6653,6654,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6658,6680,6681,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6654,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6651,6654,6656,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6635,6637,6641,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6638,6658,6702,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6656,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6632,6636,6653,6656,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6631,6632,6647,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6616,6632,6647,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6632,6647,6653,6658,6683,6684,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6619,6636,6638,6639,6640,6653,6656,6657,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6654,6656,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6656,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6653,6654,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6631,6657,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6657,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6617,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6632,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6658,6659,6660,6661,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6618,6619,6656,6657,6658,6660,6663,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6650,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6653,6656,6708,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6614,6615,6616,6619,6631,6632,6635,6636,6637,6638,6639,6641,6642,6652,6655,6658,6659,6662,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6682,6683,6684,6685,6686,6687,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6707,6708,6709,6710,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6657,6658,6669,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6654,6658,6667,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6656,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6616,6654,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6622,6630,6638,6653,6654,6656,6658,6669,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6622,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6623,6627,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6623,6627,6653,6654,6655,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6623,6627,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6623,6627,6630,6634,6642,6654,6656,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6623,6627,6658,6659,6662,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6623,6627,6657,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6623,6627,6656,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4482,6050,6051,6623,6627,6647,6656,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6617,6623,6627,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6630,6636,6650,6654,6656,6658,6689,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6622,6623,6624,6628,6629,6630,6634,6643,6644,6645,6646,6648,6649,6650,6652,6654,6656,6657,6658,6711,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6622,6630,6633,6635,6643,6650,6653,6654,6656,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6619,6630,6641,6650,6656,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6623,6627,6628,6629,6630,6643,6644,6645,6646,6648,6649,6656,6657,6658,6711,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6618,6619,6623,6627,6656,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6657,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6635,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6619,6622,6628,6653,6657,6658,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6706,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6616,6617,6618,6653,6654,6657,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6623,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,567,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9082],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7441,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7338,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7485,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9079,9080,9081],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7345,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7345,7442,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7340,7341,7342,7343,7344,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7391,7397,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7391,7394,7397,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7343,7345,7346,7356,7391,7392,7393,7394,7395,7396,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7401,7404,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7343,7344,7356,7401,7402,7403,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7413,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7343,7344,7356,7405,7406,7407,7408,7411,7412,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,6050,6051,7416,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7343,7344,7356,7414,7415,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7343,7344,7356,7417,7418,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,6050,6051,7438,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,6050,6051,7438,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7438,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7438,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7394,7437,7438,7490,7493,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7343,7345,7394,7397,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7437,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7344,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7344,7439,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7445,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7441,7445,7490,7496,7497,7498,7499,7500,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7441,7442,7445,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7441,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7343,7344,7356,7440,7441,7443,7444,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7447,7448,7452,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,6050,6051,7452,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7394,7451,7452,7490,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7446,7447,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7446,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7343,7345,7356,7394,7446,7447,7449,7450,7451,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7463,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7459,7463,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7343,7344,7356,7453,7454,7455,7456,7457,7459,7460,7461,7462,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,257,486,6050,6051,7484,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7466,7467,7468,7469,7470,7484,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7484,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7479,7480,7481,7484,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7343,7345,7394,7464,7465,7471,7472,7473,7474,7475,7476,7477,7478,7482,7483,7490,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7485,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7339,7344,7345,7387,7397,7404,7413,7416,7419,7438,7439,7441,7445,7452,7463,7484,7485,7486,7487,7488,7489,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7491,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7494,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7501,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7516,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7351,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7336,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7387,7388,7389,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7356,7358,7387,7388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7357,7398,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7357,7387,7388,7399,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7356,7388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7360,7387,7388,7409,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7360,7398,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7356,7358,7388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7362,7387,7388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7356,7387,7388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7387,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7366,7367,7370,7371,7387,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7370,7387,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7372,7387,7388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7373,7387,7388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7385,7386,7387,7388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7356,7358,7385,7387,7388,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7337,7347,7348,7349,7352,7355,7357,7359,7360,7361,7362,7371,7372,7373,7386,7388,7389,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7354,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7390,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7400,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7410,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7360,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7359,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7361,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7436,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7362,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7398,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7371,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7448,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7458,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7479,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7352,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7337,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7349,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7348,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7355,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7369,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7365,7366,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7365,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7365,7366,7367,7368,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7335,7350,7353,7356,7364,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7363,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7350,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7335,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7353,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7586,7587,7588,7589,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7586,7591,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7590,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6093,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6092,6093,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6091,6094,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8418],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8418,8429],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8404,8420],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8420],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8427],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8403],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8404],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8412],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8434],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8433,8435,8436,8437,8438,8439],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8436],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8435],[98,107,111,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,107,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,102,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,104,107,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,102,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,99,100,103,106,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,107,114,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,99,105,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,107,128,129,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,103,107,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,128,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,101,102,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,129,130,131,132,133,134,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,107,122,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,107,114,115,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,105,107,115,116,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,106,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,99,102,107,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,107,111,115,116,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,111,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,105,107,110,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,99,104,107,114,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,102,107,128,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7639,7643,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7639,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7634,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7636,7639,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7634,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7631,7632,7635,7638,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7639,7646,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7631,7637,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7639,7660,7661,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7635,7639,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7660,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7633,7634,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7633,7634,7635,7636,7637,7638,7639,7640,7641,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7661,7662,7663,7664,7665,7666,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7639,7654,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7639,7646,7647,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7637,7639,7647,7648,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7638,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7631,7634,7639,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7639,7643,7647,7648,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7643,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7637,7639,7642,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7631,7636,7639,7646,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,486,6050,6051,7630,7634,7639,7660,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4366,4367,4368,4369,4370,4371,4372,4374,4375,4376,4377,4378,4379,4380,4381,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4366,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4366,4373,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6679,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6621,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4302,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4293,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4293,4296,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4223,4226,4293,4294,4295,4296,4297,4298,4299,4300,4301,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4164,4296,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4293,4294,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4165,4293,4295,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4166,4168,4170,4171,4172,4173,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4229,4287,4288,4289,4290,4291,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4168,4170,4172,4173,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4229,4287,4289,4290,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4168,4170,4172,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4229,4287,4289,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4165,4168,4170,4171,4173,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4228,4229,4287,4288,4290,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4164,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4223,4224,4225,4226,4292,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4227,4229,4230,4231,4232,4280,4281,4282,4283,4284,4286,4287,4288,4289,4290,4291,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4164,4167,4170,4286,4291,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4227,4286,4287,4291,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4166,4167,4170,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4286,4287,4291,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4170,4173,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4287,4290,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4164,4165,4167,4168,4169,4171,4172,4173,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4227,4228,4229,4231,4286,4288,4289,4290,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4164,4165,4166,4170,4293,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4227,4228,4285,4287,4291,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4170,4171,4172,4173,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4287,4288,4289,4290,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4172,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4289,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7890],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7881],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7881,7884],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7876,7879,7881,7882,7883,7884,7885,7886,7887,7888,7889],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7815,7817,7884],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7881,7882],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7816,7881,7883],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7817,7819,7821,7822,7823,7824],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7819,7821,7823,7824],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7819,7821,7823],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7816,7819,7821,7822,7824],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7815,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7876,7877,7878,7879,7880],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7815,7817,7818,7821],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7817,7818,7821],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7821,7824],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7815,7816,7818,7819,7820,7822,7823,7824],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7815,7816,7817,7821,7881],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7821,7822,7823,7824],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7823],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,489,490,1094,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,489,6050,6051,6069,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6162,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1053,1089,4464,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4430,5828,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8001],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5889,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8001],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,4147,5789,6050,6051,7081,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5325,6050,6051,6524,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6523,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,6525,6527,6528,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8644,8645,8646],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6524,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8641,8642,8643],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5325,6050,6051,6526,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6525,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5325,6050,6051,6529,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4443,5847,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,1096,4127,4147,6050,6051,6530,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5325,6050,6051,6531,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8657,8658,8659],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,6050,6051,6531,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4443,4464,6050,6051,6531,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6532,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5346,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,5325,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8667,8668],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4393,5500,5787,6020,6050,6051,6533,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8667],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5787,6050,6051,6533,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5806,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5325,6020,6050,6051,6536,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8665,8666,8670,8671],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5390,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5865,5903,6050,6051,6534,6536,6537,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8662,8663],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4461,4464,5390,5500,5787,5865,5903,6020,6050,6051,6536,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5787,6050,6051,6536,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8677],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4464,4487,6050,6051,6535,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,5806,6020,6050,6051,6535,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5390,5806,5865,6050,6051,6537,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5390,6050,6051,6535,6537,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8662],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5558,5759,5768,5787,6050,6051,6538,6539,6540,6541,6542,6543,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4464,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6544,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,6540,6542,6545,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6538,6539,6540,6542,6543,6544,6545,6546,6547,6548,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5768,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5759,5768,6050,6051,7033,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6544,6545,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,4317,4479,5558,5787,5889,6050,6051,6544,6545,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5468,5546,5581,5653,5654,5660,5697,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8650],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4317,5467,5546,5558,5787,6050,6051,6551,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4475,5467,5556,5759,5768,6050,6051,6551,6552,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5768,6050,6051,6550,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6804,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8683],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,6050,6051,6556,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6557,6558,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5957,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6560,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,6050,6051,6561,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5356,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4475,5325,6050,6051,6562,6804,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8686],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,4418,4443,6050,6051,6563,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6566,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6563,6566,6585,6586,6587,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6575,6577,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,4418,4443,5690,6050,6051,6563,6566,6567,6572,6576,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,4418,4443,6050,6051,6563,6566,6589,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6563,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6563,6566,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4464,5865,5956,6050,6051,6566,6577,6586,6587,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,4418,4443,6050,6051,6563,6567,6576,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4479,6050,6051,6563,6566,6567,6572,6573,6577,6581,6584,6585,6586,6587,6595,6596,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6563,6586,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6566,6568,6571,6572,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6564,6566,6567,6568,6569,6570,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,5865,6050,6051,6566,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6566,6568,6570,6571,6573,6574,6578,6579,6580,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4418,4443,5865,6050,6051,6563,6565,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4443,6050,6051,6563,6568,6577,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6574,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,4418,4443,6050,6051,6563,6572,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4418,4443,6050,6051,6563,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,4418,5889,6050,6051,6585,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4418,4443,5865,6050,6051,6563,6566,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,4393,4464,5346,5690,6050,6051,6570,6577,6584,6586,6594,6741,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8723],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6569,6581,6733,6742,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8689],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,4147,4464,4475,6050,6051,6565,6603,6738,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5325,6050,6051,6565,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6711,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4458,4475,6050,6051,6570,6600,6718,6719,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4479,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4393,4475,6050,6051,6601,6711,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,6050,6051,6601,6712,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,4475,4479,5325,5759,5997,6050,6051,6565,6566,6573,6581,6588,6591,6592,6602,6733,6734,6736,6739,6743,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8703,8705,8728,8729],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5786,6050,6051,6567,6583,6736,6739,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,6567,6583,6733,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4147,5787,6050,6051,6563,6567,6592,6738,6739,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8701,8704,8713,8724,8725],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4464,4475,5346,6050,6051,6565,6567,6592,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8702,8703],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6563,6591,6592,6602,6603,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6604,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,6563,6566,6593,6735,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8692,8693],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4479,6050,6051,6581,6734,6737,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4475,4479,5997,6050,6051,6581,6734,6737,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8695],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4475,6050,6051,6588,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4475,4479,5997,6050,6051,6567,6581,6588,6734,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6581,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,6568,6569,6591,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6592,6606,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5786,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,5325,5759,5865,6050,6051,6563,6570,6603,6606,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8705],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4464,5325,6050,6051,6563,6566,6606,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8705],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,5325,5759,6050,6051,6591,6592,6599,6605,6606,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8705,8708,8710],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7084,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8709],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,5759,6050,6051,6590,6605,6606,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8705,8708],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5325,6050,6051,6591,6592,6598,6605,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8705],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4418,4475,5325,6050,6051,6565,6570,6581,6592,6599,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8703,8705,8706,8707,8711,8712],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8723],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6565,6723,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6613,6715,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6607,6610,6611,6714,6720,6721,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,6711,6714,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6716,6717,6722,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4147,4458,6050,6051,6566,6590,6592,6600,6605,6610,6611,6612,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6608,6711,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6607,6608,6610,6611,6717,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,6711,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6607,6610,6611,6713,6714,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4458,6050,6051,6566,6592,6605,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4458,6050,6051,6565,6592,6607,6609,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6607,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,6050,6051,6581,6734,6743,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,1089,4147,6050,6051,6566,6570,6581,6583,6584,6586,6593,6725,6733,6740,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8714,8718,8719,8720,8721,8722],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,6724,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8715],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,4418,5690,6050,6051,6724,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4393,4464,5346,6050,6051,6577,6584,6586,6594,6724,6727,6741,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8716,8717],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5690,6050,6051,6724,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6724,6725,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6724,6725,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8714,8722],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,6050,6051,6583,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,6050,6051,6724,6725,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8714,8721,8722],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,6050,6051,6725,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8721],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6563,6567,6578,6581,6582,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4479,6050,6051,6581,6582,6597,6728,6729,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6569,6581,6729,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6569,6581,6582,6742,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8689,8691,8698],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6581,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,6737,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6592,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6602,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4458,6050,6051,6581,6597,6732,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6563,6566,6586,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4487,6050,6051,6565,6582,6583,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6050,6051,6565,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6050,6051,6736,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4464,4475,6050,6051,6565,6581,6582,6583,6592,6729,6730,6731,6733,6737,6739,6744,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8690,8699,8700],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8688,8726],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4475,6050,6051,6564,6569,6581,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8689,8691,8694,8696,8697],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6564,6581,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6568,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4393,4475,5500,5768,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6572,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4458,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,4464,6050,6051,6745,6748,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6745,6748,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6589,6745,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4418,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4412,4418,6050,6051,6745,6750,6751,6752,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,5865,6050,6051,6745,6750,6751,6753,6754,6755,6756,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4464,5325,5346,6050,6051,6745,6763,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6745,6763,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6745,6747,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4458,4479,6050,6051,6745,6746,6759,6767,6768,6769,6770,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6745,6763,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6745,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4458,6050,6051,6745,6746,6757,6776,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,6745,6757,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,4147,6050,6051,6753,6757,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6791,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,6050,6051,6791,6793,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6791,6793,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,1019,1089,4147,4475,5346,6050,6051,6745,6748,6749,6750,6753,6757,6758,6768,6777,6781,6782,6783,6784,6789,6790,6791,6792,6794,6795,6796,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6745,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6784,6789,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8744],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,6745,6747,6750,6757,6785,6786,6787,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,6050,6051,6745,6747,6757,6785,6788,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4418,6050,6051,6755,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4458,6050,6051,6746,6768,6774,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4458,6050,6051,6757,6759,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,462,473,486,1089,4475,6050,6051,6745,6797,6798,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6745,6746,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6745,6760,6761,6762,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6745,6749,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6745,6762,6778,6779,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4147,6050,6051,6745,6746,6747,6759,6762,6764,6765,6766,6771,6772,6773,6775,6776,6777,6778,6779,6780,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6745,6746,6747,6762,6778,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5346,6050,6051,6745,6768,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4458,6050,6051,6757,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4458,6050,6051,6756,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4458,6050,6051,6745,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6745,6753,6797,6798,6799,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6750,6753,6757,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6746,6762,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4393,4458,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6802,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6804,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,6050,6051,6803,6805,6806,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6801,6802,6803,6805,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6801,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6801,6802,6807,6808,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6820,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5325,6050,6051,6823,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6820,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5865,6050,6051,6820,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1019,4127,5789,6050,6051,6820,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8756,8757,8758],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5954,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,1089,4127,4147,5865,5956,6011,6050,6051,6824,7084,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,5787,5828,5892,5956,6011,6050,6051,6824,7084,7123,7145,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8760],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,6050,6051,6825,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8747],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5325,5787,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4464,4475,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,6050,6051,6826,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8763],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,5865,5956,6011,6050,6051,6818,7084,7123,7145,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6817,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4147,5865,6050,6051,6819,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4464,5325,5787,5865,6050,6051,6818,6819,6820,6821,6827,6828,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8748,8749,8751],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6820,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,5806,5865,6050,6051,6820,6827,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4141,4147,4418,5390,5789,5865,6050,6051,6820,6828,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5390,6050,6051,6820,6828,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8750],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,6050,6051,6804,6829,6830,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4128,4147,5865,6050,6051,6831,6832,6836,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8651,8765],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4128,6050,6051,6835,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,1089,4127,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4129,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8685],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4487,6050,6051,6839,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,6050,6051,6843,6846,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,5325,6050,6051,6839,6874,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4475,6050,6051,6843,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6837,6839,6866,6873,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1034,1089,4127,4458,5325,6050,6051,6839,6848,6865,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6050,6051,6839,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6837,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,755,1089,4127,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4147,4475,6050,6051,6838,6839,6845,6846,6849,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6838,6839,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4458,6050,6051,6845,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6839,6840,6841,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4443,6050,6051,6839,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6870,6881,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,6050,6051,6839,6842,6865,6866,6867,6868,6869,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6839,6842,6870,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6839,6842,6876,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6839,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6876,6877,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4147,4458,6050,6051,6850,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6839,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,5325,6050,6051,6839,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4458,6050,6051,6839,6840,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4147,6050,6051,6848,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,6050,6051,6851,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,6050,6051,6862,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,6050,6051,6839,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,6050,6051,6839,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4147,4475,6050,6051,6839,6842,6869,6870,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6837,6838,6839,6840,6841,6842,6843,6844,6847,6854,6861,6865,6866,6867,6868,6871,6872,6873,6874,6875,6878,6879,6880,6882,6883,6884,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4138,4141,4147,5346,6050,6051,6837,6839,6849,6863,6864,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6837,6838,6839,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4138,4141,4147,4417,4443,5346,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4138,4147,6050,6051,6838,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,462,486,1089,4127,4147,4475,5786,6050,6051,6550,6891,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8782],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,462,473,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8779],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,462,486,1089,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,462,486,1089,4147,4418,4475,5325,6050,6051,6804,6891,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8063,8656,8779,8780,8781,8783,8784,8785,8794],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8784],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8793],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6804,7268,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8784],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,924,1089,4133,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4130,5538,6050,6051,6518,6893,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8797,8798],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4130,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4130,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8799,8800],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4131,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8797],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4131,4464,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8802],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4132,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4127,4132,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8804],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6905,6920,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6906,6907,6909,6910,6919,6921,6922,6923,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,6905,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6905,6906,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6909,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6914,6915,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6050,6051,6914,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6918,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,4475,6050,6051,6905,6908,6910,6911,6912,6913,6916,6917,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,437,448,486,1089,4147,4464,4482,5346,6050,6051,7268,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8640],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4147,5325,5390,6050,6051,7272,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8944,8945],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5390,6050,6051,7272,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8943],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,5325,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,462,486,1089,4127,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6050,6051,7259,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,6050,6051,7260,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8948],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5768,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6039,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8953,8954],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,5787,5865,6050,6051,7257,7258,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8946,8947,8949],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7257,7261,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5787,6040,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8959],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8956],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4393,5325,5768,5847,5865,6050,6051,7262,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8961],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,5346,6042,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,6041,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8962],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4147,5865,6050,6051,7263,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5325,5865,6050,6051,6102,7264,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,462,486,1089,4127,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6102,7268,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7269,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8967],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4475,5325,6050,6051,7265,7269,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8968],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,4443,5806,5865,6050,6051,7270,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7270,7271,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,7274,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8970],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6043,6050,6051,7492,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8970,8972],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6043,6050,6051,7495,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8972],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5325,6050,6051,7273,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8976],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,916,1089,4127,4147,6043,6050,6051,7274,7495,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,6043,6050,6051,7517,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7285,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7287,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,462,486,726,1089,4464,5325,6050,6051,6102,6104,6105,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,5325,5787,6050,6051,6745,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7289,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,6050,6051,7282,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,5690,6050,6051,7276,7280,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,5865,5956,6011,6050,6051,7084,7123,7145,7277,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4147,6050,6051,7278,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,4464,4475,5325,5865,6050,6051,7276,7281,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8982,8983,8984,8985,8986,8987],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,4147,4464,5806,5865,6050,6051,7275,7276,7280,7283,7284,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8988],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,4475,5390,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,1089,4147,4475,5325,5390,5865,6050,6051,7276,7279,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,5865,6050,6051,7276,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4475,5390,6050,6051,7276,7279,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,5325,6050,6051,7276,7281,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8989],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6589,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7292,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8837,8995,8996],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,6589,6754,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8837],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5500,6050,6051,7292,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6589,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8838],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,6050,6051,6589,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8838],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7293,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5865,6050,6051,7291,7292,7297,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5865,6050,6051,7291,7297,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,6050,6051,7291,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7291,7292,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,726,1089,4147,4382,4443,4464,5865,6050,6051,6589,6754,7295,7296,7297,7298,7299,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8995,8997,8998,8999],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5865,6050,6051,7291,7292,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7301,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,6050,6051,6832,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6833,6834,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6834,6835,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6834,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6833,7305,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4479,5786,6050,6051,7310,7312,7318,7321,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9003,9004,9005],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6044,6050,6051,6833,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,6833,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,4443,4464,4475,6044,6050,6051,7303,7304,7305,7306,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1019,1089,4147,6050,6051,7303,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8846,9006,9007,9008],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7324,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,7310,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,7312,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4479,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7311,7313,7314,7315,7316,7317,7319,7320,7322,7323,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5786,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,7318,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,7321,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,6050,6051,7303,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9007,9010,9011],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4393,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9015,9016],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4393,6050,6051,6711,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4127,4147,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9009,9012],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5865,6020,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9018],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,6045,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,1089,4127,4147,4475,5325,5865,6020,6045,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9022],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4464,5865,5903,6020,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4475,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5789,5865,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,462,486,1089,4127,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8941,8942],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7325,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6050,6051,6102,7326,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8942,9027],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,5390,6050,6051,7326,7327,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8942],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5325,5390,6050,6051,7326,7327,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1034,5325,6050,6051,7325,7326,7327,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8943],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5390,6050,6051,7326,7327,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9035],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1034,1089,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,1019,1089,4147,5390,5787,5865,6050,6051,7325,7326,7327,7328,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8943,9028,9029,9030,9031,9032,9033,9034],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,4443,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5390,6050,6051,7326,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5325,6050,6051,7329,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5325,5346,5786,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9039],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,462,486,1089,4127,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,5325,5346,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9042],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,6050,6051,7331,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9044],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5787,6050,6051,7331,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,4147,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9044],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,4127,6050,6051,7330,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9047,9049,9050],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,4127,6050,6051,7332,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9045],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4464,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6046,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9053],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6046,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9053],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,462,486,1089,4464,5325,6046,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1019,1089,4127,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9053,9054,9055,9056],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,4464,5325,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9060],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5325,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,4464,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,6050,6051,7591,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9061,9062,9063],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,5325,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,524,1089,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4475,6050,6051,6102,6925,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5500,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6028,6050,6051,7150,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6028,6050,6051,7149,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7096,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5956,6050,6051,7096,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4127,5958,6050,6051,6550,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5956,5957,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4134,4147,4475,5956,6050,6051,7084,7126,7132,7145,7154,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8273,8598],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5959,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8813],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4464,5325,5865,5956,5960,6050,6051,7147,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8282],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6012,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8821],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5865,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5325,5806,5865,5956,6011,6012,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8274,8275],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6011,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,5865,6013,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8277],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4464,5787,5865,5903,5956,6013,6050,6051,7084,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5787,6015,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5500,6015,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8820],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5500,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4147,4464,5865,5956,6014,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8818,8819],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6017,6050,6051,6926,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4430,4464,5787,5865,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6926,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8824],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6016,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8823],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4127,4147,5865,6022,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8280],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4147,5787,6050,6051,6927,6928,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4418,5690,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6021,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6928,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8280],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4127,4147,4464,5865,5903,6021,6050,6051,6928,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8279],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4487,5865,5901,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5325,6050,6051,6930,6931,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8593],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,5759,5780,6050,6051,6930,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5325,5865,6050,6051,6930,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8594,8595],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,5865,6050,6051,6929,6930,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5787,6050,6051,6929,6930,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8596],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6929,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4464,5787,5892,5956,6050,6051,6932,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4382,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4134,4147,4475,5325,5500,5787,5865,5903,5956,6011,6050,6051,6933,7084,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8008,8276,8600,8604],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8008],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4393,4475,5512,5806,5865,5956,6025,6050,6051,6934,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8121,8270,8271],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5956,6024,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8008,8235,8243,8270,8272],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4134,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,4147,5325,5787,5828,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,4464,5512,5806,5865,5956,6011,6020,6027,6050,6051,6935,7147,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8276,8278,8281,8283],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4134,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,4475,5865,5956,6026,6050,6051,7084,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8284,8597],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,4127,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,7145,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,4464,5828,5892,5954,5956,6050,6051,6932,7084,7145,7146,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8601,8602,8603],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7145,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4464,5325,5787,6050,6051,7145,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5956,6050,6051,7156,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7153,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6029,6050,6051,7155,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5787,5828,5892,6050,6051,7123,7145,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8008,8599,8605,8606,8607,8608],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8609],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,4418,4443,5865,5968,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7161,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,6050,6051,7171,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8833],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5789,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7169,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5786,6050,6051,7170,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8838],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5968,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7171,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4458,6050,6051,7168,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4458,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7158,7159,7160,7161,7162,7163,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5786,5865,6050,6051,7161,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5865,6050,6051,7158,7159,7161,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4464,4475,6050,6051,7158,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5356,6050,6051,7172,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6030,6050,6051,7173,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,452,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4475,6050,6051,7174,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7996],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6094,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5889,6050,6051,7178,7179,7180,7181,7182,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,6050,6051,7177,7178,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5889,6050,6051,7176,7179,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5828,6050,6051,7176,7178,7180,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7176,7180,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5889,6050,6051,7176,7179,7180,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,4147,6050,6051,7180,7191,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8846],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6094,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7176,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5889,6050,6051,7176,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7185,7186,7187,7188,7189,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6050,6051,7176,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7192,7193,7194,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4464,5968,6050,6051,7179,7180,7182,7192,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4464,5558,5889,6050,6051,7176,7180,7181,7182,7183,7192,7193,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7177,7178,7179,7180,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,7179,7180,7190,7195,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6033,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,4475,5865,6032,6050,6051,7199,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8848],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,6032,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8854],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,4464,5346,5690,5865,6031,6032,6050,6051,7199,7591,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,6050,6051,7198,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4464,5865,6031,6032,6034,6050,6051,6804,7201,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8851],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5865,6032,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5690,6032,6034,6050,6051,7198,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6031,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,4147,5865,6031,6032,6050,6051,6804,7200,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8849,8850,8852,8853],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,6050,6051,7203,7209,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8859,8862],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4393,6050,6051,7209,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7208,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8856],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,5325,6050,6051,7209,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5786,6050,6051,7208,7209,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5325,5786,6050,6051,7208,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8847,8855,8861],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4475,6050,6051,6804,7207,7209,7226,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8866,8867],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7208,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8857],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4443,4487,5889,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4317,5500,5558,5787,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4147,5325,6050,6051,7211,7226,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5789,5865,6050,6051,7223,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,4147,5789,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,4147,4475,5325,5865,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8860,8879],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5786,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5889,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8872],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,4475,5325,5786,5889,6050,6051,7211,7214,7216,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8874],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,6050,6051,7212,7213,7215,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8878,8880,8881,8882,8883],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7226,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8869],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,5325,6050,6051,7226,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,5786,5889,6050,6051,7216,7217,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7996],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,6102,7224,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8861,8875,8876,8877],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5325,5789,5865,6050,6051,7218,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8860],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5997,6050,6051,7219,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,7219,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4475,6050,6051,6804,7220,7221,7224,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8866],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,7222,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4475,6050,6051,7210,7226,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8870],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5956,6050,6051,7226,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7084,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,5787,6050,6051,7517,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,4475,5346,5787,6050,6051,7502,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8787,8788],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,4475,5346,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,462,486,1089,4475,6035,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5787,6036,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,4147,5325,6035,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,4475,6035,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8789,8790],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4147,4475,6035,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8779,8784,8786,8789,8790,8791,8792],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7230,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8039],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,6050,6051,7228,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,7228,7229,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,4147,4475,5957,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,5759,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4464,5325,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7996],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4458,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8900],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4479,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7996,8893],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5769,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7233,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,5759,5768,5787,5956,6050,6051,7233,7234,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8907],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5759,5768,5787,5956,6050,6051,7233,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8907,8908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8893],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5468,5759,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,4147,5325,6050,6051,7235,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8895],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7235,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8897],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4464,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7996],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,4141,4475,5325,6050,6051,7232,7235,7244,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8899,8900,8901,8902,8903],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7235,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7235,7236,7237,7238,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,4464,6050,6051,7232,7235,7240,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7232,7235,7237,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6050,6051,7232,7238,7241,7243,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8891,8892,8894,8896,8898,8904],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7246,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4458,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,7248,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,7248,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8913,8914],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,6050,6051,7246,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8912],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,1089,4127,4147,4464,4475,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,7268,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,6020,6050,6051,7249,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5512,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,6050,6051,7249,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8918,8919],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4464,5865,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4418,5325,5787,5865,5901,6037,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5768,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4418,4475,5787,5806,5865,6020,6037,6050,6051,7033,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8926],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5325,5865,6037,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8927],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6037,6050,6051,7251,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8925,8927,8928],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4487,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7251,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8929],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5325,6038,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,1089,4127,4147,5325,5787,6020,6050,6051,6534,6926,6928,7253,7254,7256,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8281,8664,8922,8923],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4147,5759,6050,6051,7256,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8933],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,6050,6051,7254,7255,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,7256,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8934],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,5806,5865,6050,6051,7253,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4141,4147,4418,5390,5806,5865,6020,6050,6051,7254,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5390,6050,6051,7254,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8922],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,5787,5865,5956,6050,6051,6817,7033,7123,7145,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7333,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,6050,6051,7333,7334,7490,7492,7495,7502,7517,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5759,6050,6051,7532,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,4127,4147,5787,6050,6051,7519,7521,7522,7530,7531,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9072],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,4393,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,7519,7523,7524,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,4127,4147,5787,6050,6051,7519,7520,7521,7526,7527,7530,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9068,9069],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4382,4393,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,6050,6051,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7558,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5765,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5538,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6050,6051,6804,7502,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,4430,5346,6047,6050,6051,7502,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,5812,6050,6051,7502,7593,7594,7595,7597,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7502,7546,7594,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5815,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7591,7592,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7591,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7605,7606,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6055,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7610,7611,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,4393,6050,6051,6055,7597,7613,7614,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6047,6048,6050,6051,7333,7597,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7731,7732],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6047,6050,6051,7333,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7732],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6047,6050,6051,7333,7591,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7733],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6047,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6047,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6049,6050,6051,7502,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9083],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7597,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4464,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,4309,4310,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7736],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6055,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7722],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6055,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7728],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4317,4382,4393,5558,6050,6051,6055,7596,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7741],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7740,7741,7742],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7591,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7741,7743],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7745],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7591,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7745,7746],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7502,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6589,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7748],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4382,4418,4443,6050,6051,6117,7591,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7748,7749,7750],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4430,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7753],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7753,7754,7755,7759],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7753],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6905,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7756],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7756,7757,7758],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,7502,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7754,7756],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5889,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,460,486,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,446,475,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,460,473,486,1089,4147,4475,5325,6050,6051,6804,7495,7502,7517,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8063],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,1089,4147,6050,6051,7502,7517,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8064],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975,7991,7995],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4127,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7985,7991,7998],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,473,486,1089,4147,5325,5865,6020,6050,6051,6102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,5325,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,448,486,1089,4127,4147,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8939],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,1089,4147,4464,6050,6051,6804,7502,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7765],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5847,5865,6050,6051,7502,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7763],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7772],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5806,5847,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7775],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7779],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7782],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6055,7600,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7786],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7788],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7790,7791],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7793],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7795],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,4310,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7797,7798],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,5889,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7797],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4430,5865,6050,6051,7534,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,5865,6050,6051,7536,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,6050,6051,7541,7546,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,6050,6051,7535,7549,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,6050,6051,7537,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7547,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,6050,6051,7535,7537,7547,7549,7550,7551,7552,7557,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5865,6050,6051,7535,7548,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,6050,6051,7553,7554,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7553,7555,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7553,7554,7555,7556,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7553,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4487,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7813],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7809,7810,7811,7812],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7892],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,5828,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7906,7908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7811,7892,7897,7898,7908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7900,7908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7892,7908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7899,7905,7906,7907,7908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7892,7897,7898,7899,7901,7906,7907,7908,7909,7911,7912],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7813,7892,7906,7908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,5346,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7892,7905],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5828,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7891],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,4418,4443,5346,5571,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7810,7892,7906,7907,7909],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7892,7906,7907,7908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4443,5828,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7813,7894,7895,7896,7900,7907],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7896,7899,7906,7907,7908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7894,7895,7896,7900,7901,7902,7903,7904,7906],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7892,7895,7896,7906,7907,7908],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4412,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7813],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,4418,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7894],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7891],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4443,5346,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7810,7894],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7894,7895,7903],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,5690,5865,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,5690,6020,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7914],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,4147,4418,6050,6051,7558,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,4418,4443,5690,6050,6051,7540,7548,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7916,7917],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5889,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7722],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7916,7918],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7916,7918,7919,7920,7921],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,4147,4393,4418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4412,4418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7916],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,5956,6050,6051,6817,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7926],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,726,4147,4310,4443,6050,6051,7548,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7928],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,5346,6050,6051,7536,7543,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,6050,6051,7543,7544,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5346,6050,6051,7541,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4412,4443,6050,6051,7541,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7930],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,4430,4443,5812,6050,6051,7540,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5346,6050,6051,7536,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,6050,6051,7536,7542,7545,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4430,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4417,4443,5346,5865,5968,6011,6050,6051,7048,7540,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8829,9077],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7932],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,4487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,6050,6051,7502,7538,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7538,7539,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4443,6050,6051,7538,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7936],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6050,6051,7502,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7548,7558,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7941,7942,7943],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4138,4147,5865,5922,5954,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4138,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7940],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4138,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7938,7941,7942,7943,7945,7947],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4147,6050,6051,6817,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7940],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,4464,6050,6051,7536,7541,7543,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,7543,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7949,7950],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7949,7950,7951],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6095,6096,6097,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7954,7956],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4443,5346,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7955],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6151,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6154,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6125,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6145,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6148,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6157,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6139,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6132,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6066,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6052,6115,6124,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6115,6122,6123,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6132,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6052,6122,6123,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6139,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6142,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6052,6143,6144,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6145,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6118,6122,6123,6142,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6148,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6151,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6154,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6122,6157,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4464,6050,6051,6954,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7977,7980],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5787,5806,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5806,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5865,6050,6051,6968,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,6954,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4141,4147,5390,5787,6050,6051,6954,7084,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7976,7977,7980,7981,7982,7983,7984],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7988],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5759,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975,7988,7989],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5759,5768,5865,6050,6051,6954,7084,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975,7976,7982],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975,7976,7987,7990,7992],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4464,5787,6050,6051,6954,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975,7986,7993,7994],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4141,4147,4479,5390,5865,5889,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975,7976,7987,7990],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5889,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975,7991],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,6954,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5390,5806,6050,6051,6954,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7976,7997],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,4461,5787,6011,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4430,5787,6011,6050,6051,6954,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7977,7978,7979],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7978],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7980,7985,7987,7995,7996,7998],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5889,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7976],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7976],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7988,8002],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,6050,6051,6976,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7975],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7991,7999,8000],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7977],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7974],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4418,4430,5690,5815,5865,5889,6050,6051,6954,6968,6976,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7969,7970,7971],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4430,4443,5815,5828,5865,5889,5968,6050,6051,6954,6960,6968,6976,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7969,7970],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7971,7972],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7970,7973],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5828,5968,6050,6051,6976,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6960,6976,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,5815,6050,6051,6971,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6972,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6969,6970,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4303,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6971,6973,6974,6975,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6974,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4393,4430,4443,5806,6050,6051,6971,6973,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,5815,5895,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5896,5897,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4382,5806,5815,5895,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5893,5894,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4303,5806,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5895,5898,5900,6019,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4418,5690,5853,5860,5895,5899,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5806,5895,5898,5899,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5899,5900,6018,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4393,4430,4443,5346,5895,5898,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,5815,6050,6051,6943,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6944,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6941,6942,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4303,5806,6050,6051,6940,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6943,6945,6955,6956,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6955,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4430,4443,5806,6050,6051,6943,6945,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,5815,6050,6051,6963,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6964,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6961,6962,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6963,6965,6966,6967,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6966,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4393,4430,4443,5806,6050,6051,6963,6965,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,5828,5865,5889,5892,5968,6020,6050,6051,6954,6957,6960,6968,6976,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,5828,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4136,4141,4147,4150,4430,4443,5810,5823,5825,5830,5866,5872,5873,5877,5889,5890,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4136,5806,5829,5830,5890,5891,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4136,4147,4150,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4135,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,5806,6050,6051,6943,6947,6952,6955,6958,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6958,6959,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6947,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4135,4147,4150,5830,5855,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,4443,5815,5895,5896,5899,5900,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4135,5806,5831,5832,5837,5838,5855,5856,5866,5892,5901,5902,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4135,4141,4393,4430,5815,5836,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4151,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,5796,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5908,5909,5910,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5838,5847,5908,5909,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5906,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5906,5907,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5847,5908,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4151,4162,4448,5789,5790,5791,5795,5796,5797,5798,5805,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4153,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4153,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4153,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4151,4153,4154,4155,4156,4157,4158,4159,4160,4161,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4151,4152,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4152,4153,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5839,5845,5846,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5815,5839,5845,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,5839,5840,5844,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4150,4430,4443,5839,5846,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,5796,5799,5800,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4382,4443,5796,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,5796,5803,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5796,5801,5802,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5796,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5799,5800,5801,5802,5803,5804,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4458,5796,5799,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4153,4395,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4153,5792,5793,5794,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4151,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4152,5788,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4152,5787,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4153,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4163,4304,4305,4394,4395,4444,4445,4446,4447,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4430,4443,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4153,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,5815,6050,6051,6945,6947,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6948,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6940,6946,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6947,6949,6952,6953,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6950,6951,6952,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4430,4443,5806,6050,6051,6947,6949,6950,6951,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,5796,5805,6050,6051,6947,6949,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4443,5806,5810,5815,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5816,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5807,5808,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5807,5808,5809,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5807,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5810,5817,5827,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,5797,5810,5824,5825,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5823,5824,5825,5826,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4393,5806,5810,5823,5824,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,5796,5805,5817,5820,5823,5825,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4393,4418,4430,4443,5346,5806,5810,5815,5821,5822,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,5815,5820,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5346,5820,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5867,5868,5869,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5815,5820,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5818,5819,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4303,5806,5810,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5820,5870,5871,5872,5873,5875,5876,5967,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4153,5792,5810,5820,5827,5871,5873,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5822,5871,5872,5873,5874,5875,5876,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,5806,5810,5820,5822,5823,5867,5868,5871,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,4430,5796,5805,5815,5820,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4393,4430,4443,5806,5810,5815,5820,5822,5825,5871,5872,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,5810,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,5871,5873,5875,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4393,4430,4443,5346,5806,5820,5870,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,5806,5820,5825,5868,5870,5871,5872,5874,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5806,5815,5880,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5880,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5883,5884,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5878,5879,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5880,5882,5885,5888,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5886,5887,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4393,5806,5880,5882,5886,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4393,4430,4443,5346,5806,5880,5882,5884,5885,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5881,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5806,5815,5836,5847,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5838,5848,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5848,5849,5850,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5833,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5833,5834,5835,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5836,5851,5854,5860,5863,5864,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4153,5792,5836,5853,5858,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4303,5806,5831,5832,5836,5853,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5806,5836,5853,5857,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,4430,5836,5837,5851,5853,5857,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4393,4430,4443,5806,5836,5850,5851,5852,5853,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5815,5836,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5853,5857,5858,5859,5860,5861,5862,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,5806,5833,5836,5837,5838,5853,5855,5856,5857,5858,5859,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4135,4141,4147,4150,5806,5815,5837,5838,5852,5853,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5853,5858,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4393,4430,4443,5346,5690,5806,5833,5836,5837,5838,5851,5852,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7045,7046,7047,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6977,7081,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4430,5828,5892,5968,6050,6051,7081,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,5806,5865,6050,6051,7081,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5997,6050,6051,6937,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,6050,6051,6977,6978,6988,6993,6997,7007,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5997,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6985,6986,7010,7011,7012,7014,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5997,6050,6051,6981,6985,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,6050,6051,6981,6983,6984,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,6050,6051,6937,6977,6981,6984,6985,6987,7008,7009,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,6050,6051,6985,7010,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6981,6985,6986,7011,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4393,4475,5538,5558,5768,5787,5806,5865,6050,6051,6981,6982,6997,7001,7004,7012,7013,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,6050,6051,6981,6982,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6982,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6995,6997,7016,7017,7018,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,6050,6051,6995,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7016,7017,7018,7019,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7021,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6995,7022,7024,7026,7027,7028,7029,7030,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5769,6050,6051,6995,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7021,7022,7023,7024,7025,7026,7027,7028,7029,7030,7031,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,6050,6051,7021,7023,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5759,5768,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5780,6050,6051,7021,7023,7025,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5780,6050,6051,7021,7025,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7021,7023,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5500,5759,5768,6050,6051,7021,7025,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6995,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6981,6983,6995,6997,7013,7015,7020,7032,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5325,6050,6051,6977,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5500,5759,5768,6050,6051,6977,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4393,4461,5500,6050,6051,6977,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4150,5325,5500,5768,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,5500,6050,6051,6977,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5500,5538,6050,6051,6977,6978,6983,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6978,6988,6989,6990,6991,6992,6993,6998,7000,7001,7003,7004,7005,7006,7007,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5769,5780,6050,6051,6977,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,6050,6051,6977,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,6050,6051,6977,6997,7007,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4382,4461,5538,5769,5780,6050,6051,6977,6978,6983,6989,6990,6991,6992,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4418,4475,5759,5768,6050,6051,6977,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,6977,6978,6988,6993,6997,6998,6999,7000,7001,7002,7003,7004,7005,7006,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5769,6050,6051,6977,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5500,6050,6051,6977,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4393,4475,5500,5538,6050,6051,6982,6990,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,5538,6050,6051,6983,6990,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,6050,6051,6981,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6981,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6984,6994,6996,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6011,6050,6051,6980,7033,7048,7081,7083,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7036,7049,7062,7071,7072,7073,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7072,7073,7074,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7034,7071,7072,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7034,7071,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7034,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4393,4461,5500,5759,6050,6051,7049,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5503,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4464,5503,6050,6051,7034,7048,7049,7050,7051,7052,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7049,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7050,7051,7052,7053,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7059,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7034,7049,7058,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7049,7054,7060,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,7034,7035,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5997,6050,6051,7034,7035,7036,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4464,5503,6050,6051,7036,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5503,6050,6051,7034,7036,7037,7038,7039,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7036,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7037,7038,7039,7040,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7042,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7034,7036,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7036,7041,7043,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7044,7061,7070,7075,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7034,7035,7044,7058,7061,7070,7071,7075,7076,7080,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7077,7079,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,7077,7078,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5558,5768,6050,6051,7077,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,7062,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4464,5503,6050,6051,7062,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5503,6050,6051,7034,7062,7063,7064,7065,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7062,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7063,7064,7065,7066,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7068,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7034,7058,7062,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7062,7067,7069,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7034,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7056,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5503,6050,6051,7055,7057,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7034,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,7034,7049,7062,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5961,5962,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5806,5961,5962,5963,5965,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5806,5961,5962,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5961,5963,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5500,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5962,5963,5964,5965,5966,5969,5970,5971,5972,5973,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5500,5806,5961,5962,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5500,5806,5961,5966,5968,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5961,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,5971,5972,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5500,5806,5865,5961,5964,5966,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5961,5963,5976,6005,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6007,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5961,5976,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5409,6005,6006,6008,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5990,5994,6003,6004,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5961,5989,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5409,5961,5989,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5991,5992,5993,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5409,5989,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5961,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5961,5990,6003,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5409,5961,5989,5990,5997,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4141,5961,5978,5982,5990,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,5961,5989,5990,5994,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5995,5996,5998,5999,6000,6001,6002,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5409,5961,5989,5990,5994,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5325,5409,5961,5978,5982,5990,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5961,5989,5990,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5982,5987,5988,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5983,5984,5985,5986,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5806,5961,5975,5978,5982,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5961,5978,5982,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5961,5978,5982,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5961,5978,5982,5987,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5961,5963,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5979,5980,5981,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,5961,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5961,5974,5977,5989,6009,6010,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5806,5969,5970,5971,5974,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5975,5976,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,5961,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4418,5961,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4141,4147,4461,4479,5390,5500,5783,5806,6050,6051,6937,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6938,6939,6979,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,6050,6051,6977,6978,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4393,4475,5500,5892,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7082,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5390,5828,6050,6051,6977,6980,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7107,7108,7109,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4317,4382,4393,4475,5500,5769,5780,5956,6050,6051,7093,7097,7107,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4393,4475,5500,5759,5768,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,5500,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5503,5903,5956,6050,6051,7084,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7085,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4475,5500,5783,5903,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5806,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4475,5956,6050,6051,7096,7110,7111,7117,7127,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5865,5903,5956,6050,6051,6977,7084,7091,7092,7094,7100,7105,7120,7127,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4475,5956,6050,6051,7128,7129,7130,7131,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,5512,5780,5865,5956,6050,6051,7096,7105,7111,7117,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5325,5865,5903,5939,5956,6050,6051,7087,7089,7090,7091,7092,7105,7110,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4475,5500,5956,6050,6051,7117,7119,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,4147,4475,5500,5512,5903,5939,5956,6050,6051,7087,7110,7112,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5956,6050,6051,7105,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7113,7114,7116,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,4147,5500,5512,5865,5903,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4475,5500,5512,5865,5903,5956,6050,6051,6977,7084,7087,7091,7092,7094,7098,7099,7100,7106,7110,7112,7115,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4475,5956,6050,6051,7119,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,4475,5768,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,5769,5956,6050,6051,7123,7124,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4382,4393,5769,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5865,5956,6050,6051,7095,7111,7117,7118,7120,7124,7125,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4393,5768,5903,5956,6050,6051,7087,7088,7089,7090,7091,7092,7093,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5865,5903,5956,6050,6051,6977,7084,7087,7091,7092,7094,7098,7099,7100,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5325,6050,6051,7102,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,5956,6050,6051,7098,7101,7103,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6936,7086,7093,7094,7095,7096,7104,7126,7132,7144,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5500,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5903,6050,6051,6977,7084,7091,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5903,6050,6051,6977,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7084,7135,7138,7139,7142,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5828,5892,6050,6051,6977,7084,7133,7134,7135,7136,7137,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,6050,6051,7133,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7133,7138,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,6050,6051,7084,7133,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7133,7134,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,6050,6051,6977,7133,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7084,7133,7140,7141,7143,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,5503,6050,6051,7133,7139,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4317,4475,5768,5786,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,5780,6050,6051,7106,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4418,5865,6050,6051,6811,6812,6813,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,6050,6051,6811,6812,6813,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6811,6812,6814,6816,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,5787,5806,5865,6020,6050,6051,6811,6812,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,6050,6051,6811,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,6050,6051,6812,6814,6815,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7087,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5903,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7099,7105,7119,7127,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8007],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5956,6050,6051,7099,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5806,5865,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5956,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5806,5865,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7121,7122,7145,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7097,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,5828,5903,5905,5933,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5954,5955,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5919,5921,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5919,5920,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5903,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,5904,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5904,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5912,5929,5930,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5913,5914,5915,5916,5928,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,5913,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,5769,5913,5914,5925,5926,5927,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,5913,5914,5925,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5945,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5903,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5904,5930,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5903,5941,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5917,5926,5941,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5923,5947,5948,5949,5950,5951,5952,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5904,5929,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4430,5815,5828,5865,5889,5892,5903,5904,5912,5917,5922,5924,5925,5929,5942,5943,5946,5947,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4382,5828,5865,5892,5903,5912,5922,5925,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,5903,5904,5922,5923,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,5903,5905,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4418,5690,5806,5865,5903,5912,5923,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4393,5811,5847,5865,5903,5905,5911,5912,5913,5914,5918,5925,5926,5928,5932,5934,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4393,5865,5903,5904,5905,5918,5932,5935,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,5903,5905,5912,5913,5917,5925,5932,5934,5935,5936,5939,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5905,5918,5924,5925,5933,5934,5935,5936,5940,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5828,5903,5904,5905,5912,5918,5925,5931,5933,5935,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4150,4418,5828,5865,5892,5903,5905,5912,5915,5917,5918,5924,5935,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4141,4147,4393,4430,4443,5903,5912,5917,5918,5925,5929,5932,5933,5934,5935,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4393,5769,5913,5914,5924,5928,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5903,5925,5928,5942,5943,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5769,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5828,5913,5914,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5904,5917,5926,5927,5931,5941,5942,5943,5944,5946,5953,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5937,5938,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5811,5812,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5811,5812,5813,5814,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5346,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5760,5761,5762,5763,5764,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4426,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,4430,5765,5769,5771,5815,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5770,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4427,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4396,4397,4418,4426,4427,4428,4429,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4419,4420,4421,4422,4423,4424,4425,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4318,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4317,4318,4319,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4318,4319,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4328,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4311,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4361,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4382,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4306,4307,4308,4311,4312,4313,4314,4320,4321,4322,4326,4327,4328,4329,4360,4362,4363,4364,4365,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4317,4322,4325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4359,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4313,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4466,4467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,4476,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4465,4466,4467,4468,4469,4470,4473,4474,4476,4477,4478,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4465,4467,4470,4473,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,4476,4477,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4465,4467,4468,4469,4470,4472,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,4466,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4461,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4382,4393,5325,5421,5765,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,9108],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,5425,5754,5768,5771,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4393,4461,5499,5769,5772,5773,5774,5775,5776,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5772,5773,5774,5775,5776,5777,5778,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4461,5468,5469,5470,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5436,5769,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5425,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5427,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5769,5771,5779,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,5504,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4150,4418,5325,5391,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5402,5409,5500,5503,5504,5505,5506,5507,5508,5509,5510,5511,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5402,5501,5502,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5431,5432,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,5431,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5428,5429,5430,5432,5433,5434,5435,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4393,4475,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4393,4475,5325,5431,5433,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5493,5494,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5493,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5496,5497,5498,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4464,5374,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5473,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5411,5475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,5411,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5415,5416,5417,5418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4461,5374,5468,5469,5470,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5471,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4393,4461,5374,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5411,5414,5419,5420,5421,5422,5425,5427,5436,5472,5474,5475,5476,5477,5481,5483,5484,5488,5491,5492,5495,5499,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5478,5479,5480,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5403,5404,5405,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,5403,5404,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5426,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4393,4461,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5489,5490,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5412,5413,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5423,5424,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5482,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4127,4461,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5485,5486,5487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5410,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,5391,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,752,1089,4461,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5392,5393,5397,5398,5399,5400,5401,5406,5407,5408,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,5391,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5388,5391,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5392,5397,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4393,5392,5393,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,5402,5405,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5396,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,5784,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5784,5785,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5586,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5558,5754,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4382,4393,4475,5467,5468,5469,5470,5546,5549,5552,5556,5558,5580,5585,5587,5648,5649,5650,5670,5672,5673,5692,5693,5694,5699,5701,5702,5713,5721,5723,5727,5730,5732,5734,5741,5753,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4393,5572,5573,5579,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5325,5573,5574,5575,5579,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4475,5573,5574,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5573,5576,5577,5578,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4475,5325,5574,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5546,5581,5582,5583,5584,5585,5587,5588,5593,5595,5596,5597,5599,5600,5601,5624,5635,5638,5643,5644,5645,5647,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5585,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5469,5470,5573,5585,5587,5598,5648,5649,5650,5670,5673,5691,5694,5699,5701,5754,5755,5757,5758,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5556,5588,5593,5596,5693,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4317,4393,5467,5587,5593,5671,5693,5699,5702,5704,5706,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5556,5588,5593,5596,5693,5702,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5587,5593,5596,5693,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5556,5588,5593,5596,5693,5702,5704,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5587,5593,5693,5705,5711,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5593,5693,5702,5704,5716,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5588,5593,5596,5597,5599,5691,5693,5698,5699,5702,5717,5718,5719,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5724,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5586,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5586,5590,5591,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5586,5589,5590,5592,5724,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5587,5593,5693,5702,5717,5728,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5556,5703,5707,5708,5709,5710,5712,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5717,5721,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,192,194,486,5467,5468,5551,5714,5715,5722,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5586,5589,5694,5702,5725,5726,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5729,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4317,5467,5468,5558,5587,5593,5693,5731,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5720,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5468,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5727,5733,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,192,194,486,5467,5551,5590,5714,5715,5734,5740,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4317,4393,5467,5468,5556,5558,5586,5587,5588,5593,5596,5597,5599,5671,5690,5691,5692,5693,5694,5698,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5468,5546,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5374,5467,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5594,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5589,5590,5592,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,5467,5468,5598,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5587,5588,5693,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8010,8011],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5588,5597,5599,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5587,5596,5693,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5586,5587,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8010],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5593,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5586,5587,5588,5593,5596,5597,5599,5693,5698,5705,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5587,5593,5600,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4393,5467,5544,5546,5586,5697,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4317,5558,5586,5590,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5468,5687,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4147,4475,5470,5585,5651,5653,5654,5656,5657,5660,5668,5681,5682,5688,5689,5699,5700,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5549,5635,5645,5672,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4147,4475,5468,5469,5470,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5467,5468,5469,5470,5546,5549,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5673,5675,5680,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,192,194,486,5467,5468,5556,5635,5674,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5549,5673,5676,5678,5679,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5468,5588,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5468,5583,5584,5742,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5551,5714,5715,5743,5751,5752,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5468,5583,5584,5670,5742,5750,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,192,194,486,5467,5468,5584,5740,5742,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5391,5467,5468,5556,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4150,4418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,5756,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5467,5573,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5558,5586,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5781,5782,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,4464,4479,4480,5374,5390,5512,5534,5538,5759,5768,5780,5783,5786,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4418,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4418,4451,4487,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4393,4479,4480,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4461,4462,4489,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4127,4451,5325,5374,5376,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4461,4462,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4449,4451,5366,5375,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1034,1089,4127,4451,4458,5325,5326,5365,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4451,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4449,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4461,5356,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4147,4450,4451,4461,4488,4489,5347,5349,5350,5351,5352,5353,5354,5355,5358,5359,5360,5361,5362,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4450,4451,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4458,4488,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4471,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4451,4452,4459,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4382,4443,4451,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5371,5383,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4451,4460,4461,4472,5365,5366,5367,5368,5369,5370,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4451,4460,5371,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4451,4460,5378,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4451,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5378,5379,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4147,4451,4458,5348,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4451,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4451,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4451,5371,5379,5387,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4451,4461,5325,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4451,4452,4458,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4147,5326,5357,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4418,4471,4472,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,5349,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,5362,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,473,486,4451,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,1089,4147,4451,4460,4461,5370,5371,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4449,4450,4451,4452,4459,4460,4462,4463,4471,4472,4481,4488,4490,5352,5357,5361,5365,5366,5367,5368,5369,5370,5372,5373,5375,5376,5377,5380,5381,5382,5384,5385,5386,5388,5389,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4138,4141,4147,4449,4451,5346,5347,5363,5364,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4147,4150,4451,5379,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4451,5379,5387,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4449,4450,4451,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1019,4138,4147,4450,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5513,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5535,5536,5537,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4127,4475,5534,5535,5536,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5534,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5765,5766,5767,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,1089,4382,4475,5759,5765,5766,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,924,1089,4382,4475,5759,5765,5766,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[84,98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,924,5759,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,520,954,1052,1089,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,4480,5374,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6064,6116,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8019],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6064,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6053,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6052,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6064,6067,6116,6118,6120,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8021],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6055,6116,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8022],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8019],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6054,6055,6056,6064,6066,6116,6117,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6064,6066,6118,6119,6121,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6054,6057,6064,6065,6066,6116,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6056,6057,6064,6065,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6054,6064,6065,6066,6120,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6064,6116,6122,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8028],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6054,6064,6066,6067,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8021],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6064,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,8021,8030],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,6050,6051,6066,6067,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720],[98,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,486,5812,6050,6051,6068,7630,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"b00895f96d065b1edb33292a569996d92dc3fdaa999c71812050a254a34d569e","affectsGlobalScope":true},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"51409be337d5cdf32915ace99a4c49bf62dbc124a49135120dfdff73236b0bad","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"631eff75b0e35d1b1b31081d55209abc43e16b49426546ab5a9b40bdd40b1f60","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b80c6175da9de59bace50a72c2d68490d4ab5b07016ff5367bc7ba33cf2f219","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b042aa5d277ad6963e2837179fd2f8fbb01968ac67115b0833c0244e93d1d50","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"23cfd70b42094e54cc3c5dab996d81b97e2b6f38ccb24ead85454b8ddfe2fc4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"c4a806152acbef81593f96cae6f2b04784d776457d97adbe2694478b243fcf03","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"c60db41f7bee80fb80c0b12819f5e465c8c8b465578da43e36d04f4a4646f57d","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"ba1f814c22fd970255ddd60d61fb7e00c28271c933ab5d5cc19cd3ca66b8f57c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"295f068af94245ee9d780555351bef98adfd58f8baf0b9dadbc31a489b881f8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"09d479208911ac3ac6a7c2fe86217fc1abe6c4f04e2d52e4890e500699eeab32","affectsGlobalScope":true,"impliedFormat":1},{"version":"27d8987fd22d92efe6560cf0ce11767bf089903ffe26047727debfd1f3bf438b","affectsGlobalScope":true,"impliedFormat":1},{"version":"578d8bb6dcb2a1c03c4c3f8eb71abc9677e1a5c788b7f24848e3138ce17f3400","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"f23dfbb07f71e879e5a23cdd5a1f7f1585c6a8aae8c250b6eba13600956c72dd","impliedFormat":1},{"version":"b2ba94df355e65e967875bf67ea1bbf6d5a0e8dc141a3d36d5b6d7c3c0f234b6","impliedFormat":1},{"version":"115b2ad73fa7d175cd71a5873d984c21593b2a022f1a2036cc39d9f53629e5dc","impliedFormat":1},{"version":"1be330b3a0b00590633f04c3b35db7fa618c9ee079258e2b24c137eb4ffcd728","impliedFormat":1},{"version":"45a9b3079cd70a2668f441b79b4f4356b4e777788c19f29b6f42012a749cfea6","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"829b9e6028b29e6a8b1c01ddb713efe59da04d857089298fa79acbdb3cfcfdef","impliedFormat":1},{"version":"24f8562308dd8ba6013120557fa7b44950b619610b2c6cb8784c79f11e3c4f90","impliedFormat":1},{"version":"5d8717b437b9d6afeb4da84b9082db35cafce3dfd025bc7c9ad7abbe50fa2778","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"496bbf339f3838c41f164238543e9fe5f1f10659cb30b68903851618464b98ba","impliedFormat":1},{"version":"5178eb4415a172c287c711dc60a619e110c3fd0b7de01ed0627e51a5336aa09c","impliedFormat":1},{"version":"ca6e5264278b53345bc1ce95f42fb0a8b733a09e3d6479c6ccfca55cdc45038c","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"fb1d8e814a3eeb5101ca13515e0548e112bd1ff3fb358ece535b93e94adf5a3a","impliedFormat":1},{"version":"ffa495b17a5ef1d0399586b590bd281056cee6ce3583e34f39926f8dcc6ecdb5","impliedFormat":1},{"version":"98b18458acb46072947aabeeeab1e410f047e0cacc972943059ca5500b0a5e95","impliedFormat":1},{"version":"361e2b13c6765d7f85bb7600b48fde782b90c7c41105b7dab1f6e7871071ba20","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"b6db56e4903e9c32e533b78ac85522de734b3d3a8541bf24d256058d464bf04b","impliedFormat":1},{"version":"24daa0366f837d22c94a5c0bad5bf1fd0f6b29e1fae92dc47c3072c3fdb2fbd5","impliedFormat":1},{"version":"570bb5a00836ffad3e4127f6adf581bfc4535737d8ff763a4d6f4cc877e60d98","impliedFormat":1},{"version":"889c00f3d32091841268f0b994beba4dceaa5df7573be12c2c829d7c5fbc232c","impliedFormat":1},{"version":"65f43099ded6073336e697512d9b80f2d4fec3182b7b2316abf712e84104db00","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"27ab780875bcbb65e09da7496f2ca36288b0c541abaa75c311450a077d54ec15","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"380647d8f3b7f852cca6d154a376dbf8ac620a2f12b936594504a8a852e71d2f","impliedFormat":1},{"version":"208c9af9429dd3c76f5927b971263174aaa4bc7621ddec63f163640cbd3c473c","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"a23185bc5ef590c287c28a91baf280367b50ae4ea40327366ad01f6f4a8edbc5","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"002eae065e6960458bda3cf695e578b0d1e2785523476f8a9170b103c709cd4f","impliedFormat":1},{"version":"c83bb0c9c5645a46c68356c2f73fdc9de339ce77f7f45a954f560c7e0b8d5ebb","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"72179f9dd22a86deaad4cc3490eb0fe69ee084d503b686985965654013f1391b","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"6a148329edecbda07c21098639ef4254ef7869fb25a69f58e5d6a8b7b69d4236","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"f63ab283a1c8f5c79fabe7ca4ef85f9633339c4f0e822fce6a767f9d59282af2","impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a54c996c8870ef1728a2c1fa9b8eaec0bf4a8001cd2583c02dd5869289465b10","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"3754982006a3b32c502cff0867ca83584f7a43b1035989ca73603f400de13c96","impliedFormat":1},{"version":"a30ae9bb8a8fa7b90f24b8a0496702063ae4fe75deb27da731ed4a03b2eb6631","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"50b5bc34ce6b12eccb76214b51aadfa56572aa6cc79c2b9455cdbb3d6c76af1d","impliedFormat":1},{"version":"b7e16ef7f646a50991119b205794ebfd3a4d8f8e0f314981ebbe991639023d0e","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"e9dd71cf12123419c60dab867d44fbee5c358169f99529121eaef277f5c83531","impliedFormat":1},{"version":"5b6a189ba3a0befa1f5d9cb028eb9eec2af2089c32f04ff50e2411f63d70f25d","impliedFormat":1},{"version":"d6e73f8010935b7b4c7487b6fb13ea197cc610f0965b759bec03a561ccf8423a","impliedFormat":1},{"version":"174f3864e398f3f33f9a446a4f403d55a892aa55328cf6686135dfaf9e171657","impliedFormat":1},{"version":"824c76aec8d8c7e65769688cbee102238c0ef421ed6686f41b2a7d8e7e78a931","impliedFormat":1},{"version":"75b868be3463d5a8cfc0d9396f0a3d973b8c297401d00bfb008a42ab16643f13","impliedFormat":1},{"version":"15a234e5031b19c48a69ccc1607522d6e4b50f57d308ecb7fe863d44cd9f9eb3","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"6dcf60530c25194a9ee0962230e874ff29d34c59605d8e069a49928759a17e0a","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"1a42d2ec31a1fe62fdc51591768695ed4a2dc64c01be113e7ff22890bebb5e3f","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"0c7c947ff881c4274c0800deaa0086971e0bfe51f89a33bd3048eaa3792d4876","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"15b36126e0089bfef173ab61329e8286ce74af5e809d8a72edcafd0cc049057f","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"ad10d4f0517599cdeca7755b930f148804e3e0e5b5a3847adce0f1f71bbccd74","impliedFormat":1},{"version":"1042064ece5bb47d6aba91648fbe0635c17c600ebdf567588b4ca715602f0a9d","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"72d63643a657c02d3e51cd99a08b47c9b020a565c55f246907050d3c8a5e77fb","impliedFormat":1},{"version":"1d415445ea58f8033ba199703e55ff7483c52ac6742075b803bd3e7bbe9f5d61","impliedFormat":1},{"version":"d6406c629bb3efc31aedb2de809bef471e475c86c7e67f3ef9b676b5d7e0d6b2","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"24428762d0c97b44c4784d28eee9556547167c4592d20d542a79243f7ca6a73f","impliedFormat":1},{"version":"8c030e515014c10a2b98f9f48408e3ba18023dfd3f56e3312c6c2f3ae1f55a16","impliedFormat":1},{"version":"dafc31e9e8751f437122eb8582b93d477e002839864410ff782504a12f2a550c","impliedFormat":1},{"version":"754498c5208ce3c5134f6eabd49b25cf5e1a042373515718953581636491f3c3","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"f56bdc6884648806d34bc66d31cdb787c4718d04105ce2cd88535db214631f82","impliedFormat":1},{"version":"633d58a237f4bb25ec7d565e4ffa32cecdcee8660ac12189c4351c52557cee9e","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"ce791f6ea807560f08065d1af6014581eeb54a05abd73294777a281b6dfd73c2","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"49f95e989b4632c6c2a578cc0078ee19a5831832d79cc59abecf5160ea71abad","impliedFormat":1},{"version":"9666533332f26e8995e4d6fe472bdeec9f15d405693723e6497bf94120c566c8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"e17cd049a1448de4944800399daa4a64c5db8657cc9be7ef46be66e2a2cd0e7c","impliedFormat":1},{"version":"43fa6ea8714e18adc312b30450b13562949ba2f205a1972a459180fa54471018","impliedFormat":1},{"version":"6e89c2c177347d90916bad67714d0fb473f7e37fb3ce912f4ed521fe2892cd0d","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"4d4927cbee21750904af7acf940c5e3c491b4d5ebc676530211e389dd375607a","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"8a97e578a9bc40eb4f1b0ca78f476f2e9154ecbbfd5567ee72943bab37fc156a","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"2d7db1d73456e8c5075387d4240c29a2a900847f9c1bff106a2e490da8fbd457","impliedFormat":1},{"version":"2b15c805f48e4e970f8ec0b1915f22d13ca6212375e8987663e2ef5f0205e832","impliedFormat":1},{"version":"f22d05663d873ee7a600faf78abb67f3f719d32266803440cf11d5db7ac0cab2","impliedFormat":1},{"version":"d93c544ad20197b3976b0716c6d5cd5994e71165985d31dcab6e1f77feb4b8f2","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"a8b1c79a833ee148251e88a2553d02ce1641d71d2921cce28e79678f3d8b96aa","impliedFormat":1},{"version":"126d4f950d2bba0bd45b3a86c76554d4126c16339e257e6d2fabf8b6bf1ce00c","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"2d3cc2211f352f46ea6b7cf2c751c141ffcdf514d6e7ae7ee20b7b6742da313f","impliedFormat":1},{"version":"c75445151ff8b77d9923191efed7203985b1a9e09eccf4b054e7be864e27923d","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"fa8a8fbf91ee2a4779496225f0312aac6635b0f21aa09cdafa4283fe32d519c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e8aef93d79b000deb6ec336b5645c87de167168e184e84521886f9ecc69a4b5","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"88e9caa9c5d2ba629240b5913842e7c57c5c0315383b8dc9d436ef2b60f1c391","impliedFormat":1},{"version":"ddf68b3b62e49cf6fd93ba2351ad0fbbcf62ca2d5d7afc9f186114e4b481c3cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"de7052bfee2981443498239a90c04ea5cc07065d5b9bb61b12cb6c84313ad4ef","impliedFormat":1},{"version":"a3e7d932dc9c09daa99141a8e4800fc6c58c625af0d4bbb017773dc36da75426","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"4a2edd238d9104eac35b60d727f1123de5062f452b70ed8e0366cb36387dfdfd","impliedFormat":1},{"version":"ca921bf56756cb6fe957f6af693a35251b134fb932dc13f3dfff0bb7106f80b4","impliedFormat":1},{"version":"fee92c97f1aa59eb7098a0cc34ff4df7e6b11bae71526aca84359a2575f313d8","impliedFormat":1},{"version":"0bd0297484aacea217d0b76e55452862da3c5d9e33b24430e0719d1161657225","impliedFormat":1},{"version":"2ab6d334bcbf2aff3acfc4fd8c73ecd82b981d3c3aa47b3f3b89281772286904","impliedFormat":1},{"version":"d07cbc787a997d83f7bde3877fec5fb5b12ce8c1b7047eb792996ed9726b4dde","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"4805f6161c2c8cefb8d3b8bd96a080c0fe8dbc9315f6ad2e53238f9a79e528a6","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"49179c6a23701c642bd99abe30d996919748014848b738d8e85181fc159685ff","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"45490817629431853543adcb91c0673c25af52a456479588b6486daba34f68bb","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"8514c62ce38e58457d967e9e73f128eedc1378115f712b9eef7127f7c88f82ae","impliedFormat":1},{"version":"f1289e05358c546a5b664fbb35a27738954ec2cc6eb4137350353099d154fc62","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"1d17ba45cfbe77a9c7e0df92f7d95f3eefd49ee23d1104d0548b215be56945ad","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"e16344db9b8ee59d41abdb3a61e4470955b5712c0ee869fb47112e152aabe142","impliedFormat":1},{"version":"46273e8c29816125d0d0b56ce9a849cc77f60f9a5ba627447501d214466f0ff3","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"985153f0deb9b4391110331a2f0c114019dbea90cba5ca68a4107700796e0d75","impliedFormat":1},{"version":"3af3584f79c57853028ef9421ec172539e1fe01853296dc05a9d615ade4ffaf6","impliedFormat":1},{"version":"f82579d87701d639ff4e3930a9b24f4ee13ca74221a9a3a792feb47f01881a9c","impliedFormat":1},{"version":"d7e5d5245a8ba34a274717d085174b2c9827722778129b0081fefd341cca8f55","impliedFormat":1},{"version":"d9d32f94056181c31f553b32ce41d0ef75004912e27450738d57efcd2409c324","impliedFormat":1},{"version":"752513f35f6cff294ffe02d6027c41373adf7bfa35e593dbfd53d95c203635ee","impliedFormat":1},{"version":"6c800b281b9e89e69165fd11536195488de3ff53004e55905e6c0059a2d8591e","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"1a7e2ea171726446850ec72f4d1525d547ff7e86724cc9e7eec509725752a758","impliedFormat":1},{"version":"8c901126d73f09ecdea4785e9a187d1ac4e793e07da308009db04a7283ec2f37","impliedFormat":1},{"version":"db97922b767bd2675fdfa71e08b49c38b7d2c847a1cc4a7274cb77be23b026f1","impliedFormat":1},{"version":"aab290b8e4b7c399f2c09b957666fc95335eb4522b2dd9ead1bf0cb64da6d6ee","impliedFormat":1},{"version":"94fe3281392e1015b22f39535878610b4fa6f1388dc8d78746be3bc4e4bb8950","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"06c25ddfc2242bd06c19f66c9eae4c46d937349a267810f89783680a1d7b5259","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"bd4131091b773973ca5d2326c60b789ab1f5e02d8843b3587effe6e1ea7c9d86","impliedFormat":1},{"version":"c7f6485931085bf010fbaf46880a9b9ec1a285ad9dc8c695a9e936f5a48f34b4","impliedFormat":1},{"version":"14f6b927888a1112d662877a5966b05ac1bf7ed25d6c84386db4c23c95a5363b","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"0427df5c06fafc5fe126d14b9becd24160a288deff40e838bfbd92a35f8d0d00","impliedFormat":1},{"version":"90c54a02432d04e4246c87736e53a6a83084357acfeeba7a489c5422b22f5c7a","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"83fe880c090afe485a5c02262c0b7cdd76a299a50c48d9bde02be8e908fb4ae6","impliedFormat":1},{"version":"0a372c2d12a259da78e21b25974d2878502f14d89c6d16b97bd9c5017ab1bc12","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"6511e4503cf74c469c60aafd6589e4d14d5eb0a25f9bf043dcbecdf65f261972","impliedFormat":1},{"version":"ec1ca97598eda26b7a5e6c8053623acbd88e43be7c4d29c77ccd57abc4c43999","impliedFormat":1},{"version":"6e2261cd9836b2c25eecb13940d92c024ebed7f8efe23c4b084145cd3a13b8a6","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"a47e6d954d22dd9ebb802e7e431b560ed7c581e79fb885e44dc92ed4f60d4c07","impliedFormat":1},{"version":"f019e57d2491c159d47a107fd90219a1734bdd2e25cd8d1db3c8fae5c6b414c4","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"d1c9bf292a54312888a77bb19dba5e2503ad803f5393beafd45d78d2f4fe9b48","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"cb8d8ef7b9ce8ed3e6f1c814fcbf3f90dab0cb8863079236784fc350746e27c4","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"3be035da7bee86b4c3abf392e0edaa44fc6e45092995eefe36b39118c8a84068","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f828825d077c2fa0ea606649faeb122749273a353daab23924fe674e98ba44c","impliedFormat":1},{"version":"2896c2e673a5d3bd9b4246811f79486a073cbb03950c3d252fba10003c57411a","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"407a06ba04eede4074eec470ecba2784cbb3bf4e7de56833b097dd90a2aa0651","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"5c96bad5f78466785cdad664c056e9e2802d5482ca5f862ed19ba34ffbb7b3a4","impliedFormat":1},{"version":"81d8603ac527e75cfec72bb9391228b58f161c2b33514a9d814c7f3ebd3ef466","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"bb0cd7862b72f5eba39909c9889d566e198fcaddf7207c16737d0c2246112678","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"bad68fd0401eb90fe7da408565c8aee9c7a7021c2577aec92fa1382e8876071a","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"fec01479923e169fb52bd4f668dbeef1d7a7ea6e6d491e15617b46f2cacfa37d","impliedFormat":1},{"version":"8a8fb3097ba52f0ae6530ec6ab34e43e316506eb1d9aa29420a4b1e92a81442d","impliedFormat":1},{"version":"44e09c831fefb6fe59b8e65ad8f68a7ecc0e708d152cfcbe7ba6d6080c31c61e","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"4655709c9cb3fd6db2b866cab7c418c40ed9533ce8ea4b66b5f17ec2feea46a9","impliedFormat":1},{"version":"87affad8e2243635d3a191fa72ef896842748d812e973b7510a55c6200b3c2a4","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"3eecb25bb467a948c04874d70452b14ae7edb707660aac17dc053e42f2088b00","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"330896c1a2b9693edd617be24fbf9e5895d6e18c7955d6c08f028f272b37314d","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"5f0292a40df210ab94b9fb44c8b775c51e96777e14e073900e392b295ca1061b","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"8627ad129bcf56e82adff0ab5951627c993937aa99f5949c33240d690088b803","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"a68d4b3182e8d776cdede7ac9630c209a7bfbb59191f99a52479151816ef9f9e","impliedFormat":99},{"version":"39644b343e4e3d748344af8182111e3bbc594930fff0170256567e13bbdbebb0","impliedFormat":99},{"version":"ed7fd5160b47b0de3b1571c5c5578e8e7e3314e33ae0b8ea85a895774ee64749","impliedFormat":99},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"ecbaf0da125974be39c0aac869e403f72f033a4e7fd0d8cd821a8349b4159628","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"ceec3c81b2d81f5e3b855d9367c1d4c664ab5046dff8fd56552df015b7ccbe8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fac4a15690b27612d8474fb2fc7cc00388df52d169791b78d1a3645d60b4c8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"1d63055b690a582006435ddd3aa9c03aac16a696fac77ce2ed808f3e5a06efab","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"95c5e6b31f13db907e9fe5d7cd72edd186321a0c7a8fb2d89129029fb289c276",{"version":"764fec087122d840f12f9f24e1dc1e4cc2dcb222f3d13d2a498bf332fbe460d7","impliedFormat":1},{"version":"f01341955a2d64706972a4fed430f1634270a95f54e80357a3635a2be05d0092","impliedFormat":1},{"version":"05d1a8f963258d75216f13cf313f27108f83a8aa2bff482da356f2bfdfb59ab2","impliedFormat":1},{"version":"1a848ab32f6114131218358c47b81a2b6fd71789d3c9cda62a6218194cba5ecb","impliedFormat":1},{"version":"b1fb9f004934ac2ae15d74b329ac7f4c36320ff4ada680a18cc27e632b6baa82","impliedFormat":1},{"version":"f13c5c100055437e4cf58107e8cbd5bb4fa9c15929f7dc97cb487c2e19c1b7f6","impliedFormat":1},{"version":"a902a2f793cb1e5eac0a1919d96122f3e65be6e3eacc495fc9fb9a54207e5cd6","impliedFormat":1},{"version":"84ac5b0f50dbddba29c6aadc045266358c5653dcdecbf926aea7e7ac49b760f3","impliedFormat":1},{"version":"78d486dac53ad714133fc021b2b68201ba693fab2b245fda06a4fc266cead04a","impliedFormat":1},{"version":"b5ea9b77699a80efc0bed62b38cf828dbb966e8e32f8f5d6d6f9349e4c14dfd6","impliedFormat":1},{"version":"b8533e19e7e2e708ac6c7a16ae11c89ffe36190095e1af146d44bb54b2e596a1","impliedFormat":1},{"version":"8f152c13ada4c6aaf611b30473cde374fabf574f6613195542ebecea3a1fb154","impliedFormat":1},{"version":"a78a334d8e93cf70b3dded844963e5d0c529546b12ec3a8668afa05f707e8222","impliedFormat":1},{"version":"d8956b98811dd4f2be19a1416301e8f999107422e467af9c90179e74b026d5e4","impliedFormat":1},{"version":"2cf8d31ec8627f7faefbbe2456e74cd499365f59ba6f71cba8b91529fb094653","impliedFormat":1},{"version":"c133900491138f79cecffb0dca079393b8e704899e4fcf9a9d8b399f8b91c3db","impliedFormat":1},{"version":"a6ad63fcfc4c59d6b04eb6beff0e634fd8319cdedd295fab333ba11f8aa5f9f3","impliedFormat":1},{"version":"0b43cdc862f70c9b37bca929513eab72ab764845ea5d83cef47d148a1ff3f0d5","impliedFormat":1},{"version":"4a193963d67a56bff9331232db719a9dc71ff8a7795cb9de2f047d0de214d709","impliedFormat":1},{"version":"59ce6c57619857ab7dfc367715a3dbf300880cd16e7c84c12ac4ba1e39cdee63","impliedFormat":1},{"version":"5a1c84eb2e4797d0a021fcb4033a1189941265d03d6a1930bf6132143ee4065d","impliedFormat":1},{"version":"be79b6124df1c1ebc944de4da6c8668b8a2647cabd17694e3a3016ffe412fd8d","impliedFormat":1},{"version":"1171f6bf1462a4d1ad6d4615039aa7301daeb1c752cecbef4d5b3f173c521582","impliedFormat":1},{"version":"b5c8400546dfbf1105d085f5f7b9138bb9760ec305f64934085e141c1c911e99","impliedFormat":1},{"version":"1fd1f6a2b3a4ffe3a3003a29dc0a755bd7863ed06360abee56fa883917ffa9d7","impliedFormat":1},{"version":"1754df61456e51542219ee17301566ac439115b2a1e5da1a0ffb2197e49ccefe","impliedFormat":1},{"version":"9b817b016a57e3b39b853a1dbd8a099481d6117f2f45311fb9d174b36587544d","impliedFormat":1},{"version":"3c6d4463866f664a5f51963a2849cb844f2203693be570d0638ee609d75fe902","impliedFormat":1},{"version":"fad12b8152c3e0e5d7b467975048f53b58ff68854bc07fe351de4b441dc39f19","impliedFormat":1},{"version":"e88b42f282b55c669a8f35158449b4f7e6e2bccec31fd0d4adb4278928a57a89","impliedFormat":1},{"version":"2a1ed52adfc72556f4846b003a7e5a92081147beef55f27f99466aa6e2a28060","impliedFormat":1},{"version":"a9a43bdeadf59289e7d181de1bcfe915bcb78c8c650801b93c5d06657ec079b1","impliedFormat":1},{"version":"944fd20dee9f6daa7bcf07b5ee641176714d689d968edf8ca4c288bd6280f886","impliedFormat":1},{"version":"f9613793aa6b7d742e80302e65741a339b529218ae80820753a61808a9761479","impliedFormat":1},{"version":"b182e2043a595bca73dd39930020425d55c5ff2aae1719d466dadeadc78273c7","impliedFormat":1},{"version":"b4cb238f9f4141332396eac239f658452819a97880e778da9622163450a0d262","impliedFormat":1},{"version":"7db3c6feaf2b065a36d5654979d9a72bffb5b9f404827fbbf36a67187bcae091","impliedFormat":1},{"version":"d18588312a7634d07e733e7960caf78d5b890985f321683b932d21d8d0d69b7b","impliedFormat":1},{"version":"d1dac573a182cc40c170e38a56eb661182fcd8981e9fdf2ce11df9decb73485d","impliedFormat":1},{"version":"3cf69a6c6d6e10cba4f529bf4dbf0a8c24cf1bf283368d9a0ee0deed8d610b03","impliedFormat":1},{"version":"9c488a313b2974a52e05100f8b33829aa3466b2bc83e9a89f79985a59d7e1f95","impliedFormat":1},{"version":"86ee674d0d3cafec37d632b153737a8cdcefc8e501b554fe69e440717520e5d4","impliedFormat":1},{"version":"ad7bdd54cf1f5c9493b88a49dc6cec9bc9598d9e114fcf7701627b5e65429478","impliedFormat":1},{"version":"0d274e2a6f13270348818139fd53316e79b336e8a6cf4a6909997c9cbf47883c","impliedFormat":1},{"version":"3b8355a695937d484d5bdacff2a8bf20ab3a0b0cf48a90ce55ac9ac85f1ce8ec","impliedFormat":1},{"version":"bbe6fffa760ee9192cfed50d0d21f37f904fce3bb8df8dfe20ed0d2cc4a55eec","impliedFormat":1},{"version":"b51cc1d314dc9026decb8beb79139188c5449ba5dcb63431522e1196967f4e27","impliedFormat":1},{"version":"5bfd96710ebdf0eb63f27f11af51a781307a6bac839785c4ec341377b1e8029b","impliedFormat":1},{"version":"c37b359dbdd71ceaadadc0a52b462c18e0962aeb689d010984f76169e61ee6d7","impliedFormat":1},{"version":"55bf2aecbdc32ea4c60f87ae62e3522ef5413909c9a596d71b6ec4a3fafb8269","impliedFormat":1},{"version":"7832c3a946a38e7232f8231c054f91023c4f747ad0ce6b6bc3b9607d455944f7","impliedFormat":1},{"version":"11d54629ec04eb5c43bbc21bff2bb84aecd9dfa0fd3a35177f3a376f203a74ce","impliedFormat":1},{"version":"be4624aee552567a9eb78424f9d1e00dec244434ff15786e6d94d3784434a24f","impliedFormat":1},{"version":"ecacc44e617fe936409c991e31b21ecfdab22c6ade8a15a4b12cacfa0dd65eb1","impliedFormat":1},{"version":"fd9a30dfd6f10a04f40a4b7156b62165b33f27c895be1671c6500ee9ae5105cb","impliedFormat":1},{"version":"c5443286b2957433b926a4ab4635a71d4e43f605ba4fcf13e2076f0824d4ebc6","impliedFormat":1},{"version":"c8ee4dd539b6b1f7146fa5b2d23bca75084ae3b8b51a029f2714ce8299b8f98e","impliedFormat":1},{"version":"c58f688364402b45a18bd4c272fc17b201e1feddc45d10c86cb7771e0dc98a21","impliedFormat":1},{"version":"2904898efb9f6fabfe8dcbe41697ef9b6df8e2c584d60a248af4558c191ce5cf","impliedFormat":1},{"version":"d42e0e90b8efe93fd58a73878eb2d6a3dc6cfceac2e8632b065d38f4ef3c95aa","impliedFormat":1},{"version":"c97110dbaa961cf90772e8f4ee41c9105ee7c120cb90b31ac04bb03d0e7f95fb","impliedFormat":1},{"version":"c30864ed20a4c8554e8025a2715ba806799eba20aba0fd9807750e57ee2f838f","impliedFormat":1},{"version":"b182e2043a595bca73dd39930020425d55c5ff2aae1719d466dadeadc78273c7","impliedFormat":1},{"version":"b4cb238f9f4141332396eac239f658452819a97880e778da9622163450a0d262","impliedFormat":1},{"version":"7db3c6feaf2b065a36d5654979d9a72bffb5b9f404827fbbf36a67187bcae091","impliedFormat":1},{"version":"c30864ed20a4c8554e8025a2715ba806799eba20aba0fd9807750e57ee2f838f","impliedFormat":1},{"version":"4ebe4a76759906fd44f0347a2c00e76b14a69a550e23bc58e78e45e674fe8f92","impliedFormat":1},{"version":"35ca03f12c06ae761b358aef842414bf1edc7ca418995ed116752c267c0052e4","impliedFormat":1},{"version":"8c25b00a675743d7a381cf6389ae9fbdce82bdc9069b343cb1985b4cd17b14be","impliedFormat":1},{"version":"e72b4624985bd8541ae1d8bde23614d2c44d784bbe51db25789a96e15bb7107a","impliedFormat":1},{"version":"0fb1449ca2990076278f0f9882aa8bc53318fc1fd7bfcbde89eed58d32ae9e35","impliedFormat":1},{"version":"d1e59e13c5cf6ee3e4d6f0f788eb3532f6c426aa41795b9e779205c5f2560487","impliedFormat":1},{"version":"6ad558fa7b0d2fe1d0b74dba4758cf9ae68bc272cd3bb40b2388a13a61859cc2","impliedFormat":1},{"version":"35ca03f12c06ae761b358aef842414bf1edc7ca418995ed116752c267c0052e4","impliedFormat":1},{"version":"7a17edfdf23eaaf79058134449c7e1e92c03e2a77b09a25b333a63a14dca17ed","impliedFormat":1},{"version":"e78c5d07684e1bb4bf3e5c42f757f2298f0d8b364682201b5801acf4957e4fad","impliedFormat":99},{"version":"4085598deeaff1b924e347f5b6e18cee128b3b52d6756b3753b16257284ceda7","impliedFormat":99},{"version":"83d7c7c4d88ce96194791009da987934fdcf4379d83d9bc84d91a81c305775e9","impliedFormat":1},{"version":"794670b87bce2db9ffe22b76cb53d2f322757a37a436024280b210e1411d9e68","impliedFormat":1},{"version":"e66d0203d2ee5cbd28fff5369f279ee616b073a06715c97941572149f7a0bc02","impliedFormat":1},{"version":"41e0d68718bf4dc5e0984626f3af12c0a5262a35841a2c30a78242605fa7678e","impliedFormat":1},{"version":"6c747f11c6b2a23c4c0f3f440c7401ee49b5f96a7fe4492290dfd3111418321b","impliedFormat":1},{"version":"0052e363f41605a66c720525a64c32cd184678d0906c072364a86b941efdb065","impliedFormat":1},{"version":"f0e68d98a74724d2832a02bd7c56803243644f42899f10b6bca8573c1cb610ed","impliedFormat":1},{"version":"c9650df577c9b9ae746f0dc68e23d58e6f502f8a6a01c8311b8b27c679f6730a","impliedFormat":1},{"version":"014e069a32d3ac6adde90dd1dfdb6e653341595c64b87f5b1b3e8a7851502028","impliedFormat":1},{"version":"0d2af812b3894a2daa900a365b727a58cc3cc3f07eb6c114751f9073c8031610","impliedFormat":1},{"version":"b2706c89d0ea9ae196c0586717c45ce3d0754d8d2ac56cc33b7b9a623139e386","impliedFormat":1},{"version":"67b7d167f998aae12212461630a0a95d0c49b143395ab63443bc70d114a72482","impliedFormat":1},{"version":"2189ae6132648bd966866ec46b26c74a649594ea76b70ac92ef8f471c3d9b79d","impliedFormat":1},{"version":"47f30de14aa377b60f0cd43e95402d03166d3723f42043ae654ce0a25bc1b321","impliedFormat":1},{"version":"0edcda97d090708110daea417cfd75d6fd0c72c9963fec0a1471757b14f28ae5","impliedFormat":1},{"version":"0556c1f757d5d573310696a43e1f081983bd4367ff17f0a28c9450f20bc44c1e","impliedFormat":1},{"version":"ca70c17bc2d4d2c7b50f8bea972d0ebad32db35d43a164b86b5dc059437415e9","impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"f9acf26d0b43ad3903167ac9b5d106e481053d92a1f3ab9fe1a89079e5f16b94","impliedFormat":1},{"version":"ac46b462f6ae83bee6d3f61176f8da916c6fd43774b79142a6d1508745fbd152","impliedFormat":1},{"version":"ac46b462f6ae83bee6d3f61176f8da916c6fd43774b79142a6d1508745fbd152","impliedFormat":1},{"version":"ac46b462f6ae83bee6d3f61176f8da916c6fd43774b79142a6d1508745fbd152","impliedFormat":1},{"version":"ac46b462f6ae83bee6d3f61176f8da916c6fd43774b79142a6d1508745fbd152","impliedFormat":1},{"version":"ac46b462f6ae83bee6d3f61176f8da916c6fd43774b79142a6d1508745fbd152","impliedFormat":1},{"version":"86c8f1a471f03ac5232073884775b77d7673516a1eff3b9c4a866c64a5b1693a","impliedFormat":1},{"version":"5545aa84048e8ae5b22838a2b437abd647c58acc43f2f519933cd313ce84476c","impliedFormat":1},{"version":"10cc13a6d2c92e9bb09456d189ab84eb8ecf6574a8e3b3b5e3fd34cd54563616","impliedFormat":1},{"version":"549232dd97130463d39dac754cf7faa95c4c71511d11dd9b1d37c225bf675469","impliedFormat":1},{"version":"747779d60c02112794ca81f1641628387d68c8e406be602b87af9ae755d46fd6","impliedFormat":1},{"version":"0a22c78fc4cbf85f27e592bea1e7ece94aadf3c6bd960086f1eff2b3aedf2490","impliedFormat":1},{"version":"fea1857ed9f8e33be23a5a3638c487b25bb44b21032c6148144883165ad10fb0","impliedFormat":1},{"version":"d0cffd20a0deb57297c2bd8c4cd381ed79de7babf9d81198e28e3f56d9aff0db","impliedFormat":1},{"version":"77876c19517f1a79067a364423ba9e4f3c6169d01011320a6fde85a95e8f8f5c","impliedFormat":1},{"version":"84cf3736a269c74c711546db9a8078ad2baaf12e9edd5b33e30252c6fb59b305","impliedFormat":1},{"version":"469550ed39c8d2949a86c5a95771642b16b2e2d5f0ea72b405e72a8cfa01ac6c","impliedFormat":1},{"version":"8309b403027c438254d78ca2bb8ddd04bfaf70260a9db37219d9a49ad6df5d80","impliedFormat":1},{"version":"6a9d4bd7a551d55e912764633a086af149cc937121e011f60f9be60ee5156107","impliedFormat":1},{"version":"1f221460f647405c20e0c2cf8a093b2a36bc2ecb53f19b88cd1bcd1785c21469","impliedFormat":1},{"version":"c4e319433373d98114d294571d4a856c580890ce72d08edf97d6ff4b8f11377d","impliedFormat":1},{"version":"1607892c103374a3dc1f45f277b5362d3cb3340bfe1007eec3a31b80dd0cf798","impliedFormat":1},{"version":"402da75bfdaf5b2cf388450cb56a4c5ba2ed67bc9f930eba0e7ce7fc57cddf11","impliedFormat":1},{"version":"97a06e956e3b960b61c263559e37e272bba41f942f1efe824d7264a0f68221cd","impliedFormat":1},{"version":"a71dd28388e784bf74a4bc40fd8170fa4535591057730b8e0fef4820cf4b4372","impliedFormat":1},{"version":"0e411566240d81c51c2d95e5f3fa2e8a35c3e7bbe67a43f4eb9c9a2912fdff05","impliedFormat":1},{"version":"4e4325429d6a967ef6aa72ca24890a7788a181d28599fe1b3bb6730a6026f048","impliedFormat":1},{"version":"dcbb4c3abdc5529aeda5d6b0a835d8a0883da2a76e9484a4f19e254e58faf3c6","impliedFormat":1},{"version":"0d81307f711468869759758160975dee18876615db6bf2b8f24188a712f1363b","impliedFormat":1},{"version":"22ddd9cd17d33609d95fb66ece3e6dff2e7b21fa5a075c11ef3f814ee9dd35c7","impliedFormat":1},{"version":"b6d8f9a92a7c8d32f73006682c1e1c1e7e065fbef8bddfa2efc1a08bc1af4954","impliedFormat":1},{"version":"549232dd97130463d39dac754cf7faa95c4c71511d11dd9b1d37c225bf675469","impliedFormat":1},{"version":"1e89d5e4c50ca57947247e03f564d916b3b6a823e73cde1ee8aece5df9e55fc9","impliedFormat":1},{"version":"8538eca908e485ccb8b1dd33c144146988a328aaa4ffcc0a907a00349171276e","impliedFormat":1},{"version":"09d0d5ceec0347bc26f6aeeb549acb027fb4da4f14afb70d1a0ac3d52c103147","impliedFormat":1},{"version":"988168df1385cdfbe611e914395de93b1e27c3580b2edbaff5280bac49a5d48d","impliedFormat":1},{"version":"747779d60c02112794ca81f1641628387d68c8e406be602b87af9ae755d46fd6","impliedFormat":1},{"version":"40b33243bbbddfe84dbdd590e202bdba50a3fe2fbaf138b24b092c078b541434","impliedFormat":1},{"version":"fea1857ed9f8e33be23a5a3638c487b25bb44b21032c6148144883165ad10fb0","impliedFormat":1},{"version":"f21d84106071ae3a54254bcabeaf82174a09b88d258dd32cafb80b521a387d42","impliedFormat":1},{"version":"21129c4f2a3ae3f21f1668adfda1a4103c8bdd4f25339a7d7a91f56a4a0c8374","impliedFormat":1},{"version":"7c4cf13b05d1c64ce1807d2e5c95fd657f7ef92f1eeb02c96262522c5797f862","impliedFormat":1},{"version":"eebe1715446b4f1234ce2549a8c30961256784d863172621eb08ae9bed2e67a3","impliedFormat":1},{"version":"2dee481b63c527e2674324c60e7a106591e2ea453efc546f589a838f7f73bf2c","impliedFormat":1},{"version":"ab5cd0648952333eb30e31eb5bc47256296c7fa5f36acf04fee832b2509da899","impliedFormat":1},{"version":"a8412352898dbdcb563f67788354881a0ddce59e5e6b7cf528a23bbf581e37bc","impliedFormat":1},{"version":"d80212bdff306ee2e7463f292b5f9105f08315859a3bdc359ba9daaf58bd9213","impliedFormat":1},{"version":"d64257dfffa943762898f32f42a43b4fe49707447e264b2bfc12c11383210cbc","impliedFormat":1},{"version":"e401cd30d2b8c64b58a1e3bee0d95161b0cb9b2e70903559c0159641998b56c1","impliedFormat":1},{"version":"40b414e80fbd5f80c2f5af363070fffe8e07fe83fdbab1b0fd46967098b3f0af","impliedFormat":1},{"version":"18a1902423b8e9f5089bc015ce0ee45d39ee8a12a12dc2483fac930c08bb5db0","impliedFormat":1},{"version":"e928af9186b89be4d8402a8b61d8358ec82551d565adea671a195dd4940c631c","impliedFormat":1},{"version":"67204ef14466e9a82ff1847ef6f40d4bef1dcdea2ffc9f2a1d4457118b8d5811","impliedFormat":1},{"version":"de44ea4f1ac2aa1624cd112a1f4374fc6e85095d1ca6a3e761f021b157dcaa1f","impliedFormat":1},{"version":"89009afb36fba392fa2a2c3318bff16931bd718bb12f4a35ef6795acca92098d","impliedFormat":1},{"version":"c9e11df096a2971b1061fcc13f8c8a4a0ee39e352cdad5346575c3a2a0216113","impliedFormat":1},{"version":"81042062dbed7fba8f439502a65f5e908e7d2fc83011dd3297e96f59039dc58a","impliedFormat":1},{"version":"b6fc856ae57106e18657b5a79c4344754fa815fc8830e99394ba0181cc7c0094","impliedFormat":1},{"version":"a3401c5c0dd62faa67cb15390671b782c96b80271cbe08a8d726088b67cf773c","impliedFormat":1},{"version":"039b927782c1a0c2d57520e5a3c058017ed53d79d8b8ae5d56d9fad8486c1d9b","impliedFormat":1},{"version":"36a9827e64fa8e2af7d4fd939bf29e7ae6254fa9353ccebd849c894a4fd63e1b","impliedFormat":1},{"version":"3af8cee96336dd9dc44b27d94db5443061ff8a92839f2c8bbcc165ca3060fa6c","impliedFormat":1},{"version":"85d786a0accda19ef7beb6ae5a04511560110faa9c9298d27eaa4d44778fbf9e","impliedFormat":1},{"version":"7362683317d7deaa754bbf419d0a4561ee1d9b40859001556c6575ce349d95ea","impliedFormat":1},{"version":"408b6e0edb9d02acaf1f2d9f589aa9c6e445838b45c3bfa15b4bb98dc1453dc4","impliedFormat":1},{"version":"72846ce9a8871912933151376c7d1a0d25c5163017d3a8eb1816c526361c13cb","impliedFormat":1},{"version":"fb3e39ec2448b71602503a656f2222fee6a995218bb2883bfcfbf5a8e6e3f303","impliedFormat":1},{"version":"a541b644204ebb0632a1468303ab6b607c5dafa8260f9a82a277d7fb2d996467","impliedFormat":1},{"version":"eaa0e4743d570e0b5c6663b81f3a389cb14f092628823682951166787a8f84cd","impliedFormat":1},{"version":"4c6de67e502d44a47574250c745e401ffa03cb065364f3607132d010a142355a","impliedFormat":1},{"version":"60d3e53a6fd4262e5019f49779a84784791b506446eeda21c732fd6cf4754807","impliedFormat":1},{"version":"ee03d5e4adb2eb55e205033a0ec9491c76efc212d103df5f8a821b427b5bc543","impliedFormat":1},{"version":"475dc4c3566b988a1942901c9ce1468d9f45cf46afb2cc96114fd4634a294601","impliedFormat":1},{"version":"337fbbafc33ff2db9020cdd24a6c074cff70d413342117c5ce9d702d5cd67c51","impliedFormat":1},{"version":"a82e1390d740fe2c60daeb951f6487b63a5c2c6bdbe6b54efb778ab79201ea93","impliedFormat":1},{"version":"5f1f228c2bbcb4c7a3cdf796da74b87e59daaa29407cca386ea6f0fa97a34c4b","impliedFormat":1},{"version":"e41e32c9fc04b97636e0dc89ecffe428c85d75bfc07e6b70c4a6e5e556fe1d6b","impliedFormat":1},{"version":"9d86c5cc67f234820c7b8c9e764c821b826a8d5b512936a2ad4e98d67b1c4f10","impliedFormat":1},{"version":"acf76ec7a5066133e114784386fb631b88372f988fb07d8b2a3e7975ea6f80c3","impliedFormat":1},{"version":"8f3d580847abb0b273a1c98dd291f614568297a84baee9fcf34db412907e28d3","impliedFormat":1},{"version":"957adb31ed7e8aa2f504efa4e250e908a67e51122e05c683562e97f22fb90435","impliedFormat":1},{"version":"7baf229224e93dda4789fa50e9e1f52a856041ff3d21d56bf303ecec47b4892e","impliedFormat":1},{"version":"f6ab714a171450205cc263512038fe9345d76237131f5f76405c785b62200771","impliedFormat":1},{"version":"0179e43105ebbfc61f08ddec1584b6804c2046e8d03e74a297b68217f90bd69d","impliedFormat":1},{"version":"9ebac14f8ee9329c52d672aaf369be7b783a9685e8a7ab326cd54a6390c9daa6","impliedFormat":1},{"version":"039b927782c1a0c2d57520e5a3c058017ed53d79d8b8ae5d56d9fad8486c1d9b","impliedFormat":1},{"version":"d51ea03ba155517a4dc92fbac680fcb9d815d5184e6a37cd0699c73407a81174","impliedFormat":1},{"version":"43832ac0d325484c691e8227c660f535185a37be042fbfd031126e9c2d8d8765","impliedFormat":1},{"version":"20935ed409012c2c6aaf808614ea923eb49c14332713fb306d44df4b6eb33f13","impliedFormat":1},{"version":"526b06c693b6323a8c009afd3d595973bdafa63cdcb22c4f5a1bcf388c0dc1e9","impliedFormat":1},{"version":"4b291b42b064d1d25d0e98799ca37988e67d2142bf7a6daa7eb2a6b2a5cb66fc","impliedFormat":1},{"version":"674de41d14c9f920703098bddcf85e063c8c93884b78fe38efa9cfbf8ea6925a","impliedFormat":1},{"version":"1b94bd033ac16d4f44fe4afb35e5d68ad864246362ec0f483703366b0390e6ef","impliedFormat":1},{"version":"d4b8bc69b2ea1a6c3cc98c2759e180cad1b2e95957c9e618789c92f7d5773bfc","impliedFormat":1},{"version":"94ff46b434e0cb24d3e8122c3e2a2c808550bd20001e8d496302e56a4c62fa64","impliedFormat":1},{"version":"97fb8e352fd9327dd590e43370c78b23568c66a2694a15bbe382a9359d8deaeb","impliedFormat":1},{"version":"f8eb4b35b48d847b5a7dd64c2fcebd52e17a533c8400285ae216611618e7d915","impliedFormat":1},{"version":"64f9956fcb1c1d7d57422672442c94ca060fd437336fe53c5de40bfe5f8962d0","impliedFormat":1},{"version":"d73e2e923eefead53a1cb8a61514d1ca9216d83e62d60c46297aae7e399e7b7d","impliedFormat":1},{"version":"b8109c50ea6d49ef23bbc34179a5d08ecacf193bb5b901b6be19074f3d5572a5","impliedFormat":1},{"version":"a1f78e6c4ebe4b976c316f9983687848ef0bfe343b5df43f57a5b36bf69ab972","impliedFormat":1},{"version":"20ff8c4f6fba6a4c0fd2448776d2b0113b7f2c9ead81cf760a5abc026643ecbe","impliedFormat":1},{"version":"8e99b7919298b65c998bb496f1ee2743840073d5efa8a350f828b58b6861728b","impliedFormat":1},{"version":"c0e17472b75e60b4488d82a1e05f825f02ffb6d1138317ebe11bbc250ffc789c","impliedFormat":1},{"version":"039b927782c1a0c2d57520e5a3c058017ed53d79d8b8ae5d56d9fad8486c1d9b","impliedFormat":1},{"version":"8b69fd21c029cb11c7fdbe267db034fc24f5f9570288d4dcf00b67c9e2d27f9c","impliedFormat":1},{"version":"6d32b28bd4d05043d5a1acb05169472dd04d8c8c112dec34305e2df2af733b50","impliedFormat":1},{"version":"b29c663a43955a047f943e7610369177e9e76803a312ca27216b18af15f47bb8","impliedFormat":1},{"version":"d6f4c10e5aa297d721cbc99992c91196c3117c88aabe94db45267047e8d90533","impliedFormat":1},{"version":"b26366931351903c9551ab12a0f0504be9d46ebd161b6178312268448c1bec5c","impliedFormat":1},{"version":"3a434fe0b76048dc18baf0358943b725606dbf9f51f41526c77f11daf54418d2","impliedFormat":1},{"version":"f4b5f9148e65316aee1a4f99fa7275fd0c80cb7bf991e83d7f061c6de0b1e76f","impliedFormat":1},{"version":"87ff76b82bf9e49eedfdbca6c9be2f595ebba46dd6e23e03fe4caeba5d556d7d","impliedFormat":1},{"version":"0df4d7c66accbfbb0e1609451e46c6bf8f20da7e07e151b5cbcaf54ffa43f96c","impliedFormat":1},{"version":"7adaa95ae063493e339a8f525902b6c8a521a13628a90a44cf0b5968ac48accb","impliedFormat":1},{"version":"3fc765d10fccb9bfd7aded13716acd93d75242b67bc3859e64d91cf29301efd6","impliedFormat":1},{"version":"b768f73899facc05dc15fe924ee1d96a7caa24f6ade975058c2ecf05765bea7d","impliedFormat":1},{"version":"52e17088718b5a979b8a62269ffb148fe452ade3ffcb1edc612e80ebcc4fa0c4","impliedFormat":1},{"version":"639195014963fc3e121655dae3c8d061abd75e9bc50f749aa00744b048d5a0ba","impliedFormat":1},{"version":"bf8f1e4ad17bf4fc998f863e027cfc603c81f08789b1c4688c0c89631522e014","impliedFormat":1},{"version":"d375428c9196b0b8c6d2650b77f855ae6dcc9043c0ba7115ee71f6ba9197e656","impliedFormat":1},{"version":"ed02b878ca292af5724bbb50c8695e7cb61a101ca22bb775d380e023ff1370e2","impliedFormat":1},{"version":"e312468b6b0da1c818786cc079e1fd54790d83c25cadc61f24a783a4a5ab84da","impliedFormat":1},{"version":"2700d533a3a4e9a8c45500fee3939e761be5586d7708254d5f52511af7964a85","impliedFormat":1},{"version":"51f583b45bde3ff05fbe0fc558a233a3959629b15d19237c59111ca0d28b0664","impliedFormat":1},{"version":"eaecb831cb518b87ada6a6ea738b51eac6f56fd899f255554759a112a3b5d235","impliedFormat":1},{"version":"8867adbe2feb5113532dad6b5948e8dc780fca477a64a437ebcfd98b586f8fdd","impliedFormat":1},{"version":"c1fc6928e6301a72fe969eb28bebbafe48c1b3a705af9becb9fca3fc6d4db7e6","impliedFormat":1},{"version":"5b6d83c94236cf3e9e19315cc6d62b9787253c73a53faea34ead697863f81447","impliedFormat":1},{"version":"6d448f6bfeeef15718b82fd6ac9ae8871f7843a3082c297339398167f8786b2e","impliedFormat":1},{"version":"55cdcbc0af1398c51f01b48689e3ce503aa076cc57639a9351294e23366a401d","impliedFormat":1},{"version":"621c5489846f1f3ab1c17d2ad62f057aefd46236ef7f2194a46c02cfbfc85009","impliedFormat":1},{"version":"69f60832aa9b4fc8f1a3880d7b715beb45f4791a2a784bb26ae0320cf7a1caf7","impliedFormat":1},{"version":"32615eb16e819607b161e2561a2cd75ec17ac6301ba770658d5a960497895197","impliedFormat":1},{"version":"ac14cc1d1823cec0bf4abc1d233a995b91c3365451bf1859d9847279a38f16ee","impliedFormat":1},{"version":"bd216dfb98bfebe9d32458fc53f386aae95547aed85d520c5647480483d41a84","impliedFormat":1},{"version":"0324ec356d3beea069e6a2decbfb2971205c90db68c49f79421c6615caa42ef8","impliedFormat":1},{"version":"73a0ee6395819b063df4b148211985f2e1442945c1a057204cf4cf6281760dc3","affectsGlobalScope":true,"impliedFormat":1},{"version":"d05d8c67116dceafc62e691c47ac89f8f10cf7313cd1b2fb4fe801c2bf1bb1a7","impliedFormat":1},{"version":"3c5bb5207df7095882400323d692957e90ec17323ccff5fd5f29a1ecf3b165d0","impliedFormat":1},{"version":"31ce770c7f0489a23152591149d5e8c57580fe63069cd7274df5f91bef1ee926","impliedFormat":1},{"version":"339802c5f1fa4797a825b64140ec74201130381e69c7609b486491c7755cb24c","impliedFormat":1},{"version":"ae7e53f048c05af20ba51155793802196cfb95877b6beab1b640a608b946b4c4","impliedFormat":1},{"version":"a366fb479968cb666b394082df4f50c7f398abf643c07813abeb8e4ef2ff50c1","impliedFormat":1},{"version":"af9ff6c6714cf8df0f3f9bf75ee4f4bd770e773ad01a138289ed4156ee139bc4","impliedFormat":1},{"version":"b9406c40955c0dcf53a275697c4cddd7fe3fca35a423ade2ac750f3ba17bd66d","impliedFormat":1},{"version":"43ecbaed26355b637c0b68f919da8ee745699c4435853710fe31d97c9dfbf165","impliedFormat":1},{"version":"323127b2ac397332f21e88cd8e04c797ea6a48dedef19055cbd2fc467a3d8c84","impliedFormat":1},{"version":"f17613239e95ffcfa69fbba3b0c99b741000699db70d5e8feea830ec4bba641d","impliedFormat":1},{"version":"fff6aa61f22d8adb4476adfd8b14473bcdb6d1c9b513e1bfff14fe0c165ced3c","impliedFormat":1},{"version":"bdf97ac70d0b16919f2713613290872be2f3f7918402166571dbf7ce9cdc8df4","impliedFormat":1},{"version":"8667f65577822ab727b102f83fcd65d9048de1bf43ab55f217fbf22792dafafb","impliedFormat":1},{"version":"58f884ab71742b13c59fc941e2d4419aaf60f9cf7c1ab283aa990cb7f7396ec3","impliedFormat":1},{"version":"2c7720260175e2052299fd1ce10aa0a641063ae7d907480be63e8db508e78eb3","impliedFormat":1},{"version":"506823d1acd8978aa95f9106dfe464b65bdcd1e1539a994f4a9272db120fc832","impliedFormat":1},{"version":"974b292b142df742f813e02d0699cd7230e8349b784992eccfe2382cd5b9bf48","impliedFormat":1},{"version":"b7d10f99e19585a6d07b4dade3de18e08a3168f84151a74323f89bfc559c48c0","impliedFormat":1},{"version":"d012b8a516d7fc7249e4ff38259e3cb902e6aebdd393d46a23bc536d70cc0e52","impliedFormat":1},{"version":"4c450ab60566685a46316996b81b1fe0cdfb810179d3a039825b81714b4e0ac8","impliedFormat":1},{"version":"bf26b847ce0f512536bd1f6d167363a3ae23621da731857828ce813c5cebc0db","impliedFormat":1},{"version":"87af268385a706c869adc8dd8c8a567586949e678ce615165ffcd2c9a45b74e7","impliedFormat":1},{"version":"76a5253d41373eae33d720a8e7898094821ceff6a450a572dda08aa5ac4151e2","impliedFormat":1},{"version":"6216f92d8119f212550c216e9bc073a4469932c130399368a707efb54f91468c","impliedFormat":1},{"version":"f7d86f9a241c5abf48794b76ac463a33433c97fc3366ce82dfa84a5753de66eb","impliedFormat":1},{"version":"494c9d22a9cbdd6e7bd07bed7788e1e0c63207f29c4b824a2f06c362b5682da0","impliedFormat":1},{"version":"863d0768c15989b65bd04c8ac7ca13d3654ea76a0284936ead8d1c10c63aa5a5","impliedFormat":1},{"version":"c62c9aa233e7a0b491fe9299ae1461346098dfc3104c650d961e29bb8025022d","impliedFormat":1},{"version":"fa415cd54ad65b156d3543c46e424bdf15fc1154a0e30ba6f3cff5fdac7fc3ce","impliedFormat":1},{"version":"5ab4a0f649cb3f5af9fade73bff8ff303fb6f3e6ce1fe41acee5414f68f9199f","impliedFormat":1},{"version":"6d4926a736b1d1d57acd1b96061767a9c53d7498d1bb4e9fa0e03ed4faf7d178","impliedFormat":1},{"version":"19824225fe0ee06cf84a18e13d76f3705a874a54c2167bf5a2ad19135662ac54","impliedFormat":1},{"version":"d57e64f90522b8cedf16ed8ba4785f64c297768ff145b95d3475114574c5b8e2","impliedFormat":1},{"version":"6a37dd9780f837be802142fe7dd70bb3f7279425422c893dd91835c0869cb7ac","impliedFormat":1},{"version":"fea58bd907eb2155e5c37ed2fd9111bdf59fc5854aca04ad4f59d88fec4548e1","impliedFormat":1},{"version":"ebdc8c4fda52061cd3f591ef2d5cebdbc09c719d3d4ba905cf4282c35117b9cf","impliedFormat":1},{"version":"73892985cf01d8e44c8950c25a6f3bb6230db8fb08852d9735e72b358e364204","impliedFormat":1},{"version":"1128f0d0d50ec234c52e3b72898d2ed9a54c8f902e58f27001b95503a0228161","impliedFormat":1},{"version":"ceb4a03e0b7e1df7d4ce39a0b0e184a81a777f5438b3f6dc7c412418418b4094","impliedFormat":1},{"version":"f65a5aa0e69c20579311e72e188d1df2ef56ca3a507d55ab3cb2b6426632fe9b","impliedFormat":1},{"version":"1144d12482a382de21d37291836a8aca0a427eb1dc383323e1ddbcf7ee829678","impliedFormat":1},{"version":"7a68ca7786ca810eb440ae1a20f5a0bd61f73359569d6faa4794509d720000e6","impliedFormat":1},{"version":"65b4b9e7088adf5acb6049b458f7b35a9b0ca044c6d141f9f2a2af009846c722","impliedFormat":1},{"version":"5e97563ec4a9248074fdf7844640d3c532d6ce4f8969b15ccc23b059ed25a7c4","impliedFormat":1},{"version":"2a067212a006e052bfd7b28515d4a5f9e43e35091d9dcdf6a1aeef1caaa3fcfb","impliedFormat":1},{"version":"0ba8f23451c2724360edfa9db49897e808fa926efb8c2b114498e018ed88488f","impliedFormat":1},{"version":"3e618bc95ef3958865233615fbb7c8bf7fe23c7f0ae750e571dc7e1fefe87e96","impliedFormat":1},{"version":"bd39c551f5b52925fd568e5b7d6048268e155816eecd21eebe21645a12fd71ff","impliedFormat":1},{"version":"f720eb538fc2ca3c5525df840585a591a102824af8211ac28e2fd47aaf294480","impliedFormat":1},{"version":"ae9d0fa7c8ba01ea0fda724d40e7f181275c47d64951a13f8c1924ac958797bc","impliedFormat":1},{"version":"b16d9a8359255d2fdc68b44238c776192fade044e476d7fb0096eb4c42575c8a","impliedFormat":1},{"version":"38fbd55eee84cb5f4795d7a8152d72170840f58f2e156ccf137d25bb1ebe30f3","impliedFormat":1},{"version":"3683a60f2da793f55da2bf7e03ad034c959f73c9ec06b9c969fa4fe0ca260f87","impliedFormat":1},{"version":"ceca533b23c8173b77de5973d60669fffcb425b09001b346a203ae2aae69e543","impliedFormat":1},{"version":"a3fda2127b3185d339f80e6ccc041ce7aa85fcb637195b6c28ac6f3eed5d9d79","impliedFormat":1},{"version":"ba849c0aba26864f2db0d29589fdcaec09da4ba367f127efdac1fcb4ef007732","impliedFormat":1},{"version":"ed10bc2be0faa78a2d1c8372f8564141c2360532e4567b81158ffe9943b8f070","impliedFormat":1},{"version":"b432f4a1f1d7e7601a870ab2c4cff33787de4aa7721978eb0eef543c5d7fe989","impliedFormat":1},{"version":"3f9d87ee262bd1620eb4fb9cb93ca7dc053b820f07016f03a1a653a5e9458a7a","impliedFormat":1},{"version":"e7302d399a51048991599180f960a4ccac6d251b3a4f9f98b7c7f7628a3206ce","impliedFormat":1},{"version":"de716ad71873d3d56e0d611a3d5c1eae627337c1f88790427c21f3cb47a7b6f7","impliedFormat":1},{"version":"b47ec1397a90196eff459b6cac7b63de7aa3e3db8230585ee28b63cbd7e6464f","impliedFormat":1},{"version":"467caa5d54e4c410c872f4f9c604aec017dde0143b7290425b27a6dba4d0a573","impliedFormat":1},{"version":"673b1fc746c54e7e16b562f06660ffdae5a00b0796b6b0d4d0aaf1f7507f1720","impliedFormat":1},{"version":"2b402bccf94d1707ea962fdab40b265bc700c486ced0633a302cd739d7730414","impliedFormat":1},{"version":"132d0505a23d00b89c9d909023eee469b679056dfde4deff403a21f94abdc4ec","impliedFormat":1},{"version":"f981bdf9ba63c4755b9b2b9c7819eefcf24353185c673ba25840dece1b30992c","impliedFormat":1},{"version":"7cda0538ef05c037997ce2dcadb7f7237f0f8f0f70c443aecb0087fda2ccb77b","impliedFormat":1},{"version":"81d2667fe05721551b51b40b2fd5b2b7956341340b19a321c7efc343f6fbf3eb","impliedFormat":1},{"version":"ead16b329693e880793fe14af1bbcaf2e41b7dee23a24059f01fdd3605cac344","impliedFormat":1},{"version":"ba14614494bccb80d56b14b229328db0849feb1cbfd6efdc517bc5b0cb21c02f","impliedFormat":1},{"version":"6c3760df827b88767e2a40e7f22ce564bb3e57d799b5932ec867f6f395b17c8f","impliedFormat":1},{"version":"27e753ed2f2730b7ee6248941963b0715a5adbf427d296066c5622eebee5334a","impliedFormat":1},{"version":"b94010e286141a0a657ae7487a0fba0b3f5a8b189056955c6ffd6a0717fcd4c4","impliedFormat":1},{"version":"168785e56577022d6880420a7b949244c143786f40d929942f1cf0bb442eb7fb","impliedFormat":1},{"version":"029774092e2d209dbf338eebc52f1163ddf73697a274cfdd9fa7046062b9d2b1","impliedFormat":1},{"version":"cee1598481926852dcac4e868a2bda94e65fd099f8e0c8d1784b3475fcf4a762","impliedFormat":1},{"version":"067545182663c5157701486008b6e80ebbc653d57e40c00b4fdf824e446bdcb2","impliedFormat":1},{"version":"1c0c378de343ce9a86f2f9d1d8000709390a2ce0c194b1ead6b5092dae5e45ab","impliedFormat":1},{"version":"3cfd46f0c1fe080a1c622742d5220bd1bf47fb659074f52f06c996b541e0fc9b","impliedFormat":1},{"version":"e8d8b23367ad1f5124f3d8403cf2e6d13b511ebb4c728f90ec59ceeb1d907cc1","impliedFormat":1},{"version":"ae7fc485f1216d33ca1520545ab546f4935e659f98e912d26de2883cb3a803fa","impliedFormat":1},{"version":"75ddb104faa8f4f84b3c73e587c317d2153fc20d0d712a19f77bea0b97900502","impliedFormat":1},{"version":"d6a7dea7e1aab873acb04935c91a2cd1bca62061af62d50b150f2d9ec049eeea","impliedFormat":1},{"version":"0395c1f78e25f69eb9d3a0df988aa0627e69f60272d804385abe6793e21be1c5","impliedFormat":1},{"version":"4a650b6d5623c764ee0e5c3fdce6b98290cff1e60be2bf0c926dcb47d95d1d4b","impliedFormat":1},{"version":"8b2efbff78e96ddab0b581ecd0e44a68142124444e1ed9475a198f2340fe3ef7","impliedFormat":1},{"version":"a1ccc5ff893ddfbecb53bc2a01f72d653084cb924130ec46735f106189688359","impliedFormat":1},{"version":"583d8a16362f56bb29b024704908b78b22c52670c5e8ca95928ff9a7dd81d226","impliedFormat":1},{"version":"9d391e35b6e03b23aee1b95d7e5a353ebf9cd12c28896cd0807ebf39f661921c","impliedFormat":1},{"version":"680db60ad1e95bbefbb302b1096b5ad3ce86600c9542179cc52adae8aee60f36","impliedFormat":1},{"version":"7559143eaae04acaf5f63dfc052b0ade201f47ffe217f4513467d60beb467c40","impliedFormat":1},{"version":"b775bfe85c7774cafc1f9b815c17f233c98908d380ae561748de52ccacc47e17","impliedFormat":1},{"version":"1ba152c0203f1c21e39005e73d31074f407378b8a4b8291a1e093eaa103aae0d","impliedFormat":1},{"version":"a0853505f50f2d6a6d87a9e30102f402caec8f6d2bf0b1e4fd702e35f92d1394","impliedFormat":1},{"version":"1763e12bc261430a12019ede875a38630526026bfa3e8a3336acece15377865b","impliedFormat":1},{"version":"cbe94b87c6d653606576407dad9c055ee0b68e405a99d0f0f6284b1b69ae71fc","impliedFormat":1},{"version":"73b961ad365799ac9cb5032229beae65bc2437a83a93af6e377c8fc9dc1bfcd1","impliedFormat":1},{"version":"f147871e7f65d3a1d5a660f3eb83c0ca7d001e8b57b73bcd9af3bd3fe3141177","impliedFormat":1},{"version":"32f1cfe489715f1dd94e6c047a0ce57aa5cd5a3bb81743caba8cc01ed39c2e61","impliedFormat":1},{"version":"0092988408cfdb36f2757278ed874b7ee80446dcb963019c9095f7aab5b26e83","impliedFormat":1},{"version":"15ecd31cb702a53ceac46ffec3cf5882968753873b8a0e637d1fba8e0646a70d","impliedFormat":1},{"version":"356da547f3b6061940d823e85e187fc3d79bd1705cb84bd82ebea5e18ad28c9c","impliedFormat":1},{"version":"6ee8db8631030efcdb6ac806355fd321836b490898d8859f9ba882943cb197eb","impliedFormat":1},{"version":"e7afb81b739a7b97b17217ce49a44577cfd9d1de799a16a8fc9835eae8bff767","impliedFormat":1},{"version":"999a50dc35426ac43630cdf419db23ebca9f75b5dbb8ac8983b575cbee062699","impliedFormat":1},{"version":"46e3a0dfd8cf0e36d14ceaf852d8483bfccbfebe0245debffac0a3b227933c51","impliedFormat":1},{"version":"044c44c136ae7fb9ff46ac0bb0ca4e7f41732ca3a3991844ba330fa1bfb121a2","impliedFormat":1},{"version":"747d5dd20b03887a871d4b8c256001de94f8402064078bdb8a85de7ea9197b27","impliedFormat":1},{"version":"0aac88c7f5cc944be9792e6f5b82b65fe864e491f8042118772b478ee127a470","impliedFormat":1},{"version":"f07d3056511cac9577743bf97bfb59e3cef48967e49c3b113a27f419d0e22446","impliedFormat":1},{"version":"57fd651cc75edc35e1aa321fd86034616ec0b1bd70f3c157f2e1aee414e031a0","impliedFormat":1},{"version":"aa0c68c4a2718ba456151042021178ed66d84c4ca90844630ca84363f6569bbf","impliedFormat":1},{"version":"8ac8a47f69340ca10afaffc7a4b75763528aad8ea501f3602238afb9ea7a069e","impliedFormat":1},{"version":"5121f31199b791dd6fde3a951507f1d1df433799fed7666219b89b79993222cc","impliedFormat":1},{"version":"906b1a55de5c8fb7357fa2a7d0e0911ee6724c4d4b8467dd2af104ac62104850","impliedFormat":1},{"version":"0f51484aff5bbb48a35a3f533be9fdc1eccac65e55b8a37ac32beb3c234f7910","impliedFormat":1},{"version":"1d79e545f09c57096f7a930f1412c5068b50b4518313dd2cffb144cda4d0adbf","impliedFormat":1},{"version":"42a4525ba159dfae63e1da678f2c8f7143b3e01581cd41c58c7ec35e8fa27c21","impliedFormat":1},{"version":"9c97844099abe0ad1716f2e94ba45b3c72534e3e350bd7f364af5309e76d4716","impliedFormat":1},{"version":"48affc4385ec1e27f46eafd27a7b93c6dab332289d10e4e811c19f5840a2111a","impliedFormat":1},{"version":"f490ca21297f9aba038b8cabfd72bfb58d04a99462c91d260c93913dc85ae6c0","impliedFormat":1},{"version":"f742b6b715f01d63dc2f50d3bae9749c6126fe466fbd12cf5e1456cc8ad0fcdf","impliedFormat":1},{"version":"ba4fe8c7538d5f7803a5708dd9432c23106af8233751dd2948fbe2608768a3a9","impliedFormat":1},{"version":"eb77c432329a1a00aac36b476f31333260cd81a123356a4bf2c562e6ac8dc5a4","impliedFormat":1},{"version":"b17175379251d251c9ba849c017dbe1becf41f1317ee68497a515ad8128efb5c","impliedFormat":1},{"version":"ebeae3fe896249b78b23905a09e58331012b40190d32b7c8d66985f0f74c8306","impliedFormat":1},{"version":"097d6f39fc8adcdab4d4afea9f5a1e0e9df6671ec48811f031db4cb5b3780a29","impliedFormat":1},{"version":"cf2b7c09ed17033233665c0a5f5774683a9486f5ae66aa44a14608e7c868d360","impliedFormat":1},{"version":"5f44148696271f02de771dae5929ada2719c47e231658b2a9e57b3dda5bc18c7","impliedFormat":1},{"version":"ed8e02a44e1e0ddee029ef3c6804f42870ee2b9e17cecad213e8837f5fcd756b","impliedFormat":1},{"version":"b13b25bbfa55a784ec4ababc70e3d050390347694b128f41b3ae45f0202d5399","impliedFormat":1},{"version":"3756ef26b01878865a645146b5bfcfa41579b37602115c731d983953edba2fef","impliedFormat":1},{"version":"f64ede989923d49b0ae753a153acdf2b62cd015c8ebcdb239d5e1731b235a4ac","impliedFormat":1},{"version":"4cc0c28fc8d12ff997e235bb2070832d2ecd5e2b96ef176158d9a0ef85cf8252","impliedFormat":1},{"version":"0c1083e755be3c23e2aab9620dae8282de8a403b643bd9a4e19fe23e51d7b2d3","impliedFormat":1},{"version":"0810e286e8f50b4ead6049d46c6951fe8869d2ea7ee9ea550034d04c14c5d3e2","impliedFormat":1},{"version":"ead36974e944dcbc1cbae1ba8d6de7a1954484006f061c09f05f4a8e606d1556","impliedFormat":1},{"version":"afe05dc77ee5949ccee216b065943280ba15b5e77ac5db89dfc1d22ac32fc74c","impliedFormat":1},{"version":"2030689851bc510df0da38e449e5d6f4146ae7eac9ad2b6c6b2cf6f036b3a1ea","impliedFormat":1},{"version":"fe41827c829a34a4f45878dfc6cc4b844650916d44a61b36254863a426fa91dd","impliedFormat":1},{"version":"d95ac12e15167f3b8c7ad2b7fa7f0a528b3941b556a6f79f8f1d57cce8fba317","impliedFormat":1},{"version":"cab5393058fcb0e2067719b320cd9ea9f43e5176c0ba767867c067bc70258ddc","impliedFormat":1},{"version":"52603bfdfb1d4876e277c91948f477ee2ccce162948552a6d0f16349e23b6b78","impliedFormat":1},{"version":"cbc868d6efdbe77057597632b37f3ff05223db03ee26eea2136bd7d0f08dafc1","impliedFormat":1},{"version":"a0e027058a6ae83fba027952f6df403e64f7bd72b268022dbb4f274f3c299d12","impliedFormat":1},{"version":"d062a91804b84b19ded55160701deb671db366268b12740aef680788b3ee60a9","impliedFormat":1},{"version":"83e8fd527d4d28635b7773780cc95ae462d14889ba7b2791dc842480b439ea0b","impliedFormat":1},{"version":"00121d48e941209d282cd87847c665686b77e12e2c3534f20059ece8df0cb84e","impliedFormat":1},{"version":"3f3738f89bafe97669f8ea8a3dc8b84ed49cd824a0183cfee0a4faa876801c14","impliedFormat":1},{"version":"7ba3da2ebc2c14674a038676dd882f4344e0a3fe5f67dcc5194bf99dd64e330e","impliedFormat":1},{"version":"68437fdeaa0ff164f7b99c2ebc53ce65929a5409e8f6bb21bd95934c483d255d","impliedFormat":1},{"version":"c2bd0617a24715df7b8d0ac56473442a2482628660f30cd52114dbd7bc1c27f6","impliedFormat":1},{"version":"4e47bc603a7e16fdf599ba9d09f9fd2d00b936b19085d356214671b33e502ff4","impliedFormat":1},{"version":"5a0777377bf1fd63810bd9617f2d56163c53c6884e81613ae2da98889dfe07a0","impliedFormat":1},{"version":"cfd51f2db7c9c9dc12db87b692e07ed8c77d9fe98a05adb0a264836219cc6fb4","impliedFormat":1},{"version":"b9a6d486c3edd49e42740b6a5958b86e07e6716cac5a2c71b008c2ea319339ed","impliedFormat":1},{"version":"8b88aa741f548dfecee3149b7647734133099ea0bb55faacc0a4359c985bb511","impliedFormat":1},{"version":"0170e62e2cd9587a03ce7fa50a00f3f54f6ff1cd5572866854da439dd98720ab","impliedFormat":1},{"version":"6ee986791456b816dc26f99e4853a55e8d46bdb3b132f0c951f55e0353b025e7","impliedFormat":1},{"version":"da5f4f30972f4046ddf1f9e4e989f8ff018dad3cdb22ad5d362812319ac5315d","impliedFormat":1},{"version":"e3a76f7384a4c2368b9856289c6930e04b58333532312643ad0c149ef564518a","impliedFormat":1},{"version":"42805267440c3e2de5d9840afee9fa7856b584910a6be7e2576057f6980914b7","impliedFormat":1},{"version":"f7b668b9e7092c7fc7ba99278626faf5639c2869571f7c061d94aad65d93f746","impliedFormat":1},{"version":"ae894c8159f27db9703d637fa2450a10e68e81b61d7dfd1643b42e906e87352d","impliedFormat":1},{"version":"ea3749e8629fe2b9c69ebd33df3e686f8c3134c12d7c6d8ebbeb00b2e7d2ab6f","impliedFormat":1},{"version":"2b3bffe47e21ff4ac9c044ee22b8eb09b545969b7ee43ec802ab7043184ff4ae","impliedFormat":1},{"version":"8c25b00a675743d7a381cf6389ae9fbdce82bdc9069b343cb1985b4cd17b14be","impliedFormat":1},{"version":"f644d56076dad584e6c2340bf948c4ac483724e0d783c7b5debfe0011e18d1bf","impliedFormat":1},{"version":"f9ec7b8b285db6b4c51aa183044c85a6e21ea2b28d5c4337c1977e9fe6a88844","impliedFormat":1},{"version":"1aabfda861786903dee14dfb992889eecb37723fc5f8a56308b6750ffb564e8f","impliedFormat":1},{"version":"9d0f5034775fb0a6f081f3690925602d01ba16292989bfcac52f6135cf79f56f","impliedFormat":1},{"version":"7dca4f01bf3cab3f9f6631457201afbdc251671ce6c532c6d7eb11735181a674","impliedFormat":1},{"version":"9312039b46c4f2eb399e7dd4d70b7cea02d035e64764631175a0d9b92c24ec4b","impliedFormat":1},{"version":"b25b1c87cc274a9fe5320bb50d4d8ef9eee289c9baf0b48f4ed019f43c71e7f1","impliedFormat":1},{"version":"b6412f7de96b8285856530ca1f2995d325d9e46a3be1d89e328e3e94488c4163","impliedFormat":1},{"version":"a8cb7c1e34db0649edddd53fa5a30f1f6d0e164a6f8ce17ceb130c3689f02b96","impliedFormat":1},{"version":"af6bf86b483eee933366555ec38d289524058c5d879c32c13d6bc018f971bd0b","impliedFormat":1},{"version":"74458694aed78c14047f46ffcb079e2f33537f4c69e60876dafe6e06176c299d","impliedFormat":1},{"version":"348e5b9c2ee965b99513a09ef9a15aec8914609a018f2e012d0c405969a39a2e","impliedFormat":1},{"version":"83fbd19bd3c5babf4b7580d08cda3f3dde243efd3897f7119efd0e69c84fd48a","impliedFormat":1},{"version":"73004367d838dc6db343d60fdc8e660dbe4031115c6017995991cc01f5861457","impliedFormat":1},{"version":"367a2dbfd74532530c5b2d6b9c87d9e84599e639991151b73d42c720aa548611","impliedFormat":1},{"version":"eb4ae35c5be251e6f5fe95d8da4b5bf3cb3d9777768571fab28f84a76cbdc76f","impliedFormat":1},{"version":"442a4f607f42f6121aba76cae530ac5df412c25d22c69b8f5ea19ea95d0bf413","impliedFormat":1},{"version":"26d080d028d6d2c9d601ee7d80b98c189b6690e2e14583f24cc68fbf99ddfa5b","impliedFormat":1},{"version":"8d4b70f717f7e997110498e3cfd783773a821cfba257785815b697b45d448e46","impliedFormat":1},{"version":"3735156a254027a2a3b704a06b4094ef7352fa54149ba44dd562c3f56f37b6ca","impliedFormat":1},{"version":"166b65cc6c34d400e0e9fcff96cd29cef35a47d25937a887c87f5305d2cb4cac","impliedFormat":1},{"version":"6c5e93fad7d8ced5a593e63a9a35037d1aec5c94c4051f3d7fb6c022267b2090","impliedFormat":1},{"version":"a78e11165f4c5e14577d236f8837b60764088764eac4309b04d33f56e3f5c0b3","impliedFormat":1},{"version":"e6d61568c240780aaf02c717f950ba4a993c65f3b34ff1bacd9aeff88fa3ac4c","impliedFormat":1},{"version":"f8ddd00e2c902f42a3cb1b7d50534a7830a64ea8c1dcda4b9af1183e4fa1b93a","impliedFormat":1},{"version":"2ec227febdada06521f5d5d35d1c746a200c3ad92e7b958c67c8ddc14b4951b5","impliedFormat":1},{"version":"199ed4df662f57e0eb8311ae9e2386fa560e54b8200081a3bb8d6d44706c963a","impliedFormat":1},{"version":"88c47fbe36bf500658bd9883ce6627ef752905d85a15494f2497984920bd8ae8","impliedFormat":1},{"version":"16cccc9037b4bab06d3a88b14644aa672bf0985252d782bbf8ff05df1a7241e8","impliedFormat":1},{"version":"9476f1e20728507caec3741b384a27660afbef4281b260d1cbab075917257fea","impliedFormat":1},{"version":"89da9aeab1f9e59e61889fb1a5fdb629e354a914519956dfa3221e2a43361bb2","impliedFormat":1},{"version":"452dee1b4d5cbe73cfd8d936e7392b36d6d3581aeddeca0333105b12e1013e6f","impliedFormat":1},{"version":"5ced0582128ed677df6ef83b93b46bffba4a38ddba5d4e2fb424aa1b2623d1d5","impliedFormat":1},{"version":"f1cc60471b5c7594fa2d4a621f2c3169faa93c5a455367be221db7ca8c9fddb1","impliedFormat":1},{"version":"7d4506ed44aba222c37a7fa86fab67cce7bd18ad88b9eb51948739a73b5482e6","impliedFormat":1},{"version":"2739797a759c3ebcab1cb4eb208155d578ef4898fcfb826324aa52b926558abc","impliedFormat":1},{"version":"33ce098f31987d84eb2dd1d6984f5c1c1cae06cc380cb9ec6b30a457ea03f824","impliedFormat":1},{"version":"3c6a44baa626b2e2a30d28f10bdfa222b5f3e3cde934cdbfc58dafdb8187ee8d","impliedFormat":1},{"version":"bc8eb1da4e1168795480f09646dcb074f961dfe76cd74d40fc1c342240ac7be4","impliedFormat":1},{"version":"edc2a35ddff16a7f782ec0469f1dcdd5d8b201edc4c87bba11328b914ba23962","impliedFormat":1},{"version":"4b31302539066a3c659827d9bfc8a8b87ced23f93bb3a2addc69de2b9755a9b3","impliedFormat":1},{"version":"03b9959bee04c98401c8915227bbaa3181ddc98a548fb4167cd1f7f504b4a1ea","impliedFormat":1},{"version":"eb3b3a66826139a3b957f0ae19e23f91b53a4c02b0279c6c6d2424e931087241","impliedFormat":1},{"version":"d7ebeb1848cd09a262a09c011c9fa2fc167d0dd6ec57e3101a25460558b2c0e3","impliedFormat":1},{"version":"4bbaeff9c9a01a2114381295a3f906297bf1abfdfbc86f70f9150831d2aec300","impliedFormat":1},{"version":"f01a37c9882686c5bbb9953c42daf06fa882ea6777e4ec6a2426d924f96a1bea","impliedFormat":1},{"version":"7f831d8e56a758f52c20bc1885e5688f5f90ee2eca5614f8cb7c7fc64163eec8","impliedFormat":1},{"version":"756620a7876cc6c978ea41d539077e87531a6fb694714d83f7e678fcda0cf0a1","impliedFormat":1},{"version":"07df5b8be0ba528abc0b3fdc33a29963f58f7ce46ea3f0ccfaf4988d18f43fff","impliedFormat":1},{"version":"b0e19c66907ad996486e6b3a2472f4d31c309da8c41f38694e931d3462958d7f","impliedFormat":1},{"version":"e28dfe7b98bfc68df56ffc40a3eda1cd641a80c1e58ae34c16004da9e180ddac","impliedFormat":1},{"version":"9410002058dc5a3bdaad93d06eb4818b979db68a76f9c55505918134c12bb922","impliedFormat":1},{"version":"cfee6bd586727f6191752bb6a43d4e61df57fc81ade38f07e45d4cd301c60762","impliedFormat":1},{"version":"02dabdfe5778f5499df6f18916ff2ebe06725a4c2a13ee7fb09a290b5df4d4b2","impliedFormat":1},{"version":"dea8ff7cd4eb547a7bf444cfa22e0f9d4bb906205c0ee115f798351335bc641e","impliedFormat":1},{"version":"21af404e03064690ac6d0f91a8c573c87a431ed7b716f840c24e08ea571b7148","impliedFormat":1},{"version":"9da3dd67f93abd40ac95b7f23a3a38b4b0e498a28ef13763fa99d77a0e2397af","impliedFormat":1},{"version":"3784f188208c30c6d523d257e03c605b97bc386d3f08cabe976f0e74cd6a5ee5","impliedFormat":1},{"version":"8d9eeb27013f2106f7d3395a85cd022c709a13353f626ab4224f6f56bbddfdf7","impliedFormat":1},{"version":"921a87943b3bbe03c5f7cf7d209cc21d01f06bf0d9838eee608dfab39ae7d7f4","impliedFormat":1},{"version":"e2deedea2704951d60800f9dd25e09aa9815ea747e26363af2b543f367ff1d4c","impliedFormat":1},{"version":"948df6a1457a0d697b50f87ecf41014a0d9e4be54c9980ccb7c6073a74969454","impliedFormat":1},{"version":"ce3382d8fdb762031e03fe6f2078d8fbb9124890665e337ad7cd1fa335b0eb4c","impliedFormat":1},{"version":"286f8d373bf0d8af313e49fc41f9f162397172d99d14561ec4b793fa06070e69","impliedFormat":1},{"version":"c58afb303be3d37d9969d6aa046201b89bb5cae34d8bafc085c0444f3d0b0435","impliedFormat":1},{"version":"a42d7e73a19bcab1212b419862293fc5ea80293523f08d6ff1f4d013cc6e9409","impliedFormat":1},{"version":"23b93ebd1a1014d6892f417137a0873826b8c21f6460e68d93cef9c0163e2914","impliedFormat":1},{"version":"3e1c36055eeb72af70e6435d1e54cdc9546bb6aa826108ef7fdb76919bc18172","impliedFormat":1},{"version":"e00ca18e9752fbd9aaeedb574e4799d5686732516e84038592dbbe2fa979da3f","impliedFormat":1},{"version":"b8e11b2ffb5825c56f0d71d68d9efa2ea2b62f342a2731467e33ae2fc9870e19","impliedFormat":1},{"version":"a214d45ba547c3894dda19f4808b266453a6df9fa26e15353b04a5754d5ab100","impliedFormat":1},{"version":"ae8d2207d209aeed4c8cab7e68d1b7d6051561d1fd17843edc31d6ee62402941","impliedFormat":1},{"version":"ae68b2ed8787f6eb357cd90dc7132767161f0e6fd995a5753a9a2aa0bc8bf9ca","impliedFormat":1},{"version":"1cb6b6e4e5e9e55ae33def006da6ac297ff6665371671e4335ab5f831dd3e2cd","impliedFormat":1},{"version":"dbd75ef6268810f309c12d247d1161808746b459bb72b96123e7274d89ea9063","impliedFormat":1},{"version":"175e129f494c207dfc1125d8863981ef0c3fb105960d6ec2ea170509663662da","impliedFormat":1},{"version":"5c65d0454be93eecee2bec78e652111766d22062889ab910cbd1cd6e8c44f725","impliedFormat":1},{"version":"b5f70f31ef176a91e4a9f46074b763adc321cd0fdb772c16ca57b17266c32d19","impliedFormat":1},{"version":"c0ee0c5fe835ba82d9580bff5f1b57f902a5134b617d70c32427aa37706d9ef8","impliedFormat":1},{"version":"738058f72601fffe9cad6fa283c4d7b2919785978bd2e9353c9b31dcc4151a80","impliedFormat":1},{"version":"3c63f1d97de7ec60bc18bebe1ad729f561bd81d04aefd11bd07e69c6ac43e4ad","impliedFormat":1},{"version":"7b8d3f37d267a8a2deb20f5aa359b34570bf8f2856e483dd87d4be7e83f6f75b","impliedFormat":1},{"version":"a56b494944a68d62702eb94b8a82d6ae99383a99aebf2f569683d2350ed925b1","impliedFormat":1},{"version":"9a9f609412bac0923d83b4ac975edec00a67cbeb7a9b8c542a2d120c9d412617","impliedFormat":1},{"version":"ccf86f5685c2e4570c4d89779f17443feec2215b6dea92df06c1e55c226e27ec","impliedFormat":1},{"version":"58d9a00ee68ce8cee6c98c2d18efcdf5507d6bc638c56ff2cc3b6aaf40bdff82","impliedFormat":1},{"version":"193337c11f45de2f0fc9d8ec2d494965da4ae92382ba1a1d90cc0b04e5eeebde","impliedFormat":1},{"version":"4a119c3d93b46bead2e3108336d83ec0debd9f6453f55a14d7066bf430bb9dca","impliedFormat":1},{"version":"e13aa4087564314f31fc53eeea774137f2303eed725b975dc1f90bee91606c76","impliedFormat":1},{"version":"659e10ee366f27d5694b981cef7f9bcbb41f1f5c783d4afa9033cad5d880849a","impliedFormat":1},{"version":"88fe3740babbaa61402a49bd24ce9efcbe40385b0d7cceb96ac951a02d981610","impliedFormat":1},{"version":"2b44bc7e31faab2c26444975b362ece435d49066be89644885341b430e61bb7e","impliedFormat":1},{"version":"06763bb36ab0683801c1fa355731b7e65d84b012f976c2580e23ad60bccbd961","impliedFormat":1},{"version":"1c6b31147ed295280d65c40c08d281cb5933cef1ede9fb0419add06c26e5b49c","impliedFormat":1},{"version":"bd90f3a677579a8e767f0c4be7dfdf7155b650fb1293fff897ccada7a74d77ff","impliedFormat":1},{"version":"6fdc397fc93c2d8770486f6a3e835c188ccbb9efac1a28a3e5494ea793bc427c","impliedFormat":1},{"version":"9cc02f7c626b430b3c3b783806262d7c18e9f3fd5a9b6eabb4f943340feaefb5","impliedFormat":1},{"version":"ea694ad54dd168114509a1c3e96141fb1cfbafe09e41180af3ecee66b063f997","impliedFormat":1},{"version":"b6e4cafbcb84c848dfeffeb9ca7f5906d47ed101a41bc068bb1bb27b75f18782","impliedFormat":1},{"version":"9799e6726908803d43992d21c00601dc339c379efabe5eee9b421dbd20c61679","impliedFormat":1},{"version":"dfa5d54c4a1f8b2a79eaa6ecb93254814060fba8d93c6b239168e3d18906d20e","impliedFormat":1},{"version":"858c71909635cf10935ce09116a251caed3ac7c5af89c75d91536eacb5d51166","impliedFormat":1},{"version":"58072c98ec36c84158d6e03c3f0ceab9d97d8c75ffdb582b51ed7a76f3b700a4","impliedFormat":1},{"version":"a94ec9e601ec9a6ebc820e3e7f00efc29f7882545bf768ecbbf67fdfc2418070","impliedFormat":1},{"version":"c9ce5e3d6b2c3e44af01635ab1aa3587f704c9037cb41ccb5f19848e0c6b4509","impliedFormat":1},{"version":"5194a7fd715131a3b92668d4992a1ac18c493a81a9a2bb064bcd38affc48f22d","impliedFormat":1},{"version":"d7e8575516f0486a71a4cdadf9729a4e8d5bbf8bb93b6bc2935e725467ee01b7","impliedFormat":1},{"version":"09af2274350fb6c5c38fb540500e270fc957635ccdfdd5c88f4c795ec15b25fe","impliedFormat":1},{"version":"84f64abf3d632450222346a77fa22cb7e590803c12206ff360bad7f8c30e9ae9","impliedFormat":1},{"version":"47008c9a4f168c2490bebc92653f4227accb55fe4b75f06cd0d568bd6370c435","impliedFormat":1},{"version":"b5203823f084dcfaae1f506dfe9bd84bf8ea008a2a834fdd5c5d7d0144418e0b","impliedFormat":1},{"version":"76c2ad2b6e3ec3d09819d8e919ea3e055c9bd73a90c3c6994ba807fd0e12ab15","impliedFormat":1},{"version":"03eb569fd62a9035cac5ac9fd5d960d73de56a6704b7988c13ce6593bec015d1","impliedFormat":1},{"version":"26981490788b9feb8c7924b5e2d18e48248c491b4f4f83802ace47a76205d1b7","impliedFormat":1},{"version":"2ce435b7150596e688b03430fd8247893013ec27c565cd601bba05ea2b97e99d","impliedFormat":1},{"version":"4ea6ab7f5028bedbbc908ab3085dc33077124372734713e507d3d391744a411b","impliedFormat":1},{"version":"23b21a37535dc79ce47d09ce99a98dfd4bf761c2a8ebde5801a6b7dd8d425959","impliedFormat":1},{"version":"bf01a11cb629372c1ea868acf6e7404be8577899658996c6dfd224f593a6951e","impliedFormat":1},{"version":"39c7d61f71df1d3774ad2be9024fc7eb76b0e67bd9732f8ab2b0f37accf4f902","impliedFormat":1},{"version":"45e827b07119b2f563015795ac6d5f94b66af094fd7f7de09cb3482914443f6b","impliedFormat":1},{"version":"07d290dda135776a92b1856bce5d7270f248de8319111163e68b5935fe50ac27","impliedFormat":1},{"version":"01fcd190798c31c1d66e14655988c94fc03849aa397d4881e08fd87e0ef4e112","impliedFormat":1},{"version":"0d7dcf40ed5a67b344df8f9353c5aa8a502e2bbdad53977bc391b36b358a0a1c","impliedFormat":1},{"version":"093ad5bb0746fdb36f1373459f6a8240bc4473829723300254936fc3fdaee111","impliedFormat":1},{"version":"943271effac0b08e46810c06c872c03b370bd6ded9eef91856c905ce01801c2c","impliedFormat":1},{"version":"8966bbefd08c674088a7718b0d56e6383b0f9b896747facbae622156a8474491","impliedFormat":1},{"version":"cc965b2247d9fba606e29f0a8cd7af41dcde0c65f67a6eae428e12a0dc2cf037","impliedFormat":1},{"version":"a82b2b7427deb3f87ce504644f4750b330b508d3e8d6d472eb2470e1dfc64659","impliedFormat":1},{"version":"fe26094cfa1415423b23244080c30e6f52bf470492b4f0a8a2b529f2ba0c6e44","impliedFormat":1},{"version":"584aa68ea4da61ba9b25ab4fb9e29802c1d17614bbbef79451aa860c350e9f19","impliedFormat":1},{"version":"8626ba61c97e15b2d2edbafee2fab14256df1188296ef7ea3d432266f6c86a7a","impliedFormat":1},{"version":"56e7ac5a54b7e4b7d38ce9bc6900d9e54aaca431e9e8e7f2a928ad4f48c4fac3","impliedFormat":1},{"version":"c60c40ead6acb814f0025c606c6ce8734a3230aa39a87cea15e63f6a744fd048","impliedFormat":1},{"version":"4237f49cdd6db9e33c32ccc1743d10b01fdd929c74906e7eecd76ce0b6f3688a","impliedFormat":1},{"version":"4ed726e8489a57adcf586687ff50533e7fe446fb48a8791dbc75d8bf77d1d390","impliedFormat":1},{"version":"9c9ec19ee8869d2704de593719ec04612357ea1a7a54f5db390fb3bd1f5e191d","impliedFormat":1},{"version":"765b8fe4340a1c7ee8750b4b76f080b943d85e770153e78503d263418b420358","impliedFormat":1},{"version":"12d71709190d96db7fbb355f317d50e72b52e16c3451a20dae13f4e78db5c978","impliedFormat":1},{"version":"94e469b446dba074125f990994a3e5625d189adc90888e543f2251e28ac1b9c6","impliedFormat":1},{"version":"a86cfa882becef18d23f0f8e069eab57af8c9f6a2f710e6432d34c624a18cbbd","impliedFormat":1},{"version":"b787a604c98e1c9c90227ce91e670c120b6f3beb1a86a4c2fbd7fe967931952d","impliedFormat":1},{"version":"9ce67d3d910e8517197438c9cd3a6111b3251e14022c38208a7e4485a33a74ca","impliedFormat":1},{"version":"086b7a1c4fe2a9ef6dfa030214457b027e90fc1577e188c855dff25f8bcf162c","impliedFormat":1},{"version":"b7780c8962be6255a755780a94cc8b9ef0f159aff0bc75c3bbd0458944987962","impliedFormat":1},{"version":"d35e5c0af8a0de35cef7df86c24b5781c4ba4b00d99b9adc0317365756266d1f","impliedFormat":1},{"version":"92169f790872f5f28be4fce7e371d2ccf17b0cc84057a651e0547ad63d8bcb68","impliedFormat":1},{"version":"9b300f2254ee3244061ce2fc46c0f6d264151269c987d3ebad83baf6187e1807","impliedFormat":1},{"version":"800d54c96535f21c02ec09684d62411d92531eaa06be90c52f58af65954027a3","impliedFormat":1},{"version":"7393dadbd583b53cce10c7644f399d1226e05de29b264985968280614be9e0dd","impliedFormat":1},{"version":"5cd0e12398a8584c4a287978477dab249dc2a490255499a4f075177d1aba0467","impliedFormat":1},{"version":"0c5b0423e641cd4548ada1f135bbaa331e3eeec06df08407272c6aabd6195d04","impliedFormat":1},{"version":"6fd6c4c9eef86c84dd1f09cbd8c10d8feb3ed871724ba8d96a7bd138825a0c1a","impliedFormat":1},{"version":"a420fa988570675d65a6c0570b71bebf0c793f658b4ae20efc4f8e21a1259b54","impliedFormat":1},{"version":"05e9608dfef139336fb2574266412a6352d605857de2f94b2ce454d53e813cd6","impliedFormat":1},{"version":"0707364ff0112f9ede2917537ed3977736c964437daf13ece3beec7fbb47627a","impliedFormat":1},{"version":"bb1c6786ef387ac7a2964ea61adfb76bf9f967bbd802b0494944d7eec31fea2e","impliedFormat":1},{"version":"14fe75a885114ff0f1feb854724aa2b9dac1b54266907ba803c33709b7f36a7b","impliedFormat":1},{"version":"63792c817a1c2c6443a17555c7ef24f8d44ba0ff11886aa07d3f227a6bef9322","impliedFormat":1},{"version":"5ca313aa465db321d37c36e9cb13c1ac6e5975dbb3eeb484978da578f46f87ac","impliedFormat":1},{"version":"a5e704ce23f12bfe9df4e9d564656ccaa5a9a896fa7c70537eadec4c74d2a3dc","impliedFormat":1},{"version":"3ee349cda390e8f285b3d861fb5a78e9f69be0d7303607334e08a75ce925928f","impliedFormat":1},{"version":"1efcaa13b1dd8738ba7261f7be898b2d80516e3b9aa091a790b2818179f2cf78","impliedFormat":1},{"version":"111a4c948e8a448d677bfc92166f8a596de03f66045bc1bec50a2f36edb710d2","impliedFormat":1},{"version":"9d7437397cb58f2410f4d64d86a686a6281c5811b17d41b077d6ec0c45d0312e","impliedFormat":1},{"version":"b8a7a30c7d484652d2fe907159a9ee679146ab97ed6fb39b2f1c2204e72954e0","impliedFormat":1},{"version":"7ce16c51a4621ea5b3dbf35b20f21c7c7c41180b36e951cd93bc062e6b6c6c8e","impliedFormat":1},{"version":"bbffb20bab36db95b858d13591b9c09e29f76c4b7521dc9366f89eb2aeead68d","impliedFormat":1},{"version":"61b25ce464888c337df2af9c45ca93dcae014fef5a91e6ecce96ce4e309a3203","impliedFormat":1},{"version":"1ac6ead96cc738705b3cc0ba691ae2c3198a93d6a5eec209337c476646a2bce3","impliedFormat":1},{"version":"d5c89d3342b9a5094b31d5f4a283aa0200edc84b855aba6af1b044d02a9cf3b2","impliedFormat":1},{"version":"1ab489c5b06fece60ec3c23b22b6bf6834775bb6836e8c089f7c17cef357cac1","impliedFormat":1},{"version":"61e92305d8e3951cc6692064f222555acf25fe83d5313bc441d13098a3e1b4fe","impliedFormat":1},{"version":"43dfefb6399dd7de2b8d0ce2ed34aad24957c5eb3375d042b319b6337f1f7126","impliedFormat":1},{"version":"41cf6213c047c4d02d08cdf479fdf1b16bff2734c2f8abbb8bb71e7b542c8a47","impliedFormat":1},{"version":"cb007806a535d04e11aefff0ce8cd5c8454cad1a5ed774b5fc94e5fc575a8b29","impliedFormat":1},{"version":"aa6f8f0abe029661655108bc7a0ecd93658bf070ce744b2ffaee87f4c6b51bca","impliedFormat":1},{"version":"5ef75e07b37097e602b73f82e6658b5cbb0683edf35943f811c5b7735ec4a077","impliedFormat":1},{"version":"f5d58dfc78b32134ba320ec9e5d6cb05ca056c03cb1ce13050e929a5c826a988","impliedFormat":1},{"version":"b1827bed8f3f14b41f42fa57352237c3a2e99f3e4b7d5ca14ec9879582fead0f","impliedFormat":1},{"version":"320d97e9caa54f75a064db6b1175a64a6beb0a3b91d1665328458a951824590c","impliedFormat":1},{"version":"e4f33c01cf5b5a8312d6caaad22a5a511883dffceafbb2ee85a7cf105b259fda","impliedFormat":1},{"version":"3ce1188fd214883b087e7feb7bd95dd4a8ce9c1e148951edd454c17a23d54b41","impliedFormat":1},{"version":"61ba31e7f58437f34b02937ab8f23a4ce973f7aca128cb5a8874e83c9321dc38","impliedFormat":1},{"version":"74532476a2d3d4eb8ac23bac785a9f88ca6ce227179e55537d01476b6d4435ea","impliedFormat":1},{"version":"bf33e792a3bc927a6b0d84f428814c35a0a9ca3c0cc8a91246f0b60230da3b6c","impliedFormat":1},{"version":"522868da5e667d4b8e004be2cf17145d59af102f4751e12668a820e20f37024b","impliedFormat":1},{"version":"ee8e27680372864e5a9990d40d23e65b1de52b2b5ad0b27a9a0212640a222c22","impliedFormat":1},{"version":"3804a3a26e2fd68f99d686840715abc5034aeb8bcbf970e36ad7af8ab69b0461","impliedFormat":1},{"version":"67b395b282b2544f7d71f4a7c560a7225eac113e7f3bcd8e88e5408b8927a63e","impliedFormat":1},{"version":"fe301153d19ddb9e39549f3a5b71c5a94fec01fc8f1bd6b053c4ef42207bef2a","impliedFormat":1},{"version":"4b09036cb89566deddca4d31aead948cf5bdb872508263220582f3be85157551","impliedFormat":1},{"version":"c61d09ae1f70d3eed306dc991c060d57866127365e03de4625497de58a996ffc","impliedFormat":1},{"version":"f9b739a41acc36c4d215df65fb7150b0b4a80e479bce3ed801977db2708c454c","impliedFormat":1},{"version":"39e31b902b6b627350a41b05f9627faf6bb1919ad1d17f0871889e5e6d80663c","impliedFormat":1},{"version":"ca7c66d8c6827a8daad0677fe8e3e835b08019676586648f64852375c146dd90","impliedFormat":1},{"version":"38a9544099ad3e8521d75f6d5ea15b6bf8c8ebc9420afecde28f65e88133cf65","impliedFormat":1},"3f4607039d75c9325030d3ac874fa9bcc3d0416c7ebda0534efe5999ed73d137","aead185c98d0baa1b988881738b26deda96bf062d2f434ebb9e7d86e59d11e4e","e9024c33e3a179f2e8c23cf3bead2a57cd06bf2715b5d5a32e3627a218b63d9e","30a8938f9ab858d2b05d34df916203daf21d93d40d30a229caa005fb54f5ceb4",{"version":"5dce8a0d7a4cd653dd1ab2d4bdecae3478ef37d795247958606236af838238c9","affectsGlobalScope":true},"95c5e6b31f13db907e9fe5d7cd72edd186321a0c7a8fb2d89129029fb289c276","8d6a77e5e5f19e09dcba68ee74b0d29f6826f170e0f5c8763fe6e952c7b78ae1",{"version":"8de5bf5a26e967191d40de27df9be18ba82841f88664a73654d20d9cd05fc041","impliedFormat":99},{"version":"bbe0f8b7ea086b27f00960f897eec4b8077d9feb313e79aaae0e53e6ee7c7f73","impliedFormat":99},{"version":"87811c6c4813091299c878366b6b27452529f63ab70351c8a4a9e703590417f8","impliedFormat":99},{"version":"fe4247a5161969bc7ee06e7655d96f118f6b10b2cb681ebdf332c7d4da84f5af","impliedFormat":99},{"version":"0b0604c013afc1fcf9e5b5185d913402863b9be554b155ccd13b343fb6d5af6c","impliedFormat":99},{"version":"d26ae4cbfa2957baee8a6f2987a82e597f18ad98e8d08f5b6c627e2abc5e2630","impliedFormat":99},{"version":"b640c9b2090fd42bd34d877b4da63b984f77151e8492d804a26353258e28b7ca","impliedFormat":99},{"version":"c36739f58aadbf09f620712c3531a0bdf944b16b9edcd16a6c1f3d7d935f3f5c","impliedFormat":99},{"version":"94617f973c27753e95a3f78cfa2298ec16fa4c1873360124b3fb135f94d203e9","impliedFormat":99},{"version":"949107fa4b339e34b9fca78611d63776cf5952927e500d72bf108fdef03d3a42","impliedFormat":99},{"version":"5a76d9a6dd9260f407a8dd8657179d972640b1f6736744ff397921ba891d8d99","impliedFormat":99},{"version":"309757128a194184868dbda49a9583104e10d5f8ec0b144b5adea8faac559446","impliedFormat":99},{"version":"d22ca62641feb3cc9320464b4f1599d02791ae81c96b1d62d52cb58589a8aeb1","impliedFormat":99},{"version":"5edb6bbdd99524132182d829a58beca3da66609cf5d4ffcc79798a293b77b41b","impliedFormat":99},{"version":"3dea506a24fccaa833a3b7b154751904398ab945f7507de0e99563509a0bd886","impliedFormat":99},{"version":"44674355dd062213ce67cfd3ef343c59835748de456b5cd2b13ad92531ab5dac","impliedFormat":99},{"version":"a851a0369c9c4ee56abe7ecbf3b73841f4731da108192887bc74e3a9eb3289f2","impliedFormat":99},{"version":"9760ba531aa6e82a8e9a60d101b65ddae9d398e2f91770595d9f1c5f77931e9c","impliedFormat":99},{"version":"e2b27cc682a1368bfe175961bac462ac908de1dfb49590eea5550fd5bf9a6f29","impliedFormat":99},{"version":"49b088cac71a031ab09cc6d68aaba7b57e373693c72ea56dbcca094493a543e3","impliedFormat":99},{"version":"e546f06410e5259e513d9c85f3ffad6074634c223dfedbcc6fcce144176303bd","impliedFormat":99},{"version":"c049f4fe2068d1f7954e4fed057623cb870969eaf5a71bc77b5a677bf5af3f24","impliedFormat":99},{"version":"76cf68162903a40eddf28199107e921b9c08c033eac1c07efd4dc979fd4884e2","impliedFormat":99},{"version":"41c111ea5e8946726775a71c224438a7a7009329d1b6119b1c8dae82e433f6dd","impliedFormat":99},{"version":"305af9c2a8c308a4f430c3f2b81d68119f4920ae5942c3109d1178d879a028ac","impliedFormat":99},{"version":"d0f0427311a816aed0f31eca5bed01d2c720ef0c104f8b6b62c86101556f716b","impliedFormat":99},{"version":"a5bd6ae20ff492c2ec9a0eed17d73cc2a722c09d12a8cdf321d74c40de279686","impliedFormat":99},{"version":"ac25bb824a57d31b55be466a44ebe002841d19291da64cd6ae7ce6525b7a7b04","impliedFormat":99},{"version":"1c51722bdcb3e6bdbfd301fbaf546638dcebae9e6a02716e21373343096851b9","impliedFormat":99},{"version":"49cb95b8f3503bf3bc2481d747603e5ef2d541466b96c4b349c2296def086882","impliedFormat":99},{"version":"cefd620019820a3980cd72b3e41af68a97e42e095026f50cf95e6304307cfe48","impliedFormat":99},{"version":"ed2be494a8b56779518444accb7e616f85dbcbb19043a5adfe2b2ce9d92b52dd","impliedFormat":99},{"version":"79fbdd164ed7ef0ee1d9bdb3f65ae228d6c66aa915a46154912164717a97b96c","impliedFormat":99},{"version":"c542323dc44c3c36a1576c347164ad2167b4fc8c13da9610c7cb866786637c18","impliedFormat":99},{"version":"55b13f885a41b6ae500f75d5c588d05f78bfdb471d9b04cce391aaa9a3f9f05b","impliedFormat":99},{"version":"4c62dee16a75c9b0ee2b7ad080a8778c8ed8392e5297c9e07f001148b59f5ca0","impliedFormat":99},{"version":"48eb9347a1f264669519d10aaa422de9a6053b41b3fe84911ea8898a942b922b","impliedFormat":99},{"version":"afc496c3b64cd9d58d63640845132e08e48e05a29ddf2f1aa23cd46bfac3a584","impliedFormat":99},{"version":"05c8ef07d5dfb84772cedee2faca46c8ca54d151c16871a6643ede5e208daf05","impliedFormat":99},{"version":"24ffd8a17ccccb3e56570ca53ddd02e772f0b6a4ad3c5616ae642a7e508b7cbb","impliedFormat":99},{"version":"fbd75ba9061b448f015dc71a9ea3891ea17d361e6106ac1356aee358420a8562","impliedFormat":99},{"version":"4ee579b9d37f6198fbc1d3eae2aacda3b7ec6ede001f455e6ce12aef07d5ec59","impliedFormat":99},{"version":"3d4a999e994018e2440e6dd37afecaa4154d616052df8a28e2f1a2259f19b81c","impliedFormat":99},{"version":"db1521b3a21573cf7a452af203effa3482cf0a5b8454e2af4a1f484306a64974","impliedFormat":99},{"version":"45c4a138c13303d5fcfbab589251b7869887f7eff622a2efb7925e2ed7797420","impliedFormat":99},{"version":"1b14568ba50dc5776828b4c6e1be1e7b3aaba855680eb3ac9b07c8a00414373d","impliedFormat":99},{"version":"34091b6bb864d275a0c9080bb1e72065a616d176d3eb00d0402326bf83e206ff","impliedFormat":99},{"version":"11b55793b4507c2cc763198427e11a0bd5e931aee36e265bbbf21632dbd4872a","impliedFormat":99},{"version":"e831709cb7f77e60ebdad8982c5751ba745a77573cda6f44f4ab8d4027ae88be","impliedFormat":99},{"version":"c0defffbf81eedd1d7e9f54b434866942c2ab6c5381f8cc6d5022dca5888d07f","impliedFormat":99},{"version":"e8b639c2a91e047787f660a9dd3895a2ce1200fcda7560841d5637f9583c8db2","impliedFormat":99},{"version":"767e0b38fc031fdf1ba7fa253f264912774e67d1d52ce4e852eae8c3985ba6f1","impliedFormat":99},{"version":"8d37af9291a8ac73663132c067ffb65e649254333a9dc86a1b22361fb88cf7fb","impliedFormat":99},{"version":"8cbcd14fda4ed21695f26c27018361772c9d5f754c702620f42436f0f542c1dc","impliedFormat":99},{"version":"90d4a3535371f8c168b88ab0da2562f754810e26455c95698e98b15f11da22b0","impliedFormat":99},{"version":"12df154d3dd79dc0a4b71fc1e3c5d5fbdbb6a5dfd99c68783020e56743fd4776","impliedFormat":99},{"version":"4f99756bda4a08559be8508b7e83a5be0a93dcaab68790310abc4fa09b93a849","impliedFormat":99},{"version":"2349b5b7d1a01add8c3f99286cefad821143f1df1aae0867cf813f02237a1728","impliedFormat":99},{"version":"09e449359562a9ccee76260902e48260ea75ece6e8d17abe9e7593d900a320eb","impliedFormat":99},{"version":"a6a33dc9ae9532283825868ee5af9118ebc26978ced995fcbfdf90ff7c5e2f0f","impliedFormat":99},{"version":"dd4de144ff9e9db9fd3dbca7e1fb7f639b39ef953f2b3c49240c7f2a9736fdc8","impliedFormat":99},{"version":"a0f9aae8392286dc83d0712328a0c066ff43594158ff67606b8f9c1aeb69a823","impliedFormat":99},{"version":"4c9dca53c43c6cde0627e9851dd56d958d6ae68562e2913cc3abd1ef73f9a00b","impliedFormat":99},{"version":"6914eb2bebd7fda4f9fe8db98ee09f5554a1ced9684847b3e27dbefbdb87b1dc","impliedFormat":99},{"version":"dd21f9d9947f9e4a773809cc37b0b094607afdc83cd0e79f2d97250c4501b6c7","impliedFormat":99},{"version":"2066f78e539fc3e9b9a756cddea61af372d9f35be7ffa9497c6704da56c9e61c","impliedFormat":99},{"version":"3d3fa0b2c95631d01e1291b98adf0423f2a74a87db32df8fe0c062b6db6eabff","impliedFormat":99},{"version":"bab5341c5fbc115a91a38bc1dd18a3b8f9e9f6601f898eed8bf6b56d2469b823","impliedFormat":99},{"version":"0d1fd7906b3767ccf874e84b76817b71c81836b02f9c5fae2daade6fc26f1b2b","impliedFormat":99},{"version":"828d97f23443ff54c85832f7fe1bd2aa204cc761193f2fdb95391c3af2eddb4d","impliedFormat":99},{"version":"47aa55962c8eb1bf8f46e84aacd04d89296bb9ca3a2978382cb81bc4f1c726c9","impliedFormat":99},{"version":"6df68fc4f79f293f1ab2d25951f191161ba0b13ab2c06b9f0dbba5513c5a0e1e","impliedFormat":99},{"version":"cb6bfbb5f55783ddb18adfce848dd24bcf85bb777bf77a0d71dd773cc7b62c22","impliedFormat":99},{"version":"286f368d27af276cb55d1130452b98b9956bd59d142a62b514ee6f1f98395271","impliedFormat":99},{"version":"b046da4f4d04ae2789837a9c1c32896d2d99256655b4377e1e47c0945288f9c1","impliedFormat":99},{"version":"0397b33949bba44c603a8919b1cec9428bbf84ee3c90819b080dfbc764e01724","impliedFormat":99},{"version":"7f971c8a26679b60b7765f1a9da29b987a93795909acea2896b2da567b2429bd","impliedFormat":99},{"version":"55db20deb5ce62732518b1fab73d5b3609113c027f58658c1f3104f8c9073e8d","impliedFormat":99},{"version":"279792abef7ddfc2566cf92e89447f0f2fbf3c5e1ce8e01a2325d6b56e513317","impliedFormat":99},{"version":"4d1276fa5da13705e9e23f77bf97aa8686c37670d3dbd6e85d5975387da6e9c4","impliedFormat":99},{"version":"4d43f7782e2ae2d5be0449e202e894dfdf0b5e8fcd8fea275b1b1795045ea3a7","impliedFormat":99},{"version":"4c7e9a01365d12cc787fa964cb28503b4bad69cc773e25f883ff53fcd049237e","impliedFormat":99},{"version":"791d109b55c4589a49c89729aa8df87d88ad546a322a4364ee3770a845f93a0c","impliedFormat":99},{"version":"ad2aadb0857cbc6b0a1177ec6b8944b734f5c6c9481baf77d7f3b2c0fcc5b2f0","impliedFormat":99},{"version":"319d7c7aabd2bacb683985cadfe402cf1ce13185241638ae98ef2467c111717f","impliedFormat":99},{"version":"1d8c74c5747df6706dece004ea4c537ed5080e95b90d1a1620bdaf46bb8d180b","impliedFormat":99},{"version":"2e0fbb883f847aa1bcb15d265757653f79d19fe679c2b84adc5b12a1b83371f6","impliedFormat":99},{"version":"e62d894e8ccc27d596235f8cc055ce0d27772eb13b310577ad7c2bc4e2f2b23c","impliedFormat":99},{"version":"bbb48c9b123ebf986aecbdc2085387b279b9db9822a99075135c164d4bc12c99","impliedFormat":99},{"version":"f46ed0abe3275015dac23dfc2f7c0d7aba8d7378f9dec9a0dea5f9565bd6f582","impliedFormat":99},{"version":"0dd3e4ae8e0f3470f2e5dc1fd95600e2f0753112d3a7e0f61225a81e8389a6c8","impliedFormat":99},{"version":"8fb8660a87df46177ea76db4338c4475b8b8e7e42e36bf124195489cb6fc9ae2","impliedFormat":99},{"version":"55f0aea7d8e5668fd2b74231106be4dd6c75563e8e794a76b8539c5320a3b41d","impliedFormat":99},{"version":"f42f470b9934ca024afac9c220e5c57b5b70de2383a821e3e7d58b5de29f6646","impliedFormat":99},{"version":"22f011193d780d619a9a4dc9fd0307bfc0c7869d496e371245d50b72a0e1d0fa","impliedFormat":99},{"version":"acbdb315c0433c6832fb64027dd421c1d193551e20b5da391cdb20c6b8f95dc8","impliedFormat":99},{"version":"d7ac7a29f5fc29b2b157fd2ab7738946597a29b5670c2290d4b81aada8fbf6bd","impliedFormat":99},{"version":"7f85382c44340cc8c380bfc3dd2e5c69c280308538044601788e2f1ae3e55a9a","impliedFormat":99},{"version":"7d7e9f13134199ed1b0cf6c8775a614c1bf4341ae74edade456500546ab2776d","impliedFormat":99},{"version":"f57d7c9fb29a389e44af09d54c57d9be1a130b80537af035334f9a8f2e55fa76","impliedFormat":99},{"version":"0f76779994fafbeee4d135c21fb87d35b81c6fa913ef85e5b6bccb3ffcbd57db","impliedFormat":99},{"version":"64c4f811d9ace920e8df2522f72905cdeafa7812166416efdd51a9350d361628","impliedFormat":99},{"version":"cdd9d75a5e91d288b1f009ed8d885e29dd61d04cd12fe66645a69e9364fc2fd8","impliedFormat":99},{"version":"c81859d7edd8ea8016c3ef669bde80a68a0a8e85440307d6c07c0e47e6e70a7d","impliedFormat":99},{"version":"a1d72f11de9816b4776ecadea48d9c2a8c486cd8b465b674647557653a151a0f","impliedFormat":99},{"version":"33b8b6eca734548828961d9ecc9c21f729f08bab8c2c9d95c9ce772db6431f94","impliedFormat":99},{"version":"1861836a3156845df6c43d92e7634515050e349eb569d5ee523e25a2ce6dbc55","impliedFormat":99},{"version":"4dade3290736a203b3e191085b91bc93c9a51dfe608211d314ce688a7d1915c7","impliedFormat":99},{"version":"558b4eb69385b53bb4f76dfb9944da2b324c97f4cc915f8a57ffe12adc08bfc2","impliedFormat":99},{"version":"57b6feaf806b2ba926d3000f59436460462d6b551397322dd983bca10cb82083","impliedFormat":99},{"version":"9a599074752221456c6ff3fab0a9e5e42318e610bb21a23c1364d12b0669d01d","impliedFormat":99},{"version":"17854000164e5e5ef1318f5f542b770d80b0374fa95ac023e01a91440d93de35","impliedFormat":99},{"version":"fcaf10eebf077d5a0e4be81424fcc296905533359c46ba1198c41e98e957d70a","impliedFormat":99},{"version":"71d9bf57ae0b6685fa69e800f44a0e040d1418f74737bb590d71374f02a14f5d","impliedFormat":99},{"version":"a3e8df36aeafd3a63629f85cf72f46be39de7f350af3cbc40bc7917f41b36861","impliedFormat":99},{"version":"86fbc8e6592abc2775bafd3c2b2eb5cfd0e37c4d57e0893523dea6d67c19f05f","impliedFormat":99},{"version":"14a976b28005d68fda91658eec498db736406afdd383a6a4e674ba2528815348","impliedFormat":99},{"version":"e6acc224ffaf9707ce0d3914ce46ed083c7b6469a0f195543fa7cf64b648d4fa","impliedFormat":99},{"version":"8ec434028fb805c17f244b68ccc992391ff8ec6ba0c4bed1d04e51741f344e90","impliedFormat":99},{"version":"e2a0a09c2e1fab39ea345ec351a93f93ce425d2c6234606e705b3a6c84b8b46c","impliedFormat":99},{"version":"e036c82ae9c6a656dc591ddd4f68f70377e6900e7e4042769d4cea7d215bca3f","impliedFormat":99},{"version":"248ec4811949f314a09307eae53df10b95aa35546a9e3dc6363a2916b02195c7","impliedFormat":99},{"version":"e435436a95eb581e852b35d6f5eaaa62be7a8bc6da288254ac3394c60511e5d0","impliedFormat":99},{"version":"5cc46f1e20556b157f798a8043e6447c88f118859810d55d9b845e245b17f2b9","impliedFormat":99},{"version":"20fa43bd305c2a0f27590ffb829d5897db5160044136e1c216239a8fb91cfc60","impliedFormat":99},{"version":"3c9a0663746013d1a7f2085ca9fd23d4a1d81831d105f55d83499643db339a6f","impliedFormat":99},{"version":"cbf9bfc5883bd84a49685342affdab376d54622d075c360c1e9ee0cb1a52176e","impliedFormat":99},{"version":"b67eedd415da9341688bfc4897f67951e6f6544130d339d631c578d9ce5179d4","impliedFormat":99},{"version":"74dfe23f35f7f780bc43517662cf6bf54e2340fba8c96499a9345f5c54310765","impliedFormat":99},{"version":"216e481f8b352b3381c3ca193245c9e70eb988f13b11c90560fce7f58046d9e4","impliedFormat":99},{"version":"442f979c95b63bc7545f20a9dbfacf969a8bf8d50f38ff5e8647883af962ea90","impliedFormat":99},{"version":"7ccf30591af329e39435375251583e00f458be6e9412ca78457fd618c3ed3219","impliedFormat":99},{"version":"0e4023053e2d67cb1875fd3fccb3d9719dd35aa7ed8dac2f8f0a6b83eac1c619","impliedFormat":99},{"version":"121d72cd64ce108c997080ae85d77526c0bf92cbabd595e85b22cc5b2eb5356d","impliedFormat":99},{"version":"2e58e0a3705c2c5e2f8990d9fe54a987140eb6b07d39969667fb5a61e0012164","impliedFormat":99},{"version":"0ac60f7dd28ae5fd26af8a26038bff0a0860f2a934bc3eff3508b9ea606100ee","impliedFormat":99},{"version":"23e86961cc70c48457a30b54d2a7cb321db04ec37a2ce709a558935874ef5980","impliedFormat":99},{"version":"813924ffc37d482abc63f7809402b6d04bf10ced84ceb0ce5b593f93000b0738","impliedFormat":99},{"version":"d39f8d34fef31f645d4a5036d21b6d76f1de2fcb002cd976c7efae530249d79d","impliedFormat":99},{"version":"3dde9915cefa4b06bdd06d0afacb2008400eee07fedb70cd4fe895be5d7c37a1","impliedFormat":99},{"version":"6fa7984697bbae60ab189ff7930691b20d214c1fb68ed6098cef5f616ac8d3d5","impliedFormat":99},{"version":"49cb62a7fa903a66787723065158a23455550d938649544b9afa0fddf13da5a4","impliedFormat":99},{"version":"8093af89ce523d6325f01b1502b431dea33dee468ea0b207f3ecb6b8e8c869fb","impliedFormat":99},{"version":"1fd777885f679efef7156857398a8e40a65f48f9d4b53b22188593e5d9a67f7d","impliedFormat":99},{"version":"381f82f83cfc6930ccbc008af3091f09a75242ae15d2e04632db7fc4e44c0080","impliedFormat":99},{"version":"fbca59f60b22cd0db89922e7f057c713b027aaa1e2c2818632fea718f8200632","impliedFormat":99},{"version":"1bd895f3a629b01cf0ce259e989e8091ef945cb39e29bc4f5dbb35ab66718b91","impliedFormat":99},{"version":"ba8d03eb92363477a46ccd739f48b8a87432bc39a4e0ccadb1bf336c290b103a","impliedFormat":99},{"version":"6ec0dc970053f2d727d22210393569ebedb4ec3a53c0a5e4ac0cbfa179814ef3","impliedFormat":99},{"version":"4220374c20d714335b11a60a1b0392dcf3c0ac82f0773466b731c3ff758a1fa0","impliedFormat":99},{"version":"ddbd6bec7bf000be900df2f6ad03461580cb94c02a2b237d601f091c7f749ee7","impliedFormat":99},{"version":"a4e2ebf51e2314ddbd330380d53527e3acbae6d1fb4919c35f6e6ec534eeca88","impliedFormat":99},{"version":"8aadedc389b7ce3087eb1ef11b85a79ab2b15a418ca0d469159091f33359096a","impliedFormat":99},{"version":"351223dcd7cc1c134826feb03e21e9d40d39497e4641f6640b5b5f118c731cc4","impliedFormat":99},{"version":"3b112575da3840ac278f8edb8898acb94b9c79df94b041b4eb17e3fe1263a643","impliedFormat":99},{"version":"902151bc4db55dd270dc9f38cba4f06c2d5fae54c519677cc3e1197335c58581","impliedFormat":99},{"version":"0b82763f479497a1517786b27d8826d3640d15af245804d322eff12710c5a652","impliedFormat":99},{"version":"c1109b59c4c5033695016057e596c8d34abf048a3e2c1b28169c21b22cba56b3","impliedFormat":99},{"version":"8a35fefe86f688f467c8bef9bf7b465e9be8e5b3476504096076e535127ae3c9","impliedFormat":99},{"version":"00040c315b5da891b7368217aa2d92cc5333f92ea0272ef70806aa5a16d642f1","impliedFormat":99},{"version":"d32d0644afaa7ab25fab4ba7f0c30e194cf211463a9100bf406c24f67573babe","impliedFormat":99},{"version":"9fac0a75a13381632fc5bd29ba84c5f6706c11c447adf8f6628a9ca519c2914c","impliedFormat":99},{"version":"986204e16e3297bca5e64b327e52f9fc4c65bc34497227f63b1a48bfcb333dec","impliedFormat":99},{"version":"824b4ef28c193ed47adf80450a0b8738313561707fe300eebac14ea2405eeb04","impliedFormat":99},{"version":"b634c2e561e3bf8efbf1b79060a9bd5b26022a71574900c3e124a14bb4c4c71a","impliedFormat":99},{"version":"76b8eeff48c0605828e2037ed6bf67d25675860a2f6a8fa1848d3930c2ae871f","impliedFormat":99},{"version":"d7ffc3f3fb6c878d49a92e0e90b737cb09642f7044d6ce3bf53f5698580d8066","impliedFormat":99},{"version":"5ffc2c7cc0be96e71688f7a0062f2e85c6e68b21e605d073a5a6c6a1f3a2a5fe","impliedFormat":99},{"version":"8eae28b0fd19d123cc1b99840528bb1cdf76ba7f0b15034da949d73aacb9702f","impliedFormat":99},{"version":"9b4cc49d65c87c5c38ac19676dc14aa914b13b66ab2f8c93c53a65272e0486a6","impliedFormat":99},{"version":"21c521798aeb2a82dac296829f7450a791b6f154b8a8208f77c0f7370d5f34a4","impliedFormat":99},{"version":"a383c2d014291b0810ebc39adec74792c53ac0fdbd1ec39c87779a8d07e7ec9c","impliedFormat":99},{"version":"635d4c2bbb40d953dac16ebcf52b123b4bc86e58bf6564d0dec062a4c489ee21","impliedFormat":99},{"version":"eb420edce35fac3ff390bbb9d2d98325db9c11a2cd60e0cbdfc1b118b62cf1df","impliedFormat":99},{"version":"f4d93034f0661b40ba9cf90d7d3474d5c0be65fb7f4f3a1d5e9c34210aadb6aa","impliedFormat":99},{"version":"1ebee1d844f9cfa95e5315d90140f87eb1519c8739e7a51111142d3838ce31c4","impliedFormat":99},{"version":"4f8e5dda56f05c96d1f567bb96f32e81039d21ac9af5b4d5fec500f090f21388","impliedFormat":99},{"version":"6f74bde7fdc1ca03aafef483d4f1b0ca50489094b0ce52ce5741c71635494d8c","impliedFormat":99},{"version":"189a993d40cf154596f0becfce65d93b0e3d8c62a1852b9506d86d68b3702d88","impliedFormat":99},{"version":"c1d358eb44c209b7b5ad87abd6d889e28513718dabb6802de8844e517a89730f","impliedFormat":99},{"version":"dfce10bb8fb7c37e9625e889e27519567aa36329ef0b42094dfeac141dd45793","impliedFormat":99},{"version":"dae38b8a375a2e3f8820861c302e675fdeb6981276fab61ad1668c7596e7deab","impliedFormat":99},{"version":"4967ae99536846dd5ac9f3af41ad296b9c36d611a52d7b00ad686304bd23d71d","impliedFormat":99},{"version":"e053193d1742f8702be0bdfa544ad435927557f7ffe67a23ef92b176e60a7657","impliedFormat":99},{"version":"4f1c51f422685db98ead37cf10e723379d21cf990db0d6fb8000b48ea6c254ec","impliedFormat":99},{"version":"951543da1d33a4ed5c53714a1f4ec35b51f8a1c61107649c5ba6d9a1d2146103","impliedFormat":99},{"version":"d763c971f8591a21a1f01c101ee8a769e52e412fe7b1a455a9ea71dc88a758c4","impliedFormat":99},{"version":"b4d7cd9d4092923da05ed18680138dfc72f236181f5618553d75e0ab06f67964","impliedFormat":99},{"version":"2784337e4229d64fcfceb6c4ffebec4d7fee7ac312a316f8eac1a4f760ae20b3","impliedFormat":99},{"version":"63db0b6285f515f8ae6397e307d3b26a56a5249fd80bdf7569ab4b87aa87ca55","impliedFormat":99},{"version":"7ba72b7633d2d2e507f07a59027e24505577797753965b575416ce8e89a04270","impliedFormat":99},{"version":"1762e04cb04fc69364160a0e3d121c63b85945f842575f5e3abc0392acbdaf81","impliedFormat":99},{"version":"b96cdad7e7b0fd253213617c6f76f79444e6c151415584d9195266a9203b4206","impliedFormat":99},{"version":"71663fef9e157f5257a31408ef5aa7fb4774f245de27cd9c618d4f45db01f19a","impliedFormat":99},{"version":"ff8a53256414952562c88aba30a7a2492b86575686c997815b307b1f10bdf784","impliedFormat":99},{"version":"279b59c01e2739e252d3609d4408cd1e67ab977df56f9547923496681f600450","impliedFormat":99},{"version":"d50c4d520094e034e1cf9f4ca262a856b53c67dda3a1959057278317206e5f86","impliedFormat":99},{"version":"39637b145df70dc01000bcffbce1990f85327b9e429d5d0be455e7e1efb235a4","impliedFormat":99},{"version":"afe91c616fc7ef7f8e212efb62c66d8ddefd1b8de2582997f98ac57a4d0a7655","impliedFormat":99},{"version":"7326c8eb2ed751b126ca6b25e9d8e9db67556cb40d5ea485afd7518db9657ba3","impliedFormat":99},{"version":"6ff130b441bf073004bb7fdbf5513fa7bededeb5ee9add10e0e395738eb5f4f7","impliedFormat":99},{"version":"272e5e5ad2298abd3852b0f5bf896ee1284a60bbd9e4e45c961d66fdaf309655","impliedFormat":99},{"version":"02ba9c57dfa46d5673abe376a9c35d03f3f4100b4d9c5f9355e0a62bfe8c16cd","impliedFormat":99},{"version":"35a603a9a038aa340a6cfe26b59a9ec2d984da2c5e63a3c46c40113db6635ed5","impliedFormat":99},{"version":"670c15b05a76b37a6ccc1d2e381c7a1780d1288b50751a037c3809c7d4d433f0","impliedFormat":99},{"version":"fdf5d761568f1bb4a318f8ec9f33e99d1f6fe3d7d1a1f573605f29a03b4bc002","impliedFormat":99},{"version":"ae8bef1c3edc4eceaae9df6bf6a046c52bc4838d2344e2bcfd55b84a5c4714c7","impliedFormat":99},{"version":"358b82dd6de9956c92e1f6aaedc4432bde6a8cf4a9b2cc18e6cff0ba2787cb20","impliedFormat":99},{"version":"15811478ecd27a7b1369df74b7135e8ad8a8352c35dbb13035cd5ab2352fa0a7","impliedFormat":99},{"version":"c0ce7088c30ff91f0ff8d514b7f8dcace90b65c554b8a3027cf864f558c4cd80","impliedFormat":99},{"version":"4b49f46b98cf981e1d9f0e75056c458f0c242ee7661f1da3e6cd8eba7b599bcc","impliedFormat":99},{"version":"d7033cf81e6636c20362085d87152a2478c2529db0fcc1eb3b1c0ef152caa132","impliedFormat":99},{"version":"95417c140dd26defda52f7a4bc43500a0915d931308c85866136f829d7d8c88a","impliedFormat":99},{"version":"c2668c0b8cb8bde3d7e6901aa6eba98963785e887668eebe974e8df49a44cdc5","impliedFormat":99},{"version":"bf028ae34f02d5604c337ad4fcc8541ce14e977c3bcb3e7f43bc396af5721494","impliedFormat":99},{"version":"fa1ef591870037b5eb045e5d01902f9015ac8553622a8c18dce178cda3f981a3","impliedFormat":99},{"version":"8a14c1e4557c91f4ca586e0762f423f699e6b97ee5916f548c68966624ed0a0d","impliedFormat":99},{"version":"ebf000b79f4b3d3f8fe4c1d1dee01b12bb82262750598e382444c2f4c6cb6e13","impliedFormat":99},{"version":"df0211c66f5be54737f0d9f4f9b60261365caa812962343f8d4af61c62ffce56","impliedFormat":99},{"version":"2e6b186c28e363aa0f3144864f74bb0bbcad508f91e4f2dd7b652aa32abed04d","impliedFormat":99},{"version":"0593c7918b3a884cbaae040e5c53c8534d0b7cb2dfbeb923a3b6af15cf597690","impliedFormat":99},{"version":"103d7201704781b7503ddeaf536ae71aaf9005d861e9f9f00ba2d5b7c9131946","impliedFormat":99},{"version":"6d39e1758a21b9b1f7a33aa4068bd2fcf9d83f202be716bf03891f04cd11e607","impliedFormat":99},{"version":"4661c14dd9c9cea4b7ec3577adba9b05c554732cd21e51a9a8d67d55cd923035","impliedFormat":99},{"version":"cb7d54e8e4fb0979f0a528e1a40ee833ecf3f2b40cf9db8df5987576359c9a89","impliedFormat":99},{"version":"b3803db7a72c9399c5285a136497140d15618995742f06081d9c2eb52c607b68","impliedFormat":99},{"version":"2a01ae25af7e6725d8d5489fa2aac7e2c521ad4c072fb58f1c6e3bbddf4d913f","impliedFormat":99},{"version":"720a99ab213d49587ddb67dd0cfe541b0cc1b5f6e53ee916b75319bfec2f3ebd","impliedFormat":99},{"version":"81e828965aa9c2efa7403a7a4a533c51e22b618912a03d035a042eb82d1313f8","impliedFormat":99},{"version":"168489d5da3a1925ee759c4ad8d031581cf887a2d305602b4a658cc23ae44106","impliedFormat":99},{"version":"6be5fca571daf55f2f6f44aa9b1497ebacbf3e03e6708e51733a6d84575754e9","impliedFormat":99},{"version":"a623e124420520aaf6077ebf64567f3bee65a6dc3773a1332f0ed513f7f49ce0","impliedFormat":99},{"version":"4d75c7f4eb68d365da1731fa1fa0170895aac801cf21a292dd0503763994f3b7","impliedFormat":99},{"version":"06fe4e250c71760eae5020c88f85742299af8f53530ad9ab937469d5cccd7255","impliedFormat":99},{"version":"0adabfced9aa978628b37783f1e59aa42249a0b7b3fa7b09312c7b866fa3328a","impliedFormat":99},{"version":"7f2cdc3709d66f6004bd77cf9359b467811dd37cb22c00c8af408ab74375769d","impliedFormat":99},{"version":"adbfbc12814060b647c81470c08f3420d89fc93dd1c45c422a10561e3bb6f13c","impliedFormat":99},{"version":"5f1614f54f178ef74d4b33e5871b7a7dec7d330e5d94b28321dd9d32546dae05","impliedFormat":99},{"version":"9f741273f89ff4d1ca8586715c40eeaeb7784d30a9c8324a1dfd39a06371be97","impliedFormat":99},{"version":"9885942ed0ad172b90b45bb4af647ff107a867529534e991f0a112d900d0f215","impliedFormat":99},{"version":"0c262fca6a1199175283b61213d6c6b0646de8584ba0602722eb95b9ad9dfd1b","impliedFormat":99},{"version":"39c1c529a708d276e7f9009b6620063290c18e4c916fc3093d308f32317208d3","impliedFormat":99},{"version":"f2b5e36f2402b53b809e2f64b8e020c6a7637ebce13b95fdac9c26e1a14d7b74","impliedFormat":99},{"version":"8680096ad4dea123f9c49cb0a5deb1fe7a625c93f1a50c4516610925749c03c7","impliedFormat":99},{"version":"0f619545bd7f204050fbe17ab02fd6133ff926467eceda17b430eff646d72ffe","impliedFormat":99},{"version":"923fa583f765c8c013082e64f937b199f980b1b15c40bc3f583b95530e7d2d33","impliedFormat":99},{"version":"505e2b29b7aff97d5cfa06b644a73af595cbb2ad62514705354111eb4a9d25d4","impliedFormat":99},{"version":"0626be91af9b502263c02d30f54462d3b3d441a317caa2fe6c690ab8bae67897","impliedFormat":99},{"version":"0282f7c04ffba8d50df82954017daa8a653cc71c2fd37ccbb87c64105176ce32","impliedFormat":99},{"version":"32d95fa1add10335cf6d98c640a47ebdae0e542b4b2d8c0a302455933810ff54","impliedFormat":99},{"version":"18da6199a28384e4287fbd4035fb4e3602a144975228b436c40371b3a31fd0a3","impliedFormat":99},{"version":"22ff98edd221e6aed5bc9ef9f6a1f090ecb34a1cc465e5b2f7c6b71789238447","impliedFormat":99},{"version":"bcf15f71abb2654e027aa15e6cc2c6b1a56e2a015a4bda6b1215b780b9cce61e","impliedFormat":99},{"version":"b390b5480af1df51fbb3b9bf2140ca51fb96cd6b577ab53de8afe932c1029951","impliedFormat":99},{"version":"449439716e67042af43d9c9290ed4c49bc46854b77273874f7e7f4860b52bdd2","impliedFormat":99},{"version":"a3eeb212864f2cbe7a7e7946425365b0b1bfa25f93e975f622d760738f72cf5d","impliedFormat":99},{"version":"326be804404a38c9b39ef236e45fc4822c4287a337b5d4d2162b7e5577489ee3","impliedFormat":99},{"version":"46d6be7f5084b138f83944e3550fa72591935fed3679ffff9447e2c4c64c5d82","impliedFormat":99},{"version":"b1a7f35702d8f723354d2d69d8f778ef8ceab7f690ddc7fc7ddeea2524c5075b","impliedFormat":99},{"version":"770e7572cfd883ddb4d296572cc49e4183a9299fbdddadaa3f15d9e1643154a5","impliedFormat":99},{"version":"0a0f7ac30acd0ee10988b7fca9c3829610f98b53f83b7e5c7ade6572fd4e4849","impliedFormat":99},{"version":"153bfb6e514f8d63ad14385ebea4a499d36c0385ee58dae66f9dac2337291d2f","impliedFormat":99},{"version":"5d7fb9ed27493c65389f521ca859506d10a6b7e6bbcbdfffb84ae993918037da","impliedFormat":99},{"version":"5bb4df6cdd57a24e32fbd69fb6adf79c3dcbbc4b802a8f3d893a5aca37d3004e","impliedFormat":99},{"version":"21fa1d6be54130de54330ff4c1437ee0baa70d8dcfff4d1c4a85e558875a8c89","impliedFormat":99},{"version":"46439b4d9e8742c3de2c32b1ef4962af91612d83db8a2d77733a21883cb6d976","impliedFormat":99},{"version":"2813b5d86a9e0a9986104fdf4a2a37cbe868a6e17c5e6e3a1abcdcbe1cfc93b8","impliedFormat":99},{"version":"d9450d1102d1179b0faf3baab898c89596c1078885278f94a1aadc4f70049312","impliedFormat":99},{"version":"0f76b54c6dce2b5f193c87e6caa0cd7289ac10781ae342ee6bb7af0ce36cc32a","impliedFormat":99},{"version":"2867f05c20a2225b4c1c8ffb1b5240d30064527fb7a5b1750bd41a89d6c4c8d7","impliedFormat":99},{"version":"1fc856f4fc93907ee59c01efd8edc6b5d49043e3766cec4bea5fa2c2f2f4edaa","impliedFormat":99},{"version":"b864f5118eb5e45345fbd0656be02c88fdb5358c589ad6b5c66ec19f4f0e71a8","impliedFormat":99},{"version":"aac54061ec7558135b4f676212c89b82c969b069342a42f1d5ba6d30f743cb6e","impliedFormat":99},{"version":"d84163e6c4bab8b697bf1c8b0c0908f404df2384b47da63914679f90c0a56bb9","impliedFormat":99},{"version":"ef519ebcf62f2c37cd54485272e42e21bb966b2c203b3565fd265ffee1054a7a","impliedFormat":99},{"version":"fcd2b3eb9f11f2bae710fa4d7a596dadbf1a465b8585f05db63a28d93079b838","impliedFormat":99},{"version":"1d8ab77f40c29a333fbba3585751b384005ced7d895d2c947f146a95413e9951","impliedFormat":99},{"version":"809337f529d322c198398ab84513d7b4dafedeab24179221b6b2f1dbf0f05065","impliedFormat":99},{"version":"60548d44220d4767d7ab2ad9461d664d9aa71afc9e44e03056ad380ddeaa1d66","impliedFormat":99},{"version":"2187909b7da18743b0dacba6e2390825cd20362ff44068e0d47427a607eb22ab","impliedFormat":99},{"version":"962cfde9b7e05989a758aec98703ed75159c40e212df5cec74381eaff82aba98","impliedFormat":99},{"version":"72ffd8535e8e7025b7969c8461c2cc456d23ff175103df046b4fc55a61a38211","impliedFormat":99},{"version":"c890c291338418ad77c86cdce322a8f750bd9b4cd9a456b6363da72549a7a94c","impliedFormat":99},{"version":"df2768213ab37da8fc9ee6cc9f24f4a32c62e874d28625277b6b12f944d4382a","impliedFormat":99},{"version":"effcca1c88335a4448160c1dc7bfe98663f38a67796ee11a04d7bf9c568c8373","impliedFormat":99},{"version":"cde28c7dfb93f6c7f8afb49e6d3a8f8bb577803c7eaa2ab4f02a722d1453086f","impliedFormat":99},{"version":"b05aee7d890773c66fe01f130ee432755c5e0b0e9857e87deac88beea7a57577","impliedFormat":99},{"version":"071091ebb5656ceaca89be5827e45d3367dd7e5f2b51589f5cee241116f33028","impliedFormat":99},{"version":"6324f22adfec34e153717b6d0f416464b8bed2086a7f301fb187cce198e582bc","impliedFormat":99},{"version":"882daca29017e753f72dc0ed60ced6c7ef8c9455bb865f95ce6728e8a7b405d9","impliedFormat":99},{"version":"85cc6f0801e8718042f3116924db65682fc16ef48165136fe136f39d42cf097e","impliedFormat":99},{"version":"61a82094c65a52eff9ff1986c6082e361b0485bfc9eef3c44341f26fe53d1453","impliedFormat":99},{"version":"3b03dfcac351c5c9e0362f081676d3adde495b3d07a8a29f4642bc261091898f","impliedFormat":99},{"version":"909ac7b41961cd1fef0ac5d31d2765c72cc82b4de3a184154b48bc0247edcdc9","impliedFormat":99},{"version":"20fec64d6a21097265323e83c04be9b68e07c26624ba30f05ce53de89fb01571","impliedFormat":99},{"version":"a6d376714411e99706294f4288fa3310d14aa3e211040580102c99fe8c87262d","impliedFormat":99},{"version":"2646752b05b717bd2900551d822735156de24591a2ac17d2ecbf713b5b13f90f","impliedFormat":99},{"version":"ac0ebd6f1cd412a64edaefafc74d7dfb6ce12d03ed88850025622c3e2fa2821d","impliedFormat":99},{"version":"fab8951025c1480a7956466501e4547fa69afacd8a86b6079e1d1a7bfe7c43d5","impliedFormat":99},{"version":"ddd2c8020e0d3e479bd12e739744dd4eddfd512706ee6fc8b0d65b58e234af38","impliedFormat":99},{"version":"027d9c5e810e507c637cb8022c9d44445bd5e3a3c84c5cf55bb2fe67d3bcfa23","impliedFormat":99},{"version":"3679e5a37ccea0b56e73b6d42a36ddbca0a6fcc4119dcb34e652b0e2cb7189c0","impliedFormat":99},{"version":"9e4b60c3965c575a33156eeed8b5f8d5de378793aa1b976189aab25e6ab48ec5","impliedFormat":99},{"version":"73ed3cefe0c0aeb059cf27bafb51e843918087c843ff457a871ed3a074c9aa5a","impliedFormat":99},{"version":"d35344448dcd8a37ee1e2a467f8e9d26c388b712ee3d24a3aa4900585b5545dd","impliedFormat":99},{"version":"3ef76317f676e81cb18eab1fb7e6a1ac60015a57fd679430ed8d1257a911ff89","impliedFormat":99},{"version":"45eee0eb80e0b7604390ddc34fe455d0fc04603d9e4829549272f48c8942c7b9","impliedFormat":99},{"version":"fabe29b682338fa7914d62f21609e4dcbaee9f93ef91adf6db64de244e8140f9","impliedFormat":99},{"version":"bdf0099507aaae26031e61ece1c443799bd090bc99c6e42baad4cf7e9611afea","impliedFormat":99},{"version":"f24ce130c62b7f407a3cea55bd46eb78282ae1e03a5a980a7bf73628e3a25dea","impliedFormat":99},{"version":"cd6e7a1b92dbfdeb233611cb452d8eed24b949cb029f97bef483a5fa3fc7298f","impliedFormat":99},{"version":"09edc5752759a8d4d1fafcbaaa9fad6bc6f1b3ce1a422262ffbd0644f8cf5f30","impliedFormat":99},{"version":"3cd21ebde7071845559b76ee05ad428c5325f788c1fe22e9de4d81e77631fac1","impliedFormat":99},{"version":"542ae7a098c4b7d9ee35b2ded57786de1210bb12845b23605221030b17e04f55","impliedFormat":99},{"version":"8401ff0d8b9f30a8a341ec7269f234d7152177d6a4131e0600e7bdf489233917","impliedFormat":99},{"version":"66a26a0d221fe38994b72cbae8515a91afd5928e40d2f64107ce6bb8fc81375b","impliedFormat":99},{"version":"50594b654ca71c8e7c09bbf175cd34d5efdab5ac423fcb19fd8288456c0eaddc","impliedFormat":99},{"version":"c18cb17ebe4e2417dd2a31a2a4979cfcc72338fde7c9f32768023139c41ee521","impliedFormat":99},{"version":"28d23dbc2c8d8dd21e9b397ae08f5109cbab3a0599df0248190b0cb396c5990e","impliedFormat":99},{"version":"fedffc2d00ff968dc10e3e076f5cdbc5d7ba1e8bda6158bf0ab4286711e1ac27","impliedFormat":99},{"version":"93212dfc3cd9457c7ebde8ed4500164a895d15b55c9f10aa4ac46ffb455c2499","impliedFormat":99},{"version":"f0ab96c940eb748ddfb6f3b1442393759257e624d92034ca6e9698b41a06b2b7","impliedFormat":99},{"version":"823f37edf2f78ed8fd17a59f0837ffefc4b53cc7a0560bcee95bc58626fb9b6b","impliedFormat":99},{"version":"f6439fe717e31e5d222d7e91c5c1082d280f9bf9209474fd7542c4da31b69d7f","impliedFormat":99},{"version":"49126f1c0cd14332be63c13677cbd1543c09362488732b7cd926c8be1fa5a5b3","impliedFormat":99},{"version":"17fd67f8069c954e24fb5ef02e4c97fb2c7b8e5368982ef018232ed2b16b9e9f","impliedFormat":99},{"version":"45be37950ed5f5d4e489a93c3a278811e6685f423d552c33f1518df9c339b5b6","impliedFormat":99},{"version":"0b8f5565dbf8ac71e1f0e36cdf6af9d5e595bac817b1cb49029a387f77a97f35","impliedFormat":99},{"version":"1abd78da038403165528314141ebc823a6adf229febe585828be06e2888b8b52","impliedFormat":99},{"version":"4b068760205754ede438631a83b74443ca9221c47fb5c1026e488a6ff7154dc3","impliedFormat":99},{"version":"10e52fe23fd22927554a0f6637c2f3814aa50f4b449837e84d7c3849c5ace8bc","impliedFormat":99},{"version":"9a695b27f81d8dcf4f4c1ace9362bbf86da55a561333ec22b028567cb77ad167","impliedFormat":99},{"version":"69fa3b563bb3060113c7d4962a0da9fc7d0c1981c1781bfbd776d06761ba7afa","impliedFormat":99},{"version":"45adca51ef386ec97e2b6adeb30bb5bdde8fcacc9b4e6bd7d36b293acb3f0037","impliedFormat":99},{"version":"edfbb6fe54cdaa69a492cc37a4ba702f9352324cda30260ba2dbacc1bc60bf49","impliedFormat":99},{"version":"1648015d9dca4246be02ed5099672f2fc3d2e1f96c4bf38cf312d52a9a36f821","impliedFormat":99},{"version":"f018e038cb0609449172a9ad1130578c92e65939b70374c0847681ce9eea5a53","impliedFormat":99},{"version":"63ed53d5a157ed6749e873d0a4dca4338b86aefc123a605924e4ecc31fc7d3e0","impliedFormat":99},{"version":"602490794c1c63022ff8f03a43b9e3c9464df0e23b2cbfb9a917fc94f4e1239a","impliedFormat":99},{"version":"790d855ffaab4826fab11919a2424117f1df2263cea00515db5d9da27c712f4a","impliedFormat":99},{"version":"b16a21c46be0065ba851366ed933110e7fcc047cd619859cee6fe6043f57eb5b","impliedFormat":99},{"version":"973bd4ce6836a2b7be4281e63be46a02c73c7cfe0f739ec66fba5f64fee42172","impliedFormat":99},{"version":"c95df61205ddee55c0f36488d45eb36923536d1ee7fd2c123765920d0170b903","impliedFormat":99},{"version":"921bc19e17c9b55643dd6bd629c1821a17b9113ed445720c10fe375513aee2de","impliedFormat":99},{"version":"2a596c7487235cc254faeab8d49e084d61d53ca89e00f86da42a5eac0e702cc5","impliedFormat":99},{"version":"063ca493742dae520916addb5eca31c3e0bf6c58cd0f10f5ed8da071d8cc3e58","impliedFormat":99},{"version":"de562ae720d5251cdb274522070f5f5f89a4ce3862043eed99d9456e63a212d4","impliedFormat":99},{"version":"8bc9b778acf6bf5388bea5499cd5b0f4bd7d4c8ed85928dcab7e77038b1edef5","impliedFormat":99},{"version":"17f91aa1a354b537cf970a819537ce1e7a2b2dafca7d4b1b4d0894995c804b2a","impliedFormat":99},{"version":"048f232a281458a0159f024678c5c8651274885d45f86b0b21ca75f5b5ee6c53","impliedFormat":99},{"version":"1bceba42b5425ed2aa158afe916e36e88ee0de33e2f98b390247cfe045061f12","impliedFormat":99},{"version":"e32e2962a30e289b4da7cdc87eb2a79d0102b9abeb37b302b433554faa32721f","impliedFormat":99},{"version":"dfbf0fe6cdc27050ac69f83fe64bfb387dc40cc653a0b559f3ba5185e1e78472","impliedFormat":99},{"version":"f7bcd657a6dafb80e582d43f4bdd33a83b58376734faa9e20cfa9b6030c7a2d9","impliedFormat":99},{"version":"25357858ef183078a99a52e14622266027cd95e2f8a81fd280d539aed447eac6","impliedFormat":99},{"version":"e3b6ecd2f0ec008a7c2f8471bef625c49277dca2a6173a8cffaf920b2b1bf9a0","impliedFormat":99},{"version":"d446c4afecf40dfb4ba6b32a7ed85b5767c145e1e223d17d11fb6a8df9919d30","impliedFormat":99},{"version":"a2c036eefd32f7c0634e1f8615c4b485341d4f1f6fdca5040e62f943972013d9","impliedFormat":99},{"version":"5f3e074edd23169f519bb36e6acaf261a3a5c33af12a8a7e2794b68255bff5e5","impliedFormat":99},{"version":"fc11706b5365ebd58c9434fd9529a100a3d24165e4b04488608b5d55a77d6472","impliedFormat":99},{"version":"909469ed8952f1951373d3294706b50e94d25389326856fd7591557a88ded44b","impliedFormat":99},{"version":"28c160c147c1227df8f46faf50c70dd8ddf0870604250af9eec7f52302b9acf2","impliedFormat":99},{"version":"27a08c3aabe4b415d824042ad958ad9d3d0160c4d8ee43aa8e4a1aece2b921a9","impliedFormat":99},{"version":"4a802c8b0235155d9e45dcaa4d37e46e0eaaab68ef94eeffda6267963267a272","impliedFormat":99},{"version":"5aa4a3727ffa52d1a593b24d6f6e0fd5d3ce859d8ed9bf2367203343f79c0f26","impliedFormat":99},{"version":"964d27f5310297b03bf276d28ba974f3b7c972b532421108378a00cb97fbfe5d","impliedFormat":99},{"version":"315c0551400e653c864fd689e86cd344e9d39de0e1dec74e73b21c6d3602c775","impliedFormat":99},{"version":"5a9636f37a8cfd40dbd97ba1b222f59f085137d574bb90047e77ee853578bda4","impliedFormat":99},{"version":"8b21ec05d818baeb23822106dc371592d197782c61ad6c867bd00482420dee3a","impliedFormat":99},{"version":"3b515b15b0dfe6f511f280d2a66e6f5ec4518d4bbe43699ddd2ae5803ffc2644","impliedFormat":99},{"version":"5cee626e1c97f9c9f634a90e71286bbd32bc84d4391e06286ef7161dce6f8d74","impliedFormat":99},{"version":"77d5d4fa63a5492d5eb299f89ff6440eed60228e4ae45e4675491f1117f95634","impliedFormat":99},{"version":"9caca9e0d06aa45891b2cefe548acf95759cce8be9ba6288d3473ad9a79cfa9f","impliedFormat":99},{"version":"1601c9e2d2fbc602e8ea3cb856609e5dec0eba0f0b4a4190bd1aca8d7e48fd60","impliedFormat":99},{"version":"874f6ab7330b8e05a42d56afd3f77c1758c2d1027e3dbc607956412d503517e0","impliedFormat":99},{"version":"bbc8bbb97a2d014f591b7ef7f12ebf08f8efbdaff154339b89917e20ce586381","impliedFormat":99},{"version":"9ddf9e6cf065d0114a2e03ad2f24db6e2a0b7e0495fb830189fc2b5ef45943d3","impliedFormat":99},{"version":"34392d1d35edd9eefd7aed8c7300e7bd79a486f93a536c641d6369d9de4b7845","impliedFormat":99},{"version":"6ed5d4d4bf431b0b5f10140a0f9e5c91385edca2cf0ba86d6666d966b327bc93","impliedFormat":99},{"version":"e53d7929979440f295425147feebb4fd29ca12b76fa8eededb805974327afacc","impliedFormat":99},{"version":"6ea1298ca33b3ddea4e9fcdb064e1e6d9b3914a243a016b5450ac9fffecaea4f","impliedFormat":99},{"version":"0a613e62ad948843eda4f5becaf2ab18f6edcfd1de024355c74dc28a08a5a101","impliedFormat":99},{"version":"6c21383843396d5d6d1e9fdb594b7f27b1960eaef2e6111d25819b906307eaa3","impliedFormat":99},{"version":"1c0f7aeb0da8e115b03abf334d85d6a3cae1c5f10fa294d6cec1e68109bd9aaf","impliedFormat":99},{"version":"2ad7bd84e41f4ce032f286215e8c9ef109d0c56940423797ab899a69a55dd002","impliedFormat":99},{"version":"aa38b4ba91620fceb0b7c8052a5ca30c5edbb6369ca6953076f394008391a0d6","impliedFormat":99},{"version":"8c9828ec8c751df4156fcc16f2ca81c496563b63439fab6c930dc0a6bcbf01bc","impliedFormat":99},{"version":"398667a797fbed20361065e368e68f5338e88095338c7ef350ab43b52d82cce6","impliedFormat":99},{"version":"06671d26d8a24d55257e7ab611d40db8cdf9da156d53141c13eddf8d22292b67","impliedFormat":99},{"version":"62acc211029559045b264cd8e14413f3bb6c3d197d73ca9919f28def1c0bfaea","impliedFormat":99},{"version":"49ba58fc3f7ea72d435a44695e789d55e9d3b75688a6a5c94da5b65311e965a1","impliedFormat":99},{"version":"56df491b603cb98cc0feee1786f0ccc67cd7044cbaeba753e4a06be0a3dbcf15","impliedFormat":99},{"version":"e789c4c4f3767a04d475ff841044794cab5cce1b464beec3c4764d27c6336ef3","impliedFormat":99},{"version":"c3bf0b45bee7f76574762527d9e8d2b5ccd6b71bc924a4959f566a0e080cc718","impliedFormat":99},{"version":"17730b23f90142bc9bbba78a8ae3e810424683d70fe6868430172bde298cac7f","impliedFormat":99},{"version":"36b0961fdd22011c8b57ad05992a5e786c10a0f7247226df011c9250dfd7dcac","impliedFormat":99},{"version":"012519723b27b0b7d34316bbaefc82b2bbc7b5f09b29f9420b25e7f7f98e330a","impliedFormat":99},{"version":"26b153c6fd0a13b446ddb463c54b8b89391d66e99a883e0d0a5b2a3bdfd4b4cd","impliedFormat":99},{"version":"cf8e9163683d25c0653dd6383d1cb61527ffc680341cd70f2ef82428d174cdf2","impliedFormat":99},{"version":"6eedd556ff92351a9c0837b704da3249fcaa65b249c360f02537e2468cabfd94","impliedFormat":99},{"version":"d7a754e661206c750697768311597e3d333418f1da4546786b2ca315f884b00f","impliedFormat":99},{"version":"0bc0d9c8e623b0adfc5b0f70e52fdc623fe19cf05d76fa28513c04e0e99f2f18","impliedFormat":99},{"version":"8aff0190bd76f107c999b35145ca236977f5c75a6a0b93b3e25185de07a762f1","impliedFormat":99},{"version":"94e5221e731a382af91ce0ed2dbfd0c6c0cade705ba4708937d2d8e7a81c308f","impliedFormat":99},{"version":"0b861aa0e40121348cd97555739762407c59cf6d4d55ff921d02626a5557f951","impliedFormat":99},{"version":"313da5d83029860437f6c9f4a6bd5589d410d10cb73caa89f465f0b92a092dc1","impliedFormat":99},{"version":"1ca3de4ccaf5b8e3b0281ffeb987418b8797cdd38e6f2efcdac6d53be08d2c70","impliedFormat":99},{"version":"3733f99c5ab34d7f5fc2ae62b2cecd43aae1dfe513f1f198a6f23198ec85a9ab","impliedFormat":99},{"version":"c8f01915efe59d2e3b89262ca71462a2ef267a46d85e64d423b7eba5e56fa806","impliedFormat":99},{"version":"0ea8152fddaebfc02cae376261b581493403faa3315b561b7b28c2c9adb8870f","impliedFormat":99},{"version":"366feb5801697dadf2242184050cedb892219e5ad944d958b9f48c1a21bebd5b","impliedFormat":99},{"version":"18e1dbf93c92d56dd99b4feffb6b5f4bab3942a22f9581fe2fb01b6ef98a3127","impliedFormat":99},{"version":"af66f338f282f6a5b65afba57694316e83ffc482b8e43c2157053d2786f5ccbc","impliedFormat":99},{"version":"e5c1db417653c4d348ff6759b3b669721e2293b6123ccf2ac5aaac850727ebc8","impliedFormat":99},{"version":"3d254354637d43b0c1487e8051c4c362db794ca2b3aed7521aad0c4069531af8","impliedFormat":99},{"version":"a164aa58fd0a25722fc159f19636c34df5fe7e606c306459378005a38aa08621","impliedFormat":99},{"version":"1a341bdbf910ac2f80d1787942c77826b17f4e530cfc238a882a2e2eb0e49e42","impliedFormat":99},{"version":"cf4003a33c1a404f35f5c9854f26586497799eb9a7c8212f734852fbee9dfc2d","impliedFormat":99},{"version":"7c24222292e3d201b8b69b2ce466790a5c0abae9de3cc58f7bbeb0678d9909cd","impliedFormat":99},{"version":"7f06d04b0e1a40fd6541852620024acd484fdd7d7652f92debbd27b9540a662a","impliedFormat":99},{"version":"aa440a5a66fbfed7018a245b23f1200cdcffece6fb06d4f6e3b8e47997eddc02","impliedFormat":99},{"version":"e392dfcd88e18a82ba1195eba06545123e53b56f7d1a646f0d47aa2db930dd18","impliedFormat":99},{"version":"271dfa798f98be4ac49dfd6a28cc486f999f3dd7a9bb6f5f23262c64a65cf50c","impliedFormat":99},{"version":"82afb43c3ca6e0891d0c2c78e8cfb622ac3e69c1505dc73e40b3f5946e5a5de4","impliedFormat":99},{"version":"a45a9e50aa41d0939c42d3e02758b105128e57f9eab790e173090273a8c511a0","impliedFormat":99},{"version":"e3a3604500700c4855a5051e5c49caa41df1ec83b30262c1ccc8e34a1cb1471b","impliedFormat":99},{"version":"b5cd0fcbbedb59e0647a66888abca5ca4507f885ff3b286e0c50b842eaed1e98","impliedFormat":99},{"version":"84226fff98bdf61e7b9ae1f51b39fdf4d909393523764457aa2834d50aa91ec9","impliedFormat":99},{"version":"9fdbe407376b7917e668f04ce8d7c23cc952ca60eff05f055d161121d7ca4d4e","impliedFormat":99},{"version":"586e40af8284984647509e8bc2316ed15eb9fc471a5fdb5a1d7324fd0cf8cbc2","impliedFormat":99},{"version":"78b9ad684d80469986ed95aeefc63c0a897a625d9c30281b60a6c67eee314983","impliedFormat":99},{"version":"99a49d4c4a5ecfe3d02d1c9678741b48144d60db675105428cab22623e805fbf","impliedFormat":99},{"version":"c7b9f04d2e9d9c104e124c812cd95e35f6b9e96208cc7261e3fb8cd6341db30f","impliedFormat":99},{"version":"d59ca233e5c37a734e7ddeb14073c661b571a005b65d291bcc7a70c578bc3483","impliedFormat":99},{"version":"f7e93f9af1676ed9f0a505df3218f62b0cde1e898a9f5020fde159b2bce4ec22","impliedFormat":99},{"version":"99a9e52464f5d435e1291dd0cc343d2650e1aeea2faf8c45da0069b79983b189","impliedFormat":99},{"version":"5b182efb3a0328d1185ffd4b234079624ffc3642ac2bdca05f2d2a39f489cf6a","impliedFormat":99},{"version":"3e051f1ac9abb757eba36a1c653079c05f8e73d47f468d2013e5cf91155edbf9","impliedFormat":99},{"version":"50deb81f9a86d6dbc990a3d2e21ed9e95c7053b4f602cece0eb8a66108db32ca","impliedFormat":99},{"version":"5437c62288e1d84f352d1336b2c791e514164f4b76df2b54b9b80b021d14144e","impliedFormat":99},{"version":"3cfaf2c2f604b6e0c3331d6e10cc12a4c2ba9004edd3edc4f34830c12a00de76","impliedFormat":99},{"version":"1bbffc55483a2466f7ed17d1ada9eb309510ad7ddbda8b9052bc0c4439466c98","impliedFormat":99},{"version":"1637d9794d76d852553adec7dab806e435c1d15742c74b55e7f77c6b3f0b4d99","impliedFormat":99},{"version":"94b752027cd750dfd3114ae4bc354e3136af339314e3c0f910df7fbbcc282193","impliedFormat":99},{"version":"f754f4a9815940934f1b958bbf2d2fd8b1463fd16a2e3cbf01a488867a20d21f","impliedFormat":99},{"version":"4ee3b34d2261742bf67c8b5e5b3bf826391e22edb5ce1336d6a8c431b30dfa87","impliedFormat":99},{"version":"09129fe38056fdcc77ac298e218f9e6175608c088d01154047e0066d38285004","impliedFormat":99},{"version":"32a703d65ddcc443c10d404684ee4078f615c02fe7a2dcbe3cd9c27515359905","impliedFormat":99},{"version":"05facbc54c07763ce59d8ecfb9e7236a2490393c772c99a534fc06d300510a28","impliedFormat":99},{"version":"29fd1f159df8bd374aebb398067eecf5daf749d2d07f736e7c7287dea11f4a33","impliedFormat":99},{"version":"2f38b4fbba29ea39481bfc318cf7a1b42d50a1690465a446650948c20650df5b","impliedFormat":99},{"version":"058107de646aab069d38c35d68161a2d4547c6e78c3a3998338b9768ed1b7022","impliedFormat":99},{"version":"65e05ffb34f0189582043596cd28453d050b8b47d89b466ef61953134f7b46d0","impliedFormat":99},{"version":"e08f74569060491151e951498fa46e391320fe652c887b3a1e387bface179f11","impliedFormat":99},{"version":"25abdc000f2be90eccb17eace14443091a8791d79ec423e4e3d06954b0a3e50d","impliedFormat":99},{"version":"95a479f1804f59bcd6cdc1d097157b402f3b9f56923aab18fe4911817d3008b3","impliedFormat":99},{"version":"93d9b928e4b32600406d7a4c854f009799e805da06573fcf481d5377c1759d60","impliedFormat":99},{"version":"24d8c68f8bc95ddbef68bc3dbc659876fc18a15c34859c4c21e002483c0d22e0","impliedFormat":99},{"version":"c9646244df7474905bdadac34ffabeca395850d5415e13bec0cff6884a3a1bd0","impliedFormat":99},{"version":"91bfd8b9c1596dc378f4a21ae2915dfe7f7b99cc4b48042e91d6f473259a50f6","impliedFormat":99},{"version":"40d8306d908ea3ac5af2e34093c8c589d22481d89e60b7ad6360e4ae418b42f6","impliedFormat":99},{"version":"96aadc567cda6bfe77accf7107137390f03b3f3e2968b06f881beebe8efd81d6","impliedFormat":99},{"version":"1231da3d8a3ab8b836808da1363b33f1064eacdce90f6ce1d8dad2a378f2946e","impliedFormat":99},{"version":"c3edc858676c0fb57372e7fb39a8367636c7cfbd532b9882a722b27bc901d0e9","impliedFormat":99},{"version":"2018b6f0e2061de5d0127ea5ea55594657870b0551d6763c47b5947add29c7ae","impliedFormat":99},{"version":"98feee5573bce5dcfeb11863da1463b0e5e4c088ff76d0010676cc297399aa33","impliedFormat":99},{"version":"9c7e6ee655cd3e2c3db15050e51cf28350e020ce2b5ca030f885165bac4afdfe","impliedFormat":99},{"version":"ea7570613b458b3b741acfb597f2ef75c646fc5b8de31f24f3e11e9ecc3e2626","impliedFormat":99},{"version":"6a8bb162513430ef154922525aea4d9c9e0e300d33b7e6c7dfdc21f1267e285e","impliedFormat":99},{"version":"5e756b34bf673b63c88b52377d9341a86e5b85bc15edcfd25926f18ab7562fca","impliedFormat":99},{"version":"8e978604cbc7a505aea54c40a6a824035d019de1a9ea073a8d89056d6e75d004","impliedFormat":99},{"version":"88a6d094de07d3bedda43a507010a4e496f83f898c8b30d51d1d66147317d389","impliedFormat":99},{"version":"0247e5036245f425410b138acb7eca8eff452e90b60ce15a6d14a79254dca3be","impliedFormat":99},{"version":"a917a6578721f88084be79236f3c3c6c8d0626d27b9d29eb8c7b40336d24a665","impliedFormat":99},{"version":"7d4d7cda987e76d83992b3099170e72f1238abde39b07086f2ce1c047fa5305c","impliedFormat":99},{"version":"7a6e19fb0b63f9a7f010e254376097051865a6970c698e0c4700840ffd88e646","impliedFormat":99},{"version":"c1214f047a9cc3b256a6babdaa062b1cc112f9e11c3276a585607b4c034177bf","impliedFormat":99},{"version":"645cd29e13ee8b379c92b7e016f80f020d596c0e329122fb89bbe857596b7fb5","impliedFormat":99},{"version":"85aa829c49948a7745bc9fe8349bdb83bba19763c3a8d6b30129498714c4a81e","impliedFormat":99},{"version":"0883b415bc4b8364115b3a74c2c5d14bb6852a1a9810d051ff426c51b7865e3f","impliedFormat":99},{"version":"57bcaba92379c398572ceea17e80cb9be80b0915bf2022fe99f360875e3ebbb6","impliedFormat":99},{"version":"e19c31cd2a5d8e14a56d40d9f8bb4819f70ee3290c71fef47d753cedbe1b8403","impliedFormat":99},{"version":"7867d743e0710c8233955855dd1c8143c76bd169d31e1b81835dd849d53f78e9","impliedFormat":99},{"version":"d953795eecf54315d23cf13cfef3aaabd521a305b71a67d5939487d9f8f781d9","impliedFormat":99},{"version":"8632c3b1a88dea3b5c07133a969658ade0bc8b0add4a160ecd12b2e8ff73f147","impliedFormat":99},{"version":"bbb8f4a3cd8286ed8d4615d7f6c0cbf4753c761e1d3ec18a20a161d276b6f617","impliedFormat":99},{"version":"9643da030e1fa23447dacfec5a005dc51f0f7f651dfb0c063d4195eefc8a098c","impliedFormat":99},{"version":"f78f0984c1045c759eca17c87d9892519813d7ccb07cb9f10bab6239274ab3bd","impliedFormat":99},{"version":"8db95a03e8ba40f5fd72926a7df034c42c083b264fdf948382eb2281cc3aaa81","impliedFormat":99},{"version":"a004f52364ed07ec22dfdd34041dce156046b1fd1d9170ca99748e7ebfca1b9b","impliedFormat":99},{"version":"dbff933905f07dbe803238031f124892e8ada74efd4b284287bfc75d2409e3e9","impliedFormat":99},{"version":"0941bf71e7631df878e29025c83b35ecf2b4fc730f61b008590fb0f937aa63a4","impliedFormat":99},{"version":"3e8837d71c58e3ddce51b55e29ad7691eb15aed51dffec5fb7bc968898abf6b5","impliedFormat":99},{"version":"6e58caca3025448230faecb5efda0951424ba15b071ba13b00f3e7f1cc6bdd29","impliedFormat":99},{"version":"b3a3f55260b2e4384b00a7bfc5720e9866074ac18f715f3e505c7593aabce3f7","impliedFormat":99},{"version":"3f8c206a53bb5a8370f094ff77ea9e95ee8c3661e248a1b9c0334bb71b641907","impliedFormat":99},{"version":"99853f693260e3d76256576888c7cdc5515e50e399fd3111afc514f0ec9e16a4","impliedFormat":99},{"version":"480cc4f99dfc33fbe523f155018e66bed504bfce061031bc04f5c47b7dd2ce05","impliedFormat":99},{"version":"bb0cbdbfe7201cc8dbe28f10d4577316d63a633b746f9e9ea9ed16a0400a0347","impliedFormat":99},{"version":"6bc725824b4ba929f44f3973aba69c3bf4c9b8c667d6c5bd257524584bcf6112","impliedFormat":99},{"version":"1f2a20e400e1df467ced60364324445d04e36184a2fb9bd39f32f85058d72b50","impliedFormat":99},{"version":"83c5f92d12a9677cb376404aeeb89f910efa2ceec8fb200bbfe59c508a5c86a0","impliedFormat":99},{"version":"91236eb27c0c580c803b9581bddfe4dd45623093b8638c8cf39148d193b185dc","impliedFormat":99},{"version":"ba41d9506bcc55e2043d0a9290c38a4c1fb4ef82fb2562fc2039d55ee0a80a72","impliedFormat":99},{"version":"214c9af465ad68b1750670de18e62b8f3e7749257aae5ab0d7170b994e9c7e5e","impliedFormat":99},{"version":"62e8d8503a51a24c9f0947d88edb5837357f4149c5103fb304bd31f8b5d4f4f9","impliedFormat":99},{"version":"5dad46254873e5e5c4b8b80f6776dac8bcc96b059cf6ceafd9be54d24faa3dc8","impliedFormat":99},{"version":"88ece1d1c523d9eaa48c8c3e0c4cd359e9df8a542ba6eaab5dd3c523d5fa9826","impliedFormat":99},{"version":"109ad0355918e4fad1bb9d849f8b72a6894b83d20ca6ad72e73124fa380a6c64","impliedFormat":99},{"version":"70b68b3ac7d6b03ae36e80766d62a666c407f455476283ae6ff219e49f0eaee6","impliedFormat":99},{"version":"bb72571132bf5160ef9af164b82f13fc74c332d11c3325e4953ede73627bda0b","impliedFormat":99},{"version":"e4101333a36a93829170c6e0c66ed47c648571502b484d22e4629317197a6bc3","impliedFormat":99},{"version":"f0e5a05eebeae29b22dd7b3747fdd6503bcf7ad42df8ccb0a8129e98ea112408","impliedFormat":99},{"version":"658adb3d7d4017bf38ba1d1eded9dd36c5be121eaeaf469abc11c2494c13e12b","impliedFormat":99},{"version":"f0c39b43f5d2619c66118d2441976b4f1fcd100e55be80bd55d8279b2776a082","impliedFormat":99},{"version":"1c116a992389ab12f4612dd3cc9b4d888eef454eed3794c1f515cd76d3b17cab","impliedFormat":99},{"version":"0d9ba4647605be41ae36c09439b623c174e7227c8943d15b1aad049c5932c2f6","impliedFormat":99},{"version":"ea8f99323ac76484ca97cddd57ed916dacd4ff2805c446a69da9e728ca8c9b43","impliedFormat":99},{"version":"18e80e1593efac104d1fdf3fe5c02023be9f3dce93ce3a95df75ce1c17b98332","impliedFormat":99},{"version":"68a5340b5cb05677b52fe5032e5b8ffaa3d02a98baa991ee161e318e17d0e74d","impliedFormat":99},{"version":"7a1457e43136d0a005af395929abb59ce7ea3712b1b4091040fe700c4386ff6c","impliedFormat":99},{"version":"8aafd0a8486f554718b22d02cb662b9964fd6b6346ac7c46573182ed3102e9b0","impliedFormat":99},{"version":"ab0f538caa8913de60351b4d993393ba30d485461dfed416b11fce206820974a","impliedFormat":99},{"version":"7d703f987cf71538d9b4e0388c4744fe91db9b4bf5fc0b5ec2120e523ff036ec","impliedFormat":99},{"version":"779e6f8af772f3f63982b2d907c662ca37acb84e7ce1fad4de9c8417142504d1","impliedFormat":99},{"version":"e1ad3c3b80b5bf0ba59c3b33878afb16a906c09840f8d1b072af14e587360f6c","impliedFormat":99},{"version":"51cda3a044b658d58c693647e19ecf16c29f5ae67caa0f1c619c7c76b93f1af3","impliedFormat":99},{"version":"e6b27342fc513672b2fcc831ed5d48627817ae0b26b3a487643b61785c52cecf","impliedFormat":99},{"version":"582d84dd785b99a7180701aad4fdfbe3fcb26cc07fc693032361070ed0369759","impliedFormat":99},{"version":"eb5888375a2ecdd0d3502cec0f77e1e42eeb2169c76b79b61add3ea0bc95ba4a","impliedFormat":99},{"version":"ca5f212e869dedebaa7bf73bea3c6e8ee886ba2f0601d7e789ce38e2db189600","impliedFormat":99},{"version":"d21865e1111bd2be2ee973598343a324713e31f1aa2e6184286e1a8f077366fb","impliedFormat":99},{"version":"3df99ade0e19a8fe6c989688eb5743baf8b02b4cb678018dbdcdabe00fc42879","impliedFormat":99},{"version":"785eab4c4a6166680180ba4e9bf06e6c205862a3c83323fcdeac61e6a76adf8b","impliedFormat":99},{"version":"c1686f9d62d0b94c43faf794bffd8cc24ac1475fc6d536aec3b4480128660322","impliedFormat":99},{"version":"3e050baa6d458a74a769e3fb50ff1051723dcfccfa8a31b7ac9ed0c990d5dbd6","impliedFormat":99},{"version":"bbc4cd67ab91a186d1a4aa1f65a7971ac31bc2d8c63fd2bfdf02e031a85be7f3","impliedFormat":99},{"version":"6c09c2fd7f6c0512ce2ad6e17a0d9f9203f47afd3b83742d4cb4db2d3ea821d2","impliedFormat":99},{"version":"16e3734500cb5fbe0cf27f4b61cafd7954db45c3facff516d8819bd63482a8f9","impliedFormat":99},{"version":"352036160d597fb56e03591325761d86221f6b4facdb0c7df4b790c4891f4f18","impliedFormat":99},{"version":"f93375427ab3f9a598bc14d9bef5a2ebf68c4755bcf3a68b794e131dba637d8f","impliedFormat":99},{"version":"798b8feb569f4b4c521cbcdb9651d0fe799ffad794284dce8a4e0d9dbaea95ca","impliedFormat":99},{"version":"3deb173189f9a8232ce9fc11ce610c27435f5e6b86e507f9c04d5fa275974101","impliedFormat":99},{"version":"de8156baa4157a698a1bda8e6b4ba62b8bef4972808f7450698017219f539475","impliedFormat":99},{"version":"65c089d5dadc1d26c81c374f00a8e11b7178900040dd7db065d8cdc405c65e15","impliedFormat":99},{"version":"66003617c7bd48b01253f0f0ae9218f15adbfd66a04a74d04235f28f9ffb830d","impliedFormat":99},{"version":"8733c82576758e483eaa077a95d1b2d1715353ee0d8f148d06a5f979fb71f22d","impliedFormat":99},{"version":"0dd5e215565f19d57d88f9c32cd365fd451207bdef48519c47b14dd4ddb301df","impliedFormat":99},{"version":"8b86136891f48d0e82f8fdcd623268b036b2a8ddc22241a1202576792af0b63c","impliedFormat":99},{"version":"1a080e2c42f4a16b339bc45067ecce29ce25040cb5db37f5f3f19413aca07e09","impliedFormat":99},{"version":"55f8158fc3e7d4ba4ab62820d32f236a5723af9c721e63879cb9c184292a718f","impliedFormat":99},{"version":"170f5fbca91c30969467442f813678c86d2d38d10aa3ef8e5fb388bab833fba9","impliedFormat":99},{"version":"224347dccdcf08e3e862699dc9e35f6ae1f9388f56e14db2357bb79b75c1c814","impliedFormat":99},{"version":"c6426d9201d8e27551ba9a0b5f4d9103dbc2b2057801a621098116a042b03b92","impliedFormat":99},{"version":"af11c67bbdf99195a89aa5233d8641f6e1d2f7ff712e941c773e16f602e7f96e","impliedFormat":99},{"version":"1dcc9bb3542020790409937565639ac7c3bb8b239ff49c65ee20d5244ced1fce","impliedFormat":99},{"version":"64fbdfda1827a333790a0cbcd36e40bbdab461df37fccbf8a2c12eb0a6450b19","impliedFormat":99},{"version":"9f40ebfa8a6cca16447d13bc9265e7b463b1d4e7265336e287d2ed2867af60b9","impliedFormat":99},{"version":"cd77f74ca7acac465b9b6ffc244a574cafbf16ef35bbc834c98314d1603f6b52","impliedFormat":99},{"version":"6a3fb20abadf78d08de29baaea62889070d505f35ff5140642e8074db0f5b7e9","impliedFormat":99},{"version":"75b2e385d7de8d6d714ff9aa6635bc494a6f90a6f33d2c5c7710bc71ac19d9d1","impliedFormat":99},{"version":"f5e7ffabb3a1e6d3c0c5039912c8a4ea8d753722c9a1e602911c100b7ec155ac","impliedFormat":99},{"version":"09757c18f7d7af16d89b75b643ea4b3a0e195d67a63c03755a07dae726e1148c","impliedFormat":99},{"version":"3b2b48dbb70d48112b34b4a73280990bdf75147d75659cd5280e846513abc75e","impliedFormat":99},{"version":"e6f905bb9525a266c16e4350cc4d4020689a588f2eb6d6b64fcea6d037a05977","impliedFormat":99},{"version":"4a988db19eb645816e40e48b945226f76de53f1299131003aabd37a013c22590","impliedFormat":99},{"version":"9b7dce8b944c33e20355a272f156582fe0198bcfa395d7082e6a66eefbe9ce57","impliedFormat":99},{"version":"13aa72dbe072780b3f936dea5d1c3094af3b6c186c24bb30d404540ec447b3d5","impliedFormat":99},{"version":"a280303c82a34689c9cc178068e6c012c6f582f80cbb6a75530bf552313090fe","impliedFormat":99},{"version":"715ae11614ac2209e2b5f3efb19b270603f8dbf20db559b76b02a47d6f3fd77d","impliedFormat":99},{"version":"d337b0c28c6f35442c1f88ff8071bcf9ef2ff381aa37fc30d323c6ac25e23708","impliedFormat":99},{"version":"425e7209aad5daaeeb4df06a718f8f177db5f0322c5fa94573ec739aa7f02deb","impliedFormat":99},{"version":"cab30bc9301ed991270375c5a0a011c897307e0e2158578e96f93b497121a3c5","impliedFormat":99},{"version":"00e136dc2bf5a5dd51fa6c5e9c02a7aff6ce4bd111e74b0f0d59c87494af51dc","impliedFormat":99},{"version":"4933c98fcc77ebbf6166152f65916cfbfd8f494bd14e6d8eca45ee231f1f2926","impliedFormat":99},{"version":"55b7f086a4ce7f130df29adbac36981bd64051263686af3271c604cd9591f62a","impliedFormat":99},{"version":"7d8fa714edcff481c66fcbd1c29b0856edb5591d085096c98613e9b701f55676","impliedFormat":99},{"version":"879e9c1b88c533389580e7178497ea55a36c95876fe1d94c6bf73883b6d29fdf","impliedFormat":99},{"version":"7c22b12c9c17dcc2317d52b83d8662c538fb337adc8c1ce69ebcd8f8394e2064","impliedFormat":99},{"version":"199e6d1a80d19524ea70d143488d72ef5e8ffcf6bbfe82dbed7f03d603948d18","impliedFormat":99},{"version":"691ca73f83cfe3262081875b1096744b1314860e6e216de3d242b4c76f8c1972","impliedFormat":99},{"version":"e43105a7b869d2963215dbbad1da3ba79108c3d5361df4e11d6c1bd967890bd4","impliedFormat":99},{"version":"c3d4d0c0dc57d5fed5a7af5ec433a3fac319c640aeee9ebd648066535cf9ff51","impliedFormat":99},{"version":"6c7d9793b68ed844870b77a5d4e6c92dc5d3b10d3c09007bb54b4baae99eab62","impliedFormat":99},{"version":"98a99b89bfbc2d9b7c3df85ee85f5fee6e9eb7309dc0e8b08b77b34ccb85957e","impliedFormat":99},{"version":"026567c73d9d23ce133aa2f27da3ee815b724f52548bf5579746f41c60723fcf","impliedFormat":99},{"version":"df6f1df7a3ae263e071615559e198d94c6fec45d33140fc3403eda6f57c5f8e0","impliedFormat":99},{"version":"5208ac9b4aead07702be291e7b6b2aa5936ed9ab8b21de6227cf351292246f6a","impliedFormat":99},{"version":"8d04cf9b77d2bff28760b0126105d3d5a34a1a1e8cc2b4966a9e1859bc55ba71","impliedFormat":99},{"version":"e7925d61f7792610f43a39d58dd58b804bf43d6071a09439d44063e35e5ac244","impliedFormat":99},{"version":"4768ed15015abc1826477096caf3c770ff266bee8136ebec5cebb929d6b9cdaf","impliedFormat":99},{"version":"7ab6049d6f98dba00f3e379c0bb149eae6d2bd3f8ead7de9238bdf65bfd5d791","impliedFormat":99},{"version":"b50f3a41e80fe4e8218a7f6c70257ccac4c3f360d318da72779ae1dcd0e787c5","impliedFormat":99},{"version":"a7b7342414754d0fc6a9560c08e5add2eaccb9570cd39c53a5155f368e695f14","impliedFormat":99},{"version":"e574749d4ad0f5b989632484891d00a6ef6104b3b014e9eb9bfd1f3c811b4a3c","impliedFormat":99},{"version":"e5352486d0919edaf6b57caf289859980db09607e225f70d21ac9b06ac1ef04e","impliedFormat":99},{"version":"23c0a2c86cdcfcbdfc95f11c89611f04cce0f593b5140a2e64d20556af3f159b","impliedFormat":99},{"version":"3cda756ee1dfe94744ff3eb6a11b7e5d41f502d0f8c46aae5338bc82cb929602","impliedFormat":99},{"version":"5a2db3c589431fd671ed605ecf0725decd9acf0e239966bd6d91eb2cb115a0ef","impliedFormat":99},{"version":"eb63ec99b754ca1947a7fbae5d7f461f8179f647bd0f665f6008443b7fc8fa14","impliedFormat":99},{"version":"5d4e4b5cb1a17707244dc479b464e537237ea4139b4235d703ea83a4a9287840","impliedFormat":99},{"version":"97bf370e78bc695d758542bbd2ecde489a61db5d678c07c85bffa91459343c37","impliedFormat":99},{"version":"e7789e4369b2c26d9a8a1150141b146932565ead086e2b4e32ef145325a8894f","impliedFormat":99},{"version":"0cd7b61de09c45306ffca7ca80fe784e56623cbfc99e1fa4aeee7ec924353d47","impliedFormat":99},{"version":"9862a6e0ad83a3b3faa226fc86fb1940b3a9183c0c29f5bddaa9b2c5cb813a05","impliedFormat":99},{"version":"d85d1d741211343158b4f64b4fc7d0ab347a643a3bb8f5a7c80fee1cd71ddb91","impliedFormat":99},{"version":"b30ca3d58261de8bfe7b599e9806d710700b58d7f7c7c1ebec13838bb1c36d76","impliedFormat":99},{"version":"19c817e65f0d10c305c29e01d8fb6defa09291fd67bd13034223cfcccc14f8fd","impliedFormat":99},{"version":"d72ed5882015b367986f5ec7b1cd58bb50bd1c51e941ff06729b67ab66d4342e","impliedFormat":99},{"version":"8e395378f1ac56cf2bcc7a2533cfccd2f431e45b91340418148c99e16eb58c6f","impliedFormat":99},{"version":"cbc884601dbfb8d72c8f8877a11179ab41a9bfa0b8c8b345184b835d09a29354","impliedFormat":99},{"version":"b3be68eab5f7e270ac467749dd01ca3203c572cfc511da099e028a930e933416","impliedFormat":99},{"version":"ff1f6fda8fed4820f48b922caecbcb6f74b81ef984908ca213d09463f9f7f937","impliedFormat":99},{"version":"e8c989cbc67a55209e74d695ff91a888e229d67f0cbbd8b49544cc07382c877e","impliedFormat":99},{"version":"838930a4a3fb335a78cb1d3c4d5b825ee7ef1a7ee2136315ba38346aae1683a1","impliedFormat":99},{"version":"883985e0a6918e642e1f416c6afd0d0e6e8033f3b29ea5a49cd808c88874b7cd","impliedFormat":99},{"version":"f126c52fb0b87a45252fb6397c2326e3f8c3947d01370c2b4d9b1d4d9196f046","impliedFormat":99},{"version":"99e693a698fe25a9924783102421e87d02ed7204369d0c499b207f4fe872f168","impliedFormat":99},{"version":"a70e24984ec50f9c0e02dad3f4b5bac149f10165420d266ba199e50fe45662cc","impliedFormat":99},{"version":"633e63e5fee829801ddef23112e30073ea34d9caf5f464d478fddee93e627475","impliedFormat":99},{"version":"0bba6e8d47afded79ee770ec90c46fec57cbdf69767306b86aa9b32e6f4dab11","impliedFormat":99},{"version":"66b7c3956758bcbad1eb7c0d4fb0d779323a825b8adccdf35ea7946eab476b20","impliedFormat":99},{"version":"16a1a5d4825dbf2991c5a8a2090dd84d8290b19cf541e93a7c4995b8037a627a","impliedFormat":99},{"version":"35f172c558295a38b28a149069d619f658efbc69ba9b672e6c853a489ba23457","impliedFormat":99},{"version":"3b2112cd844c32dbf3dfdfdf05e14b396f46ba6e61bb15d82374cc8aea2f272d","impliedFormat":99},{"version":"17e59b4b305bd2ad32bfaf62350c305bb45fbacfe5a4b0547369259d17775e40","impliedFormat":99},{"version":"c11ab5f4ec79d50b9741fe66527fd19c09cddde5efc4cd39b5a60df69c38b604","impliedFormat":99},{"version":"5530eedb6ac3365bfe20f117de0db075971955dd763eed8b9757ecb5b5a3e57b","impliedFormat":99},{"version":"fe847d09c50c98d93de932ab711c1569cccf7100c0c7ea59e4feaadde30ea048","impliedFormat":99},{"version":"a691ed743148b3133ff53977947c447c5951382aa75ff41926502195592854c3","impliedFormat":99},{"version":"00387baba842e4e7cf442edb72abe67bf2dc4c48b02a44175ec2d82a88847e88","impliedFormat":99},{"version":"b9f3a62b5a7b9cc2308ff957f2f9400431a484d44dd02b7518abcb08b387528c","impliedFormat":99},{"version":"1fd1e1b625fe20a8a1a133bde76da9140312d4fd0da1c18b27d23002d4d62243","impliedFormat":99},{"version":"38d0d481e741ca7daa25fd987f3443ffe351cd0a9c0b4bacd5e008c51f24850a","impliedFormat":99},{"version":"c07fe65c3f45091dba97d40b4ac07c390ff625a0dd92295d76051f0998618d80","impliedFormat":99},{"version":"b27a05e307131d13c3ed496e07dea2b79331aa1ac9571524fbdf16cfb3ebb1f5","impliedFormat":99},{"version":"0dc1ba6bb0e4fd00bae62403c87047bc5be4ab5943ebfacd5348ecf74c9b0328","impliedFormat":99},{"version":"ef60c0d7cd61055e5f06a6b76cdfdfe317460d5ce787efb48f35b3618bb68608","impliedFormat":99},{"version":"8ec7a6d53714b3c8d7a5e1eeb36108ea511cfc7fa4d7dd08229dc906568548ea","impliedFormat":99},{"version":"f84ef63eb5e13857e20ead0977940fbc9cb65da0e3705c04f0f4fc4326937c1d","impliedFormat":99},{"version":"827f0625ef8bbfa8997f91b8832626a4be0742fe3c9c6309cdca802c6edda8bc","impliedFormat":99},{"version":"1a535ae8a6cad0882e7c7189b21f2986dcfd5c2efd9950b5b04cae15179b27ce","impliedFormat":99},{"version":"47d40b96045ac0f52537cc2076f9ec1404fc444861191043c348d8afa0c6bd73","impliedFormat":99},{"version":"58b86a43ef8dd9649a6b67dbeb512f01f934ad78518ac89683927afed03b1de3","impliedFormat":99},{"version":"47c563c296e93315d38204ff70b2a3cd6788fdab9ba388791fa1c82987794d42","impliedFormat":99},{"version":"69ba23cb263a0916bc35457477b88e05eb35809c58a17449974d174a2aac6059","impliedFormat":99},{"version":"b1e445ab4f7d5c6d5094c3d6560539f641987a9acf82a0784b320e01c803af90","impliedFormat":99},{"version":"9e4c32ab790364ad67b078d569d273225d28a3cc5ee1b683e096fafdd0372745","impliedFormat":99},{"version":"3b9cf1e4cae113f06b84bcdb48dfd99a04b8708e4e4f48712ab94b7e1d11c884","impliedFormat":99},{"version":"52fd16e0b3f6582c3b545957606e1e82e8e7f666745a2c0a077eb5b534246109","impliedFormat":99},{"version":"28782dad7cc918112ee88ba23ac97f11a56c7e8cdaffa0978ca83751ba49b741","impliedFormat":99},{"version":"d707632c2500c4d4c503dcff2794e15c9102624ce70c9ad1662e396169290a46","impliedFormat":99},{"version":"798d2a4e66eb3726f8e07b6d94341a008ee974b8f86b8b98550f79b3b0e43390","impliedFormat":99},{"version":"6e36459dc4168e7f2c37a9f9e0971c3aa8840e753519781d1410c659c1fc525f","impliedFormat":99},{"version":"686a3bb7e54b8b622ec5bedaf1ec597633a9e75dba1261e4017e2e8e8ae47314","impliedFormat":99},{"version":"220ffd58c0b38bddd8d79d16b48aa3c71be8a0e8d01d45ad65396b453f6f5ad8","impliedFormat":99},{"version":"9fb07cf95a99e80c1c0462eadfb2b5d9434dd20817ef143ff67def7742b9760a","impliedFormat":99},{"version":"c70bfcb0d36b6e0d59a413e23016e402ad1d5afe2e5a74c1da3b52d271e4d4b6","impliedFormat":99},{"version":"55712f6dbd9fe2bccb9cad293fa37c294dd8bd9067566bcfab17e5596aa77bca","impliedFormat":99},{"version":"50f6da711079ff42be35995fa2dd810a629acee19248c4476ffbe1bdb324b7d0","impliedFormat":99},{"version":"be3455c8c848814f4b4f8602a1088411fed507bdff9a6cc9ffd176b9092ac401","impliedFormat":99},{"version":"16cec8c852d6b1cc27c107593c3087c901ce3e1f949b3560729d9702e26da2a5","impliedFormat":99},{"version":"1f0351b420afd408a267f3c3f578c788245d29d71da0809221f2f9b3dce475d8","impliedFormat":99},{"version":"b79b1fe1036d51b099e6ac6b3fbfb4eb36562c783e473e40c6cd2ec65991ecb5","impliedFormat":99},{"version":"b6964ec91330fd27e71660b777624e9342a2919c08655a7a65833324dc9797cf","impliedFormat":99},{"version":"5bb8a642d5b1f469421f30108f24d5443a83b2d59a385191e93ca650a9dede54","impliedFormat":99},{"version":"b76f9204bb26386bedaa9e14a23b3d9b1c6fae28c86f7fc484df7e5b74ae3844","impliedFormat":99},{"version":"8c1eea73430f19085f52a279f92371409f9c3c1f1cbc6187e474d0ff158b6b98","impliedFormat":99},{"version":"b288dcb1d03d232ba58b61e94124feafceb0d411013f603ddb2068702e5a13f8","impliedFormat":99},{"version":"a9ef5666ecbff227e17ce51d833b7c8822189565799aa860a60efa8a4f02ff00","impliedFormat":99},{"version":"29670032e04e02ef8a2172d3d637ef989b2896718852dc0d6735d47b1d8dbea7","impliedFormat":99},{"version":"c6308f587ff90713ac3832efae5b7aac09d6b067c2bdfac9637583a668d470c5","impliedFormat":99},{"version":"45c053bd25f8463d059c805283437436b640af4a28f9e10811bf1cd122d03790","impliedFormat":99},{"version":"bd4186ec52ee4bb1e07d27a1534eaad966bc9ba6cd65a58a63ff6a45632348b2","impliedFormat":99},{"version":"742c77f3420abf97cf51c552d99d0d935808b33c612e530ab54d115c513692e2","impliedFormat":99},{"version":"1b9af93c3bb53108e109446a0127b8dd6b9ff7c5096319fb6c4d63b9dbc8ec75","impliedFormat":99},{"version":"5cd660965157b9211c61f131ecd876143129cdd528e49099fc4610da0e7c04d8","impliedFormat":99},{"version":"a5664583622519fd735a5b89bde8040e93d11015e1559270008ec3722f546188","impliedFormat":99},{"version":"290d2e6293e262efd3aee13536268f8e96f31794800a1b68e392f27cdad9bc13","impliedFormat":99},{"version":"6c5e7e9f0c8361569abb01b323d939288ab7d2a16ec74962dd0981496a3e7ba0","impliedFormat":99},{"version":"386cf4e0b737544dfd42761ebb6159bc987b0747faff23af0b73b9003e00ee27","impliedFormat":99},{"version":"d7c7b4ae623b52e885e1aa716cbc22bad409d36b7204dec4004ed9c55133933d","impliedFormat":99},{"version":"dd0645217ad10dc8360c7d83bd6c6f36750b7df44c48116c883024dc8e125329","impliedFormat":99},{"version":"516294ca25dddf7d44af05033e856e5bae0fa1cd7a9bf255e601fb77b5b9f597","impliedFormat":99},{"version":"8e4735e0c080d09cc800cd41f646de9d759167292ef7cbd76a0eb57f8c4a00d2","impliedFormat":99},{"version":"0cdf249a81c98a3c6d79dbd0c1a65ff377d6879658aa3aeb8704a1b2158f2230","impliedFormat":99},{"version":"fcac8bc31559ac91ae0a65ffbf43779dae8a9c585f0e3c188fee07eba5444ca2","impliedFormat":99},{"version":"b37597091430552997625ea0f386da6b0ad725704274564c17282a06d77eb585","impliedFormat":99},{"version":"3aed368622022abff04f6298dcb1236b389a26af3a380ee8f06256850a3d99f3","impliedFormat":99},{"version":"be4068251ea5a2a50fb0e075ebd0b2cfc773bbf3f974b97b110011736b50efee","impliedFormat":99},{"version":"9223c5f0109bcc0868650998613d670c302abebde0cd2fc806e42a4b0bb5c9e8","impliedFormat":99},{"version":"0571ff9f961401db433c7c248b16bb2bfe65c0f09dc68543745c16f2176bc8ff","impliedFormat":99},{"version":"05626dcdef717ded5ea6fec10e3c6a6c7acabe92bbf36573470212d5d858ae62","impliedFormat":99},{"version":"64b324dd74b6cd0073181992870983522182d33cf0b9b3c1b6d503e4ba854b79","impliedFormat":99},{"version":"9e6970fc8d80d18a58c0189f4900317554e328e624da3bc78a954ea08b166599","impliedFormat":99},{"version":"cc1dc46db20468ef6189aa7cf4a8f4240897709753b2895e5400d20b6e4cd554","impliedFormat":99},{"version":"30986d936b4fb9b78344bba08e72ce06e731d10862061c2848b019d74ddb7eee","impliedFormat":99},{"version":"12dba10fdfe2dafe7f69c960da3f694723d82f2856ccade9926f5d04ce16e975","impliedFormat":99},{"version":"06a1c3af923cd00e69142a78418edb82c211cba3e72a91be52ae12bd845550d7","impliedFormat":99},{"version":"13405921db76cd2ca52f50b8dc8819884bb0fdbec7feaa8b0e5256fff635b007","impliedFormat":99},{"version":"474fe5758f25fa31f93293163386bc120cb3a859628146216c27d20f9fb4e11b","impliedFormat":99},{"version":"797a5c56e7b68fa7ddaa736ea0f84903a0280b3e24f7edc81dc65d59397c1dbc","impliedFormat":99},{"version":"13144ada8c1a653103674ae05cc08441800d8db5ba8efa624158528eede15884","impliedFormat":99},{"version":"42bbc0317d36df458e7e5cac3fe51a5747aefab3abc5cb3f238a944d5e32a91f","impliedFormat":99},{"version":"678842cc3c2c69a8c2fae8353656a1e5337828124b7b53ddf41689876b70c57d","impliedFormat":99},{"version":"f0e3459d79ea7a69f7a334151c38ca830c4541a030204e44b680bb47cb357bdf","impliedFormat":99},{"version":"9ab46babfc3d98ac7a31ad70b4212562ad36311d9fa235871dada95e3379fd09","impliedFormat":99},{"version":"92e6d6a927ad3d48d91b7fd3f31dda6e078cf03880e0bbe9cf56abb5919efab7","impliedFormat":99},{"version":"5b61720af63c370f28be29a1e6b60eb3d3cb6df1c169e467ef4241f9abe68272","impliedFormat":99},{"version":"f622b88d462a91a84c41747a8c097347cb08cdc26250ee5c86bec180d4587ed1","impliedFormat":99},{"version":"b9688f18464d0182fce970cf89c623191997178076478d5bf5604724a73dbcf4","impliedFormat":99},{"version":"811068496ebe65d79774a99796223a0ba3efe04be587f6ad9fb2c71865d5fd75","impliedFormat":99},{"version":"1a42ecff9998af3ec2d7465bedcf10aa76420768fd31143fcf0808dc7a3630dc","impliedFormat":99},{"version":"0ff2355b4074c3eaee36f435bcbbfdbcba07ddfb4aee5a2c37a2eb077fd024fa","impliedFormat":99},{"version":"ee053e4fb378dc43221a892e05dd65c664cea6947e5c3819ae41742643d70743","impliedFormat":99},{"version":"eb1359bae2c2ff3dce1258094f234a8de89b7b5afe89bd73e725a46558fc6aa3","impliedFormat":99},{"version":"73c08893e5e403971e0b2dff8f14d9ce3543b1a821c0d2fb8e5ac807a5d14603","impliedFormat":99},{"version":"b886342183fcbfc5fa59216cf405970b992eda93bc8a89094e1d40906dcd399f","impliedFormat":99},{"version":"5170f383ccc3d8431414b298aa1b9fd8f88f9f6ad0f6b40e4f78b5ed98d0f12d","impliedFormat":99},{"version":"a3915cd0ac9bf5441edd5b60f3937d89dafddacd7c8d5f323a279f0647e95712","impliedFormat":99},{"version":"77fd5aedd61211bb0978c3e3763876b18c55b73df2da0d7e17e43a13b3a1a617","impliedFormat":99},{"version":"0138f7ea01346ce60e52fa324df54ddfd6c9c31495fe74ca071bc44674287f26","impliedFormat":99},{"version":"95299ea6874a7330630d89d2ccc3aee12945d0ad632c72a168513f491ad465b0","impliedFormat":99},{"version":"8e11782e3f5c78b28558dd617d0d2a94a524b5106e0e8a6826dd71964cf2b172","impliedFormat":99},{"version":"7238edd71a373627b2d4980472114a75a861fdc5a66efba81e6e61fcb40d3c3b","impliedFormat":99},{"version":"02c11188c7c7ce94d6dce4fdb002d717a9b672ea1293b59dfbf9b54345ea9dc6","impliedFormat":99},{"version":"3cc667806444c6727c1a8106fdaf37c897c25d6a0747fea8cfd817c275309494","impliedFormat":99},{"version":"ed78cb361de97e537cca46c234c5f0bcbbea8a77f88d3270142ed0993373c159","impliedFormat":99},{"version":"e15f2519cc04d4a30a0543a349ce4d4ed10a8cef76e8bb226a624d75b7b24a7a","impliedFormat":99},{"version":"a8de68a1e6c0c3405cff69a6a82dc596d576b967c9b925c494ba30f8782193f7","impliedFormat":99},{"version":"7c6055ad026fda59ef8ac871f9aebcb080cc4ee084af8feb3dab392e603fb9dd","impliedFormat":99},{"version":"3227e142b26a6ea9e1493c950c238446a8d0297b093c8c95261d4f3e63312237","impliedFormat":99},{"version":"8fa71f3316151cd87f46e0f50aecbf39ba424790904b6dfaaec6fb3ad9226c8c","impliedFormat":99},{"version":"f2bafaf9d83cefd7f55bc2a480d1b5ec302e7615b30642bb00bfbf58b567a61e","impliedFormat":99},{"version":"a605659c69bb74a59b480f20bfee716dca83d289a814ff696273f71aea4c4abc","impliedFormat":99},{"version":"5886ca453462c07e9a2a6a835172a5f2149bc2b713b618fe452a94a126eeb36b","impliedFormat":99},{"version":"9f1b4ed0bcf465a6390e7c3760e0bb339f3d61c28e78c95024a3afd3ed81fdcd","impliedFormat":99},{"version":"5ef95b011a154332189243cfcf622787a41f3c646b0e3efeb347006064b91197","impliedFormat":99},{"version":"e6eeef06ce02234a927acdd50fcf396b8dfd8e8ca34c082cccd253193b4102f9","impliedFormat":99},{"version":"a5c6769e0465426998fb1ccba6db4a008cd9fa4a477a8bbfecf5b130c4031734","impliedFormat":99},{"version":"d29f65daae852c87855413712c3e9e81abc8577579cd40aa28789910c149c8cc","impliedFormat":99},{"version":"d4c7c425aa0d74cb74b92a6ccfa740431b48d3240ac7a2219556720a107ded33","impliedFormat":99},{"version":"4de384bb706f41f1515883a6d30cd1eb5d149729a79b1524e1bfe86acd103d68","impliedFormat":99},{"version":"b8f2296cdc94fe0a235c1c73a2f97d394050ca3d74b6b45b07b563a0c2892dcc","impliedFormat":99},{"version":"0ff56c8f9f2749a7c23c130450f0045a19ebdeab9f94f9b6f051e2cad105a1b8","impliedFormat":99},{"version":"e5aeb2f888cf51e86a5dbf26f710608140d6f85847f935b5dd218fc9b865d820","impliedFormat":99},{"version":"f111b5055f9e48983310817bd14978fe8b44600383b2fe0f0f8f82c501034f96","impliedFormat":99},{"version":"d0b4fe6473d64b2505e3b842592c6fef0491b2ec29d3d43c74289428e5649997","impliedFormat":99},{"version":"83e50a8f0a133458f603dcfc3aded3d8e6da48ea71d3a1aa5383c71bd12dfa51","impliedFormat":99},{"version":"4ee9650128cc8493c1cf7d0923004c0c5e6ef374f838dfbbb5f510eb9eff21d5","impliedFormat":99},{"version":"9ffc8307fa2cf2c934da7979c96884df4a36b92b54ca97325494ab2be78fd8d9","impliedFormat":99},{"version":"6c71102ccf27db42765e5a9369c36c4aacd83a78883df87ee103d11be3d951c5","impliedFormat":99},{"version":"57ae79de0948c54c7a75ca0d72d0c360906c1dcf8e6c31f0da121e5a9d382717","impliedFormat":99},{"version":"55cc4ba04c0965890e2e46a092c7b76e92cc9812a12a10d510e75047e5c2edcc","impliedFormat":99},{"version":"977c1704104f936a37c41eb6b0d24cb413e20e62337f7e2be588d3ba55aeebba","impliedFormat":99},{"version":"c75bfc4a6eb3b39957d05a6b9535b424a98bff9f27518e39a7dd4830ceff4eb1","impliedFormat":99},{"version":"f8b79f53b95079b96f81ce308a927651d791c2c3e5f32c103e90fd61fd58d3c2","impliedFormat":99},{"version":"46f6e8a12611611d782904154ebda6e4b6596cd026b7c09e2c145e418fc8a2b0","impliedFormat":99},{"version":"a4560c1de64d671a8d837a6f0313669a7aac4ad7d0efa2be1dfba29f8d61c5f9","impliedFormat":99},{"version":"f193467f1cad8f2384912bbadceea4cdece962b9033488994a7405c29a623d8c","impliedFormat":99},{"version":"a846eff5c1eccb86a3ccda935896a80eaa2beab68c64e68c244908c86ed87906","impliedFormat":99},{"version":"a97588cd01375653ed51d1dd9bdfbd30467b130ad60bb5b6f981ab2170feed3d","impliedFormat":99},{"version":"584115df5500463c3fb9102a3a74bb4cc6a75a9bf6300701e1edf81da292ae57","impliedFormat":99},{"version":"4428ab19274a44693215f4f4195800c8221e1ac8a5a388ea534c4e405fac5f25","impliedFormat":99},{"version":"5ea28a5de3f28607387d210754f9d62d2cacc86684e89df9e74d412bac974348","impliedFormat":99},{"version":"a496ace7d44a315f014ae2711927ff48fd4e3583f4a1e42df356c37b2c890ba5","impliedFormat":99},{"version":"814ac5e9d9bc60c105e022e08d3a7590a5a76c93fce1572bdcc574f25e6dd68d","impliedFormat":99},{"version":"3eaaf422f4a8fd066e5c0717382129da90b5699a86f3326057a2ff4abee0c40a","impliedFormat":99},{"version":"8ec41716dce70226a7069735300ac20691513226c614b03b1b1aa7bf4ba3b2df","impliedFormat":99},{"version":"1ce271cba70878af1e987d3a93fa539c9e35facd9b70580f738242059416c010","impliedFormat":99},{"version":"9be30526f3d636f4b421d3e06983744be0b4fe245025887ba5a032cac68c2e37","impliedFormat":99},{"version":"990e4693b03502adc4038f04ec6a3db2458fa1a998edb9edac75141fe6e8f9d4","impliedFormat":99},{"version":"59507e67ece04e5a994907e68042d704641ae844108f8af9edd82350fc52dc02","impliedFormat":99},{"version":"a36d1226856f16d243adff16b2f5603ea245f505af5a85d5485ab275ca946b1d","impliedFormat":99},{"version":"0baefe65a675b833470b248451ae56f35697581018bdcd2880e4031cdc0cd6e0","impliedFormat":99},{"version":"2ab5a9dab4e1c3780ee8c7ba280aceae11c699371178c253cf5a36341a864af2","impliedFormat":99},{"version":"a80518638f84ea8a15c155eb5841341688ec6dc8a04c5693281632dfe555c3ef","impliedFormat":99},{"version":"27ba80c04731d0ea2f37d6b6f5020e45e60396f5c2f4666e57b03238ef0a676c","impliedFormat":99},{"version":"26ad6385782d8b51674e22f236866e7e08119f50a131cf5a091c8c576202f9e6","impliedFormat":99},{"version":"b8ebaa198a03eea15385326815ff31a01cb63c08bf69517e3ba4e1c8296fd14a","impliedFormat":99},{"version":"42e3bbbb7255cc27270fa12d31aca9f11abb56e985d30c1bde3f978dc01d15b5","impliedFormat":99},{"version":"5cd09527c5bd0e6a9df18ee2a8ca39e1a1af60658e50adfa3b2155c09f731a13","impliedFormat":99},{"version":"1e470d86477091005bc41203654b0f310ca7d45bc0c7952f8f93edc6d0613397","impliedFormat":99},{"version":"d09c441b12602fffde7cc009f9e815eda2e8c85a7ae1fb9dc9add975a935a4f8","impliedFormat":99},{"version":"f3590539d69e5d3c824a3dbb93015c58fdc8d6b90abe7496c770a32f20c559e6","impliedFormat":99},{"version":"4fae33c695361a6438082ebde9374a3779df07ea561b1ce08ae4f514bc6520f5","impliedFormat":99},{"version":"88a1b15f496a6c998663e6486b78ebba1c2abda9e220fd8e377c11dff3e4e836","impliedFormat":99},{"version":"654c457deece232e59f6d73733254cb78bf6b043d9d3c43abf0fcccdb245838f","impliedFormat":99},{"version":"45a99b02acd1f5580b93e48b5c610a60ebbbcb075928cf80cdc9316cce1bf840","impliedFormat":99},{"version":"ddad6719d075ea89cf7434c7a318b69d9bf26c330465ad1315c8ac4d059f7270","impliedFormat":99},{"version":"8c867515406eda8230bc6c852eff20073178ceb2ce94d6b9d0f5678ed13c0b8a","impliedFormat":99},{"version":"b430de30fb510ddbcead861351793cc62ea9d97ca3093dd202d349ee96ced493","impliedFormat":99},{"version":"f4080510cd7e9c65ceccc843f98f68a31fa74443ab7154515308c104c8433a14","impliedFormat":99},{"version":"535919c7119b5e3da3211594c3542946e1b9e5102d78614359cc5d90a78c6a06","impliedFormat":99},{"version":"ef7e1df5f97be321ccccbc8d0cad38c301bf55be0e5528d20d4e4479ec7021ad","impliedFormat":99},{"version":"994bb550d4082528038ce02c9c9e63ea278a31094dd526d91e559990b3ad17cb","impliedFormat":99},{"version":"df03f5b8e177d1c904928545a74d3831c90bbf653fbfdc29241b3ae20a5be486","impliedFormat":99},{"version":"a7d3f59a29ca31f40ea37349c44a7441eb10f1bed068a011760f1204dadd7a23","impliedFormat":99},{"version":"1e7d696c473c1e054caf2a8cd2759d09f442fac69473293ab665d6f8c714b774","impliedFormat":99},{"version":"df9f8f3d97d404cc47e4407b1a5c21c223b30fb6f1f74af05da01effa0cb56d5","impliedFormat":99},{"version":"5e923de3cf0d71e5d9a5ad4e90d4643490c5ac5b3f58ae66bb95f21dc04d6831","impliedFormat":99},{"version":"b486e2e5a4b514d179bb1503178694bf9560ef6b7660a027328b9eed5e73a627","impliedFormat":99},{"version":"d53dfd573a2464c977c298816c36231a62ae3dc27553e27a3c71f6665b269baa","impliedFormat":99},{"version":"6fd3ac9e256753431d1dda6b26de5e0822aa85eec20bc6c14436a177f4279be8","impliedFormat":99},{"version":"a6817b104cff6630183738048e9e2e5ab6c5bbed9d46bb528f80258b0c4ff757","impliedFormat":99},{"version":"40319f136f28e2db970e46b7e72b7bfd5a772a0df98eec5405c47bd6c9917c9f","impliedFormat":99},{"version":"21baccbad8315ef36c9d7f50048abd08ba81a3afa0712ef258fa6c061110e0e6","impliedFormat":99},{"version":"a4705cf973f4d37ce92c052828e2513fa023ccb452f94544931ba2f917b95f56","impliedFormat":99},{"version":"02cb56c5871a710fbb3f0080324577411609df19bc17200156e46a44fdf8d27a","impliedFormat":99},{"version":"57dba29ff984d0c81bb177bdfa07ab0e57dda6dcaea83067ad911eda34caf8b4","impliedFormat":99},{"version":"e576d9071ca12c411674ca573eb789590fb5604ae8037a2572886cfc293282d3","impliedFormat":99},{"version":"4d818da244b409a389c73e3eb75824fc0381b6e16ddaf80a8d15870c597a0195","impliedFormat":99},{"version":"f66b41b72c893a7d90bb8c6399a737e3965292488394040e509496a366edd1a4","impliedFormat":99},{"version":"e1b15aaae981aabbe7a8df2826f4c6f31aa0afdde1e23d15434e2b221a851887","impliedFormat":99},{"version":"10e6b4bb2c98b99ad66f1be41b2597076ada2dca513547292346b211caa31f4f","impliedFormat":99},{"version":"93abea381fd60a80fd3fa282b931d3522bd1e4caabd7dba49152f8f365106d82","impliedFormat":99},{"version":"b771ec60b06611363dd783f8e323f87d9c9432aca465f3cd3d39a6a4bcd79ade","impliedFormat":99},{"version":"baee3182e5624f4bbe9bbdb3512544bd77d07a08e803f36b898c292cc4650de6","impliedFormat":99},{"version":"028de137173a15dd541f16c8fe03c3da3f11a27d0fa1c58c336be102c440db89","impliedFormat":99},{"version":"be06143be469d3d0d5ce6a2ef95e368ae8454bd498d0c0b0be43aa4a6ecc88de","impliedFormat":99},{"version":"6b39082cbf46f9c0e56e73efefea459d85e9431ada4122755e51c4fdb35688cd","impliedFormat":99},{"version":"35ffeb76a74f42b609dba599cc110ff974c04d7382fc86d903fb5eb08787cab2","impliedFormat":99},{"version":"71ebf7cfd3b6d1e628450c875307a3c2b69aa9e94687237bb775a57f25cf1361","impliedFormat":99},{"version":"c0bb78950621e72b06d7e288280b6109885c5f7be8b583659d65e49d9af011fc","impliedFormat":99},{"version":"c6fea1f34d6a312a51ead56d2d9dd487cfe2ed243885b2da89cf51c1f4a3d811","impliedFormat":99},{"version":"9789a429c5349144946f1aeb7578a9cf517555e7bd2a5f8fa6889e8d58a8847f","impliedFormat":99},{"version":"e8388203c62a6cc3e00a4497fdf292b96954c99aed9621197aa7ad3a9845e3b8","impliedFormat":99},{"version":"0e7e5b08261dfe5ccdc9d9cf8b2aea22fa5345f96c317f03f5a0977acbb99e32","impliedFormat":99},{"version":"db4157be7d269a6daab5481918c15fbb5136765c3b8bb49489d3ee9626491b4c","impliedFormat":99},{"version":"b3fbadc1bc66794f535b892f5523ff3ae360d65ad72806bd24ef4602ba81c2f6","impliedFormat":99},{"version":"1f24cff6fb79847abba14795c5778f4cb1f137efb4e353e0a3fb1945e725290a","impliedFormat":99},{"version":"1056e3bf6369fe009b40647744c8402df6d0ba1f2d3a462a2aeffc0c83027934","impliedFormat":99},{"version":"b0da0c17082d1fcd42ba9a147e0002ce2f8e7fe8d7d1e2e9810b14331ca10cf7","impliedFormat":99},{"version":"f8a0dada5366f74f29291c9e6eeea48d81bf3b6dd7fed6aba386e60ecfaf2057","impliedFormat":99},{"version":"c8e93478ba85d6a953b7950a530a3228fd2b0663e76a42551fcf29599e5ae269","impliedFormat":99},{"version":"4e4a901be180e8174ebd0115037bee49eb8d0a5123e81f3a57b1b230f2fd7bb0","impliedFormat":99},{"version":"f4fe5a6412f5c4c2ce54119325f77804a5ff523d5e5d935e8a3c34c2d55e3a6f","impliedFormat":99},{"version":"da16b5d7e423e5e0096fce83b5703fd052ecadbd39573985baeae406a3ff406f","impliedFormat":99},{"version":"fd214d4558f949dc7cd55d2657db975a9272ad99a0a02f31af2100df72b0099f","impliedFormat":99},{"version":"ed2438ea4315e3db2767e79082e0066845c46ba040724ecb49b82d0597057987","impliedFormat":99},{"version":"e086358dcd0e44204dd616f050029b80e85d3df4e454d772ffc1580d2c42205c","impliedFormat":99},{"version":"b992f4b97e7284088fe8cd40efae6ceac1271fb8644173ff6015fd970d916818","impliedFormat":99},{"version":"cdcd99a7a4fcb0aa03586e374cc03c29edf192d79210d46ef2bd97a4e2ef6bcd","impliedFormat":99},{"version":"dd1a8059730f96916cceb5d6c734f59239cdc7aa6f5b0ee70fddbdcde89b1da8","impliedFormat":99},{"version":"82d3606bbaa51acea77cdfdc2e3199c4686ec2c6f71927972ea30ad6fc7b4a62","impliedFormat":99},{"version":"7588bf02783961f2b6871ecc6e9c60363ac79a0ea63ddfe4fffdbdf98a628a8b","impliedFormat":99},{"version":"f4ec160ed91e9bc5654099b8c9fa3c549e731c7a3f0de8d2cf14982dd126d1eb","impliedFormat":99},{"version":"330874360097f09e8cc4ab9c19d0c29ceb099ae500ab5d6461c9297b8c3cf0f7","impliedFormat":99},{"version":"1c4da43c55f396f8fba432a8827eee9fac8acf6c1494a57ef48177b57795abe0","impliedFormat":99},{"version":"1ce9891c6838a553f39b2ddc6f83075f3850a512475af31beef974f6f7cb292e","impliedFormat":99},{"version":"7911c13a1992969635e30dbc94eee146269dcfdd3e07e0e265daf5caadbd5f0a","impliedFormat":99},{"version":"6701c151b37be87bf02126312f18e65b3d91a2c20a7377833d33d919fd6df9c6","impliedFormat":99},{"version":"2a2283d33979c27b027ebc07e65a8f09d2f307f7a9efd1e07f0b29d88f787aa9","impliedFormat":99},{"version":"3c97002cb68bd560118a6c8cbba6ff2509bd73d87dd713edb3acd83e66bf4e35","impliedFormat":99},{"version":"664417e248d43d27f8a04b9ae5e1f3ddeab5aa6d9b41284ffd366705f18f4885","impliedFormat":99},{"version":"019210cf7ccaf627a430edae894d25b312db658fc0f2c282c36d04920b3f5ae1","impliedFormat":99},{"version":"a2ffa2e737e5b56c638654d4cf91fa6724b1b95c7be50a82b7478dea04ea8a7d","impliedFormat":99},{"version":"09abbe2cca1bd3d538def48c19a2fe62293bdf1f97504a52e26d40a3898144c3","impliedFormat":99},{"version":"3649547b460e5c107b12f6f29be60d9a81a59fb3034ef197979a694c687e77f1","impliedFormat":99},{"version":"f15d3906d25d611062b5c89d3145dd4a2ac60bf68f6f5e7f4d48d1189e474f46","impliedFormat":99},{"version":"6661f2e5e07a92e4267191cc689ad3930ebcc316cf44221ae8eb951e3d4612de","impliedFormat":99},{"version":"076c0467d216ed21904db5ac256da6a4fc1115cb870857be9905446da9e81341","impliedFormat":99},{"version":"1f659ae61eb9ef9148eafa4ec4171525da55c35a298b720f215ab0a89c045b8e","impliedFormat":99},{"version":"91753dc66ca2ba7e922513c6d73c9dbd3d6336ae1ba310e2d0520c99b93b99cf","impliedFormat":99},{"version":"ba087ea4f7c6bd22a19cb28e433a592ade91ebdfaf0d37f053051b81b3fd194c","impliedFormat":99},{"version":"490f6527eb1504768f00b4026ece4d21edd1949d5eca11bb76132330b5a8a55c","impliedFormat":99},{"version":"30c18c79997adc72842a146fef84249191bd8ee28f3456605c014b1e316dd7b3","impliedFormat":99},{"version":"fbd2d2f4374aad855367713ffce22d19c87e9483da420533084c0c734df1523b","impliedFormat":99},{"version":"b0e8320ce37a2a4f1cabd3d9c3e7c72065b847fba43562fa7680e436bdebea3e","impliedFormat":99},{"version":"9a6cd826888b63061bda7c34e6bdb871e7c0b01c344f15fcc3330cf5c0f99594","impliedFormat":99},{"version":"36101c7781871da39fcd8939e8faf083c606a896553fdcd7eb4b2f7c6ec47a43","impliedFormat":99},{"version":"ec266fef2d1fe9b7c49ae608b3ac60c4713d8d1cd2073c92f5db1a73a39556cd","impliedFormat":99},{"version":"34bc73c461e18692931c22a7afb38d308f7deaad9f21de13ea54dba0ca4336fd","impliedFormat":99},{"version":"574f30981211d1f1fdce83fad7c9b093ce986124480ce09ca871633ba6a17489","impliedFormat":99},{"version":"2083cc805a15babbf2d0abdf9d702fa6f75711590bae3fceb699ac26a4c76621","impliedFormat":99},{"version":"c51825d37dab66cb975c5442706fe6451b9213e098e3ff5f846e5a77539a7421","impliedFormat":99},{"version":"9068ab90549e1a5c0f165b9798650d60bd38e7f8615c05862edcc7d6dd10d5df","impliedFormat":99},{"version":"9def60b8c5edd45e81d01f89c7717c92584cb821b0fb14fbd025aa10b0ab3bf2","impliedFormat":99},{"version":"c7a0c488560b1dc8baa8c7f399cc474a221f7cc7b7380d0fe6014cb35f807840","impliedFormat":99},{"version":"81393d54e070aa48685972683871a707f160f408622954ede5d2a2f34ad332df","impliedFormat":99},{"version":"238e9e20c91fc4ccc94d52291ecef44762188d515f649095ed0ac99d59ff4fc4","impliedFormat":99},{"version":"77da76559d39664d9f60942ae9c12082b4fe475a67773bdae73073fd11b3888d","impliedFormat":99},{"version":"cf1189bc5bf2286b630f33be24872477888ba5d270b763e8f240a20e0fc5957d","impliedFormat":99},{"version":"f8081297cbe7510cabcd2142cc09294c076194a782ea5422c1fa5aa02bb662b6","impliedFormat":99},{"version":"1426f595ea21e6da826b69bd69c046e7443a77bf7a4434a9183297f46aabe509","impliedFormat":99},{"version":"79a74245aa7b853b8b5b0c249243529340426691807c11697106ed49d8c96381","impliedFormat":99},{"version":"e849d81b6db10ba5f8b89b25ebe91fbc005fb531b8cb417b6dda49b5263bf485","impliedFormat":99},{"version":"b19fe3a95a628557bca5b5ba33377870602b9c24bfb4eef0085fa0f04bd8f7cb","impliedFormat":99},{"version":"ebc64c6ca9a2f7942c0aaa51bac5d44d5d714e562693415a158dd409c2959de4","impliedFormat":99},{"version":"fdc0a465ffda280fc5c52ef5862816082f737f07f24086d1899b3b90ee03581a","impliedFormat":99},{"version":"e15e7ff9e28153e0c1c0589f35d82929e7918cbd60436c837c5604288f1572aa","impliedFormat":99},{"version":"1466a57f95e268e08d94cf92a030e469d4e6f8c180951d9c0fa453ab0a38e1da","impliedFormat":99},{"version":"d234d63170c7f6c82460feb9e8e7df14e38a694e90bb780f5054081847e8a971","impliedFormat":99},{"version":"5a353f55cd755eacd87196e6d14e8e8cfaaed147b08b19fe7e8721e3cff7e4e6","impliedFormat":99},{"version":"ef65b08cb958fa2bd14dac358334d8f500a3583fdb0f5d0d36eff66c6d2926b2","impliedFormat":99},{"version":"bc23a8c1d5732b76eee7581bb2757a98cf02048426f3a6f94632ad25547848a7","impliedFormat":99},{"version":"37820ebe50ca6e567034fba5022c1b2b35fc2dd748ffdab1f6a267696e041729","impliedFormat":99},{"version":"b7f56968a5aca1b41d82fd99d0859c366bb1e24c21610573ac69717c6c69cfcf","impliedFormat":99},{"version":"90889a47a83550ef4d6bb79f61a46f790318a5810874848df91ab1ce83bfa5e1","impliedFormat":99},{"version":"09ac02d7d979b4bfdd333f1133c60731f8e02f77ede93a58eee7c2e2894f8ed0","impliedFormat":99},{"version":"3a9e9b5c7ccef9aa106e8d38d624fc1ef7b61023f1cc99e49e0d34d806717aa2","impliedFormat":99},{"version":"280ca67f0276359a04f91526e7904723c634b8307f36e88b8ed1d55174d65646","impliedFormat":99},{"version":"56380192c5502ce3cbdaab811c03293ae0a3477dfec5ad999e0561c7a55cc049","impliedFormat":99},{"version":"a75dbe057fa7121e02effb45fab47e3c12d43063707c633be18c92b0a863a37f","impliedFormat":99},{"version":"813ecfd69412e80b3dd7bbf45217ed1f76d70a939457bc4213a38db216bb6e4c","impliedFormat":99},{"version":"8f4accfb1ff30808a2aec06f15c493e88683a576c5ef4871388ce7cf0dc80da8","impliedFormat":99},{"version":"1cfb8467bd39e186a94ead6da6a9549de18583c998a3d6ca7a7bf92922b7cfe5","impliedFormat":99},{"version":"095a8f6c16d323c4f1899434f895179bf3a318302fbbde8e25a0caed37832c41","impliedFormat":99},{"version":"e68ac7298d9feab31b040212b8c81d47146c89e2f0b044078413ab84dfabe024","impliedFormat":99},{"version":"669aa01bd96f92b0fa1f9f5dfdd7b974b8823e876d690d2aec1c480b70d2d178","impliedFormat":99},{"version":"1ad942280beb8fd7cb99508d5ec9ba3c0034523bd9ac8cb6059cbe9545194977","impliedFormat":99},{"version":"4429304845afb8cb868836562673380e3926380bd4600fa7a0a3ca8ef546cb7b","impliedFormat":99},{"version":"55d10877f0755054ab010faa6273fd064165339b9ff24e9f26a9a57b68a24c3e","impliedFormat":99},{"version":"510ec596cd8c9dc087ba99465428d24b027f504df7d399d97fc971d0aeb961c8","impliedFormat":99},{"version":"59cd0cdf1fa93bed733d6d84b0d5147501d87bfae8ce4668b4b093c22e16c563","impliedFormat":99},{"version":"854a4ed2d2ce9680a275cefab3ff654fd76627503ee311d19c0e2a25069627f8","impliedFormat":99},{"version":"edc84564b1feb469da3da5b7e1efcd6f48fa2e04f006f07aeef4c6a5659c03e0","impliedFormat":99},{"version":"b076daa179dc64180ee9538fafa4fa6e5796a3a81539eb3349737ed08d57e2c6","impliedFormat":99},{"version":"80c166471e9529f02214e75d8bb590870f822fba82a3f32cae59795e26d660a0","impliedFormat":99},{"version":"25aa189f1265f4674b7fcaa43004d7c7cbc46b6e1f3460fc413f3cac61c77da1","impliedFormat":99},{"version":"97b2bc30456543136698a248328f804aeeae10ff3211f5368e96bb9ddf532272","impliedFormat":99},{"version":"c9f27874d3107b39c845a4380551ffcdd721246db1c82bcf43cad86d66ea1249","impliedFormat":99},{"version":"451418c8195f8533477ee9f08c4642f7a8ffc9813d73a747d77fa70eeb66a79b","impliedFormat":99},{"version":"e768ad0e15d014a0a09e47dfb4c3d6c9d5247b186ec2887f07e984eceeeadeed","impliedFormat":99},{"version":"77d3636c84e22e5692cea961ba0957d687aecd776ca48cfa5f1c38f3fef6ce26","impliedFormat":99},{"version":"119c30d96ef567d5eb44ecf9caeeccdfe4b4af9321fe687d10b238f64a1f16c7","impliedFormat":99},{"version":"a4191368ca3082ba97bc919f8de837e29cedd508f11c20d559421ed90f5648c3","impliedFormat":99},{"version":"7424fdb26b9156029a3d0282191a16576bb1656f7e77c1da961b9e44e9fb502f","impliedFormat":99},{"version":"94e8a85d1d6ca2a4fe056f231dca96691acbefb9b0273ee551109bf69ce53f11","impliedFormat":99},{"version":"b78d4a5e2cbc7f6b244155da9fbd30d6016d225739abe750b47d443ad0057289","impliedFormat":99},{"version":"289db195422725ce6e021fcd4ef250c4702248355515ca1648227723a98d618c","impliedFormat":99},{"version":"41f3b546b4f1810ad4ae11e8a32664e70ec2b118d72e7d6cf04c85ae29d8a43a","impliedFormat":99},{"version":"ede452edea60a6ba0214f4201f5b959d57e7c26a743a5936a05f182a4bc55930","impliedFormat":99},{"version":"0a52552297c1d0af3470ecaa85e504b3f87af7fb327da36b5ef63ba06f135e20","impliedFormat":99},{"version":"ea7dbb28b1ebb092c8f974336a33caee5b29145b699ac1e8ce765979790bbb35","impliedFormat":99},{"version":"acc64e8177b7e4fe1a2545bbdf2875a89852ca5b042471fb05901c5e2a6d8fca","impliedFormat":99},{"version":"eea6ac739630bfb73b2e59bdd90d6f278a7ef0228f09525fd6adaf09d90f7280","impliedFormat":99},{"version":"d60137c38ec70f4d3495e2cf71ed73bf75f405f78c5c8644165bdfb0d9eef528","impliedFormat":99},{"version":"b437a4e1ad5b26d9c0d740ce71f956181c74bb283abb0d2510360ff065b0ff3c","impliedFormat":99},{"version":"7639369a2b3ad9cb82a464144871c8f90990443f92320c1fd3fd777c2ff5bdc3","impliedFormat":99},{"version":"c058887683e283e99658518eafc8ec08754f5b16792662b09a638d5a317a7719","impliedFormat":99},{"version":"1dee7843ead6b1135839649de81ec125fa95b5c7c80c52b8a08d8fb7c40ece9e","impliedFormat":99},{"version":"e3d7986bd6b3e8949cf921f9a50fd955da64d399dbd817f5394f772f7d52b6d6","impliedFormat":99},{"version":"4115d25268a762ed4b047dd9d5e29f46687ba84049cff9fb4c68b18d60e910d9","impliedFormat":99},{"version":"1ed9ce51e9bcac81f9d2c4d27ac2704c0a2267917fbd3dc6d207413cd7a6b272","impliedFormat":99},{"version":"f13cd5883699bdc863db77c15ba94050548e23e98fa5a5b26455fa105fd15549","impliedFormat":99},{"version":"008f7e03cecd8c3a12015053fb8714b8d738d35a35ed1bfe4c4b02be0116b89e","impliedFormat":99},{"version":"d86f6bbbc83f4d8944ffba72ebf5b486afa462fd26b9e04fbb199b4d2dd920c2","impliedFormat":99},{"version":"4bd9c7cecc7b653a34f633729cc1a5a954f95320f2dae63c48e8416a625b36de","impliedFormat":99},{"version":"765f3ebb07e1f7568ef6ca14d2e7f80900ac5dbab6dd25872f16e23fe5ef4d34","impliedFormat":99},{"version":"6cc361c360c6fe2723b28810e8725b894d9c88e4c4cbc197a8a6ae304452ceb1","impliedFormat":99},{"version":"386d783e5c235fc03eb9d3be33a41ed3a3744708c6f184fe9618a25b6caf9a58","impliedFormat":99},{"version":"fae4c4fcfb20aa2860f880aa7807d8d8102abda026c539c261e4da53997d9659","impliedFormat":99},{"version":"a4a256ff9f03798c49a001a0d4bc708e96a20be188d80d3f4d6f45e1d2480b91","impliedFormat":99},{"version":"80cc57ed8b2f7b94ac5d6b61ffa975eac13e39cc55ed9d32f2a4c03b07c9ce2c","impliedFormat":99},{"version":"6a1c4cb49ef0a86d4985496e9250de9fb38f286fa7bba5c2556855398e24d98c","impliedFormat":99},{"version":"94613cc30b4c60bc7b5e41f0014f5afc1f70238a9f3112400e2ed802b9edc2e5","impliedFormat":99},{"version":"81b5b7d4670aab0d1999b8480d483e3b0d12a8ef6a47238737bdbca5cc5b3af4","impliedFormat":99},{"version":"0a75c44f704965ede175c60995e6ef37943ace985c82b37ec004a02a23d6f54f","impliedFormat":99},{"version":"dc6fb79c45f464f758e0e2b6a09c34e0e88c980e3573c04333639d1061479dff","impliedFormat":99},{"version":"1d49ef9a4c8784be6dd7d91afb621b78c0fc8017769b9dd846ca63232e905467","impliedFormat":99},{"version":"db18fc8ed779ede2de97ba0e9bc61d13d1e971711bb85fa085d2be02376203dc","impliedFormat":99},{"version":"d92de62f96a0cf43b1625552f278468e06061453105a5b60ff78c6f09c30ad8b","impliedFormat":99},{"version":"4a0b017378d2a33ab5c70d2d885b9db3c10846e1f0f9b685e3be5edb59ea3eac","impliedFormat":99},{"version":"1296c3ac64a45bb17d8c90629bd2241c5942ec6ec51a4013ba540f2aab85eb07","impliedFormat":99},{"version":"7ace98c6830758e1f8e22def1defa1b77ccdebfd07d3508a1fc455cf098a62a8","impliedFormat":99},{"version":"e7f716b3a0ff08e8d289109d49b76e90644247d65a80cbaae2f476d3ca954bf3","impliedFormat":99},{"version":"5f5f47b68b781eb477da7e844badb481b34489a6e8686c1ba155bbcf2e7a133b","impliedFormat":99},{"version":"d863e0158ab6d1a5e8f315f879c255c7c64a4e45e5a980c2739c73c8ef9b1813","impliedFormat":99},{"version":"bffcf294ab82808982b50b77c7ed624a48b51b362e5108c98e3dacdd6b96605f","impliedFormat":99},{"version":"9ead7db9d2f12cb8ba534475698fa8d5cf6422e6ea0e77584b31e59ecf25eb63","impliedFormat":99},{"version":"1e2c2fc640fe117bc83f6320e5fd181f6e51a86a7eee232d510ed0c8b2909091","impliedFormat":99},{"version":"fe6441d144419863eae6218ec1ab1fb52af6c4f2f2c9993980038501ddb392e7","impliedFormat":99},{"version":"f928aeb71d76a99ebad7fc109e96135e497989ddb0c0ee16465e35de24f0cfc1","impliedFormat":99},{"version":"c883c7b209cf3e51a693023de37186e199d7e2342cd41f1f0b8ab9ca34851cf6","impliedFormat":99},{"version":"0fbe381899728959b9f565371a95921f76e4255dc9813ca95a423c7a81cf157b","impliedFormat":99},{"version":"b1dffe769906190c61aa2de29ba423c0d9764f05aea7ebbeea97f8323f6bab95","impliedFormat":99},{"version":"5f697a3ca1e2ce84e63f5c6fefd55ee00f4608a450aa765c923abc907f0032fb","impliedFormat":99},{"version":"6c8bedda58d1dcd5cade3495643fd5a1d1e6af75f50b961922b4214003c34daf","impliedFormat":99},{"version":"3d8ca129295708074c35d06f4e9b40e11e9ef3233df0dca6ae1aae5007bc1235","impliedFormat":99},{"version":"310790a0b20dca6d4fa1884837f48775ac1a7b711dab75bb25e203544c82a46f","impliedFormat":99},{"version":"03889f2863e44d756e96e03ec365dc1a299653897025ea1ded75e99f4183026d","impliedFormat":99},{"version":"66d50cba2ce96e5ff08affeb25d1ac3e6206887585a650ebf6cd712935c7bdfb","impliedFormat":99},{"version":"f72510666ed2d0ac50c3999c90e6a628ccfddeb123783759aedf8b64afc472c7","impliedFormat":99},{"version":"82d2796cae92487b15c2ce8bbc220d9d6ce8e6dbbe521b08f1d52eeddd83627d","impliedFormat":99},{"version":"66b417c8ef1aad8f6f4c2185673d0a3702aae2bee03885edd91a8df598d087ce","impliedFormat":99},{"version":"a7b40cfee10f0cde9d2d0d368e143a879af2fb8eda8dd86d722010b37d67fc22","impliedFormat":99},{"version":"584c9a3408fa4608c3f267c88f9942b23f3ff65a14daadf3eb1d24e1109a34e7","impliedFormat":99},{"version":"3933b9179508da74e2466ed5af41790695e53bef479533eef408ab34c08c3805","impliedFormat":99},{"version":"50aa52ceb6b51e337f65deb87aa418a7c24794fc0f9eabe41357461fa3106dd5","impliedFormat":99},{"version":"f6867a201454c8b60a78672c53367fa9dbc1aba247db27156c3e5a2fb3cbfb55","impliedFormat":99},{"version":"2bb7ed42f0bb306c77fa17ee006759f2f3cc6b6817fc4337d729ce010e7f8fa9","impliedFormat":99},{"version":"05c7c9e1d12cf2e7ec37dd86fcca61e4b1b4a2fff3fdf3648ac7210b5c09d944","impliedFormat":99},{"version":"8acc21ead62f0be0b6f6415e6dcf89ca2089d262a5d9da84f4688c9a37a9397b","impliedFormat":99},{"version":"e6b5b68af5046e3d64bbff45d3b41e0fa5da06f85efda33a07aef32c2fa4b54e","impliedFormat":99},{"version":"bb3b6049fb550829d304ff7024150cd4acf3650c11d9230e52d194caab19393b","impliedFormat":99},{"version":"bb119081db62488bf65a9563919a80d270201a1aca45d8ebd25a6eda85af1b78","impliedFormat":99},{"version":"abb85df073721c70450b1af3713cef5ab1025a36cc1566c31cf39475c512e842","impliedFormat":99},{"version":"8407d00275c737789e3e526a2f63542d43240d39cc813e0f391d0791e796751e","impliedFormat":99},{"version":"678b7873a38230d98a4ef8879f1b84b658b01506519e05a0291e887b914a4924","impliedFormat":99},{"version":"f474bc9e506a7690f97b073c4c93f16a67fe1859a7610cb08b54513b62f076e9","impliedFormat":99},{"version":"ce2b604e7fedfa087e8fc68f7d850a2208f2b0e5393db59a4fc7e21ebf04fa60","impliedFormat":99},{"version":"286b74c5381464962234a6e6fb7e41b56434a0466c0b8072f7762d102941e4e8","impliedFormat":99},{"version":"781a8c3f0fd5a7bb5c73ef1a804a09167ee6e72031be68af06d09a85d38003e5","impliedFormat":99},{"version":"d514bd8b93d377b46f889857af29d5a56246697136b3640514b376e15c88d9d5","impliedFormat":99},{"version":"e8e5d7cd52764357a339835c34327ebb8634c5cb932d2709f93c152f2abc3129","impliedFormat":99},{"version":"79583eda9e4c9b3807c71fac738a25625b11fa7ed587b2d1b5be69341219365d","impliedFormat":99},{"version":"e839194cdc481038bd67ed3c1566f5d29390c2af98f6b580115e7515ff3120e0","impliedFormat":99},{"version":"f347639fa958762371b8408e36bb5342a58affa28768131a834797c2a9ed07ad","impliedFormat":99},{"version":"053994ec3f7884ddb63bec643bf2276a4da93210bd12926ce4ea51cdd2f1af00","impliedFormat":99},{"version":"38bcc4a561e59c0a0e6304fcf9ed28df9a18471a06f7d25d4d839aa0f273b4e3","impliedFormat":99},{"version":"fa83e95a170c109f9e52f892a28a59973a8454979a2cc4161c765173e67f86ab","impliedFormat":99},{"version":"08a5be336a00293970580fdaf71e1197054ef2c9cd87769b19f7461cb3c617a5","impliedFormat":99},{"version":"ce1ec8f1a46ac13b31b36828b903ddc8b5f0a4f1cd59d6a1b122221fd0da4164","impliedFormat":99},{"version":"361fdf24d40b6d7f3250dac622b9d37becb257e4f855f85f0a30dd6558d50e99","impliedFormat":99},{"version":"1758b1f8898f121a176226b62e39461eef854bd33ed0552991c64cfcfd237826","impliedFormat":99},{"version":"7ef114c434371bf0bb373d8afb5e7cfdc5e1b2678683b92b89588a359bc01d46","impliedFormat":99},{"version":"56ec6bb075d116568daeb44a00ad710e9645b9e383fb61d83078a9e0d59ddac2","impliedFormat":99},{"version":"4d62e78223979185bf0fcea9a50e9eeb81e20e4df1f924511efaba42333d39da","impliedFormat":99},{"version":"170475025a9322720723114bb937bfacc4e5096666073e99d7f1df897cfaa46f","impliedFormat":99},{"version":"9dc2f4660f991088c1df79af054f451e7763b592b83911b2f55865282e5ffeea","impliedFormat":99},{"version":"3efbb5dbfabf41264c36e3e8c154ca2ec5a28dbc3dae87eb299ce826cec00eb5","impliedFormat":99},{"version":"ce0d485a733403bf3c9a552234e183b2f6b4f2a9f392ce8593ee52d09a7b4227","impliedFormat":99},{"version":"21d7d9fe27f34102a480656861392bd4fd37ca27837f9dca3542854bab35ed92","impliedFormat":99},{"version":"c0561d3440cc84a4e1a289b392dbde82e307d89eea71449c3a41b609daa9715a","impliedFormat":99},{"version":"ba519b143a14fee5242e9e8e549c5944bc6e6361af1162363c8336bb83289708","impliedFormat":99},{"version":"ddba8d73eee6f39c8a1458c244b9bf5cc54749f9d96b3e4c020bc27587afc05a","impliedFormat":99},{"version":"abf16ed784c74fd46c656cac5f5f7128a8fc9ce72bde1377d83333b32e160824","impliedFormat":99},{"version":"297f7c98f8447d6d8171c2c830a5769ac5d815ffb1a41b31ceba551b1869f91d","impliedFormat":99},{"version":"73bbe80f02235433340e10426a1a30e4862f302d8a4773d391544c47f6c44a59","impliedFormat":99},{"version":"091f41ba847167078b84a31ad0ff781613e22926b1aeb2bb9c5a5b81829e950a","impliedFormat":99},{"version":"fd8c79b9432d4c75dc3a776ca5cfa6c0cb01579667604ab7d3b564adfe02a1cb","impliedFormat":99},{"version":"a474af2d3c46c4ffb9ac67c35794d3188c99d0a9e29ebb851c925e966376d867","impliedFormat":99},{"version":"43f3124b51d65427823ac7ac1a77ddcf9d1aaffcafa199307c8359f96579d956","impliedFormat":99},{"version":"8b5edc0c16524d7ce61e374614f7be58eaf72aa31779e7995d75a48d8d321153","impliedFormat":99},{"version":"833d94d5f9ba3c0a0e0a9d98c79f4ee0ee099ef6f1aa6c594f98e9a503eb20bd","impliedFormat":99},{"version":"1073447c7d241622e16b03261a5a35e1ab9511a726fe2e9d9472a98531e08ebe","impliedFormat":99},{"version":"678498cea62d90c7b6f6fe6d77d6913a498207292fc5ac085c3ca6673e1ac390","impliedFormat":99},{"version":"07ce6472819a84a9553d35477e08e843adc1c4e06f706c32aaa6bf660573abe8","impliedFormat":99},{"version":"b49acee84c7c1e58e404d674f3fe8a72a73bea8f21a3384739ffac376dbc4d9d","impliedFormat":99},{"version":"e05f80fd2fd9766d62e58ca19f342980594df24b67d046b2407bdbbc642c20fc","impliedFormat":99},{"version":"31150f240226c796b061e96be00586546e8691604f5e8e074b6eaa1cf7ccbda8","impliedFormat":99},{"version":"bc4051bf149154816a313aeaafccd606224c7dcb5797faaf1461c7eb7b9dd32a","impliedFormat":99},{"version":"8384d125cdbde45b18b143511eecb4cb1a630393b20e0f384da7ce53ad500200","impliedFormat":99},{"version":"bd1bf0a339f399d23c42b3c71077411fa0516521cf650f2a979b6b3ba1bd5776","impliedFormat":99},{"version":"7382c0c8f0db3389d4c2deb5555a6a13510cb2f3b1299a5be434c78959065adb","impliedFormat":99},{"version":"28d190c786629e69bd4663183c7f6cdc6f6d95661abb33c4acf8e864bb17d6c2","impliedFormat":99},{"version":"f7dc29a70b2c22eb0ee37c58fa13b92c56a03cb8d07e517e50745fb8f3180fd0","impliedFormat":99},{"version":"2f7ff4d8be24993c494c9174d6d0d567a2f777d47ae605bdcd1f369561d3b1b9","impliedFormat":99},{"version":"3c5011b14981547a762a9a4b23494d3bc56000e016c61cf288cc282cab4565a9","impliedFormat":99},{"version":"31d6f6e05ea3be94b6d0958fe20585c624e37139efb2714c6d4716ee2e83e39c","impliedFormat":99},{"version":"46380cbf7064fd9f0c68902243e97e6c50d044c1c2075c728f9ec710b3d4764a","impliedFormat":99},{"version":"ad56ff5c498ae19096bea2f2e48a483496a69e7f882378ec702d0dab3431adbc","impliedFormat":99},{"version":"33ac964aaec5d03a7f2bdf85235133d8f8a542ee8cd53cdb6370cf12a5fbca1d","impliedFormat":99},{"version":"cb525b94462aaffa1953f40ca64f30af02c056ddf190a005c9372140edfb1520","impliedFormat":99},{"version":"f9c4cad499989bc9e52fb20fb79ddf145e74f0bbf658c11e632ff27784df8d67","impliedFormat":99},{"version":"8b2416a382ec4e4d165f2eb918be0656e116328a89517376a344e155f1f20574","impliedFormat":99},{"version":"c2b0b8ab0839ebf444fb041be8baa98073cf24e7d34e9d7b025283bcc19e4f6f","impliedFormat":99},{"version":"6b83038103737e8a2a62c32a504cb51ec0ae8c290245392b1ed3ae6422dd92ad","impliedFormat":99},{"version":"b8c56895889493917c83e010b52a20503a577fb619bd2dbf93dfc96194d1507e","impliedFormat":99},{"version":"a346e366f5b0bc3b7ed1246b37970ed4cf285ae542a9322fa570461ecab1ce50","impliedFormat":99},{"version":"ac08e7ce22f77cb1c3e394319bf6c5e91765260cfc1592fe4ec98d7b6dfce063","impliedFormat":99},{"version":"936087f474e826b32d78e7207349207d340d684a888366348c4f21e588b80af1","impliedFormat":99},{"version":"7a62127857134b78a06fa3eaf7c5cb640aaeb4c5f68b286dde92530b0d91439a","impliedFormat":99},{"version":"d68366828b46684cdec1e5167d55a37eb12ba413a8dfa7a9f3bcba9b0eedda79","impliedFormat":99},{"version":"1e29f487dba82fe1e01581eaa5452778335c8e8035dc7bc897a08438349e015a","impliedFormat":99},{"version":"436e04e198949a9de4d12437e9a0e22a635cd572f6a1e7569c69367aebd564a1","impliedFormat":99},{"version":"2de8f43486975db9345e8671658af70b6732714b921338efeee75332fc9d2b9d","impliedFormat":99},{"version":"a6042f5361a7d639267a950bfe7b8071c8fac0a22c3460516aa57132e5e8d783","impliedFormat":99},{"version":"994706f0de0e7cdc500fe2df830df39e8673b95e21052b860833bafa47e3b3e9","impliedFormat":99},{"version":"eceeb11208e29be4ee959d8601d44a160e5891acfaa2890ad3381d9ca4552a3a","impliedFormat":99},{"version":"1d4ca5e0f18a48b4c9bb13d191acf780c72d6364f53bdd5cccaae3da8dc75ec9","impliedFormat":99},{"version":"9ce599bdf3ac0d33b85546886643ef3826894f290a8fdccc09f34673a773d585","impliedFormat":99},{"version":"1aded17d799608c0ba976d9c017b71b552428923ae175c4ce2d03c6c251fc293","impliedFormat":99},{"version":"110a028c72500ec8975f8fe8e9c58bc3c53ad1b8cecedfdcc9b13d01c82f9fc6","impliedFormat":99},{"version":"0f28079d1c3a5b121158ca2992b65c9b39ea578d10f9a660edf19f0a3df74d72","impliedFormat":99},{"version":"6c543b666c02de0cb90fba1b177ad2e0f38c024b2d35baf7866d88a772335013","impliedFormat":99},{"version":"22ec74740daba4895b82f71ee7a81e8d84ebf8ca87d750a9cb7eebfb53715cb5","impliedFormat":99},{"version":"a99162f184a2eacda687014590c6cdb127b309361ca893876df04e6f42899933","impliedFormat":99},{"version":"a2e7959cfc8d0b1e2a8fea12946fdcee9d3d39ec83f9f69fd4fd3019dd729b1c","impliedFormat":99},{"version":"f75cefd211302ed3f67f21cca8fcec37a261f61aa74c8506818a594d63987c50","impliedFormat":99},{"version":"0bc6eaa27ee3b289d58fd31f9597fb3786fc5109a6fd247f2d18025cd8bdbfdd","impliedFormat":99},{"version":"2c0c57f8d531e350d0bee50b45fd4979073ad3e6770fcc82ee5d9434d33f01be","impliedFormat":99},{"version":"657ac562004aa622ba5adf699048ec590ad1b4c0c47c77ad86b8d3f491c068ba","impliedFormat":99},{"version":"b95426b6a6ef360b38ca32ed9a16d827079eb9f9c2e018be263a6f9a6d4dc62e","impliedFormat":99},{"version":"9c7501860d6585a6fb5d1021c57a33bb953398da637c5dec0effcd7877a52bfd","impliedFormat":99},{"version":"618c2d571eeea05cb19350eb01fd25e3362faf19fba3465eda421d8ee393bdf3","impliedFormat":99},{"version":"55430d53d77e54aeb57496d12b469c03d1970776db91e2ffebb9746f67f49db3","impliedFormat":99},{"version":"7aeb98df985447d55fe2c79d236a8ac5d9298828f5f64eed23943e28c91aeb1c","impliedFormat":99},{"version":"724c015bd6ca5e48308f10bee2f034ab5e0a5b13452e36bf05fb5f455a1e9ef9","impliedFormat":99},{"version":"8637d71c11793ae5cdd3171517ab0453ddaa84a916f6069cc7d21756f01c9a13","impliedFormat":99},{"version":"7b564c8ffe25811dd0300e0fa16d9e1bdb57307300a569aa4442a39c794b38da","impliedFormat":99},{"version":"b9aca9e3eae5ace3397362e7093655ed2f2000a3299003a0be3ba63fcd8a1cf7","impliedFormat":99},{"version":"1e06d6137283a011ec689e6ec5e76df3dd46abd938745d363a260adb54b0b6e3","impliedFormat":99},{"version":"9e0bc78a0cf6afc736a142062ad0186d496b8ef9dd72b5a3d2847508ac9281f2","impliedFormat":99},{"version":"12f6a1fc30cc21367b7bd024a1f234f1c87c2694e5123791c4c1336008a97ae0","impliedFormat":99},{"version":"62a82040362407115b58a948e8f2cfd6a8c277a2d549c18fc06d21de2c3931fa","impliedFormat":99},{"version":"1d5cd62166fb45b821f6292a748f772620525688c4844ed81ddca13253ffe99f","impliedFormat":99},{"version":"b6007d32fa2029a0a1aaa3c405900ede8b00d3ab717af0a1ce3e681bbdd7cbd2","impliedFormat":99},{"version":"d430e252cb220478232cf6783dac71b221875110f508ed3ffb4dd58a93cd3bcd","impliedFormat":99},{"version":"0ad363f8072fbe9e4f6a5b90a870ff30f962eee48c5fdb543445f709675250bf","impliedFormat":99},{"version":"5dd81b737d6f72e731aaac4678c763af0ea6897d7fd8196f04e5477757db3e16","impliedFormat":99},{"version":"c9de554ffd41dc88473b51f8a726f8e6752ba4f8afa12100fe24b9f18ce2794c","impliedFormat":99},{"version":"f7f004f03df753e513625d261669f87c49d92bc2ffff624b809d5c8c8068806b","impliedFormat":99},{"version":"651cbda75a78fdf3da54f3a7eb5de87652390a44a34140303fecc2de9983040f","impliedFormat":99},{"version":"200120eafe59da37d180ceea37b342957849377c7215d2efa9294edf537e745c","impliedFormat":99},{"version":"54b641ae9f41f8d05b6141e6a02acda77b0743e1c3b0bef93e689f890981b1eb","impliedFormat":99},{"version":"b231fa6be4cec8a6b90f98071335cb22a6196b64724af56b1e851851fce48bed","impliedFormat":99},{"version":"f9f8a5c8b56a99c29943ba345f03102f159330ee4984ac0c06a4b93f3f9d6c1a","impliedFormat":99},{"version":"2cfe431d866a5dc7a23dcb1cd896aeb995dd1416a668591c79d7c0548b2bc8e4","impliedFormat":99},{"version":"8def9a68149edf17ea5df2669bde45acd5cb3f5d28ad79042a428e830a24af1f","impliedFormat":99},{"version":"a00a6157f232a7d36c78bdd7c85d34c8c9e8dd7bd11cf2540748f5fb9030330e","impliedFormat":99},{"version":"2b08bc4a87ef16bf7f587f074bb9194c112b69462fda07d5410476c8513f9a7f","impliedFormat":99},{"version":"615607b6a29e3f697222ea2b0109a513d0c7a961969eaf9498917d36db55ebbc","impliedFormat":99},{"version":"343987d6dae8f8ec43e2eb17aabb2bc5a15be8e7c797d37c74792e4bd43ca839","impliedFormat":99},{"version":"a80b7bb7f5c675ece7f1e73bbf4f4f9632ea8e919c1170ed9bae7cc6fb707e77","impliedFormat":99},{"version":"c27b0fbf9267c8beebf4ce5b1696934e7bc08847f28b2c9249659441a94b9da3","impliedFormat":99},{"version":"24ae591b2f12be72a4a9fe993b92135d6bb3e5e1bdb13cc8097625651404c4be","impliedFormat":99},{"version":"0a1a4813f7ecee0d0c39fcd50583dac3b63d408a95072905ba16d469919985ae","impliedFormat":99},{"version":"7dfa35a959b024bf2fa0483f2488ea6ed893ba1277ccc075e018a1730270d544","impliedFormat":99},{"version":"c0e98150595af80066480e9583f89e6370693cd0827fc89b68ecabfa5cdf4a72","impliedFormat":99},{"version":"10134fdfdf255c70e3e1838ad9ef47047677383aa6978883c15eb0f5c17c3563","impliedFormat":99},{"version":"39056f5033d13f6d66c2980c3e0e20bf84ceb64d51567156451695773148ab1b","impliedFormat":99},{"version":"4d79b57384b19b721f29cc120ccd4c8aee6c2351d8626a6bc3c43e1e7dd555fd","impliedFormat":99},{"version":"ec110162f200873cca9707c8be48a53fb509377db99e916b839b1a36332a655e","impliedFormat":99},{"version":"77f67d567cba48115ebc24484cbd0ae510dcd1e41f9508ee1f5bedfc0a925520","impliedFormat":99},{"version":"45c5df088d0b2fd4aaebabae4ac3e69f05ead369aa0e146067dc7f553b0a8279","impliedFormat":99},{"version":"6428679bceeae2bc835cf15366c8219a9f4a3baf9133cd2004dac51a87ebde8c","impliedFormat":99},{"version":"163555f7f6c6ec766b30dd054fab8fa69f5184d82698c4f5e7457b4f22710fab","impliedFormat":99},{"version":"8a92621a4d723e1c2f868b18f4ffba76739a0c93e8437850f99f5009499b8848","impliedFormat":99},{"version":"2bbde324e159d9f59ab56a4c77128737958704e9c4331caf646b075c93d58ea8","impliedFormat":99},{"version":"b7c30808b1e0801ebc2929e8112cbc6471473f227d25fa3c338ddf8b4f2cc972","impliedFormat":99},{"version":"a5e0dbdd3c5ebcc3561c493df20fb1c35094444b67e5cdf894d5ca83455f0dc4","impliedFormat":99},{"version":"bd0ba36a4dc087b698b83e8f210c57b5b8cb29c4e7cf09f52b9c53cfc8527508","impliedFormat":99},{"version":"40b46bcc69563ffbeaad0e7a9be85f7ece978902c7e17481874d3e40b6f30baa","impliedFormat":99},{"version":"24fec85fbf17a72b387916cb73ac60273753eb2f75bdba89fd9d8373d2f8e823","impliedFormat":99},{"version":"0fda2c7354705f8e3c7e88495fc14af255e1e4fc6ab5fd2510b0ded969550128","impliedFormat":99},{"version":"8364b396dccb914a0fdd1a43ac72eab807e2285c023aabdceb4a90175ea1fcaf","impliedFormat":99},{"version":"267fce2a9d770603e7497ff4d2ebabd4ccf6b6c40b379574fab6e7bf16df3635","impliedFormat":99},{"version":"6a92542761d442813efe8c992d14ecdb9f0f88d29128ababad72d5372d377a41","impliedFormat":99},{"version":"a913e963331c6b05ee3b833b505855f555b1632bb7784fe97933f01569b64221","impliedFormat":99},{"version":"a96a6cc809d8f09952880373df55104b7869b601c45b58be80ea50ad46bbb0db","impliedFormat":99},{"version":"6f13100cf876318d0f1e8f3600beafb1622b52c8ecad388f82d5c8a7ec5c3982","impliedFormat":99},{"version":"12d6a24ab50e258055b79b5620e1ab58fe1d5e53f816d7d24bf63b2bd41399af","impliedFormat":99},{"version":"4d71c3f2950cceeea5a198a49f9548d4c1744b2e08e799026b2c01e26c30ad84","impliedFormat":99},{"version":"56e5330e3c63f36f57cf87db4674dc0da3e84c9745431e3ee4eea014372e6ae3","impliedFormat":99},{"version":"06454590fb020d26332487e466caa15be9d4ab476cd1f2b502d041df6e73ace4","impliedFormat":99},{"version":"0af1d04da71458d3b24e9d4fccebd327335f147e0b822871151c6fd74d8a945d","impliedFormat":99},{"version":"0a65f24484673f5ff0ffbf09d8970f509a4c7140cf4a92fb94f4ea8be759b150","impliedFormat":99},{"version":"c3ef829e6159fc25cbb3ffb2392cdc65fa0bee0de45d1905eef39ce72a30b223","impliedFormat":99},{"version":"1a2dd1a4760aed2479369e605adde150d3425e1081be79753e3a1e4238bbd4d3","impliedFormat":99},{"version":"8a580ca7dfe72e5393d3e68f966e9a6770a0a67ed31a06783a0fc2d5f1bf41aa","impliedFormat":99},{"version":"dc5c180e2c2ecfb91687fa245c0ef789abb2f258925c53a46c40b5be5cc06d7b","impliedFormat":99},{"version":"2e03d78647e74bdec38e689f32471393ec37f477b75305ca299fe7afb378a900","impliedFormat":99},{"version":"d7d10dd270b953176d3633315fdacf90cf2c3fdefc7980b948e7d242e1f83d20","impliedFormat":99},{"version":"5e2880e69e0b2f69713a7b5c8595d08353d8129e62f14fbeac5e3a7a2f350111","impliedFormat":99},{"version":"26541ee839fa2672a9aee147d1bd77c92304c07c9c794f4e70d98fca4ac4d5d8","impliedFormat":99},{"version":"e6e906f2106464f4ff8ff9d653ab434dd57d14f1a86ac364f0d764633cbd4fc1","impliedFormat":99},{"version":"2dfff976aaa4c0efbfb0694bc9a0115b3d745473b9ce80949fa02f249df466c1","impliedFormat":99},{"version":"4eb1912637486f1b4a360658f7b1899aafc2b07761ed99f60617d11f596ea58f","impliedFormat":99},{"version":"be1378176c12ced525f5dfb672356dcb44c3ed826b76f1ed7c2e14c17e698690","impliedFormat":99},{"version":"6bf5d30cc1060528895d2db6fc2039c65606d2871c575667913cc67f28a8e2c4","impliedFormat":99},{"version":"a6cdbac42ca8870acf70615c430f50664236917dbadda4829b2ca85e22f65dc2","impliedFormat":99},{"version":"1a35594e8294b60a08ca90d0712772b851d3bd3343fc3f40c517e8f91118ae81","impliedFormat":99},{"version":"bc992f34d8a1ea9b6bf76ce99de74c427f5c578c36d40f0f47627d7edefd1396","impliedFormat":99},{"version":"239c64046bfc03eaddf462ca3bbf31f3f629f47c42292681eb8174ab4a1bf080","impliedFormat":99},{"version":"e9922a0bd88d88458bd8e1b59629942989a4606cdc73104549b1d975e11c716d","impliedFormat":99},{"version":"fa4277a5b715291925ee253e3d5f4ace6858e30527cfce7c981dc3d910b282f6","impliedFormat":99},{"version":"32e62dcf57f473fe959c8e55c05b85fc6f2c41bcede76f192462688214ac52af","impliedFormat":99},{"version":"fb4d45a4a5a2d6bd3e55a9bac0c06fdfcfc437364122611b4eba92331b550764","impliedFormat":99},{"version":"fdd44bceea44c6b6bbfdcc60b21a749ece00c3c9ca39effd76728769abdbd3e7","impliedFormat":99},{"version":"5c3e3cb494f815df8289e573e275f5af22b90f65ea4f84ccc02db71cfda44c10","impliedFormat":99},{"version":"6156ec87a3211fab0e201ac49e23bfa7b305e4e144bd3096e6fe134d7b89b608","impliedFormat":99},{"version":"bd18b9e00a08f52ed006cecd5278e09636c9a8f554a53cab6980436f6ddb930e","impliedFormat":99},{"version":"76f6f91c693dddac2959f67e0dd1694cafe5a60d648308ba37a8b553157e08cd","impliedFormat":99},{"version":"dc9283c141dbfa236f0cc44a80455f03127d43f9f099a347d577499131bbf0d1","impliedFormat":99},{"version":"2408d8663c9b5598c32539ce5a2e63e61d3a9c783981441be2ba91c59a214bfd","impliedFormat":99},{"version":"c54b3671ac0947ccb76b538e9ad5c2c7bba2d6b4e2facfe90ed3883e5fc870c4","impliedFormat":99},{"version":"acb187dcbf37d298e9aa2188723266fd52bc691c21368f7ffad1f5cf5efc8f23","impliedFormat":99},{"version":"f844308a48c568900f8e3618cf117fc82ed6a6436b0ac3d2965af03d14c6b096","impliedFormat":99},{"version":"b0f5047634786f8ca1ed076ef456eecfb357a7bae8696f02608d996ad8afc52a","impliedFormat":99},{"version":"4dbd3281bbe8fa74971a802b8c1e1a0747d2e70762b9a4814f7ff442d3244230","impliedFormat":99},{"version":"c364b9476c21321d77f63075ede02113e60943fbbde14b86cc910d7891a5218a","impliedFormat":99},{"version":"653fdee1ae608312fce98873672eab205ac9c27b23de1b2791031a0f6d2b98a7","impliedFormat":99},{"version":"e4fd76ab9cce4eb4f61d7288e26bb8a5cafffc80954c3ff18fb27b89204d3442","impliedFormat":99},{"version":"ecd553fb6353dc1c393f596ef37cc74ef38fc0be23e07e780ff49a39bd448ed2","impliedFormat":99},{"version":"0e06ba8ad31c92c97ff790a2bf54d322d8b926d7a7a086ee0982e955a7399bf0","impliedFormat":99},{"version":"1a9e58fb9dba9bd5f06eeefec5c2f8d5292781b06972fb9c9fb1bbd8f15ad5f9","impliedFormat":99},{"version":"1dc595c305bbf9c102977fb7970e0374d1912357e17b3a95148580c6ab46b5cd","impliedFormat":99},{"version":"af4ded8d2788d0228df353955c9a0ad6c24ef0cef8d63b589629cebdf3e5c0dc","impliedFormat":99},{"version":"d64e5c26af45311b8642ff27d05c49d8b94b9828d353540ec1c0084b92e2963b","impliedFormat":99},{"version":"ea52f5796671ac35eb62145531a9d9b33e18624c7ea907b2ba054425865ef23a","impliedFormat":99},{"version":"63ddc0222be4dfbe4edab975080455c6753b18fde348d060a6d3ed93e0097cb0","impliedFormat":99},{"version":"79cd6112cda96ee5a62a7c4ff9f7b08651af15fe45205751655cd4b4c2d1b58e","impliedFormat":99},{"version":"2fafc95d1afc4b30891cfae6447b0547fb21a4eaef4e7b6f47b789eb07698cf4","impliedFormat":99},{"version":"cecd28c55bb2e5f66e02fa64c5eea751f9273c8515918820ca2409cbb90c802a","impliedFormat":99},{"version":"4e0d0aa02da405ab61975064bfff8a927b493239e7c2694b091ce3a87512b802","impliedFormat":99},{"version":"0bce1056c3ad5ae75512bffd21985a8107b6c7520bf073e4d1fac19ef1970c4b","impliedFormat":99},{"version":"dea629ac95fc8d6abde0a2486299c3f3c7e6ddfe7c14c3ce1302ec17c025a021","impliedFormat":99},{"version":"e6ccd8091551b224ce7989079751cbeff03207986bc77aee9e1d50c0d4eaa6e7","impliedFormat":99},{"version":"7d209a3d160e8412a320568c8343f4aa5e2a216e019f1e382f3d4c6b1069295e","impliedFormat":99},{"version":"aecc37bca58dc791685b01ce18238f8d2a03fdeffd4ec2f316e37f5b7307334c","impliedFormat":99},{"version":"7b8bfb125f9de5a4ba30f5d81b5f671772cf76987d880147f786e33fa878a5b3","impliedFormat":99},{"version":"d57d9fbf2673c403c6bfcc61ab70c16c4984a6880e647dc46c51333b1f812833","impliedFormat":99},{"version":"f3354264b00ad46c7f3949220e00ff70955bb67889e0a23e0d055153966b6294","impliedFormat":99},{"version":"7fa9b40a7f202ccd3c9a22a5777f02e50d0c009f633d23c8d8cc7877e95c89d0","impliedFormat":99},{"version":"1186f9e84db92d299247dbb5a283311055f82de1f8808dfb048566d1207fdb82","impliedFormat":99},{"version":"c30f1892b9de9bd083512b9fb5858cb5787481ecdad8920d7ff75586cc88d432","impliedFormat":99},{"version":"e43ce675a68782c430c60de48267f8268bdd682697cc38e54eb9d03f53b7791a","impliedFormat":99},{"version":"df1d3cca4a0197138ca725503c85ae59e06cc21e1dba64dcae94b8e8c2b1fffa","impliedFormat":99},{"version":"6d74fdf0a7ce758f316a2b2c8960ffc50235320727326a35f580612c0d593a4a","impliedFormat":99},{"version":"ff77c6d5963b87d427ccfe6509756ef01de1aedd685d186e177603ed741c93c4","impliedFormat":99},{"version":"62c3d6cc07f01164ab6b94b1daff72afbdea44a42efa750673e7c65739b85816","impliedFormat":99},{"version":"f9aa7dd2db630e9ad51214d9d0e14da672a82322684d908e361d1bae4bf64e01","impliedFormat":99},{"version":"eca2962342ba258932717a7431741e432d275beae879d6e655eea3cddd69ca91","impliedFormat":99},{"version":"807091b6bb063571171ba50d3d7da2daf4e718de25a32b4d168d9b2854b16979","impliedFormat":99},{"version":"2256e03055dc0cfcb237da2751a763b4c695f6c6c82003cf0d36851cfe77384f","impliedFormat":99},{"version":"af7cc8267b8302c517bd0a7367642bb1cfe2e516b00bd855ef85f2bfdba59c60","impliedFormat":99},{"version":"fc490848f97ceb21a52dd6afe32a9b98cb1cb2e6320806b5fb9c24757a1ca769","impliedFormat":99},{"version":"c06313963ee23643e32bb4a0deab3d69453115fc1aa59eb2e9699516fd9883bb","impliedFormat":99},{"version":"31ed9dbe091c55243ca0d95c7d3796448367091cb1e958033c3830cb58d873dd","impliedFormat":99},{"version":"ef436a3aff282493c3ca803abc5dcb5f678be8c2345cacb3a0356a47c6bad708","impliedFormat":99},{"version":"75c0e4d715175affceaf29516d4f46316bd757d2e30945ccce722aed9aa91ec4","impliedFormat":99},{"version":"cc7ff6ad94cae8f1b6b73cb0f3694e1bfaaaeb7db708efb3aa63d657d453cd05","impliedFormat":99},{"version":"4dea994dff6f8f13a75aac0d5fd62f867790c72af9c49f2153b48f1fbe94a545","impliedFormat":99},{"version":"c119857e4642cdd774d2a84d9547ea6daecc225b2273cc6e57035bd422f5ae1e","impliedFormat":99},{"version":"04127fb55c6a3db066777ec0efa8196f461e779ae5f25be1460c5b77bc6fffe9","impliedFormat":99},{"version":"0c11f88d9828efad354c4cee7152ee7eaec74fe59ae13ae29eaa68c1e65521a0","impliedFormat":99},{"version":"df3e033a605c7e31ac7a6e7517c422dbba4a940c8aaefbb8a64730bbcdbbd199","impliedFormat":99},{"version":"738ca31cb07d20afdee107364e270214da052479973e0b08a9a886f8f90d2803","impliedFormat":99},{"version":"bd034d73f41f90d3cfce994b51a759b887632bded1cb36f1dbe2773973a1ddf5","impliedFormat":99},{"version":"35a17e3fc0e53518707795ed24bd428633c45a4e8fcd4657eea2963b42366eb2","impliedFormat":99},{"version":"b3fd4b12bc1b4f73f1a110ccd99ffea459864afb8e682768d641de1be3508bc7","impliedFormat":99},{"version":"d1dcfea8733aec727e00c133901efd6974a9f7601c4c19ccf9c2e99616efc104","impliedFormat":99},{"version":"eb0b20ca60a2a2ee1daba9b78bfe8ae99487de57223aa6f0f6b99252b0cf9363","impliedFormat":99},{"version":"8c868f22cbfa1cd301a05eeef770dbc4453dc42f065fce267945674b4d82f3c0","impliedFormat":99},{"version":"e6ef6469aa806b0907c02b67207a86bdfc8a9291c5e63f3ee0a72437df56c055","impliedFormat":99},{"version":"85c677f795a09a5134768fc909906713afa46536fb7c178a58a2dbc8f981ee41","impliedFormat":99},{"version":"97ba6fc4a6c7975f53b16bc72ff0ca05d41104ef2a605f07f219ff23ba6643fc","impliedFormat":99},{"version":"59e5e42bd98ddb731aee619aa16b1d7403e598e54bf75d2daff25c57495a13d6","impliedFormat":99},{"version":"54e79ba20e85bc05dbf39eb24f94c0bf485ff76b096654420eb32dbd7a616c53","impliedFormat":99},{"version":"80a960337c67f64bddaea4ac2fd437ff09dcd64c50ebef0ad0e5abed981c862f","impliedFormat":99},{"version":"98590ff94f0c45c9da700bf9c972714e4367cee30842aa130ab501f463574bbe","impliedFormat":99},{"version":"7d4539a233361ed71d335793db13085aeafbc1e28920a9784b01a8b2d461d354","impliedFormat":99},{"version":"a00c3e3e9475eb832c523f41734a7ebef312b1ac1d6ecb68d22df37798e18c02","impliedFormat":99},{"version":"275d39d59a9a5c7ad2d13757bb35bd190f487cf5fe221b8a556be2117ce6c2a3","impliedFormat":99},{"version":"072c8a4438ecf5be5f093ca727bd03874fdcf7ea8b810a5f3d5b5e9a1a158646","impliedFormat":99},{"version":"6808d7d909f594bc5e0695b09e9f663f79b08573e3d95b837c1f15294481516f","impliedFormat":99},{"version":"1c699544448121e8a6521399e2b9e709c9561b768bdc3249b035be0ff5a458ed","impliedFormat":99},{"version":"c0f9d148738c7f952a6e0075e7f7528e67fe813e5473741b6ae2d7bd1c701727","impliedFormat":99},{"version":"9594f39327c3776aa4083e472770ceffc14d45e669998536b60b5de5b1006143","impliedFormat":99},{"version":"4830175a6be86164822a5b2f7fef7a97fee781b33a52453ac8d8b50e3ec91830","impliedFormat":99},{"version":"d82b5aaf44272f7e153a3a469db46739c306b5c173e0382cebea70bf469d3a52","impliedFormat":99},{"version":"65d1b54d95e8712f8bfec843cfdffcbaaf6d92d0a69abb7345ba55f3f5712017","impliedFormat":99},{"version":"80464d99a301e3db960da2a7b010ada29874dd6dbc5f24731473a2641cee217c","impliedFormat":99},{"version":"3834d1fff358eaf5b52078c27881964e31e54fd1b5be8cb097a2ca75c2d97b7c","impliedFormat":99},{"version":"3fb4902f08c9b5a77956e9a6856505e00a7fe476a586e832571c3d4f83ddba31","impliedFormat":99},{"version":"93c8e1d9bdc1cfd856abb2ddb43c31da1adb5bb23a3172422ac3426d80687f97","impliedFormat":99},{"version":"82dc653116ac560acfa8623cd3fb7de40ac5f2e3d65991ce36070364b4f1bb07","impliedFormat":99},{"version":"ed6c38e10a8ef5ff290aa185177153ad1e0a85c7d867047532d33a6b1bbf2c4c","impliedFormat":99},{"version":"bab1312d15063c1685b8aa51252669c1c5843f3f7c3568674dce1a342cd1f7a3","impliedFormat":99},{"version":"023a397566c9c9ba724750a017783ce78006b04d52f96322f42ec104daa1f776","impliedFormat":99},{"version":"10fc62a7f653cff767df362868a121e6d5fe9d872fa4c0fe3de8b1acd4324f0a","impliedFormat":99},{"version":"05346e4aa851fc01eef2d4ccd77b5c8e5ef306ad044ecbc8594aeb7d753e1d33","impliedFormat":99},{"version":"05e97bc0985fe092ec1fa0204a4ba209902419231941be9d7109e759992af3a4","impliedFormat":99},{"version":"d7baa0aaffbdb80eb363c76f5c062841441281757037ed9a740d2e8ab9cdc391","impliedFormat":99},{"version":"cfc54c8c0b1974dab7994739dc901c13fc8cef6ed11cc0ca2777dc0eb1751f40","impliedFormat":99},{"version":"9815136c848202c8b0705c8e56a6546d2052cd0abee889fc0a14a08c8a13dc0b","impliedFormat":99},{"version":"4b77dd1d6d600b721c6b475b9479455233e7a189c1e8db14a53a8e34726d2f55","impliedFormat":99},{"version":"132c03d02eced90fa294ae08f814348ab056e1bb6e041a4802aab72deb61db78","impliedFormat":99},{"version":"3bbe7954dae9f4355f7da44a99dddcabe92ec11239e38a0c3c89da998156d9f4","impliedFormat":99},{"version":"3531151069b2a08dee7b82bf7c3437f707048c682395003a49fd630968f5ce15","impliedFormat":99},{"version":"51a2a1e0465147c66d3b3ba8b6776caa67e473db9aa5ba771a7fd5f661d994f9","impliedFormat":99},{"version":"616fc8cf7d4a11d695eb0e309522f1facee105a1c740e74fee5f710dc745bb40","impliedFormat":99},{"version":"c14a02a41bbdce485e6b9fb0a70c91a354a2044b55e2563e6731d51a3b3ead5e","impliedFormat":99},{"version":"bcdc75c3befba305fa771f51762f600ef3c7f60e12ff9b0ed6eddb3b11da3792","impliedFormat":99},{"version":"9b681badef747116e902328e3ca5bcfcdebb16259a8b8419a7e95132977e9e60","impliedFormat":99},{"version":"fbb328355422560a1393277f37065465dc36c25c5afb716c6dbbb4107f2c3adf","impliedFormat":99},{"version":"f9c5a5df867ff31c79e8dc2e7bcaafdca06d8a8adc28a099d8d05a1a4efae2b3","impliedFormat":99},{"version":"2e3ae086adbdd8ee059a46739badcbc7f46ce88b16dbc2afe2b669b9130a1fb2","impliedFormat":99},{"version":"fddbed7f42a61dd91910d468774ab7aece510e4bfc8acc8d6dee2f0b2cc3024a","impliedFormat":99},{"version":"d0c25a9039e1b56414c154cc2c3e22e84c8be8855c9780f4c1ff793f9e551589","impliedFormat":99},{"version":"1f700fe107041685043548d72a01cd21bd31d658a5a4d6d230367840ce65b389","impliedFormat":99},{"version":"c08f35285d1267946e19663f7c121f6d3e16cc03004a76506abc9f9f8bdc8b6c","impliedFormat":99},{"version":"021902fc642e31e811caed40c5ad07e0b105d7e269f609226b6447fcfbf62733","impliedFormat":99},{"version":"0a45d152162e8a7803ad6b0644e9f2098e28281f6e5ac08f21f14587564f568b","impliedFormat":99},{"version":"5b85b4c8d575c506088c9e77dce0607988506e12ad1a011f7068c9a35e5abdf4","impliedFormat":99},{"version":"d64b38d73752d637905e2ee9f39f7f82e2102dc96171adba9ec6454e396e0319","impliedFormat":99},{"version":"119acee61f07781e3ac933bf590854365e8117c31c896bf4bf1b9e3f399ef492","impliedFormat":99},{"version":"95be4119f87bdda94d4302cc6e6c1e2d1b849d170c5f187815224eadf7b1bcfd","impliedFormat":99},{"version":"ddcec9094b6fe3c92c6758cd338292672416b7d58ee807483dc8ddf629d699d4","impliedFormat":99},{"version":"283daf40cfa9417647d1b581cb734366581a803620bd20c60d92bdb7bb807beb","impliedFormat":99},{"version":"94d19f12b5d52237ee39b35048a1b7aca7c0b8fbfda6457c2dfd83414a6ecb89","impliedFormat":99},{"version":"7b14ae6939622c3fea912933aac786f88fb39c20f115eb7496ef890eadaab2f0","impliedFormat":99},{"version":"1023d9d72029b02a767d59537342fa1be3f3a33d901b52d7e0d47d42269f0215","impliedFormat":99},{"version":"a594453ed8c004df6b340bda0226e7cfe94ee67698d1c0dc1b9207d1e20e0ff6","impliedFormat":99},{"version":"4c3c179bd19a0c96c14749c9095714c9b150fc6ff2506c81b877d25644045630","impliedFormat":99},{"version":"21d8b3b7300ed19f41050d3fd6317f5b7c65dec299e1698502fb6767ac30d839","impliedFormat":99},{"version":"a6a5c59f2cf45d5ab475340ae96ebeca495094d15d72102b7bff05b7f0bf7383","impliedFormat":99},{"version":"eb7628d3567bcd483094fc2688ceb5305ece0563463787cca7035efce9f43c2f","impliedFormat":99},{"version":"6d79ded4df43562c8062badc829bace67925c70d18a7b72c09b7d23797cd0891","impliedFormat":99},{"version":"d25e9a88e761b13dd58628d2d41641195ad79ae927bb268387082656673ebe0e","impliedFormat":99},{"version":"b161e27190a5249c6e5660288e014bcdcb1e5bcc2733f848351b027e0d772ff4","impliedFormat":99},{"version":"ef547825b57ce9440a18bbd170125b89cc5bb8ce7504dfa6cd528a3dc4489e76","impliedFormat":99},{"version":"e74cf49b55f4550883d9d46173dc10ba5fd38d55f69f8617ca147b6d39c8a811","impliedFormat":99},{"version":"339e68b5bb386ddf9129bb3370d01f22f8919cd0e40ca71e06f881f69e02af66","impliedFormat":99},{"version":"8c65681a3636770c9b9b2b52d14ee4d59b48092175ae3124c044a2637fc84153","impliedFormat":99},{"version":"c6bd0b212d354956e2c5edc8e0249adb3c0e9c942e7e1794e23fe9f0dc721828","impliedFormat":99},{"version":"5e3b5745889dc9efc2e6f5515ae5bcb8135f2a8412d4a1facf374e09176f7cb0","impliedFormat":99},{"version":"f0576bc1e933fdc38f0f182775c24efab54f2a7a9b4a1953abe77a620346b9de","impliedFormat":99},{"version":"f061956ca6ce7bd52bf726d2e87e620aa928807f3ae526d3d432742d1da6e2e5","impliedFormat":99},{"version":"39b7dda3a4bd1ebfe126c67d3df5ec230681097b54a4f5a7abbd841cb321c003","impliedFormat":99},{"version":"532cdefa9aa613089dbd91804d4d9de824ed6e9f44980db04a14465e19a9e4e7","impliedFormat":99},{"version":"d0682d488ea0a7deeefc809d65c42e09f339dde50dec54f901104ba35c70f5d5","impliedFormat":99},{"version":"d4bf07baf86b8e6fbefb578d8a630db479bd8feae8a9932175c4d412c21f27f7","impliedFormat":99},{"version":"f76ccf2e0dc0bdbd29cde0b9054b0d510719730e6455db17e98f2b10646eaa59","impliedFormat":99},{"version":"f8dc3be04418be55ab97a46357ad0f6102a118b63e756f0fad0de94be2094d3f","impliedFormat":99},{"version":"3c0ebcc673f72499ae0ed99b0fddd52a60fcda51d50b11d1adc046e5985916a2","impliedFormat":99},{"version":"5395a87aca9a065a768051b7a6c66d3cef55e097ac2ad6ab917e27c3c92c4e49","impliedFormat":99},{"version":"79bcdbfebd96644cd9e93ca0b53ad0dfd398e0382c03e58f3135474ece45ca13","impliedFormat":99},{"version":"a134f53667b920e6ec7095c1c3cf0bcaa95008cd43000d3bdab1e570ac70cafc","impliedFormat":99},{"version":"116808caf097e8bf31ce1cccf1bf4060608cb7d91bc426b92abd97f7287de047","impliedFormat":99},{"version":"bf7b4bbe862d400269c378a2f744a5a94df5467cd18c805ee3a5ad741766ca40","impliedFormat":99},{"version":"2bb9ec2ead61f07ae6d8277af9318e37205b49abc9271604597844346ed3959c","impliedFormat":99},{"version":"d75af40a0b511d0633157556a35141a834d084094b01a8908d78dec2dd80fc64","impliedFormat":99},{"version":"ec2ca88bd0a13a87374a11d5bfacadc96b55810aae7a008cc44279b7757839b1","impliedFormat":99},{"version":"83551e90c20424cc93773db3ed94f8c43b39635830bf5548455d0836deb96393","impliedFormat":99},{"version":"945b49df2cc8667365e20dd3c1f8de64447e0b32f1d91c23ad06b07b0aae44ea","impliedFormat":99},{"version":"d6dcc687d0baf6635c1808c740aba4db6e37a3b5526f2655f0c291accec0decc","impliedFormat":99},{"version":"1dde80f3943e6bb56df526b77bc7a41dbc234d4393f1b8f19cc6672171ead575","impliedFormat":99},{"version":"7811c9c49dcddf09a7b307acaeb6f3c9b4d1d1b97961d87cc94670c46ea0362e","impliedFormat":99},{"version":"25c965403446cdcc5417d13db187a7f0394f7106cd1a45e1b9cd3a2c08aec4b2","impliedFormat":99},{"version":"1dc95a1964076bc1aeb6731a17ae5f7163846f248f60db0e0961ced43db22c6c","impliedFormat":99},{"version":"63482e1d5b8a0f3a669807bfa5355d3a9790856b120f512b4bc40a0dc65c78b6","impliedFormat":99},{"version":"7755b72611ef60e8cb35ce5e7ad393577e7389c485d4683570751e88177b1bc6","impliedFormat":99},{"version":"5445c1b45a4b24cb793cea4f1f8678912f2a7eda127afa72c48614aceb3059db","impliedFormat":99},{"version":"b600d5e621219860f2f6f9e1aa25d777c6b6c469a9048839b0bc256f16e65cb8","impliedFormat":99},{"version":"ed89af0e95cfc3c3aa05ab7f10f39252e304864be96702d3002e3a0b5314b058","impliedFormat":99},{"version":"6329a32dffec51eeb23377ccaead107d1ae30efe84e019e70d92a529df7e48bd","impliedFormat":99},{"version":"05650f29c7b38c2cf78950caa7386acbc7936a7cb08711bd1975cd4818c5cb09","impliedFormat":99},{"version":"12ccebd398ecb9ff4452279fc72aa34c70ff770926652dbdc7d34ad21777f466","impliedFormat":99},{"version":"1c4b858e912db3388433ea26a3b99b2c0ef72048da6946614463596b00298c5b","impliedFormat":99},{"version":"dd531d326e40577dadb38f2a931264139865f767bdd762af1e81f316b0c03a45","impliedFormat":99},{"version":"e8d0fd2600751d9b4abcb81e3067f1a6823763a25322401cc8a0578747692bf5","impliedFormat":99},{"version":"63964d043dc01122a1db457afec463743918a5c71c4beed6e2906f509e015a4f","impliedFormat":99},{"version":"4247f6bd3d537c2f7ee7a31067c7e95b70327bfd55a379fd96a42e9f2aa6d46f","impliedFormat":99},{"version":"e2ebacb3dd831a48a1beb9915bff463005845a398d999214a0bfba620602b741","impliedFormat":99},{"version":"5bf7ca566fde86fd0469836409db26264d98380002545a6b8ad048de46f47489","impliedFormat":99},{"version":"e860b60d342ee8666f83bf61339fa74fe7613f2ac7ed599f0f802ef3d85778a0","impliedFormat":99},{"version":"130de79e5e21aa52d0ac67eaa51182d90dc0354eac7c35a542a56426e93062cc","impliedFormat":99},{"version":"d590eeb146c65796d33043d08e48449c205b37033ac4157af8984bf1019928d6","impliedFormat":99},{"version":"68b3f5d095283a725fed296ee8cd36c1373a2476aec8cd9d8c953de792161248","impliedFormat":99},{"version":"55804c2d006cf28fa308eb3b608e5673ee4ef0e3d9999e532efcb9d703ceb522","impliedFormat":99},{"version":"e1dae322a476b97875adaa6cff6aeca7b3273e2a0fad1e175e329c4ce3d02542","impliedFormat":99},{"version":"36334b90aee2fe5d6f2971f05af58a15c68059aaa806e9a94652b324ea630e18","impliedFormat":99},{"version":"9e5ea08cabcd47ef88501f69a76fd8bcaae5149e6f92251e612e544af3f58a00","impliedFormat":99},{"version":"390b90167c23bdcaaa56041c620b04d9e85957f79d103a0b8a4f40f1159a486c","impliedFormat":99},{"version":"b97b7f29234eac44f2395e36457abffc93f7b709d599821df52bef118009a959","impliedFormat":99},{"version":"d8a29ab9ec8a59aa4f7a46217dd76da3fe9b98cea738f0a3031595e7e3633106","impliedFormat":99},{"version":"1efa9583067ef597f832bca0ebdb5a1e2c940d4b67fcbbbf4679528843e38834","impliedFormat":99},{"version":"ac9e0128567c5676b83e5364abc4230a6610fb9bbc698392b5ed197b99d95278","impliedFormat":99},{"version":"d8250e45341b1e98b42e3008bae572623c2690e331950ba0a7b6c0ce6cd59d50","impliedFormat":99},{"version":"7ff384e556272b468d2710a54ddc17eea161d98dd44485d0c0d4161ac7e7da85","impliedFormat":99},{"version":"1388631fa8cdd249a9812333f0c2ce35490055ad8013972eb920e123bc5eb8e2","impliedFormat":99},{"version":"ee6b73c727bb809d7f5e6e22b4a668f466a5ab65ee1b8f214f8ccc3e311a2451","impliedFormat":99},{"version":"35fb1d611af3bdd39f5d5402847167af43f150716a477de3796c7c4ed071f004","impliedFormat":99},{"version":"708088bfcef2939f193d1ec862b1e576a9f345638600a9e82e398ea6f2e006d6","impliedFormat":99},{"version":"e66d27a7e54d9cd5e3bf7acb28838419aed6cf78c8ef567b9ec1427fac774f56","impliedFormat":99},{"version":"d19cd315889739ab3e1956053ded5eb062348ba8cb9891a661d0186b91770f21","impliedFormat":99},{"version":"a0eab628c5edf5340163c01613f55ac9fdfd5186c52d96372528c576152f3795","impliedFormat":99},{"version":"619c675e7f67b1343992c6f35c4ec9a52fda78bb025ff72519089a6da62d1a47","impliedFormat":99},{"version":"e190626bea4b1e20d7b3e830606a43aadc25815806fa1527d527e961a35e8bcb","impliedFormat":99},{"version":"94df71ff0eea0e304a2ef7722ab413d75adc8a98e0c741a0107643276560c7dc","impliedFormat":99},{"version":"1a6e320abcdea25b8489b6e39cb4a4d8c90d0f0ba9f597231e95420c723b9dd3","impliedFormat":99},{"version":"2f838725d0b114c8aba336f110037c0b00b6248958227a74d80fb62946ee5b18","impliedFormat":99},{"version":"c9dcdbf46d97fb2df29586c68cd5ae6748c081a0c53fc37a6132ffa27f6955fb","impliedFormat":99},{"version":"8f430a46820c2649bc2d07c6febccbec75be9bfaddf35bf264590f8191e94373","impliedFormat":99},{"version":"9b110210c3df13bd4e53db3576f4416c4f56142d50b986f46e39450c88c6b780","impliedFormat":99},{"version":"c2d231b90096f0d5dfce494e54bf81666758316e087781f14bb6da1aff9e8700","impliedFormat":99},{"version":"1e1dade75405e843690120e917bf189f5a1a8dcbe60caa2815d949dfa4b5d5be","impliedFormat":99},{"version":"e7c7954921e22f5f8945230f89cb777668b059a7354b350e0e357987aa0417a0","impliedFormat":99},{"version":"3267519b49ae97bae8a7bcc12936ebb116209c6aecdc9f15234b0160ae66300f","impliedFormat":99},{"version":"8d5680d71ff8394d96be70eb3e03ed4332e1b7e5191502aff1576900c120ca16","impliedFormat":99},{"version":"60aa61caeda93417fe0d1c238def5ac44869ad867bc779a82be7c9a1c06d4734","impliedFormat":99},{"version":"2709edab013c18a69f6bd497d4abddf8368a14e0baf1bb30ad5d0df59bf42693","impliedFormat":99},{"version":"c5c079a529300647828ea61619a49261b416ae65f46f968511519c5f8a79489c","impliedFormat":99},{"version":"a746fb3152e96412346ce01d24d5ed2817daed4ea188016d4aad0eb486d193f8","impliedFormat":99},{"version":"9b5dec24186dbc05171cb3f9e4f1e191154d3d4b7f187dde95ed0b08bd38c32d","impliedFormat":99},{"version":"c21c62c5f7e9448de7e9b0fa9f240d5febe46ef3f170ba4f976b24b4d2270cc9","impliedFormat":99},{"version":"b0f482d75e79e076a84d8f83abe57cf80d75bfe4f64faf96e0a6c965ca6e2a6f","impliedFormat":99},{"version":"2d72fb98ce4a52674d73af8bb2afe471cc480afe5de81e4e1fa40fb576169bb7","impliedFormat":99},{"version":"5ad98fb3cfd67c6c38af8bd2761a605f9d911d6e03955fddb0c7fb7cf824c694","impliedFormat":99},{"version":"67f46739541c08dc52bdfdfc8b77534dd9443e7fb4bc31467a211acc699a02de","impliedFormat":99},{"version":"7d8515bfa58add7868c423b29c77598203e0c7696b7345d933f4dc8b04c5aec7","impliedFormat":99},{"version":"6bf2b0fdef53d2460e7f49b6e7272a25b74ea474c052275a9215f645b60b0f64","impliedFormat":99},{"version":"94b181dbd37f644090e1ef29852d9dd6368d8874cf2f4c0ae0a298feaf991eaf","impliedFormat":99},{"version":"2d74c63d20d7eca1904f26dddb4d8b8d8fca12529bebe4bda7d2d14d24bde067","impliedFormat":99},{"version":"eefefc2f2dfa29e2572a60421e45dcf8530a34b17c3a6d43c5799a5ef0550686","impliedFormat":99},{"version":"8e6551df9921ce8c6a3b4fb520d007e28353a0d3d8a1d06f6778c6f1486207f3","impliedFormat":99},{"version":"68954597f1d7f67b99005951e94ca60a3a62bf3913362f2cc7cc653de3f19496","impliedFormat":99},{"version":"4773ec8c467186c29116dc3c3cbb7927437de3311a09b052687c3dfe067c16d7","impliedFormat":99},{"version":"0c710c1c886c67727bb7deb8197d009a9146b1f5afaff62b7342acc76b73f279","impliedFormat":99},{"version":"4d62901366dbbd759da77f66c16897747f70a2d8dfdacecbf8606e668cc6c301","impliedFormat":99},{"version":"60b81bc5977f284d06c8c89cc04b8cddb45ade80758d1a0455c30161b34b437b","impliedFormat":99},{"version":"56e436146023b114fb661baf70bfce2041d5806721935746699df3d1331fc6af","impliedFormat":99},{"version":"7cd4bc26d96221eb7fe5fa0c1b503386377fbcc6757d26ec50014e176a61b7d8","impliedFormat":99},{"version":"bde451f81ffba547053111934cd0ae75bdde203ddefae30976b77033136de1f1","impliedFormat":99},{"version":"775d6a8112d08a9c5fa5d2cb8aa97881ca81cd2344f6e9e158dc81efab171b07","impliedFormat":99},{"version":"4cd295e5f329970c707fb48b9d88d15b32faa9f760fcc977ee10eb160f4e4a6f","impliedFormat":99},{"version":"fc4038d8a91384abffe294d3df8c3a06e3df7073bcc2251272fb31d912e6fe2c","impliedFormat":99},{"version":"22bf99ca0b3d239d88d6d8e6e2bf155afb30b4aca7fc09335087938467543a09","impliedFormat":99},{"version":"cd3682274f378c2462bc4fbb41ccb5300d71cc5c008c12fa9d35ccc54b34cbca","impliedFormat":99},{"version":"67dc58c0b812bd006ecabbd29e8f9d762c41b0549910fa6991411c16e95bbb59","impliedFormat":99},{"version":"2bc40ddafd68113f9625ab18be76b9d69d8622534674ba26e32123e74fc8667f","impliedFormat":99},{"version":"9c099d02e2e82d484012f3713a164cf55c7f63e5cd9c2fda4dc4076648ab862a","impliedFormat":99},{"version":"48b3074e05dbe986b0228044afa1ab2b130f562920e20ad6199c3219b2629d17","impliedFormat":99},{"version":"c9829c5ebf26778156e33b866eacf467eef9beda248f32cfa5042cd2ede8de50","impliedFormat":99},{"version":"658ee70a53b7a4f30af822940b5863208e367769715698fff58d0f38939ce858","impliedFormat":99},{"version":"ca1bca6d1b00d79b032c2dbb48ff021fa7eaed6b0aacc796ef5d0873933891ce","impliedFormat":99},{"version":"bdde7f266379e321a38646d74c7da791308d1de89073299a9d98e356634f7c08","impliedFormat":99},{"version":"dc3b92eb315796d2568e17de9dbbcf25796565d440e63805642fda5cb68b9baf","impliedFormat":99},{"version":"d486d1fb1ab86280b3f8d730a0770d5843cbaee267a13748c210a49d5d8701e7","impliedFormat":99},{"version":"6a1edff3f864b17879bd05bdf8dbff682d14d2b701892256b74da0693616e06e","impliedFormat":99},{"version":"1c3a5421df2a1a0f71e86ff5aabc804934ae48ab0495acb257324b713d2e5c3a","impliedFormat":99},{"version":"6d604fdd569f7e30ff284c132db9b5185c8f9c80fe405d23e2b07c0e663f6278","impliedFormat":99},{"version":"91e3013fbc9ab4ae9415de1dfabd24b20eb1a448a8aa1227f8a1206975626585","impliedFormat":99},{"version":"e811d3bfe878fb14b09ee7746624751e7f861369ab6301d6e3b340f6c5209873","impliedFormat":99},{"version":"c181f4ed01c4d578e7cbfc15121db9d1e53d3292e0e674e89b8def9afc33f2de","impliedFormat":99},{"version":"3aaa8b4924cfba7d4dcec41271cd848ea987093376caf1da8cba263b1a8f604c","impliedFormat":99},{"version":"5c28b10c7829e6f8961a9a03a600e3037ad4d9e005ba3a177ce88c76cad419c1","impliedFormat":99},{"version":"c93bbc1a968312df22be64d3fa283d9a8794e1619f5413b134d7543884a26481","impliedFormat":99},{"version":"3367c741cb20d44594a33c81189e92fb6312ef1ad80e731e8c3782ea7cdc3b50","impliedFormat":99},{"version":"57da5fcf4facb95e01fdebff97414e51417d12d61948324cb1a504959055efe7","impliedFormat":99},{"version":"b9171a4741909269fe324049b8a2c560aa829a95c1d1770be18c9d137f820304","impliedFormat":99},{"version":"f05eaa4c4151749a5994f68172bae0b621e4000e6763eda011b802f5c675871a","impliedFormat":99},{"version":"d59306afb4025cddcefbb888fe9b5e530f36c13dae04f045d783591db4a09af1","impliedFormat":99},{"version":"a5cefa0fba77455d5ae3fe0b49edaeebee2ab7a02eb1fc3f2c1d1ef0f89e80a0","impliedFormat":99},{"version":"06dce6f582073c6fd71ea95e87fc30681c363f0136aa26aaf01b5072f8a747ee","impliedFormat":99},{"version":"7f39fb5640073a2c8292f58c332b8ea1dc40e6771e82485353ff5c01de3004e2","impliedFormat":99},{"version":"eec3d5956e9cdbf258c3052d1da1be6a5414ce9b925adadfbc69772a0f560ea5","impliedFormat":99},{"version":"ca904be0ecc01a5c6db3cd367b323989c367ec5a1b8fc8b290d566030350af63","impliedFormat":99},{"version":"71be24f0406ad4969187a22b62d5a5bca07a9e69fd4695332b823ba50b7221f7","impliedFormat":99},{"version":"dba595f82dfed85bbf4e39b50e27b9c9f52c20a48c72036dfc2ad8658f835bc2","impliedFormat":99},{"version":"81d42dccaf051e8d599b1d70281c410a8a501ac6ba6462dd95b66e06bc2086fd","impliedFormat":99},{"version":"2ce213f1fa2a9d38a4320272de78bb70e7ed1285090783732457d42064a66ed5","impliedFormat":99},{"version":"bba6e7d4458c3bc24b69f68a5152963eb6e9dd72d38618f83b3698153f635d45","impliedFormat":99},{"version":"0e7650ed5439e7d872df4e6bef9d75606da9c73a0682782f52c700936088eaf4","impliedFormat":99},{"version":"f101801894b206a26d61f2b84d1bd5587441e47557bd946f7d651fe0c6ee1f94","impliedFormat":99},{"version":"f2c1d36ed7cb9f429874c7865ae1d193bb27bf0669829e50bccf4bcb2c6ef300","impliedFormat":99},{"version":"d90c065d25c7043fd9b8d3d44cbc3f082b048a641d491ce27812b97eb5545a29","impliedFormat":99},{"version":"6a81e1ba677caa156e6624eb2ef502cf5b3e87cc259656ce649ec39e9ee97606","impliedFormat":99},{"version":"dce3724933c25a776d212550af0a1da5655035339daddc4ff9d4e3eb22ef13a1","impliedFormat":99},{"version":"7fab59a9579956454a09e5ac8001fd78365e650db43364f6aec5be52ae8711e5","impliedFormat":99},{"version":"b2fccbb91f9a6c85e91da363c4304c76f8a7b26db84f7f1bf8dbe5ffb2d49e50","impliedFormat":99},{"version":"bf890587b717c5562425aa385b021ba18900eaa0f176e3e57f0d1016b647d32f","impliedFormat":99},{"version":"3428eb55e4db8b21337d9bbee986cb297e3bd788e2405f02adcb37ad371811b8","impliedFormat":99},{"version":"abd06f3aee8945b159cf67d05a92ca23d2b35a1163773eef91f7cc2618915ee0","impliedFormat":99},{"version":"c6ec8754b8ce679004c28bf2cb0f2eaeaa8de0acff94ba5082fe16ce642ba92c","impliedFormat":99},{"version":"a3005d619de5f9e5d0208596083fc7110aec861b8dfa18f681395c216cc95fd5","impliedFormat":99},{"version":"5c3ba312c2cef70f54aff90e59fba9b61101e1e941c2b3970c1353c453f25155","impliedFormat":99},{"version":"cc8d78d412e3ae3997d0075078dd2787d842b6023bed13a6d9f3e07bb1e7d073","impliedFormat":99},{"version":"eefb675743146703d1c5a1b3e8171b4b95ae65c41120425312846f90c0132017","impliedFormat":99},{"version":"5928755ef02a97a3831fe4c85f9b32aa157d499acc21b3724c911b7733804c89","impliedFormat":99},{"version":"8627e628c30fc555b119326c656a5101e92548b05ceccbf38d6b5916062fb976","impliedFormat":99},{"version":"184c2412e3d88d7acfe70bddecff9004f4610afc87eebe042272f2fb7e0d3c89","impliedFormat":99},{"version":"6f9b9e4b4f44fef1d0b98eb1bb602345f0e22e0a137ef40a615503d4e8b35bd2","impliedFormat":99},{"version":"cacf616e3fb3ea7c2880cf4d1feef47a3dbed29b0bf248b0bdd47fcd8c8b5945","impliedFormat":99},{"version":"48eb53c96dcd4745c4c8bee4d1104ecaa6a877eefb8a5b57af0f7ddded949a4d","impliedFormat":99},{"version":"e0e35716709f99220dee1be057e8f7f08e1d8134c94ad414129b79cdd9b41f8e","impliedFormat":99},{"version":"ea544bfc5e4ff015c70ef62acaf356dfcbf1f39f10f07ca3f414278094e56b56","impliedFormat":99},{"version":"7d439735b74cc5a3de2a8855fa941341dff0628d1fb2b5f2dadc10a5bb6d9fad","impliedFormat":99},{"version":"e12142b93d24c7c67fca041df35d357f21d3751eae8b2afc5684d49630d12d37","impliedFormat":99},{"version":"b1bb63b43bc374799ca0e916542b0e71a7c8bb06d6c8e5f94848a8969536c933","impliedFormat":99},{"version":"d714669ac93d063f5ac5a0dc8136e796545c6b1358554ab423d07fdcca0bc7b2","impliedFormat":99},{"version":"208dfef5e3aa4e176a5112b91b5d1ca082c28d2eb33bceb82c0261ebdeee74bc","impliedFormat":99},{"version":"8361e095def6c5f9fe7303b341c4b3249e82354f78f8ac9602a076fc5a04e3db","impliedFormat":99},{"version":"e047505265ecef24ac538e166898c74fe4ddde9a208446b298ea9805a1337ebc","impliedFormat":99},{"version":"13a9d63fe4bcf62c0115da6fce6ff28caed592d7cf3718bdf2852616a9318304","impliedFormat":99},{"version":"5dbc1632a49ae9232d2006a9283086c23676a72c2869348fab07a92ad25894fa","impliedFormat":99},{"version":"3b24a42d6ff7eb9fbdaeb74d38c2bae20b455d9ecea76759c3bed2c9a70d3b9f","impliedFormat":99},{"version":"ab15374738d77b8203d5054b306e883bc12ae980f3de59b9bb2ab3c299eee15f","impliedFormat":99},{"version":"7fd8a28b8373c1ae0a9690ea4ad8ee96da351b2ddf9fff8f0fc33ba81bd49615","impliedFormat":99},{"version":"0dbf9eb173a832b643337fab8eb3153f2f82d40648cd9d0b654f37e469dde44b","impliedFormat":99},{"version":"a69420221cdbd10d0e9298b3b94d53a633606634ad0357da5cc541ff814d8c5f","impliedFormat":99},{"version":"e706e16bc6c83d4a60da03d7a423048f244423ed55064134d0db9a0a5d1a31ef","impliedFormat":99},{"version":"b11860ace9980039b9a876c8aa763228cd2eb7dc1ff1d4e4b6791fefa8270271","impliedFormat":99},{"version":"a5f1e4c5671abc235aac21bd99603fd151232360064d2622f6d21b592fde4cc0","impliedFormat":99},{"version":"a026df81b303bd8a8256705e4ba7f7845096a35a20885403143ecc25482fb5c6","impliedFormat":99},{"version":"3ad573ea6506a5b47d89fb43f6e7b3e24c9af3dad66408349bfdbea4d0ec9762","impliedFormat":99},{"version":"f08d5516ded9072f6ef4a9bd95d4301b7f168afb484dfcdc3f9fa0032fff1406","impliedFormat":99},{"version":"3532ffeb99fb16886cad07caf0feb76a19cc1fa14a648ce6e6558b04ba91bdcb","impliedFormat":99},{"version":"825a2b8b6cac11eb3228d4cf75487a3c4ed7daad1dcc1fb01c2f67dc75fa6e2c","impliedFormat":99},{"version":"f6976b6c4bfa0dd945409221c74e8adb9ac21110e43e6de6e5564d71a4faa010","impliedFormat":99},{"version":"3ba19528d73345e791808428a0ac7f251f3a03075f73b89393d5b7df828001bf","impliedFormat":99},{"version":"ed4fe0fdd2dd66de8ce064556270713b73bb71126c016db3a755a1b9ddb2b079","impliedFormat":99},{"version":"94535dcbd25f61962f2b2c9a36098001f0529186fcd9aaefd804bc7c3008e0e6","impliedFormat":99},{"version":"a3394d25f46ed8a6ede20cf2ebb07cad72e0928987c437dbe0a80799177268a2","impliedFormat":99},{"version":"979b1767dec45cc88bf49235cc88b3bf84f9072e0cadcaccabc3f51f37dfb4ba","impliedFormat":99},{"version":"53538d2fe5ed0d17a8fb3ed894b35590af1478a2864273f64ea153dc931f5137","impliedFormat":99},{"version":"ceed655ca8647e687782de09d86aa52aaeb71a04db53f7317b294afd98e745ec","impliedFormat":99},{"version":"a19f58bc593383ee611214b5aff06db6ec0c9abff34fbde4e937d56db230fe2d","impliedFormat":99},{"version":"12f07c1ca64c24a16c6b863a1b39053ba466391a42fb48fcdc731b5fbac19c2f","impliedFormat":99},{"version":"8fa98834033c5bd66d016570ad710aaeae12014b87799f57d8c107931308da75","impliedFormat":99},{"version":"5540adb5ed9f7b2a3b93cbae6ba4cc15c9c5aa0230f0b2c4ea65df9fb2d35ade","impliedFormat":99},{"version":"237549157534b24eb1486ad6338a5b11ad017da0b2a433597ca0d62c3978c166","impliedFormat":99},{"version":"14f449fd97d14b30b7d7e74ccb5dc52065397f5a159f109a81de462cbc2ee735","impliedFormat":99},{"version":"1da1c5e42d173cdb28539057403afbdcdba7ba70d1ca88131d478a3461146631","impliedFormat":99},{"version":"84e2defcc0264038c29dc40ffcb934623cf2906e721546276a11749645d650a9","impliedFormat":99},{"version":"981a6d13fdb1a917808b2c0021adf15df76b77d15ce32942f2567dacaa636818","impliedFormat":99},{"version":"8f2f419e0fefd82149f1bee26ef5962d27a2bd1c0ef5652f4558d603debd0cd0","impliedFormat":99},{"version":"20d839e1a5bd43ca94fc3855594dddfb4b04051ca87a6c0f61dee0d2135afed4","impliedFormat":99},{"version":"1327881b3a0726661b36d1d011b4722b301f6dd1d428b82d78f1bf94d7c5a1be","impliedFormat":99},{"version":"3776840bb69fac8d6715b70c236bd06b99ecdd2c0784a2cf0be7899fb7be13a3","impliedFormat":99},{"version":"ff224ec5ccda457a52bdf0747d643ad6029bc7ac8cf898f94047361fde72291c","impliedFormat":99},{"version":"b58c384659075652971d0c6cd25ad07ae6f193ee37820bd8daee6e3436a8aaa2","impliedFormat":99},{"version":"daecca2dbb88b1b1d759e2172245e8187180d777c2066296762811a33703db67","impliedFormat":99},{"version":"caf1e76335a50ba27f655209a1089e342e44c10410c834436308266cae1a0ed5","impliedFormat":99},{"version":"a89c789678be1cf65bb4125b15b5f74e25e34c138543438d57f288d988bd80a0","impliedFormat":99},{"version":"d26ae4cbfa2957baee8a6f2987a82e597f18ad98e8d08f5b6c627e2abc5e2630","impliedFormat":99},{"version":"b640c9b2090fd42bd34d877b4da63b984f77151e8492d804a26353258e28b7ca","impliedFormat":99},{"version":"c36739f58aadbf09f620712c3531a0bdf944b16b9edcd16a6c1f3d7d935f3f5c","impliedFormat":99},{"version":"94617f973c27753e95a3f78cfa2298ec16fa4c1873360124b3fb135f94d203e9","impliedFormat":99},{"version":"949107fa4b339e34b9fca78611d63776cf5952927e500d72bf108fdef03d3a42","impliedFormat":99},{"version":"5a76d9a6dd9260f407a8dd8657179d972640b1f6736744ff397921ba891d8d99","impliedFormat":99},{"version":"309757128a194184868dbda49a9583104e10d5f8ec0b144b5adea8faac559446","impliedFormat":99},{"version":"d22ca62641feb3cc9320464b4f1599d02791ae81c96b1d62d52cb58589a8aeb1","impliedFormat":99},{"version":"5edb6bbdd99524132182d829a58beca3da66609cf5d4ffcc79798a293b77b41b","impliedFormat":99},{"version":"3dea506a24fccaa833a3b7b154751904398ab945f7507de0e99563509a0bd886","impliedFormat":99},{"version":"44674355dd062213ce67cfd3ef343c59835748de456b5cd2b13ad92531ab5dac","impliedFormat":99},{"version":"a851a0369c9c4ee56abe7ecbf3b73841f4731da108192887bc74e3a9eb3289f2","impliedFormat":99},{"version":"9760ba531aa6e82a8e9a60d101b65ddae9d398e2f91770595d9f1c5f77931e9c","impliedFormat":99},{"version":"e2b27cc682a1368bfe175961bac462ac908de1dfb49590eea5550fd5bf9a6f29","impliedFormat":99},{"version":"49b088cac71a031ab09cc6d68aaba7b57e373693c72ea56dbcca094493a543e3","impliedFormat":99},{"version":"e546f06410e5259e513d9c85f3ffad6074634c223dfedbcc6fcce144176303bd","impliedFormat":99},{"version":"c049f4fe2068d1f7954e4fed057623cb870969eaf5a71bc77b5a677bf5af3f24","impliedFormat":99},{"version":"76cf68162903a40eddf28199107e921b9c08c033eac1c07efd4dc979fd4884e2","impliedFormat":99},{"version":"41c111ea5e8946726775a71c224438a7a7009329d1b6119b1c8dae82e433f6dd","impliedFormat":99},{"version":"305af9c2a8c308a4f430c3f2b81d68119f4920ae5942c3109d1178d879a028ac","impliedFormat":99},{"version":"d0f0427311a816aed0f31eca5bed01d2c720ef0c104f8b6b62c86101556f716b","impliedFormat":99},{"version":"a5bd6ae20ff492c2ec9a0eed17d73cc2a722c09d12a8cdf321d74c40de279686","impliedFormat":99},{"version":"ac25bb824a57d31b55be466a44ebe002841d19291da64cd6ae7ce6525b7a7b04","impliedFormat":99},{"version":"1c51722bdcb3e6bdbfd301fbaf546638dcebae9e6a02716e21373343096851b9","impliedFormat":99},{"version":"49cb95b8f3503bf3bc2481d747603e5ef2d541466b96c4b349c2296def086882","impliedFormat":99},{"version":"cefd620019820a3980cd72b3e41af68a97e42e095026f50cf95e6304307cfe48","impliedFormat":99},{"version":"ed2be494a8b56779518444accb7e616f85dbcbb19043a5adfe2b2ce9d92b52dd","impliedFormat":99},{"version":"79fbdd164ed7ef0ee1d9bdb3f65ae228d6c66aa915a46154912164717a97b96c","impliedFormat":99},{"version":"c542323dc44c3c36a1576c347164ad2167b4fc8c13da9610c7cb866786637c18","impliedFormat":99},{"version":"55b13f885a41b6ae500f75d5c588d05f78bfdb471d9b04cce391aaa9a3f9f05b","impliedFormat":99},{"version":"4c62dee16a75c9b0ee2b7ad080a8778c8ed8392e5297c9e07f001148b59f5ca0","impliedFormat":99},{"version":"48eb9347a1f264669519d10aaa422de9a6053b41b3fe84911ea8898a942b922b","impliedFormat":99},{"version":"afc496c3b64cd9d58d63640845132e08e48e05a29ddf2f1aa23cd46bfac3a584","impliedFormat":99},{"version":"05c8ef07d5dfb84772cedee2faca46c8ca54d151c16871a6643ede5e208daf05","impliedFormat":99},{"version":"24ffd8a17ccccb3e56570ca53ddd02e772f0b6a4ad3c5616ae642a7e508b7cbb","impliedFormat":99},{"version":"fbd75ba9061b448f015dc71a9ea3891ea17d361e6106ac1356aee358420a8562","impliedFormat":99},{"version":"4ee579b9d37f6198fbc1d3eae2aacda3b7ec6ede001f455e6ce12aef07d5ec59","impliedFormat":99},{"version":"3d4a999e994018e2440e6dd37afecaa4154d616052df8a28e2f1a2259f19b81c","impliedFormat":99},{"version":"db1521b3a21573cf7a452af203effa3482cf0a5b8454e2af4a1f484306a64974","impliedFormat":99},{"version":"45c4a138c13303d5fcfbab589251b7869887f7eff622a2efb7925e2ed7797420","impliedFormat":99},{"version":"1b14568ba50dc5776828b4c6e1be1e7b3aaba855680eb3ac9b07c8a00414373d","impliedFormat":99},{"version":"34091b6bb864d275a0c9080bb1e72065a616d176d3eb00d0402326bf83e206ff","impliedFormat":99},{"version":"11b55793b4507c2cc763198427e11a0bd5e931aee36e265bbbf21632dbd4872a","impliedFormat":99},{"version":"e831709cb7f77e60ebdad8982c5751ba745a77573cda6f44f4ab8d4027ae88be","impliedFormat":99},{"version":"c0defffbf81eedd1d7e9f54b434866942c2ab6c5381f8cc6d5022dca5888d07f","impliedFormat":99},{"version":"e8b639c2a91e047787f660a9dd3895a2ce1200fcda7560841d5637f9583c8db2","impliedFormat":99},{"version":"767e0b38fc031fdf1ba7fa253f264912774e67d1d52ce4e852eae8c3985ba6f1","impliedFormat":99},{"version":"8d37af9291a8ac73663132c067ffb65e649254333a9dc86a1b22361fb88cf7fb","impliedFormat":99},{"version":"8cbcd14fda4ed21695f26c27018361772c9d5f754c702620f42436f0f542c1dc","impliedFormat":99},{"version":"90d4a3535371f8c168b88ab0da2562f754810e26455c95698e98b15f11da22b0","impliedFormat":99},{"version":"12df154d3dd79dc0a4b71fc1e3c5d5fbdbb6a5dfd99c68783020e56743fd4776","impliedFormat":99},{"version":"4f99756bda4a08559be8508b7e83a5be0a93dcaab68790310abc4fa09b93a849","impliedFormat":99},{"version":"2349b5b7d1a01add8c3f99286cefad821143f1df1aae0867cf813f02237a1728","impliedFormat":99},{"version":"09e449359562a9ccee76260902e48260ea75ece6e8d17abe9e7593d900a320eb","impliedFormat":99},{"version":"a6a33dc9ae9532283825868ee5af9118ebc26978ced995fcbfdf90ff7c5e2f0f","impliedFormat":99},{"version":"dd4de144ff9e9db9fd3dbca7e1fb7f639b39ef953f2b3c49240c7f2a9736fdc8","impliedFormat":99},{"version":"a0f9aae8392286dc83d0712328a0c066ff43594158ff67606b8f9c1aeb69a823","impliedFormat":99},{"version":"4c9dca53c43c6cde0627e9851dd56d958d6ae68562e2913cc3abd1ef73f9a00b","impliedFormat":99},{"version":"6914eb2bebd7fda4f9fe8db98ee09f5554a1ced9684847b3e27dbefbdb87b1dc","impliedFormat":99},{"version":"dd21f9d9947f9e4a773809cc37b0b094607afdc83cd0e79f2d97250c4501b6c7","impliedFormat":99},{"version":"2066f78e539fc3e9b9a756cddea61af372d9f35be7ffa9497c6704da56c9e61c","impliedFormat":99},{"version":"3d3fa0b2c95631d01e1291b98adf0423f2a74a87db32df8fe0c062b6db6eabff","impliedFormat":99},{"version":"bab5341c5fbc115a91a38bc1dd18a3b8f9e9f6601f898eed8bf6b56d2469b823","impliedFormat":99},{"version":"0d1fd7906b3767ccf874e84b76817b71c81836b02f9c5fae2daade6fc26f1b2b","impliedFormat":99},{"version":"828d97f23443ff54c85832f7fe1bd2aa204cc761193f2fdb95391c3af2eddb4d","impliedFormat":99},{"version":"47aa55962c8eb1bf8f46e84aacd04d89296bb9ca3a2978382cb81bc4f1c726c9","impliedFormat":99},{"version":"6df68fc4f79f293f1ab2d25951f191161ba0b13ab2c06b9f0dbba5513c5a0e1e","impliedFormat":99},{"version":"cb6bfbb5f55783ddb18adfce848dd24bcf85bb777bf77a0d71dd773cc7b62c22","impliedFormat":99},{"version":"286f368d27af276cb55d1130452b98b9956bd59d142a62b514ee6f1f98395271","impliedFormat":99},{"version":"b046da4f4d04ae2789837a9c1c32896d2d99256655b4377e1e47c0945288f9c1","impliedFormat":99},{"version":"0397b33949bba44c603a8919b1cec9428bbf84ee3c90819b080dfbc764e01724","impliedFormat":99},{"version":"7f971c8a26679b60b7765f1a9da29b987a93795909acea2896b2da567b2429bd","impliedFormat":99},{"version":"55db20deb5ce62732518b1fab73d5b3609113c027f58658c1f3104f8c9073e8d","impliedFormat":99},{"version":"279792abef7ddfc2566cf92e89447f0f2fbf3c5e1ce8e01a2325d6b56e513317","impliedFormat":99},{"version":"4d1276fa5da13705e9e23f77bf97aa8686c37670d3dbd6e85d5975387da6e9c4","impliedFormat":99},{"version":"4d43f7782e2ae2d5be0449e202e894dfdf0b5e8fcd8fea275b1b1795045ea3a7","impliedFormat":99},{"version":"4c7e9a01365d12cc787fa964cb28503b4bad69cc773e25f883ff53fcd049237e","impliedFormat":99},{"version":"791d109b55c4589a49c89729aa8df87d88ad546a322a4364ee3770a845f93a0c","impliedFormat":99},{"version":"ad2aadb0857cbc6b0a1177ec6b8944b734f5c6c9481baf77d7f3b2c0fcc5b2f0","impliedFormat":99},{"version":"319d7c7aabd2bacb683985cadfe402cf1ce13185241638ae98ef2467c111717f","impliedFormat":99},{"version":"1d8c74c5747df6706dece004ea4c537ed5080e95b90d1a1620bdaf46bb8d180b","impliedFormat":99},{"version":"2e0fbb883f847aa1bcb15d265757653f79d19fe679c2b84adc5b12a1b83371f6","impliedFormat":99},{"version":"e62d894e8ccc27d596235f8cc055ce0d27772eb13b310577ad7c2bc4e2f2b23c","impliedFormat":99},{"version":"bbb48c9b123ebf986aecbdc2085387b279b9db9822a99075135c164d4bc12c99","impliedFormat":99},{"version":"f46ed0abe3275015dac23dfc2f7c0d7aba8d7378f9dec9a0dea5f9565bd6f582","impliedFormat":99},{"version":"0dd3e4ae8e0f3470f2e5dc1fd95600e2f0753112d3a7e0f61225a81e8389a6c8","impliedFormat":99},{"version":"8fb8660a87df46177ea76db4338c4475b8b8e7e42e36bf124195489cb6fc9ae2","impliedFormat":99},{"version":"55f0aea7d8e5668fd2b74231106be4dd6c75563e8e794a76b8539c5320a3b41d","impliedFormat":99},{"version":"f42f470b9934ca024afac9c220e5c57b5b70de2383a821e3e7d58b5de29f6646","impliedFormat":99},{"version":"22f011193d780d619a9a4dc9fd0307bfc0c7869d496e371245d50b72a0e1d0fa","impliedFormat":99},{"version":"acbdb315c0433c6832fb64027dd421c1d193551e20b5da391cdb20c6b8f95dc8","impliedFormat":99},{"version":"d7ac7a29f5fc29b2b157fd2ab7738946597a29b5670c2290d4b81aada8fbf6bd","impliedFormat":99},{"version":"7f85382c44340cc8c380bfc3dd2e5c69c280308538044601788e2f1ae3e55a9a","impliedFormat":99},{"version":"7d7e9f13134199ed1b0cf6c8775a614c1bf4341ae74edade456500546ab2776d","impliedFormat":99},{"version":"f57d7c9fb29a389e44af09d54c57d9be1a130b80537af035334f9a8f2e55fa76","impliedFormat":99},{"version":"0f76779994fafbeee4d135c21fb87d35b81c6fa913ef85e5b6bccb3ffcbd57db","impliedFormat":99},{"version":"64c4f811d9ace920e8df2522f72905cdeafa7812166416efdd51a9350d361628","impliedFormat":99},{"version":"cdd9d75a5e91d288b1f009ed8d885e29dd61d04cd12fe66645a69e9364fc2fd8","impliedFormat":99},{"version":"c81859d7edd8ea8016c3ef669bde80a68a0a8e85440307d6c07c0e47e6e70a7d","impliedFormat":99},{"version":"a1d72f11de9816b4776ecadea48d9c2a8c486cd8b465b674647557653a151a0f","impliedFormat":99},{"version":"33b8b6eca734548828961d9ecc9c21f729f08bab8c2c9d95c9ce772db6431f94","impliedFormat":99},{"version":"1861836a3156845df6c43d92e7634515050e349eb569d5ee523e25a2ce6dbc55","impliedFormat":99},{"version":"4dade3290736a203b3e191085b91bc93c9a51dfe608211d314ce688a7d1915c7","impliedFormat":99},{"version":"558b4eb69385b53bb4f76dfb9944da2b324c97f4cc915f8a57ffe12adc08bfc2","impliedFormat":99},{"version":"57b6feaf806b2ba926d3000f59436460462d6b551397322dd983bca10cb82083","impliedFormat":99},{"version":"9a599074752221456c6ff3fab0a9e5e42318e610bb21a23c1364d12b0669d01d","impliedFormat":99},{"version":"17854000164e5e5ef1318f5f542b770d80b0374fa95ac023e01a91440d93de35","impliedFormat":99},{"version":"fcaf10eebf077d5a0e4be81424fcc296905533359c46ba1198c41e98e957d70a","impliedFormat":99},{"version":"71d9bf57ae0b6685fa69e800f44a0e040d1418f74737bb590d71374f02a14f5d","impliedFormat":99},{"version":"a3e8df36aeafd3a63629f85cf72f46be39de7f350af3cbc40bc7917f41b36861","impliedFormat":99},{"version":"86fbc8e6592abc2775bafd3c2b2eb5cfd0e37c4d57e0893523dea6d67c19f05f","impliedFormat":99},{"version":"14a976b28005d68fda91658eec498db736406afdd383a6a4e674ba2528815348","impliedFormat":99},{"version":"e6acc224ffaf9707ce0d3914ce46ed083c7b6469a0f195543fa7cf64b648d4fa","impliedFormat":99},{"version":"8ec434028fb805c17f244b68ccc992391ff8ec6ba0c4bed1d04e51741f344e90","impliedFormat":99},{"version":"e2a0a09c2e1fab39ea345ec351a93f93ce425d2c6234606e705b3a6c84b8b46c","impliedFormat":99},{"version":"e036c82ae9c6a656dc591ddd4f68f70377e6900e7e4042769d4cea7d215bca3f","impliedFormat":99},{"version":"248ec4811949f314a09307eae53df10b95aa35546a9e3dc6363a2916b02195c7","impliedFormat":99},{"version":"e435436a95eb581e852b35d6f5eaaa62be7a8bc6da288254ac3394c60511e5d0","impliedFormat":99},{"version":"5cc46f1e20556b157f798a8043e6447c88f118859810d55d9b845e245b17f2b9","impliedFormat":99},{"version":"20fa43bd305c2a0f27590ffb829d5897db5160044136e1c216239a8fb91cfc60","impliedFormat":99},{"version":"3c9a0663746013d1a7f2085ca9fd23d4a1d81831d105f55d83499643db339a6f","impliedFormat":99},{"version":"cbf9bfc5883bd84a49685342affdab376d54622d075c360c1e9ee0cb1a52176e","impliedFormat":99},{"version":"b67eedd415da9341688bfc4897f67951e6f6544130d339d631c578d9ce5179d4","impliedFormat":99},{"version":"74dfe23f35f7f780bc43517662cf6bf54e2340fba8c96499a9345f5c54310765","impliedFormat":99},{"version":"216e481f8b352b3381c3ca193245c9e70eb988f13b11c90560fce7f58046d9e4","impliedFormat":99},{"version":"442f979c95b63bc7545f20a9dbfacf969a8bf8d50f38ff5e8647883af962ea90","impliedFormat":99},{"version":"7ccf30591af329e39435375251583e00f458be6e9412ca78457fd618c3ed3219","impliedFormat":99},{"version":"0e4023053e2d67cb1875fd3fccb3d9719dd35aa7ed8dac2f8f0a6b83eac1c619","impliedFormat":99},{"version":"121d72cd64ce108c997080ae85d77526c0bf92cbabd595e85b22cc5b2eb5356d","impliedFormat":99},{"version":"2e58e0a3705c2c5e2f8990d9fe54a987140eb6b07d39969667fb5a61e0012164","impliedFormat":99},{"version":"0ac60f7dd28ae5fd26af8a26038bff0a0860f2a934bc3eff3508b9ea606100ee","impliedFormat":99},{"version":"23e86961cc70c48457a30b54d2a7cb321db04ec37a2ce709a558935874ef5980","impliedFormat":99},{"version":"813924ffc37d482abc63f7809402b6d04bf10ced84ceb0ce5b593f93000b0738","impliedFormat":99},{"version":"d39f8d34fef31f645d4a5036d21b6d76f1de2fcb002cd976c7efae530249d79d","impliedFormat":99},{"version":"3dde9915cefa4b06bdd06d0afacb2008400eee07fedb70cd4fe895be5d7c37a1","impliedFormat":99},{"version":"6fa7984697bbae60ab189ff7930691b20d214c1fb68ed6098cef5f616ac8d3d5","impliedFormat":99},{"version":"49cb62a7fa903a66787723065158a23455550d938649544b9afa0fddf13da5a4","impliedFormat":99},{"version":"8093af89ce523d6325f01b1502b431dea33dee468ea0b207f3ecb6b8e8c869fb","impliedFormat":99},{"version":"1fd777885f679efef7156857398a8e40a65f48f9d4b53b22188593e5d9a67f7d","impliedFormat":99},{"version":"381f82f83cfc6930ccbc008af3091f09a75242ae15d2e04632db7fc4e44c0080","impliedFormat":99},{"version":"fbca59f60b22cd0db89922e7f057c713b027aaa1e2c2818632fea718f8200632","impliedFormat":99},{"version":"1bd895f3a629b01cf0ce259e989e8091ef945cb39e29bc4f5dbb35ab66718b91","impliedFormat":99},{"version":"ba8d03eb92363477a46ccd739f48b8a87432bc39a4e0ccadb1bf336c290b103a","impliedFormat":99},{"version":"6ec0dc970053f2d727d22210393569ebedb4ec3a53c0a5e4ac0cbfa179814ef3","impliedFormat":99},{"version":"4220374c20d714335b11a60a1b0392dcf3c0ac82f0773466b731c3ff758a1fa0","impliedFormat":99},{"version":"ddbd6bec7bf000be900df2f6ad03461580cb94c02a2b237d601f091c7f749ee7","impliedFormat":99},{"version":"a4e2ebf51e2314ddbd330380d53527e3acbae6d1fb4919c35f6e6ec534eeca88","impliedFormat":99},{"version":"8aadedc389b7ce3087eb1ef11b85a79ab2b15a418ca0d469159091f33359096a","impliedFormat":99},{"version":"351223dcd7cc1c134826feb03e21e9d40d39497e4641f6640b5b5f118c731cc4","impliedFormat":99},{"version":"3b112575da3840ac278f8edb8898acb94b9c79df94b041b4eb17e3fe1263a643","impliedFormat":99},{"version":"902151bc4db55dd270dc9f38cba4f06c2d5fae54c519677cc3e1197335c58581","impliedFormat":99},{"version":"0b82763f479497a1517786b27d8826d3640d15af245804d322eff12710c5a652","impliedFormat":99},{"version":"c1109b59c4c5033695016057e596c8d34abf048a3e2c1b28169c21b22cba56b3","impliedFormat":99},{"version":"8a35fefe86f688f467c8bef9bf7b465e9be8e5b3476504096076e535127ae3c9","impliedFormat":99},{"version":"00040c315b5da891b7368217aa2d92cc5333f92ea0272ef70806aa5a16d642f1","impliedFormat":99},{"version":"d32d0644afaa7ab25fab4ba7f0c30e194cf211463a9100bf406c24f67573babe","impliedFormat":99},{"version":"9fac0a75a13381632fc5bd29ba84c5f6706c11c447adf8f6628a9ca519c2914c","impliedFormat":99},{"version":"986204e16e3297bca5e64b327e52f9fc4c65bc34497227f63b1a48bfcb333dec","impliedFormat":99},{"version":"824b4ef28c193ed47adf80450a0b8738313561707fe300eebac14ea2405eeb04","impliedFormat":99},{"version":"b634c2e561e3bf8efbf1b79060a9bd5b26022a71574900c3e124a14bb4c4c71a","impliedFormat":99},{"version":"76b8eeff48c0605828e2037ed6bf67d25675860a2f6a8fa1848d3930c2ae871f","impliedFormat":99},{"version":"d7ffc3f3fb6c878d49a92e0e90b737cb09642f7044d6ce3bf53f5698580d8066","impliedFormat":99},{"version":"5ffc2c7cc0be96e71688f7a0062f2e85c6e68b21e605d073a5a6c6a1f3a2a5fe","impliedFormat":99},{"version":"8eae28b0fd19d123cc1b99840528bb1cdf76ba7f0b15034da949d73aacb9702f","impliedFormat":99},{"version":"9b4cc49d65c87c5c38ac19676dc14aa914b13b66ab2f8c93c53a65272e0486a6","impliedFormat":99},{"version":"21c521798aeb2a82dac296829f7450a791b6f154b8a8208f77c0f7370d5f34a4","impliedFormat":99},{"version":"a383c2d014291b0810ebc39adec74792c53ac0fdbd1ec39c87779a8d07e7ec9c","impliedFormat":99},{"version":"635d4c2bbb40d953dac16ebcf52b123b4bc86e58bf6564d0dec062a4c489ee21","impliedFormat":99},{"version":"eb420edce35fac3ff390bbb9d2d98325db9c11a2cd60e0cbdfc1b118b62cf1df","impliedFormat":99},{"version":"f4d93034f0661b40ba9cf90d7d3474d5c0be65fb7f4f3a1d5e9c34210aadb6aa","impliedFormat":99},{"version":"1ebee1d844f9cfa95e5315d90140f87eb1519c8739e7a51111142d3838ce31c4","impliedFormat":99},{"version":"4f8e5dda56f05c96d1f567bb96f32e81039d21ac9af5b4d5fec500f090f21388","impliedFormat":99},{"version":"6f74bde7fdc1ca03aafef483d4f1b0ca50489094b0ce52ce5741c71635494d8c","impliedFormat":99},{"version":"189a993d40cf154596f0becfce65d93b0e3d8c62a1852b9506d86d68b3702d88","impliedFormat":99},{"version":"c1d358eb44c209b7b5ad87abd6d889e28513718dabb6802de8844e517a89730f","impliedFormat":99},{"version":"dfce10bb8fb7c37e9625e889e27519567aa36329ef0b42094dfeac141dd45793","impliedFormat":99},{"version":"dae38b8a375a2e3f8820861c302e675fdeb6981276fab61ad1668c7596e7deab","impliedFormat":99},{"version":"4967ae99536846dd5ac9f3af41ad296b9c36d611a52d7b00ad686304bd23d71d","impliedFormat":99},{"version":"e053193d1742f8702be0bdfa544ad435927557f7ffe67a23ef92b176e60a7657","impliedFormat":99},{"version":"4f1c51f422685db98ead37cf10e723379d21cf990db0d6fb8000b48ea6c254ec","impliedFormat":99},{"version":"951543da1d33a4ed5c53714a1f4ec35b51f8a1c61107649c5ba6d9a1d2146103","impliedFormat":99},{"version":"d763c971f8591a21a1f01c101ee8a769e52e412fe7b1a455a9ea71dc88a758c4","impliedFormat":99},{"version":"b4d7cd9d4092923da05ed18680138dfc72f236181f5618553d75e0ab06f67964","impliedFormat":99},{"version":"2784337e4229d64fcfceb6c4ffebec4d7fee7ac312a316f8eac1a4f760ae20b3","impliedFormat":99},{"version":"63db0b6285f515f8ae6397e307d3b26a56a5249fd80bdf7569ab4b87aa87ca55","impliedFormat":99},{"version":"7ba72b7633d2d2e507f07a59027e24505577797753965b575416ce8e89a04270","impliedFormat":99},{"version":"1762e04cb04fc69364160a0e3d121c63b85945f842575f5e3abc0392acbdaf81","impliedFormat":99},{"version":"b96cdad7e7b0fd253213617c6f76f79444e6c151415584d9195266a9203b4206","impliedFormat":99},{"version":"71663fef9e157f5257a31408ef5aa7fb4774f245de27cd9c618d4f45db01f19a","impliedFormat":99},{"version":"ff8a53256414952562c88aba30a7a2492b86575686c997815b307b1f10bdf784","impliedFormat":99},{"version":"279b59c01e2739e252d3609d4408cd1e67ab977df56f9547923496681f600450","impliedFormat":99},{"version":"d50c4d520094e034e1cf9f4ca262a856b53c67dda3a1959057278317206e5f86","impliedFormat":99},{"version":"39637b145df70dc01000bcffbce1990f85327b9e429d5d0be455e7e1efb235a4","impliedFormat":99},{"version":"afe91c616fc7ef7f8e212efb62c66d8ddefd1b8de2582997f98ac57a4d0a7655","impliedFormat":99},{"version":"7326c8eb2ed751b126ca6b25e9d8e9db67556cb40d5ea485afd7518db9657ba3","impliedFormat":99},{"version":"6ff130b441bf073004bb7fdbf5513fa7bededeb5ee9add10e0e395738eb5f4f7","impliedFormat":99},{"version":"272e5e5ad2298abd3852b0f5bf896ee1284a60bbd9e4e45c961d66fdaf309655","impliedFormat":99},{"version":"02ba9c57dfa46d5673abe376a9c35d03f3f4100b4d9c5f9355e0a62bfe8c16cd","impliedFormat":99},{"version":"35a603a9a038aa340a6cfe26b59a9ec2d984da2c5e63a3c46c40113db6635ed5","impliedFormat":99},{"version":"670c15b05a76b37a6ccc1d2e381c7a1780d1288b50751a037c3809c7d4d433f0","impliedFormat":99},{"version":"fdf5d761568f1bb4a318f8ec9f33e99d1f6fe3d7d1a1f573605f29a03b4bc002","impliedFormat":99},{"version":"ae8bef1c3edc4eceaae9df6bf6a046c52bc4838d2344e2bcfd55b84a5c4714c7","impliedFormat":99},{"version":"358b82dd6de9956c92e1f6aaedc4432bde6a8cf4a9b2cc18e6cff0ba2787cb20","impliedFormat":99},{"version":"15811478ecd27a7b1369df74b7135e8ad8a8352c35dbb13035cd5ab2352fa0a7","impliedFormat":99},{"version":"c0ce7088c30ff91f0ff8d514b7f8dcace90b65c554b8a3027cf864f558c4cd80","impliedFormat":99},{"version":"4b49f46b98cf981e1d9f0e75056c458f0c242ee7661f1da3e6cd8eba7b599bcc","impliedFormat":99},{"version":"d7033cf81e6636c20362085d87152a2478c2529db0fcc1eb3b1c0ef152caa132","impliedFormat":99},{"version":"95417c140dd26defda52f7a4bc43500a0915d931308c85866136f829d7d8c88a","impliedFormat":99},{"version":"c2668c0b8cb8bde3d7e6901aa6eba98963785e887668eebe974e8df49a44cdc5","impliedFormat":99},{"version":"bf028ae34f02d5604c337ad4fcc8541ce14e977c3bcb3e7f43bc396af5721494","impliedFormat":99},{"version":"fa1ef591870037b5eb045e5d01902f9015ac8553622a8c18dce178cda3f981a3","impliedFormat":99},{"version":"8a14c1e4557c91f4ca586e0762f423f699e6b97ee5916f548c68966624ed0a0d","impliedFormat":99},{"version":"ebf000b79f4b3d3f8fe4c1d1dee01b12bb82262750598e382444c2f4c6cb6e13","impliedFormat":99},{"version":"df0211c66f5be54737f0d9f4f9b60261365caa812962343f8d4af61c62ffce56","impliedFormat":99},{"version":"2e6b186c28e363aa0f3144864f74bb0bbcad508f91e4f2dd7b652aa32abed04d","impliedFormat":99},{"version":"0593c7918b3a884cbaae040e5c53c8534d0b7cb2dfbeb923a3b6af15cf597690","impliedFormat":99},{"version":"103d7201704781b7503ddeaf536ae71aaf9005d861e9f9f00ba2d5b7c9131946","impliedFormat":99},{"version":"6d39e1758a21b9b1f7a33aa4068bd2fcf9d83f202be716bf03891f04cd11e607","impliedFormat":99},{"version":"4661c14dd9c9cea4b7ec3577adba9b05c554732cd21e51a9a8d67d55cd923035","impliedFormat":99},{"version":"cb7d54e8e4fb0979f0a528e1a40ee833ecf3f2b40cf9db8df5987576359c9a89","impliedFormat":99},{"version":"b3803db7a72c9399c5285a136497140d15618995742f06081d9c2eb52c607b68","impliedFormat":99},{"version":"2a01ae25af7e6725d8d5489fa2aac7e2c521ad4c072fb58f1c6e3bbddf4d913f","impliedFormat":99},{"version":"720a99ab213d49587ddb67dd0cfe541b0cc1b5f6e53ee916b75319bfec2f3ebd","impliedFormat":99},{"version":"81e828965aa9c2efa7403a7a4a533c51e22b618912a03d035a042eb82d1313f8","impliedFormat":99},{"version":"168489d5da3a1925ee759c4ad8d031581cf887a2d305602b4a658cc23ae44106","impliedFormat":99},{"version":"6be5fca571daf55f2f6f44aa9b1497ebacbf3e03e6708e51733a6d84575754e9","impliedFormat":99},{"version":"a623e124420520aaf6077ebf64567f3bee65a6dc3773a1332f0ed513f7f49ce0","impliedFormat":99},{"version":"4d75c7f4eb68d365da1731fa1fa0170895aac801cf21a292dd0503763994f3b7","impliedFormat":99},{"version":"06fe4e250c71760eae5020c88f85742299af8f53530ad9ab937469d5cccd7255","impliedFormat":99},{"version":"0adabfced9aa978628b37783f1e59aa42249a0b7b3fa7b09312c7b866fa3328a","impliedFormat":99},{"version":"7f2cdc3709d66f6004bd77cf9359b467811dd37cb22c00c8af408ab74375769d","impliedFormat":99},{"version":"adbfbc12814060b647c81470c08f3420d89fc93dd1c45c422a10561e3bb6f13c","impliedFormat":99},{"version":"5f1614f54f178ef74d4b33e5871b7a7dec7d330e5d94b28321dd9d32546dae05","impliedFormat":99},{"version":"9f741273f89ff4d1ca8586715c40eeaeb7784d30a9c8324a1dfd39a06371be97","impliedFormat":99},{"version":"9885942ed0ad172b90b45bb4af647ff107a867529534e991f0a112d900d0f215","impliedFormat":99},{"version":"0c262fca6a1199175283b61213d6c6b0646de8584ba0602722eb95b9ad9dfd1b","impliedFormat":99},{"version":"39c1c529a708d276e7f9009b6620063290c18e4c916fc3093d308f32317208d3","impliedFormat":99},{"version":"f2b5e36f2402b53b809e2f64b8e020c6a7637ebce13b95fdac9c26e1a14d7b74","impliedFormat":99},{"version":"8680096ad4dea123f9c49cb0a5deb1fe7a625c93f1a50c4516610925749c03c7","impliedFormat":99},{"version":"0f619545bd7f204050fbe17ab02fd6133ff926467eceda17b430eff646d72ffe","impliedFormat":99},{"version":"923fa583f765c8c013082e64f937b199f980b1b15c40bc3f583b95530e7d2d33","impliedFormat":99},{"version":"505e2b29b7aff97d5cfa06b644a73af595cbb2ad62514705354111eb4a9d25d4","impliedFormat":99},{"version":"0626be91af9b502263c02d30f54462d3b3d441a317caa2fe6c690ab8bae67897","impliedFormat":99},{"version":"0282f7c04ffba8d50df82954017daa8a653cc71c2fd37ccbb87c64105176ce32","impliedFormat":99},{"version":"32d95fa1add10335cf6d98c640a47ebdae0e542b4b2d8c0a302455933810ff54","impliedFormat":99},{"version":"18da6199a28384e4287fbd4035fb4e3602a144975228b436c40371b3a31fd0a3","impliedFormat":99},{"version":"22ff98edd221e6aed5bc9ef9f6a1f090ecb34a1cc465e5b2f7c6b71789238447","impliedFormat":99},{"version":"bcf15f71abb2654e027aa15e6cc2c6b1a56e2a015a4bda6b1215b780b9cce61e","impliedFormat":99},{"version":"b390b5480af1df51fbb3b9bf2140ca51fb96cd6b577ab53de8afe932c1029951","impliedFormat":99},{"version":"449439716e67042af43d9c9290ed4c49bc46854b77273874f7e7f4860b52bdd2","impliedFormat":99},{"version":"a3eeb212864f2cbe7a7e7946425365b0b1bfa25f93e975f622d760738f72cf5d","impliedFormat":99},{"version":"326be804404a38c9b39ef236e45fc4822c4287a337b5d4d2162b7e5577489ee3","impliedFormat":99},{"version":"46d6be7f5084b138f83944e3550fa72591935fed3679ffff9447e2c4c64c5d82","impliedFormat":99},{"version":"b1a7f35702d8f723354d2d69d8f778ef8ceab7f690ddc7fc7ddeea2524c5075b","impliedFormat":99},{"version":"770e7572cfd883ddb4d296572cc49e4183a9299fbdddadaa3f15d9e1643154a5","impliedFormat":99},{"version":"0a0f7ac30acd0ee10988b7fca9c3829610f98b53f83b7e5c7ade6572fd4e4849","impliedFormat":99},{"version":"153bfb6e514f8d63ad14385ebea4a499d36c0385ee58dae66f9dac2337291d2f","impliedFormat":99},{"version":"5d7fb9ed27493c65389f521ca859506d10a6b7e6bbcbdfffb84ae993918037da","impliedFormat":99},{"version":"5bb4df6cdd57a24e32fbd69fb6adf79c3dcbbc4b802a8f3d893a5aca37d3004e","impliedFormat":99},{"version":"21fa1d6be54130de54330ff4c1437ee0baa70d8dcfff4d1c4a85e558875a8c89","impliedFormat":99},{"version":"46439b4d9e8742c3de2c32b1ef4962af91612d83db8a2d77733a21883cb6d976","impliedFormat":99},{"version":"2813b5d86a9e0a9986104fdf4a2a37cbe868a6e17c5e6e3a1abcdcbe1cfc93b8","impliedFormat":99},{"version":"d9450d1102d1179b0faf3baab898c89596c1078885278f94a1aadc4f70049312","impliedFormat":99},{"version":"0f76b54c6dce2b5f193c87e6caa0cd7289ac10781ae342ee6bb7af0ce36cc32a","impliedFormat":99},{"version":"2867f05c20a2225b4c1c8ffb1b5240d30064527fb7a5b1750bd41a89d6c4c8d7","impliedFormat":99},{"version":"1fc856f4fc93907ee59c01efd8edc6b5d49043e3766cec4bea5fa2c2f2f4edaa","impliedFormat":99},{"version":"b864f5118eb5e45345fbd0656be02c88fdb5358c589ad6b5c66ec19f4f0e71a8","impliedFormat":99},{"version":"aac54061ec7558135b4f676212c89b82c969b069342a42f1d5ba6d30f743cb6e","impliedFormat":99},{"version":"d84163e6c4bab8b697bf1c8b0c0908f404df2384b47da63914679f90c0a56bb9","impliedFormat":99},{"version":"ef519ebcf62f2c37cd54485272e42e21bb966b2c203b3565fd265ffee1054a7a","impliedFormat":99},{"version":"fcd2b3eb9f11f2bae710fa4d7a596dadbf1a465b8585f05db63a28d93079b838","impliedFormat":99},{"version":"1d8ab77f40c29a333fbba3585751b384005ced7d895d2c947f146a95413e9951","impliedFormat":99},{"version":"809337f529d322c198398ab84513d7b4dafedeab24179221b6b2f1dbf0f05065","impliedFormat":99},{"version":"60548d44220d4767d7ab2ad9461d664d9aa71afc9e44e03056ad380ddeaa1d66","impliedFormat":99},{"version":"2187909b7da18743b0dacba6e2390825cd20362ff44068e0d47427a607eb22ab","impliedFormat":99},{"version":"962cfde9b7e05989a758aec98703ed75159c40e212df5cec74381eaff82aba98","impliedFormat":99},{"version":"72ffd8535e8e7025b7969c8461c2cc456d23ff175103df046b4fc55a61a38211","impliedFormat":99},{"version":"c890c291338418ad77c86cdce322a8f750bd9b4cd9a456b6363da72549a7a94c","impliedFormat":99},{"version":"df2768213ab37da8fc9ee6cc9f24f4a32c62e874d28625277b6b12f944d4382a","impliedFormat":99},{"version":"effcca1c88335a4448160c1dc7bfe98663f38a67796ee11a04d7bf9c568c8373","impliedFormat":99},{"version":"cde28c7dfb93f6c7f8afb49e6d3a8f8bb577803c7eaa2ab4f02a722d1453086f","impliedFormat":99},{"version":"b05aee7d890773c66fe01f130ee432755c5e0b0e9857e87deac88beea7a57577","impliedFormat":99},{"version":"071091ebb5656ceaca89be5827e45d3367dd7e5f2b51589f5cee241116f33028","impliedFormat":99},{"version":"6324f22adfec34e153717b6d0f416464b8bed2086a7f301fb187cce198e582bc","impliedFormat":99},{"version":"882daca29017e753f72dc0ed60ced6c7ef8c9455bb865f95ce6728e8a7b405d9","impliedFormat":99},{"version":"85cc6f0801e8718042f3116924db65682fc16ef48165136fe136f39d42cf097e","impliedFormat":99},{"version":"61a82094c65a52eff9ff1986c6082e361b0485bfc9eef3c44341f26fe53d1453","impliedFormat":99},{"version":"3b03dfcac351c5c9e0362f081676d3adde495b3d07a8a29f4642bc261091898f","impliedFormat":99},{"version":"909ac7b41961cd1fef0ac5d31d2765c72cc82b4de3a184154b48bc0247edcdc9","impliedFormat":99},{"version":"20fec64d6a21097265323e83c04be9b68e07c26624ba30f05ce53de89fb01571","impliedFormat":99},{"version":"a6d376714411e99706294f4288fa3310d14aa3e211040580102c99fe8c87262d","impliedFormat":99},{"version":"2646752b05b717bd2900551d822735156de24591a2ac17d2ecbf713b5b13f90f","impliedFormat":99},{"version":"ac0ebd6f1cd412a64edaefafc74d7dfb6ce12d03ed88850025622c3e2fa2821d","impliedFormat":99},{"version":"fab8951025c1480a7956466501e4547fa69afacd8a86b6079e1d1a7bfe7c43d5","impliedFormat":99},{"version":"ddd2c8020e0d3e479bd12e739744dd4eddfd512706ee6fc8b0d65b58e234af38","impliedFormat":99},{"version":"027d9c5e810e507c637cb8022c9d44445bd5e3a3c84c5cf55bb2fe67d3bcfa23","impliedFormat":99},{"version":"3679e5a37ccea0b56e73b6d42a36ddbca0a6fcc4119dcb34e652b0e2cb7189c0","impliedFormat":99},{"version":"9e4b60c3965c575a33156eeed8b5f8d5de378793aa1b976189aab25e6ab48ec5","impliedFormat":99},{"version":"73ed3cefe0c0aeb059cf27bafb51e843918087c843ff457a871ed3a074c9aa5a","impliedFormat":99},{"version":"d35344448dcd8a37ee1e2a467f8e9d26c388b712ee3d24a3aa4900585b5545dd","impliedFormat":99},{"version":"3ef76317f676e81cb18eab1fb7e6a1ac60015a57fd679430ed8d1257a911ff89","impliedFormat":99},{"version":"45eee0eb80e0b7604390ddc34fe455d0fc04603d9e4829549272f48c8942c7b9","impliedFormat":99},{"version":"fabe29b682338fa7914d62f21609e4dcbaee9f93ef91adf6db64de244e8140f9","impliedFormat":99},{"version":"bdf0099507aaae26031e61ece1c443799bd090bc99c6e42baad4cf7e9611afea","impliedFormat":99},{"version":"f24ce130c62b7f407a3cea55bd46eb78282ae1e03a5a980a7bf73628e3a25dea","impliedFormat":99},{"version":"cd6e7a1b92dbfdeb233611cb452d8eed24b949cb029f97bef483a5fa3fc7298f","impliedFormat":99},{"version":"09edc5752759a8d4d1fafcbaaa9fad6bc6f1b3ce1a422262ffbd0644f8cf5f30","impliedFormat":99},{"version":"3cd21ebde7071845559b76ee05ad428c5325f788c1fe22e9de4d81e77631fac1","impliedFormat":99},{"version":"542ae7a098c4b7d9ee35b2ded57786de1210bb12845b23605221030b17e04f55","impliedFormat":99},{"version":"8401ff0d8b9f30a8a341ec7269f234d7152177d6a4131e0600e7bdf489233917","impliedFormat":99},{"version":"66a26a0d221fe38994b72cbae8515a91afd5928e40d2f64107ce6bb8fc81375b","impliedFormat":99},{"version":"50594b654ca71c8e7c09bbf175cd34d5efdab5ac423fcb19fd8288456c0eaddc","impliedFormat":99},{"version":"c18cb17ebe4e2417dd2a31a2a4979cfcc72338fde7c9f32768023139c41ee521","impliedFormat":99},{"version":"28d23dbc2c8d8dd21e9b397ae08f5109cbab3a0599df0248190b0cb396c5990e","impliedFormat":99},{"version":"fedffc2d00ff968dc10e3e076f5cdbc5d7ba1e8bda6158bf0ab4286711e1ac27","impliedFormat":99},{"version":"93212dfc3cd9457c7ebde8ed4500164a895d15b55c9f10aa4ac46ffb455c2499","impliedFormat":99},{"version":"f0ab96c940eb748ddfb6f3b1442393759257e624d92034ca6e9698b41a06b2b7","impliedFormat":99},{"version":"823f37edf2f78ed8fd17a59f0837ffefc4b53cc7a0560bcee95bc58626fb9b6b","impliedFormat":99},{"version":"f6439fe717e31e5d222d7e91c5c1082d280f9bf9209474fd7542c4da31b69d7f","impliedFormat":99},{"version":"49126f1c0cd14332be63c13677cbd1543c09362488732b7cd926c8be1fa5a5b3","impliedFormat":99},{"version":"17fd67f8069c954e24fb5ef02e4c97fb2c7b8e5368982ef018232ed2b16b9e9f","impliedFormat":99},{"version":"45be37950ed5f5d4e489a93c3a278811e6685f423d552c33f1518df9c339b5b6","impliedFormat":99},{"version":"0b8f5565dbf8ac71e1f0e36cdf6af9d5e595bac817b1cb49029a387f77a97f35","impliedFormat":99},{"version":"1abd78da038403165528314141ebc823a6adf229febe585828be06e2888b8b52","impliedFormat":99},{"version":"4b068760205754ede438631a83b74443ca9221c47fb5c1026e488a6ff7154dc3","impliedFormat":99},{"version":"10e52fe23fd22927554a0f6637c2f3814aa50f4b449837e84d7c3849c5ace8bc","impliedFormat":99},{"version":"9a695b27f81d8dcf4f4c1ace9362bbf86da55a561333ec22b028567cb77ad167","impliedFormat":99},{"version":"69fa3b563bb3060113c7d4962a0da9fc7d0c1981c1781bfbd776d06761ba7afa","impliedFormat":99},{"version":"45adca51ef386ec97e2b6adeb30bb5bdde8fcacc9b4e6bd7d36b293acb3f0037","impliedFormat":99},{"version":"edfbb6fe54cdaa69a492cc37a4ba702f9352324cda30260ba2dbacc1bc60bf49","impliedFormat":99},{"version":"1648015d9dca4246be02ed5099672f2fc3d2e1f96c4bf38cf312d52a9a36f821","impliedFormat":99},{"version":"f018e038cb0609449172a9ad1130578c92e65939b70374c0847681ce9eea5a53","impliedFormat":99},{"version":"63ed53d5a157ed6749e873d0a4dca4338b86aefc123a605924e4ecc31fc7d3e0","impliedFormat":99},{"version":"602490794c1c63022ff8f03a43b9e3c9464df0e23b2cbfb9a917fc94f4e1239a","impliedFormat":99},{"version":"790d855ffaab4826fab11919a2424117f1df2263cea00515db5d9da27c712f4a","impliedFormat":99},{"version":"b16a21c46be0065ba851366ed933110e7fcc047cd619859cee6fe6043f57eb5b","impliedFormat":99},{"version":"973bd4ce6836a2b7be4281e63be46a02c73c7cfe0f739ec66fba5f64fee42172","impliedFormat":99},{"version":"c95df61205ddee55c0f36488d45eb36923536d1ee7fd2c123765920d0170b903","impliedFormat":99},{"version":"921bc19e17c9b55643dd6bd629c1821a17b9113ed445720c10fe375513aee2de","impliedFormat":99},{"version":"2a596c7487235cc254faeab8d49e084d61d53ca89e00f86da42a5eac0e702cc5","impliedFormat":99},{"version":"063ca493742dae520916addb5eca31c3e0bf6c58cd0f10f5ed8da071d8cc3e58","impliedFormat":99},{"version":"de562ae720d5251cdb274522070f5f5f89a4ce3862043eed99d9456e63a212d4","impliedFormat":99},{"version":"8bc9b778acf6bf5388bea5499cd5b0f4bd7d4c8ed85928dcab7e77038b1edef5","impliedFormat":99},{"version":"17f91aa1a354b537cf970a819537ce1e7a2b2dafca7d4b1b4d0894995c804b2a","impliedFormat":99},{"version":"048f232a281458a0159f024678c5c8651274885d45f86b0b21ca75f5b5ee6c53","impliedFormat":99},{"version":"1bceba42b5425ed2aa158afe916e36e88ee0de33e2f98b390247cfe045061f12","impliedFormat":99},{"version":"e32e2962a30e289b4da7cdc87eb2a79d0102b9abeb37b302b433554faa32721f","impliedFormat":99},{"version":"dfbf0fe6cdc27050ac69f83fe64bfb387dc40cc653a0b559f3ba5185e1e78472","impliedFormat":99},{"version":"f7bcd657a6dafb80e582d43f4bdd33a83b58376734faa9e20cfa9b6030c7a2d9","impliedFormat":99},{"version":"25357858ef183078a99a52e14622266027cd95e2f8a81fd280d539aed447eac6","impliedFormat":99},{"version":"e3b6ecd2f0ec008a7c2f8471bef625c49277dca2a6173a8cffaf920b2b1bf9a0","impliedFormat":99},{"version":"d446c4afecf40dfb4ba6b32a7ed85b5767c145e1e223d17d11fb6a8df9919d30","impliedFormat":99},{"version":"a2c036eefd32f7c0634e1f8615c4b485341d4f1f6fdca5040e62f943972013d9","impliedFormat":99},{"version":"5f3e074edd23169f519bb36e6acaf261a3a5c33af12a8a7e2794b68255bff5e5","impliedFormat":99},{"version":"fc11706b5365ebd58c9434fd9529a100a3d24165e4b04488608b5d55a77d6472","impliedFormat":99},{"version":"909469ed8952f1951373d3294706b50e94d25389326856fd7591557a88ded44b","impliedFormat":99},{"version":"28c160c147c1227df8f46faf50c70dd8ddf0870604250af9eec7f52302b9acf2","impliedFormat":99},{"version":"27a08c3aabe4b415d824042ad958ad9d3d0160c4d8ee43aa8e4a1aece2b921a9","impliedFormat":99},{"version":"4a802c8b0235155d9e45dcaa4d37e46e0eaaab68ef94eeffda6267963267a272","impliedFormat":99},{"version":"5aa4a3727ffa52d1a593b24d6f6e0fd5d3ce859d8ed9bf2367203343f79c0f26","impliedFormat":99},{"version":"964d27f5310297b03bf276d28ba974f3b7c972b532421108378a00cb97fbfe5d","impliedFormat":99},{"version":"315c0551400e653c864fd689e86cd344e9d39de0e1dec74e73b21c6d3602c775","impliedFormat":99},{"version":"5a9636f37a8cfd40dbd97ba1b222f59f085137d574bb90047e77ee853578bda4","impliedFormat":99},{"version":"8b21ec05d818baeb23822106dc371592d197782c61ad6c867bd00482420dee3a","impliedFormat":99},{"version":"3b515b15b0dfe6f511f280d2a66e6f5ec4518d4bbe43699ddd2ae5803ffc2644","impliedFormat":99},{"version":"5cee626e1c97f9c9f634a90e71286bbd32bc84d4391e06286ef7161dce6f8d74","impliedFormat":99},{"version":"77d5d4fa63a5492d5eb299f89ff6440eed60228e4ae45e4675491f1117f95634","impliedFormat":99},{"version":"9caca9e0d06aa45891b2cefe548acf95759cce8be9ba6288d3473ad9a79cfa9f","impliedFormat":99},{"version":"1601c9e2d2fbc602e8ea3cb856609e5dec0eba0f0b4a4190bd1aca8d7e48fd60","impliedFormat":99},{"version":"874f6ab7330b8e05a42d56afd3f77c1758c2d1027e3dbc607956412d503517e0","impliedFormat":99},{"version":"bbc8bbb97a2d014f591b7ef7f12ebf08f8efbdaff154339b89917e20ce586381","impliedFormat":99},{"version":"9ddf9e6cf065d0114a2e03ad2f24db6e2a0b7e0495fb830189fc2b5ef45943d3","impliedFormat":99},{"version":"34392d1d35edd9eefd7aed8c7300e7bd79a486f93a536c641d6369d9de4b7845","impliedFormat":99},{"version":"6ed5d4d4bf431b0b5f10140a0f9e5c91385edca2cf0ba86d6666d966b327bc93","impliedFormat":99},{"version":"e53d7929979440f295425147feebb4fd29ca12b76fa8eededb805974327afacc","impliedFormat":99},{"version":"6ea1298ca33b3ddea4e9fcdb064e1e6d9b3914a243a016b5450ac9fffecaea4f","impliedFormat":99},{"version":"0a613e62ad948843eda4f5becaf2ab18f6edcfd1de024355c74dc28a08a5a101","impliedFormat":99},{"version":"6c21383843396d5d6d1e9fdb594b7f27b1960eaef2e6111d25819b906307eaa3","impliedFormat":99},{"version":"1c0f7aeb0da8e115b03abf334d85d6a3cae1c5f10fa294d6cec1e68109bd9aaf","impliedFormat":99},{"version":"2ad7bd84e41f4ce032f286215e8c9ef109d0c56940423797ab899a69a55dd002","impliedFormat":99},{"version":"aa38b4ba91620fceb0b7c8052a5ca30c5edbb6369ca6953076f394008391a0d6","impliedFormat":99},{"version":"8c9828ec8c751df4156fcc16f2ca81c496563b63439fab6c930dc0a6bcbf01bc","impliedFormat":99},{"version":"398667a797fbed20361065e368e68f5338e88095338c7ef350ab43b52d82cce6","impliedFormat":99},{"version":"06671d26d8a24d55257e7ab611d40db8cdf9da156d53141c13eddf8d22292b67","impliedFormat":99},{"version":"62acc211029559045b264cd8e14413f3bb6c3d197d73ca9919f28def1c0bfaea","impliedFormat":99},{"version":"49ba58fc3f7ea72d435a44695e789d55e9d3b75688a6a5c94da5b65311e965a1","impliedFormat":99},{"version":"56df491b603cb98cc0feee1786f0ccc67cd7044cbaeba753e4a06be0a3dbcf15","impliedFormat":99},{"version":"e789c4c4f3767a04d475ff841044794cab5cce1b464beec3c4764d27c6336ef3","impliedFormat":99},{"version":"c3bf0b45bee7f76574762527d9e8d2b5ccd6b71bc924a4959f566a0e080cc718","impliedFormat":99},{"version":"17730b23f90142bc9bbba78a8ae3e810424683d70fe6868430172bde298cac7f","impliedFormat":99},{"version":"36b0961fdd22011c8b57ad05992a5e786c10a0f7247226df011c9250dfd7dcac","impliedFormat":99},{"version":"012519723b27b0b7d34316bbaefc82b2bbc7b5f09b29f9420b25e7f7f98e330a","impliedFormat":99},{"version":"26b153c6fd0a13b446ddb463c54b8b89391d66e99a883e0d0a5b2a3bdfd4b4cd","impliedFormat":99},{"version":"cf8e9163683d25c0653dd6383d1cb61527ffc680341cd70f2ef82428d174cdf2","impliedFormat":99},{"version":"6eedd556ff92351a9c0837b704da3249fcaa65b249c360f02537e2468cabfd94","impliedFormat":99},{"version":"d7a754e661206c750697768311597e3d333418f1da4546786b2ca315f884b00f","impliedFormat":99},{"version":"0bc0d9c8e623b0adfc5b0f70e52fdc623fe19cf05d76fa28513c04e0e99f2f18","impliedFormat":99},{"version":"8aff0190bd76f107c999b35145ca236977f5c75a6a0b93b3e25185de07a762f1","impliedFormat":99},{"version":"94e5221e731a382af91ce0ed2dbfd0c6c0cade705ba4708937d2d8e7a81c308f","impliedFormat":99},{"version":"0b861aa0e40121348cd97555739762407c59cf6d4d55ff921d02626a5557f951","impliedFormat":99},{"version":"313da5d83029860437f6c9f4a6bd5589d410d10cb73caa89f465f0b92a092dc1","impliedFormat":99},{"version":"1ca3de4ccaf5b8e3b0281ffeb987418b8797cdd38e6f2efcdac6d53be08d2c70","impliedFormat":99},{"version":"3733f99c5ab34d7f5fc2ae62b2cecd43aae1dfe513f1f198a6f23198ec85a9ab","impliedFormat":99},{"version":"c8f01915efe59d2e3b89262ca71462a2ef267a46d85e64d423b7eba5e56fa806","impliedFormat":99},{"version":"0ea8152fddaebfc02cae376261b581493403faa3315b561b7b28c2c9adb8870f","impliedFormat":99},{"version":"366feb5801697dadf2242184050cedb892219e5ad944d958b9f48c1a21bebd5b","impliedFormat":99},{"version":"18e1dbf93c92d56dd99b4feffb6b5f4bab3942a22f9581fe2fb01b6ef98a3127","impliedFormat":99},{"version":"af66f338f282f6a5b65afba57694316e83ffc482b8e43c2157053d2786f5ccbc","impliedFormat":99},{"version":"e5c1db417653c4d348ff6759b3b669721e2293b6123ccf2ac5aaac850727ebc8","impliedFormat":99},{"version":"3d254354637d43b0c1487e8051c4c362db794ca2b3aed7521aad0c4069531af8","impliedFormat":99},{"version":"a164aa58fd0a25722fc159f19636c34df5fe7e606c306459378005a38aa08621","impliedFormat":99},{"version":"1a341bdbf910ac2f80d1787942c77826b17f4e530cfc238a882a2e2eb0e49e42","impliedFormat":99},{"version":"cf4003a33c1a404f35f5c9854f26586497799eb9a7c8212f734852fbee9dfc2d","impliedFormat":99},{"version":"7c24222292e3d201b8b69b2ce466790a5c0abae9de3cc58f7bbeb0678d9909cd","impliedFormat":99},{"version":"7f06d04b0e1a40fd6541852620024acd484fdd7d7652f92debbd27b9540a662a","impliedFormat":99},{"version":"aa440a5a66fbfed7018a245b23f1200cdcffece6fb06d4f6e3b8e47997eddc02","impliedFormat":99},{"version":"e392dfcd88e18a82ba1195eba06545123e53b56f7d1a646f0d47aa2db930dd18","impliedFormat":99},{"version":"271dfa798f98be4ac49dfd6a28cc486f999f3dd7a9bb6f5f23262c64a65cf50c","impliedFormat":99},{"version":"82afb43c3ca6e0891d0c2c78e8cfb622ac3e69c1505dc73e40b3f5946e5a5de4","impliedFormat":99},{"version":"a45a9e50aa41d0939c42d3e02758b105128e57f9eab790e173090273a8c511a0","impliedFormat":99},{"version":"e3a3604500700c4855a5051e5c49caa41df1ec83b30262c1ccc8e34a1cb1471b","impliedFormat":99},{"version":"b5cd0fcbbedb59e0647a66888abca5ca4507f885ff3b286e0c50b842eaed1e98","impliedFormat":99},{"version":"84226fff98bdf61e7b9ae1f51b39fdf4d909393523764457aa2834d50aa91ec9","impliedFormat":99},{"version":"9fdbe407376b7917e668f04ce8d7c23cc952ca60eff05f055d161121d7ca4d4e","impliedFormat":99},{"version":"586e40af8284984647509e8bc2316ed15eb9fc471a5fdb5a1d7324fd0cf8cbc2","impliedFormat":99},{"version":"78b9ad684d80469986ed95aeefc63c0a897a625d9c30281b60a6c67eee314983","impliedFormat":99},{"version":"99a49d4c4a5ecfe3d02d1c9678741b48144d60db675105428cab22623e805fbf","impliedFormat":99},{"version":"c7b9f04d2e9d9c104e124c812cd95e35f6b9e96208cc7261e3fb8cd6341db30f","impliedFormat":99},{"version":"d59ca233e5c37a734e7ddeb14073c661b571a005b65d291bcc7a70c578bc3483","impliedFormat":99},{"version":"f7e93f9af1676ed9f0a505df3218f62b0cde1e898a9f5020fde159b2bce4ec22","impliedFormat":99},{"version":"99a9e52464f5d435e1291dd0cc343d2650e1aeea2faf8c45da0069b79983b189","impliedFormat":99},{"version":"5b182efb3a0328d1185ffd4b234079624ffc3642ac2bdca05f2d2a39f489cf6a","impliedFormat":99},{"version":"3e051f1ac9abb757eba36a1c653079c05f8e73d47f468d2013e5cf91155edbf9","impliedFormat":99},{"version":"50deb81f9a86d6dbc990a3d2e21ed9e95c7053b4f602cece0eb8a66108db32ca","impliedFormat":99},{"version":"5437c62288e1d84f352d1336b2c791e514164f4b76df2b54b9b80b021d14144e","impliedFormat":99},{"version":"3cfaf2c2f604b6e0c3331d6e10cc12a4c2ba9004edd3edc4f34830c12a00de76","impliedFormat":99},{"version":"1bbffc55483a2466f7ed17d1ada9eb309510ad7ddbda8b9052bc0c4439466c98","impliedFormat":99},{"version":"1637d9794d76d852553adec7dab806e435c1d15742c74b55e7f77c6b3f0b4d99","impliedFormat":99},{"version":"94b752027cd750dfd3114ae4bc354e3136af339314e3c0f910df7fbbcc282193","impliedFormat":99},{"version":"f754f4a9815940934f1b958bbf2d2fd8b1463fd16a2e3cbf01a488867a20d21f","impliedFormat":99},{"version":"4ee3b34d2261742bf67c8b5e5b3bf826391e22edb5ce1336d6a8c431b30dfa87","impliedFormat":99},{"version":"09129fe38056fdcc77ac298e218f9e6175608c088d01154047e0066d38285004","impliedFormat":99},{"version":"32a703d65ddcc443c10d404684ee4078f615c02fe7a2dcbe3cd9c27515359905","impliedFormat":99},{"version":"05facbc54c07763ce59d8ecfb9e7236a2490393c772c99a534fc06d300510a28","impliedFormat":99},{"version":"29fd1f159df8bd374aebb398067eecf5daf749d2d07f736e7c7287dea11f4a33","impliedFormat":99},{"version":"2f38b4fbba29ea39481bfc318cf7a1b42d50a1690465a446650948c20650df5b","impliedFormat":99},{"version":"058107de646aab069d38c35d68161a2d4547c6e78c3a3998338b9768ed1b7022","impliedFormat":99},{"version":"65e05ffb34f0189582043596cd28453d050b8b47d89b466ef61953134f7b46d0","impliedFormat":99},{"version":"e08f74569060491151e951498fa46e391320fe652c887b3a1e387bface179f11","impliedFormat":99},{"version":"25abdc000f2be90eccb17eace14443091a8791d79ec423e4e3d06954b0a3e50d","impliedFormat":99},{"version":"95a479f1804f59bcd6cdc1d097157b402f3b9f56923aab18fe4911817d3008b3","impliedFormat":99},{"version":"93d9b928e4b32600406d7a4c854f009799e805da06573fcf481d5377c1759d60","impliedFormat":99},{"version":"24d8c68f8bc95ddbef68bc3dbc659876fc18a15c34859c4c21e002483c0d22e0","impliedFormat":99},{"version":"c9646244df7474905bdadac34ffabeca395850d5415e13bec0cff6884a3a1bd0","impliedFormat":99},{"version":"91bfd8b9c1596dc378f4a21ae2915dfe7f7b99cc4b48042e91d6f473259a50f6","impliedFormat":99},{"version":"40d8306d908ea3ac5af2e34093c8c589d22481d89e60b7ad6360e4ae418b42f6","impliedFormat":99},{"version":"96aadc567cda6bfe77accf7107137390f03b3f3e2968b06f881beebe8efd81d6","impliedFormat":99},{"version":"1231da3d8a3ab8b836808da1363b33f1064eacdce90f6ce1d8dad2a378f2946e","impliedFormat":99},{"version":"c3edc858676c0fb57372e7fb39a8367636c7cfbd532b9882a722b27bc901d0e9","impliedFormat":99},{"version":"2018b6f0e2061de5d0127ea5ea55594657870b0551d6763c47b5947add29c7ae","impliedFormat":99},{"version":"98feee5573bce5dcfeb11863da1463b0e5e4c088ff76d0010676cc297399aa33","impliedFormat":99},{"version":"9c7e6ee655cd3e2c3db15050e51cf28350e020ce2b5ca030f885165bac4afdfe","impliedFormat":99},{"version":"ea7570613b458b3b741acfb597f2ef75c646fc5b8de31f24f3e11e9ecc3e2626","impliedFormat":99},{"version":"6a8bb162513430ef154922525aea4d9c9e0e300d33b7e6c7dfdc21f1267e285e","impliedFormat":99},{"version":"5e756b34bf673b63c88b52377d9341a86e5b85bc15edcfd25926f18ab7562fca","impliedFormat":99},{"version":"8e978604cbc7a505aea54c40a6a824035d019de1a9ea073a8d89056d6e75d004","impliedFormat":99},{"version":"88a6d094de07d3bedda43a507010a4e496f83f898c8b30d51d1d66147317d389","impliedFormat":99},{"version":"0247e5036245f425410b138acb7eca8eff452e90b60ce15a6d14a79254dca3be","impliedFormat":99},{"version":"a917a6578721f88084be79236f3c3c6c8d0626d27b9d29eb8c7b40336d24a665","impliedFormat":99},{"version":"7d4d7cda987e76d83992b3099170e72f1238abde39b07086f2ce1c047fa5305c","impliedFormat":99},{"version":"7a6e19fb0b63f9a7f010e254376097051865a6970c698e0c4700840ffd88e646","impliedFormat":99},{"version":"c1214f047a9cc3b256a6babdaa062b1cc112f9e11c3276a585607b4c034177bf","impliedFormat":99},{"version":"645cd29e13ee8b379c92b7e016f80f020d596c0e329122fb89bbe857596b7fb5","impliedFormat":99},{"version":"85aa829c49948a7745bc9fe8349bdb83bba19763c3a8d6b30129498714c4a81e","impliedFormat":99},{"version":"0883b415bc4b8364115b3a74c2c5d14bb6852a1a9810d051ff426c51b7865e3f","impliedFormat":99},{"version":"57bcaba92379c398572ceea17e80cb9be80b0915bf2022fe99f360875e3ebbb6","impliedFormat":99},{"version":"e19c31cd2a5d8e14a56d40d9f8bb4819f70ee3290c71fef47d753cedbe1b8403","impliedFormat":99},{"version":"7867d743e0710c8233955855dd1c8143c76bd169d31e1b81835dd849d53f78e9","impliedFormat":99},{"version":"d953795eecf54315d23cf13cfef3aaabd521a305b71a67d5939487d9f8f781d9","impliedFormat":99},{"version":"8632c3b1a88dea3b5c07133a969658ade0bc8b0add4a160ecd12b2e8ff73f147","impliedFormat":99},{"version":"bbb8f4a3cd8286ed8d4615d7f6c0cbf4753c761e1d3ec18a20a161d276b6f617","impliedFormat":99},{"version":"9643da030e1fa23447dacfec5a005dc51f0f7f651dfb0c063d4195eefc8a098c","impliedFormat":99},{"version":"f78f0984c1045c759eca17c87d9892519813d7ccb07cb9f10bab6239274ab3bd","impliedFormat":99},{"version":"8db95a03e8ba40f5fd72926a7df034c42c083b264fdf948382eb2281cc3aaa81","impliedFormat":99},{"version":"a004f52364ed07ec22dfdd34041dce156046b1fd1d9170ca99748e7ebfca1b9b","impliedFormat":99},{"version":"dbff933905f07dbe803238031f124892e8ada74efd4b284287bfc75d2409e3e9","impliedFormat":99},{"version":"0941bf71e7631df878e29025c83b35ecf2b4fc730f61b008590fb0f937aa63a4","impliedFormat":99},{"version":"3e8837d71c58e3ddce51b55e29ad7691eb15aed51dffec5fb7bc968898abf6b5","impliedFormat":99},{"version":"6e58caca3025448230faecb5efda0951424ba15b071ba13b00f3e7f1cc6bdd29","impliedFormat":99},{"version":"b3a3f55260b2e4384b00a7bfc5720e9866074ac18f715f3e505c7593aabce3f7","impliedFormat":99},{"version":"3f8c206a53bb5a8370f094ff77ea9e95ee8c3661e248a1b9c0334bb71b641907","impliedFormat":99},{"version":"99853f693260e3d76256576888c7cdc5515e50e399fd3111afc514f0ec9e16a4","impliedFormat":99},{"version":"480cc4f99dfc33fbe523f155018e66bed504bfce061031bc04f5c47b7dd2ce05","impliedFormat":99},{"version":"bb0cbdbfe7201cc8dbe28f10d4577316d63a633b746f9e9ea9ed16a0400a0347","impliedFormat":99},{"version":"6bc725824b4ba929f44f3973aba69c3bf4c9b8c667d6c5bd257524584bcf6112","impliedFormat":99},{"version":"1f2a20e400e1df467ced60364324445d04e36184a2fb9bd39f32f85058d72b50","impliedFormat":99},{"version":"83c5f92d12a9677cb376404aeeb89f910efa2ceec8fb200bbfe59c508a5c86a0","impliedFormat":99},{"version":"91236eb27c0c580c803b9581bddfe4dd45623093b8638c8cf39148d193b185dc","impliedFormat":99},{"version":"ba41d9506bcc55e2043d0a9290c38a4c1fb4ef82fb2562fc2039d55ee0a80a72","impliedFormat":99},{"version":"214c9af465ad68b1750670de18e62b8f3e7749257aae5ab0d7170b994e9c7e5e","impliedFormat":99},{"version":"62e8d8503a51a24c9f0947d88edb5837357f4149c5103fb304bd31f8b5d4f4f9","impliedFormat":99},{"version":"5dad46254873e5e5c4b8b80f6776dac8bcc96b059cf6ceafd9be54d24faa3dc8","impliedFormat":99},{"version":"88ece1d1c523d9eaa48c8c3e0c4cd359e9df8a542ba6eaab5dd3c523d5fa9826","impliedFormat":99},{"version":"109ad0355918e4fad1bb9d849f8b72a6894b83d20ca6ad72e73124fa380a6c64","impliedFormat":99},{"version":"70b68b3ac7d6b03ae36e80766d62a666c407f455476283ae6ff219e49f0eaee6","impliedFormat":99},{"version":"bb72571132bf5160ef9af164b82f13fc74c332d11c3325e4953ede73627bda0b","impliedFormat":99},{"version":"e4101333a36a93829170c6e0c66ed47c648571502b484d22e4629317197a6bc3","impliedFormat":99},{"version":"f0e5a05eebeae29b22dd7b3747fdd6503bcf7ad42df8ccb0a8129e98ea112408","impliedFormat":99},{"version":"658adb3d7d4017bf38ba1d1eded9dd36c5be121eaeaf469abc11c2494c13e12b","impliedFormat":99},{"version":"f0c39b43f5d2619c66118d2441976b4f1fcd100e55be80bd55d8279b2776a082","impliedFormat":99},{"version":"1c116a992389ab12f4612dd3cc9b4d888eef454eed3794c1f515cd76d3b17cab","impliedFormat":99},{"version":"0d9ba4647605be41ae36c09439b623c174e7227c8943d15b1aad049c5932c2f6","impliedFormat":99},{"version":"ea8f99323ac76484ca97cddd57ed916dacd4ff2805c446a69da9e728ca8c9b43","impliedFormat":99},{"version":"18e80e1593efac104d1fdf3fe5c02023be9f3dce93ce3a95df75ce1c17b98332","impliedFormat":99},{"version":"68a5340b5cb05677b52fe5032e5b8ffaa3d02a98baa991ee161e318e17d0e74d","impliedFormat":99},{"version":"7a1457e43136d0a005af395929abb59ce7ea3712b1b4091040fe700c4386ff6c","impliedFormat":99},{"version":"8aafd0a8486f554718b22d02cb662b9964fd6b6346ac7c46573182ed3102e9b0","impliedFormat":99},{"version":"ab0f538caa8913de60351b4d993393ba30d485461dfed416b11fce206820974a","impliedFormat":99},{"version":"7d703f987cf71538d9b4e0388c4744fe91db9b4bf5fc0b5ec2120e523ff036ec","impliedFormat":99},{"version":"779e6f8af772f3f63982b2d907c662ca37acb84e7ce1fad4de9c8417142504d1","impliedFormat":99},{"version":"e1ad3c3b80b5bf0ba59c3b33878afb16a906c09840f8d1b072af14e587360f6c","impliedFormat":99},{"version":"51cda3a044b658d58c693647e19ecf16c29f5ae67caa0f1c619c7c76b93f1af3","impliedFormat":99},{"version":"e6b27342fc513672b2fcc831ed5d48627817ae0b26b3a487643b61785c52cecf","impliedFormat":99},{"version":"582d84dd785b99a7180701aad4fdfbe3fcb26cc07fc693032361070ed0369759","impliedFormat":99},{"version":"eb5888375a2ecdd0d3502cec0f77e1e42eeb2169c76b79b61add3ea0bc95ba4a","impliedFormat":99},{"version":"ca5f212e869dedebaa7bf73bea3c6e8ee886ba2f0601d7e789ce38e2db189600","impliedFormat":99},{"version":"d21865e1111bd2be2ee973598343a324713e31f1aa2e6184286e1a8f077366fb","impliedFormat":99},{"version":"3df99ade0e19a8fe6c989688eb5743baf8b02b4cb678018dbdcdabe00fc42879","impliedFormat":99},{"version":"785eab4c4a6166680180ba4e9bf06e6c205862a3c83323fcdeac61e6a76adf8b","impliedFormat":99},{"version":"c1686f9d62d0b94c43faf794bffd8cc24ac1475fc6d536aec3b4480128660322","impliedFormat":99},{"version":"3e050baa6d458a74a769e3fb50ff1051723dcfccfa8a31b7ac9ed0c990d5dbd6","impliedFormat":99},{"version":"bbc4cd67ab91a186d1a4aa1f65a7971ac31bc2d8c63fd2bfdf02e031a85be7f3","impliedFormat":99},{"version":"6c09c2fd7f6c0512ce2ad6e17a0d9f9203f47afd3b83742d4cb4db2d3ea821d2","impliedFormat":99},{"version":"16e3734500cb5fbe0cf27f4b61cafd7954db45c3facff516d8819bd63482a8f9","impliedFormat":99},{"version":"352036160d597fb56e03591325761d86221f6b4facdb0c7df4b790c4891f4f18","impliedFormat":99},{"version":"f93375427ab3f9a598bc14d9bef5a2ebf68c4755bcf3a68b794e131dba637d8f","impliedFormat":99},{"version":"798b8feb569f4b4c521cbcdb9651d0fe799ffad794284dce8a4e0d9dbaea95ca","impliedFormat":99},{"version":"3deb173189f9a8232ce9fc11ce610c27435f5e6b86e507f9c04d5fa275974101","impliedFormat":99},{"version":"de8156baa4157a698a1bda8e6b4ba62b8bef4972808f7450698017219f539475","impliedFormat":99},{"version":"65c089d5dadc1d26c81c374f00a8e11b7178900040dd7db065d8cdc405c65e15","impliedFormat":99},{"version":"66003617c7bd48b01253f0f0ae9218f15adbfd66a04a74d04235f28f9ffb830d","impliedFormat":99},{"version":"8733c82576758e483eaa077a95d1b2d1715353ee0d8f148d06a5f979fb71f22d","impliedFormat":99},{"version":"0dd5e215565f19d57d88f9c32cd365fd451207bdef48519c47b14dd4ddb301df","impliedFormat":99},{"version":"8b86136891f48d0e82f8fdcd623268b036b2a8ddc22241a1202576792af0b63c","impliedFormat":99},{"version":"1a080e2c42f4a16b339bc45067ecce29ce25040cb5db37f5f3f19413aca07e09","impliedFormat":99},{"version":"55f8158fc3e7d4ba4ab62820d32f236a5723af9c721e63879cb9c184292a718f","impliedFormat":99},{"version":"170f5fbca91c30969467442f813678c86d2d38d10aa3ef8e5fb388bab833fba9","impliedFormat":99},{"version":"224347dccdcf08e3e862699dc9e35f6ae1f9388f56e14db2357bb79b75c1c814","impliedFormat":99},{"version":"c6426d9201d8e27551ba9a0b5f4d9103dbc2b2057801a621098116a042b03b92","impliedFormat":99},{"version":"af11c67bbdf99195a89aa5233d8641f6e1d2f7ff712e941c773e16f602e7f96e","impliedFormat":99},{"version":"1dcc9bb3542020790409937565639ac7c3bb8b239ff49c65ee20d5244ced1fce","impliedFormat":99},{"version":"64fbdfda1827a333790a0cbcd36e40bbdab461df37fccbf8a2c12eb0a6450b19","impliedFormat":99},{"version":"9f40ebfa8a6cca16447d13bc9265e7b463b1d4e7265336e287d2ed2867af60b9","impliedFormat":99},{"version":"cd77f74ca7acac465b9b6ffc244a574cafbf16ef35bbc834c98314d1603f6b52","impliedFormat":99},{"version":"6a3fb20abadf78d08de29baaea62889070d505f35ff5140642e8074db0f5b7e9","impliedFormat":99},{"version":"75b2e385d7de8d6d714ff9aa6635bc494a6f90a6f33d2c5c7710bc71ac19d9d1","impliedFormat":99},{"version":"f5e7ffabb3a1e6d3c0c5039912c8a4ea8d753722c9a1e602911c100b7ec155ac","impliedFormat":99},{"version":"09757c18f7d7af16d89b75b643ea4b3a0e195d67a63c03755a07dae726e1148c","impliedFormat":99},{"version":"3b2b48dbb70d48112b34b4a73280990bdf75147d75659cd5280e846513abc75e","impliedFormat":99},{"version":"e6f905bb9525a266c16e4350cc4d4020689a588f2eb6d6b64fcea6d037a05977","impliedFormat":99},{"version":"4a988db19eb645816e40e48b945226f76de53f1299131003aabd37a013c22590","impliedFormat":99},{"version":"9b7dce8b944c33e20355a272f156582fe0198bcfa395d7082e6a66eefbe9ce57","impliedFormat":99},{"version":"13aa72dbe072780b3f936dea5d1c3094af3b6c186c24bb30d404540ec447b3d5","impliedFormat":99},{"version":"a280303c82a34689c9cc178068e6c012c6f582f80cbb6a75530bf552313090fe","impliedFormat":99},{"version":"715ae11614ac2209e2b5f3efb19b270603f8dbf20db559b76b02a47d6f3fd77d","impliedFormat":99},{"version":"d337b0c28c6f35442c1f88ff8071bcf9ef2ff381aa37fc30d323c6ac25e23708","impliedFormat":99},{"version":"425e7209aad5daaeeb4df06a718f8f177db5f0322c5fa94573ec739aa7f02deb","impliedFormat":99},{"version":"cab30bc9301ed991270375c5a0a011c897307e0e2158578e96f93b497121a3c5","impliedFormat":99},{"version":"00e136dc2bf5a5dd51fa6c5e9c02a7aff6ce4bd111e74b0f0d59c87494af51dc","impliedFormat":99},{"version":"4933c98fcc77ebbf6166152f65916cfbfd8f494bd14e6d8eca45ee231f1f2926","impliedFormat":99},{"version":"55b7f086a4ce7f130df29adbac36981bd64051263686af3271c604cd9591f62a","impliedFormat":99},{"version":"7d8fa714edcff481c66fcbd1c29b0856edb5591d085096c98613e9b701f55676","impliedFormat":99},{"version":"879e9c1b88c533389580e7178497ea55a36c95876fe1d94c6bf73883b6d29fdf","impliedFormat":99},{"version":"7c22b12c9c17dcc2317d52b83d8662c538fb337adc8c1ce69ebcd8f8394e2064","impliedFormat":99},{"version":"199e6d1a80d19524ea70d143488d72ef5e8ffcf6bbfe82dbed7f03d603948d18","impliedFormat":99},{"version":"691ca73f83cfe3262081875b1096744b1314860e6e216de3d242b4c76f8c1972","impliedFormat":99},{"version":"e43105a7b869d2963215dbbad1da3ba79108c3d5361df4e11d6c1bd967890bd4","impliedFormat":99},{"version":"c3d4d0c0dc57d5fed5a7af5ec433a3fac319c640aeee9ebd648066535cf9ff51","impliedFormat":99},{"version":"6c7d9793b68ed844870b77a5d4e6c92dc5d3b10d3c09007bb54b4baae99eab62","impliedFormat":99},{"version":"98a99b89bfbc2d9b7c3df85ee85f5fee6e9eb7309dc0e8b08b77b34ccb85957e","impliedFormat":99},{"version":"026567c73d9d23ce133aa2f27da3ee815b724f52548bf5579746f41c60723fcf","impliedFormat":99},{"version":"df6f1df7a3ae263e071615559e198d94c6fec45d33140fc3403eda6f57c5f8e0","impliedFormat":99},{"version":"5208ac9b4aead07702be291e7b6b2aa5936ed9ab8b21de6227cf351292246f6a","impliedFormat":99},{"version":"8d04cf9b77d2bff28760b0126105d3d5a34a1a1e8cc2b4966a9e1859bc55ba71","impliedFormat":99},{"version":"e7925d61f7792610f43a39d58dd58b804bf43d6071a09439d44063e35e5ac244","impliedFormat":99},{"version":"4768ed15015abc1826477096caf3c770ff266bee8136ebec5cebb929d6b9cdaf","impliedFormat":99},{"version":"7ab6049d6f98dba00f3e379c0bb149eae6d2bd3f8ead7de9238bdf65bfd5d791","impliedFormat":99},{"version":"b50f3a41e80fe4e8218a7f6c70257ccac4c3f360d318da72779ae1dcd0e787c5","impliedFormat":99},{"version":"a7b7342414754d0fc6a9560c08e5add2eaccb9570cd39c53a5155f368e695f14","impliedFormat":99},{"version":"e574749d4ad0f5b989632484891d00a6ef6104b3b014e9eb9bfd1f3c811b4a3c","impliedFormat":99},{"version":"e5352486d0919edaf6b57caf289859980db09607e225f70d21ac9b06ac1ef04e","impliedFormat":99},{"version":"23c0a2c86cdcfcbdfc95f11c89611f04cce0f593b5140a2e64d20556af3f159b","impliedFormat":99},{"version":"3cda756ee1dfe94744ff3eb6a11b7e5d41f502d0f8c46aae5338bc82cb929602","impliedFormat":99},{"version":"5a2db3c589431fd671ed605ecf0725decd9acf0e239966bd6d91eb2cb115a0ef","impliedFormat":99},{"version":"eb63ec99b754ca1947a7fbae5d7f461f8179f647bd0f665f6008443b7fc8fa14","impliedFormat":99},{"version":"5d4e4b5cb1a17707244dc479b464e537237ea4139b4235d703ea83a4a9287840","impliedFormat":99},{"version":"97bf370e78bc695d758542bbd2ecde489a61db5d678c07c85bffa91459343c37","impliedFormat":99},{"version":"e7789e4369b2c26d9a8a1150141b146932565ead086e2b4e32ef145325a8894f","impliedFormat":99},{"version":"0cd7b61de09c45306ffca7ca80fe784e56623cbfc99e1fa4aeee7ec924353d47","impliedFormat":99},{"version":"9862a6e0ad83a3b3faa226fc86fb1940b3a9183c0c29f5bddaa9b2c5cb813a05","impliedFormat":99},{"version":"d85d1d741211343158b4f64b4fc7d0ab347a643a3bb8f5a7c80fee1cd71ddb91","impliedFormat":99},{"version":"b30ca3d58261de8bfe7b599e9806d710700b58d7f7c7c1ebec13838bb1c36d76","impliedFormat":99},{"version":"19c817e65f0d10c305c29e01d8fb6defa09291fd67bd13034223cfcccc14f8fd","impliedFormat":99},{"version":"d72ed5882015b367986f5ec7b1cd58bb50bd1c51e941ff06729b67ab66d4342e","impliedFormat":99},{"version":"8e395378f1ac56cf2bcc7a2533cfccd2f431e45b91340418148c99e16eb58c6f","impliedFormat":99},{"version":"cbc884601dbfb8d72c8f8877a11179ab41a9bfa0b8c8b345184b835d09a29354","impliedFormat":99},{"version":"b3be68eab5f7e270ac467749dd01ca3203c572cfc511da099e028a930e933416","impliedFormat":99},{"version":"ff1f6fda8fed4820f48b922caecbcb6f74b81ef984908ca213d09463f9f7f937","impliedFormat":99},{"version":"e8c989cbc67a55209e74d695ff91a888e229d67f0cbbd8b49544cc07382c877e","impliedFormat":99},{"version":"838930a4a3fb335a78cb1d3c4d5b825ee7ef1a7ee2136315ba38346aae1683a1","impliedFormat":99},{"version":"883985e0a6918e642e1f416c6afd0d0e6e8033f3b29ea5a49cd808c88874b7cd","impliedFormat":99},{"version":"f126c52fb0b87a45252fb6397c2326e3f8c3947d01370c2b4d9b1d4d9196f046","impliedFormat":99},{"version":"99e693a698fe25a9924783102421e87d02ed7204369d0c499b207f4fe872f168","impliedFormat":99},{"version":"a70e24984ec50f9c0e02dad3f4b5bac149f10165420d266ba199e50fe45662cc","impliedFormat":99},{"version":"633e63e5fee829801ddef23112e30073ea34d9caf5f464d478fddee93e627475","impliedFormat":99},{"version":"0bba6e8d47afded79ee770ec90c46fec57cbdf69767306b86aa9b32e6f4dab11","impliedFormat":99},{"version":"66b7c3956758bcbad1eb7c0d4fb0d779323a825b8adccdf35ea7946eab476b20","impliedFormat":99},{"version":"16a1a5d4825dbf2991c5a8a2090dd84d8290b19cf541e93a7c4995b8037a627a","impliedFormat":99},{"version":"35f172c558295a38b28a149069d619f658efbc69ba9b672e6c853a489ba23457","impliedFormat":99},{"version":"3b2112cd844c32dbf3dfdfdf05e14b396f46ba6e61bb15d82374cc8aea2f272d","impliedFormat":99},{"version":"17e59b4b305bd2ad32bfaf62350c305bb45fbacfe5a4b0547369259d17775e40","impliedFormat":99},{"version":"c11ab5f4ec79d50b9741fe66527fd19c09cddde5efc4cd39b5a60df69c38b604","impliedFormat":99},{"version":"5530eedb6ac3365bfe20f117de0db075971955dd763eed8b9757ecb5b5a3e57b","impliedFormat":99},{"version":"fe847d09c50c98d93de932ab711c1569cccf7100c0c7ea59e4feaadde30ea048","impliedFormat":99},{"version":"a691ed743148b3133ff53977947c447c5951382aa75ff41926502195592854c3","impliedFormat":99},{"version":"00387baba842e4e7cf442edb72abe67bf2dc4c48b02a44175ec2d82a88847e88","impliedFormat":99},{"version":"b9f3a62b5a7b9cc2308ff957f2f9400431a484d44dd02b7518abcb08b387528c","impliedFormat":99},{"version":"1fd1e1b625fe20a8a1a133bde76da9140312d4fd0da1c18b27d23002d4d62243","impliedFormat":99},{"version":"38d0d481e741ca7daa25fd987f3443ffe351cd0a9c0b4bacd5e008c51f24850a","impliedFormat":99},{"version":"c07fe65c3f45091dba97d40b4ac07c390ff625a0dd92295d76051f0998618d80","impliedFormat":99},{"version":"b27a05e307131d13c3ed496e07dea2b79331aa1ac9571524fbdf16cfb3ebb1f5","impliedFormat":99},{"version":"0dc1ba6bb0e4fd00bae62403c87047bc5be4ab5943ebfacd5348ecf74c9b0328","impliedFormat":99},{"version":"ef60c0d7cd61055e5f06a6b76cdfdfe317460d5ce787efb48f35b3618bb68608","impliedFormat":99},{"version":"8ec7a6d53714b3c8d7a5e1eeb36108ea511cfc7fa4d7dd08229dc906568548ea","impliedFormat":99},{"version":"f84ef63eb5e13857e20ead0977940fbc9cb65da0e3705c04f0f4fc4326937c1d","impliedFormat":99},{"version":"827f0625ef8bbfa8997f91b8832626a4be0742fe3c9c6309cdca802c6edda8bc","impliedFormat":99},{"version":"1a535ae8a6cad0882e7c7189b21f2986dcfd5c2efd9950b5b04cae15179b27ce","impliedFormat":99},{"version":"47d40b96045ac0f52537cc2076f9ec1404fc444861191043c348d8afa0c6bd73","impliedFormat":99},{"version":"58b86a43ef8dd9649a6b67dbeb512f01f934ad78518ac89683927afed03b1de3","impliedFormat":99},{"version":"47c563c296e93315d38204ff70b2a3cd6788fdab9ba388791fa1c82987794d42","impliedFormat":99},{"version":"69ba23cb263a0916bc35457477b88e05eb35809c58a17449974d174a2aac6059","impliedFormat":99},{"version":"b1e445ab4f7d5c6d5094c3d6560539f641987a9acf82a0784b320e01c803af90","impliedFormat":99},{"version":"9e4c32ab790364ad67b078d569d273225d28a3cc5ee1b683e096fafdd0372745","impliedFormat":99},{"version":"3b9cf1e4cae113f06b84bcdb48dfd99a04b8708e4e4f48712ab94b7e1d11c884","impliedFormat":99},{"version":"52fd16e0b3f6582c3b545957606e1e82e8e7f666745a2c0a077eb5b534246109","impliedFormat":99},{"version":"28782dad7cc918112ee88ba23ac97f11a56c7e8cdaffa0978ca83751ba49b741","impliedFormat":99},{"version":"d707632c2500c4d4c503dcff2794e15c9102624ce70c9ad1662e396169290a46","impliedFormat":99},{"version":"798d2a4e66eb3726f8e07b6d94341a008ee974b8f86b8b98550f79b3b0e43390","impliedFormat":99},{"version":"6e36459dc4168e7f2c37a9f9e0971c3aa8840e753519781d1410c659c1fc525f","impliedFormat":99},{"version":"686a3bb7e54b8b622ec5bedaf1ec597633a9e75dba1261e4017e2e8e8ae47314","impliedFormat":99},{"version":"220ffd58c0b38bddd8d79d16b48aa3c71be8a0e8d01d45ad65396b453f6f5ad8","impliedFormat":99},{"version":"9fb07cf95a99e80c1c0462eadfb2b5d9434dd20817ef143ff67def7742b9760a","impliedFormat":99},{"version":"c70bfcb0d36b6e0d59a413e23016e402ad1d5afe2e5a74c1da3b52d271e4d4b6","impliedFormat":99},{"version":"55712f6dbd9fe2bccb9cad293fa37c294dd8bd9067566bcfab17e5596aa77bca","impliedFormat":99},{"version":"50f6da711079ff42be35995fa2dd810a629acee19248c4476ffbe1bdb324b7d0","impliedFormat":99},{"version":"be3455c8c848814f4b4f8602a1088411fed507bdff9a6cc9ffd176b9092ac401","impliedFormat":99},{"version":"16cec8c852d6b1cc27c107593c3087c901ce3e1f949b3560729d9702e26da2a5","impliedFormat":99},{"version":"1f0351b420afd408a267f3c3f578c788245d29d71da0809221f2f9b3dce475d8","impliedFormat":99},{"version":"b79b1fe1036d51b099e6ac6b3fbfb4eb36562c783e473e40c6cd2ec65991ecb5","impliedFormat":99},{"version":"b6964ec91330fd27e71660b777624e9342a2919c08655a7a65833324dc9797cf","impliedFormat":99},{"version":"5bb8a642d5b1f469421f30108f24d5443a83b2d59a385191e93ca650a9dede54","impliedFormat":99},{"version":"b76f9204bb26386bedaa9e14a23b3d9b1c6fae28c86f7fc484df7e5b74ae3844","impliedFormat":99},{"version":"8c1eea73430f19085f52a279f92371409f9c3c1f1cbc6187e474d0ff158b6b98","impliedFormat":99},{"version":"b288dcb1d03d232ba58b61e94124feafceb0d411013f603ddb2068702e5a13f8","impliedFormat":99},{"version":"a9ef5666ecbff227e17ce51d833b7c8822189565799aa860a60efa8a4f02ff00","impliedFormat":99},{"version":"29670032e04e02ef8a2172d3d637ef989b2896718852dc0d6735d47b1d8dbea7","impliedFormat":99},{"version":"c6308f587ff90713ac3832efae5b7aac09d6b067c2bdfac9637583a668d470c5","impliedFormat":99},{"version":"45c053bd25f8463d059c805283437436b640af4a28f9e10811bf1cd122d03790","impliedFormat":99},{"version":"bd4186ec52ee4bb1e07d27a1534eaad966bc9ba6cd65a58a63ff6a45632348b2","impliedFormat":99},{"version":"742c77f3420abf97cf51c552d99d0d935808b33c612e530ab54d115c513692e2","impliedFormat":99},{"version":"1b9af93c3bb53108e109446a0127b8dd6b9ff7c5096319fb6c4d63b9dbc8ec75","impliedFormat":99},{"version":"5cd660965157b9211c61f131ecd876143129cdd528e49099fc4610da0e7c04d8","impliedFormat":99},{"version":"a5664583622519fd735a5b89bde8040e93d11015e1559270008ec3722f546188","impliedFormat":99},{"version":"290d2e6293e262efd3aee13536268f8e96f31794800a1b68e392f27cdad9bc13","impliedFormat":99},{"version":"6c5e7e9f0c8361569abb01b323d939288ab7d2a16ec74962dd0981496a3e7ba0","impliedFormat":99},{"version":"386cf4e0b737544dfd42761ebb6159bc987b0747faff23af0b73b9003e00ee27","impliedFormat":99},{"version":"d7c7b4ae623b52e885e1aa716cbc22bad409d36b7204dec4004ed9c55133933d","impliedFormat":99},{"version":"dd0645217ad10dc8360c7d83bd6c6f36750b7df44c48116c883024dc8e125329","impliedFormat":99},{"version":"516294ca25dddf7d44af05033e856e5bae0fa1cd7a9bf255e601fb77b5b9f597","impliedFormat":99},{"version":"8e4735e0c080d09cc800cd41f646de9d759167292ef7cbd76a0eb57f8c4a00d2","impliedFormat":99},{"version":"0cdf249a81c98a3c6d79dbd0c1a65ff377d6879658aa3aeb8704a1b2158f2230","impliedFormat":99},{"version":"fcac8bc31559ac91ae0a65ffbf43779dae8a9c585f0e3c188fee07eba5444ca2","impliedFormat":99},{"version":"b37597091430552997625ea0f386da6b0ad725704274564c17282a06d77eb585","impliedFormat":99},{"version":"3aed368622022abff04f6298dcb1236b389a26af3a380ee8f06256850a3d99f3","impliedFormat":99},{"version":"be4068251ea5a2a50fb0e075ebd0b2cfc773bbf3f974b97b110011736b50efee","impliedFormat":99},{"version":"9223c5f0109bcc0868650998613d670c302abebde0cd2fc806e42a4b0bb5c9e8","impliedFormat":99},{"version":"0571ff9f961401db433c7c248b16bb2bfe65c0f09dc68543745c16f2176bc8ff","impliedFormat":99},{"version":"05626dcdef717ded5ea6fec10e3c6a6c7acabe92bbf36573470212d5d858ae62","impliedFormat":99},{"version":"64b324dd74b6cd0073181992870983522182d33cf0b9b3c1b6d503e4ba854b79","impliedFormat":99},{"version":"9e6970fc8d80d18a58c0189f4900317554e328e624da3bc78a954ea08b166599","impliedFormat":99},{"version":"cc1dc46db20468ef6189aa7cf4a8f4240897709753b2895e5400d20b6e4cd554","impliedFormat":99},{"version":"30986d936b4fb9b78344bba08e72ce06e731d10862061c2848b019d74ddb7eee","impliedFormat":99},{"version":"12dba10fdfe2dafe7f69c960da3f694723d82f2856ccade9926f5d04ce16e975","impliedFormat":99},{"version":"06a1c3af923cd00e69142a78418edb82c211cba3e72a91be52ae12bd845550d7","impliedFormat":99},{"version":"13405921db76cd2ca52f50b8dc8819884bb0fdbec7feaa8b0e5256fff635b007","impliedFormat":99},{"version":"474fe5758f25fa31f93293163386bc120cb3a859628146216c27d20f9fb4e11b","impliedFormat":99},{"version":"797a5c56e7b68fa7ddaa736ea0f84903a0280b3e24f7edc81dc65d59397c1dbc","impliedFormat":99},{"version":"13144ada8c1a653103674ae05cc08441800d8db5ba8efa624158528eede15884","impliedFormat":99},{"version":"42bbc0317d36df458e7e5cac3fe51a5747aefab3abc5cb3f238a944d5e32a91f","impliedFormat":99},{"version":"678842cc3c2c69a8c2fae8353656a1e5337828124b7b53ddf41689876b70c57d","impliedFormat":99},{"version":"f0e3459d79ea7a69f7a334151c38ca830c4541a030204e44b680bb47cb357bdf","impliedFormat":99},{"version":"9ab46babfc3d98ac7a31ad70b4212562ad36311d9fa235871dada95e3379fd09","impliedFormat":99},{"version":"92e6d6a927ad3d48d91b7fd3f31dda6e078cf03880e0bbe9cf56abb5919efab7","impliedFormat":99},{"version":"5b61720af63c370f28be29a1e6b60eb3d3cb6df1c169e467ef4241f9abe68272","impliedFormat":99},{"version":"f622b88d462a91a84c41747a8c097347cb08cdc26250ee5c86bec180d4587ed1","impliedFormat":99},{"version":"b9688f18464d0182fce970cf89c623191997178076478d5bf5604724a73dbcf4","impliedFormat":99},{"version":"811068496ebe65d79774a99796223a0ba3efe04be587f6ad9fb2c71865d5fd75","impliedFormat":99},{"version":"1a42ecff9998af3ec2d7465bedcf10aa76420768fd31143fcf0808dc7a3630dc","impliedFormat":99},{"version":"0ff2355b4074c3eaee36f435bcbbfdbcba07ddfb4aee5a2c37a2eb077fd024fa","impliedFormat":99},{"version":"ee053e4fb378dc43221a892e05dd65c664cea6947e5c3819ae41742643d70743","impliedFormat":99},{"version":"eb1359bae2c2ff3dce1258094f234a8de89b7b5afe89bd73e725a46558fc6aa3","impliedFormat":99},{"version":"73c08893e5e403971e0b2dff8f14d9ce3543b1a821c0d2fb8e5ac807a5d14603","impliedFormat":99},{"version":"b886342183fcbfc5fa59216cf405970b992eda93bc8a89094e1d40906dcd399f","impliedFormat":99},{"version":"5170f383ccc3d8431414b298aa1b9fd8f88f9f6ad0f6b40e4f78b5ed98d0f12d","impliedFormat":99},{"version":"a3915cd0ac9bf5441edd5b60f3937d89dafddacd7c8d5f323a279f0647e95712","impliedFormat":99},{"version":"77fd5aedd61211bb0978c3e3763876b18c55b73df2da0d7e17e43a13b3a1a617","impliedFormat":99},{"version":"0138f7ea01346ce60e52fa324df54ddfd6c9c31495fe74ca071bc44674287f26","impliedFormat":99},{"version":"95299ea6874a7330630d89d2ccc3aee12945d0ad632c72a168513f491ad465b0","impliedFormat":99},{"version":"8e11782e3f5c78b28558dd617d0d2a94a524b5106e0e8a6826dd71964cf2b172","impliedFormat":99},{"version":"7238edd71a373627b2d4980472114a75a861fdc5a66efba81e6e61fcb40d3c3b","impliedFormat":99},{"version":"02c11188c7c7ce94d6dce4fdb002d717a9b672ea1293b59dfbf9b54345ea9dc6","impliedFormat":99},{"version":"3cc667806444c6727c1a8106fdaf37c897c25d6a0747fea8cfd817c275309494","impliedFormat":99},{"version":"ed78cb361de97e537cca46c234c5f0bcbbea8a77f88d3270142ed0993373c159","impliedFormat":99},{"version":"e15f2519cc04d4a30a0543a349ce4d4ed10a8cef76e8bb226a624d75b7b24a7a","impliedFormat":99},{"version":"a8de68a1e6c0c3405cff69a6a82dc596d576b967c9b925c494ba30f8782193f7","impliedFormat":99},{"version":"7c6055ad026fda59ef8ac871f9aebcb080cc4ee084af8feb3dab392e603fb9dd","impliedFormat":99},{"version":"3227e142b26a6ea9e1493c950c238446a8d0297b093c8c95261d4f3e63312237","impliedFormat":99},{"version":"8fa71f3316151cd87f46e0f50aecbf39ba424790904b6dfaaec6fb3ad9226c8c","impliedFormat":99},{"version":"f2bafaf9d83cefd7f55bc2a480d1b5ec302e7615b30642bb00bfbf58b567a61e","impliedFormat":99},{"version":"a605659c69bb74a59b480f20bfee716dca83d289a814ff696273f71aea4c4abc","impliedFormat":99},{"version":"5886ca453462c07e9a2a6a835172a5f2149bc2b713b618fe452a94a126eeb36b","impliedFormat":99},{"version":"9f1b4ed0bcf465a6390e7c3760e0bb339f3d61c28e78c95024a3afd3ed81fdcd","impliedFormat":99},{"version":"5ef95b011a154332189243cfcf622787a41f3c646b0e3efeb347006064b91197","impliedFormat":99},{"version":"e6eeef06ce02234a927acdd50fcf396b8dfd8e8ca34c082cccd253193b4102f9","impliedFormat":99},{"version":"a5c6769e0465426998fb1ccba6db4a008cd9fa4a477a8bbfecf5b130c4031734","impliedFormat":99},{"version":"d29f65daae852c87855413712c3e9e81abc8577579cd40aa28789910c149c8cc","impliedFormat":99},{"version":"d4c7c425aa0d74cb74b92a6ccfa740431b48d3240ac7a2219556720a107ded33","impliedFormat":99},{"version":"4de384bb706f41f1515883a6d30cd1eb5d149729a79b1524e1bfe86acd103d68","impliedFormat":99},{"version":"b8f2296cdc94fe0a235c1c73a2f97d394050ca3d74b6b45b07b563a0c2892dcc","impliedFormat":99},{"version":"0ff56c8f9f2749a7c23c130450f0045a19ebdeab9f94f9b6f051e2cad105a1b8","impliedFormat":99},{"version":"e5aeb2f888cf51e86a5dbf26f710608140d6f85847f935b5dd218fc9b865d820","impliedFormat":99},{"version":"f111b5055f9e48983310817bd14978fe8b44600383b2fe0f0f8f82c501034f96","impliedFormat":99},{"version":"d0b4fe6473d64b2505e3b842592c6fef0491b2ec29d3d43c74289428e5649997","impliedFormat":99},{"version":"83e50a8f0a133458f603dcfc3aded3d8e6da48ea71d3a1aa5383c71bd12dfa51","impliedFormat":99},{"version":"4ee9650128cc8493c1cf7d0923004c0c5e6ef374f838dfbbb5f510eb9eff21d5","impliedFormat":99},{"version":"9ffc8307fa2cf2c934da7979c96884df4a36b92b54ca97325494ab2be78fd8d9","impliedFormat":99},{"version":"6c71102ccf27db42765e5a9369c36c4aacd83a78883df87ee103d11be3d951c5","impliedFormat":99},{"version":"57ae79de0948c54c7a75ca0d72d0c360906c1dcf8e6c31f0da121e5a9d382717","impliedFormat":99},{"version":"55cc4ba04c0965890e2e46a092c7b76e92cc9812a12a10d510e75047e5c2edcc","impliedFormat":99},{"version":"977c1704104f936a37c41eb6b0d24cb413e20e62337f7e2be588d3ba55aeebba","impliedFormat":99},{"version":"c75bfc4a6eb3b39957d05a6b9535b424a98bff9f27518e39a7dd4830ceff4eb1","impliedFormat":99},{"version":"f8b79f53b95079b96f81ce308a927651d791c2c3e5f32c103e90fd61fd58d3c2","impliedFormat":99},{"version":"46f6e8a12611611d782904154ebda6e4b6596cd026b7c09e2c145e418fc8a2b0","impliedFormat":99},{"version":"a4560c1de64d671a8d837a6f0313669a7aac4ad7d0efa2be1dfba29f8d61c5f9","impliedFormat":99},{"version":"f193467f1cad8f2384912bbadceea4cdece962b9033488994a7405c29a623d8c","impliedFormat":99},{"version":"a846eff5c1eccb86a3ccda935896a80eaa2beab68c64e68c244908c86ed87906","impliedFormat":99},{"version":"a97588cd01375653ed51d1dd9bdfbd30467b130ad60bb5b6f981ab2170feed3d","impliedFormat":99},{"version":"584115df5500463c3fb9102a3a74bb4cc6a75a9bf6300701e1edf81da292ae57","impliedFormat":99},{"version":"4428ab19274a44693215f4f4195800c8221e1ac8a5a388ea534c4e405fac5f25","impliedFormat":99},{"version":"5ea28a5de3f28607387d210754f9d62d2cacc86684e89df9e74d412bac974348","impliedFormat":99},{"version":"a496ace7d44a315f014ae2711927ff48fd4e3583f4a1e42df356c37b2c890ba5","impliedFormat":99},{"version":"814ac5e9d9bc60c105e022e08d3a7590a5a76c93fce1572bdcc574f25e6dd68d","impliedFormat":99},{"version":"3eaaf422f4a8fd066e5c0717382129da90b5699a86f3326057a2ff4abee0c40a","impliedFormat":99},{"version":"8ec41716dce70226a7069735300ac20691513226c614b03b1b1aa7bf4ba3b2df","impliedFormat":99},{"version":"1ce271cba70878af1e987d3a93fa539c9e35facd9b70580f738242059416c010","impliedFormat":99},{"version":"9be30526f3d636f4b421d3e06983744be0b4fe245025887ba5a032cac68c2e37","impliedFormat":99},{"version":"990e4693b03502adc4038f04ec6a3db2458fa1a998edb9edac75141fe6e8f9d4","impliedFormat":99},{"version":"59507e67ece04e5a994907e68042d704641ae844108f8af9edd82350fc52dc02","impliedFormat":99},{"version":"a36d1226856f16d243adff16b2f5603ea245f505af5a85d5485ab275ca946b1d","impliedFormat":99},{"version":"0baefe65a675b833470b248451ae56f35697581018bdcd2880e4031cdc0cd6e0","impliedFormat":99},{"version":"2ab5a9dab4e1c3780ee8c7ba280aceae11c699371178c253cf5a36341a864af2","impliedFormat":99},{"version":"a80518638f84ea8a15c155eb5841341688ec6dc8a04c5693281632dfe555c3ef","impliedFormat":99},{"version":"27ba80c04731d0ea2f37d6b6f5020e45e60396f5c2f4666e57b03238ef0a676c","impliedFormat":99},{"version":"26ad6385782d8b51674e22f236866e7e08119f50a131cf5a091c8c576202f9e6","impliedFormat":99},{"version":"b8ebaa198a03eea15385326815ff31a01cb63c08bf69517e3ba4e1c8296fd14a","impliedFormat":99},{"version":"42e3bbbb7255cc27270fa12d31aca9f11abb56e985d30c1bde3f978dc01d15b5","impliedFormat":99},{"version":"5cd09527c5bd0e6a9df18ee2a8ca39e1a1af60658e50adfa3b2155c09f731a13","impliedFormat":99},{"version":"1e470d86477091005bc41203654b0f310ca7d45bc0c7952f8f93edc6d0613397","impliedFormat":99},{"version":"d09c441b12602fffde7cc009f9e815eda2e8c85a7ae1fb9dc9add975a935a4f8","impliedFormat":99},{"version":"f3590539d69e5d3c824a3dbb93015c58fdc8d6b90abe7496c770a32f20c559e6","impliedFormat":99},{"version":"4fae33c695361a6438082ebde9374a3779df07ea561b1ce08ae4f514bc6520f5","impliedFormat":99},{"version":"88a1b15f496a6c998663e6486b78ebba1c2abda9e220fd8e377c11dff3e4e836","impliedFormat":99},{"version":"654c457deece232e59f6d73733254cb78bf6b043d9d3c43abf0fcccdb245838f","impliedFormat":99},{"version":"45a99b02acd1f5580b93e48b5c610a60ebbbcb075928cf80cdc9316cce1bf840","impliedFormat":99},{"version":"ddad6719d075ea89cf7434c7a318b69d9bf26c330465ad1315c8ac4d059f7270","impliedFormat":99},{"version":"8c867515406eda8230bc6c852eff20073178ceb2ce94d6b9d0f5678ed13c0b8a","impliedFormat":99},{"version":"b430de30fb510ddbcead861351793cc62ea9d97ca3093dd202d349ee96ced493","impliedFormat":99},{"version":"f4080510cd7e9c65ceccc843f98f68a31fa74443ab7154515308c104c8433a14","impliedFormat":99},{"version":"535919c7119b5e3da3211594c3542946e1b9e5102d78614359cc5d90a78c6a06","impliedFormat":99},{"version":"ef7e1df5f97be321ccccbc8d0cad38c301bf55be0e5528d20d4e4479ec7021ad","impliedFormat":99},{"version":"994bb550d4082528038ce02c9c9e63ea278a31094dd526d91e559990b3ad17cb","impliedFormat":99},{"version":"df03f5b8e177d1c904928545a74d3831c90bbf653fbfdc29241b3ae20a5be486","impliedFormat":99},{"version":"a7d3f59a29ca31f40ea37349c44a7441eb10f1bed068a011760f1204dadd7a23","impliedFormat":99},{"version":"1e7d696c473c1e054caf2a8cd2759d09f442fac69473293ab665d6f8c714b774","impliedFormat":99},{"version":"df9f8f3d97d404cc47e4407b1a5c21c223b30fb6f1f74af05da01effa0cb56d5","impliedFormat":99},{"version":"5e923de3cf0d71e5d9a5ad4e90d4643490c5ac5b3f58ae66bb95f21dc04d6831","impliedFormat":99},{"version":"b486e2e5a4b514d179bb1503178694bf9560ef6b7660a027328b9eed5e73a627","impliedFormat":99},{"version":"d53dfd573a2464c977c298816c36231a62ae3dc27553e27a3c71f6665b269baa","impliedFormat":99},{"version":"6fd3ac9e256753431d1dda6b26de5e0822aa85eec20bc6c14436a177f4279be8","impliedFormat":99},{"version":"a6817b104cff6630183738048e9e2e5ab6c5bbed9d46bb528f80258b0c4ff757","impliedFormat":99},{"version":"40319f136f28e2db970e46b7e72b7bfd5a772a0df98eec5405c47bd6c9917c9f","impliedFormat":99},{"version":"21baccbad8315ef36c9d7f50048abd08ba81a3afa0712ef258fa6c061110e0e6","impliedFormat":99},{"version":"a4705cf973f4d37ce92c052828e2513fa023ccb452f94544931ba2f917b95f56","impliedFormat":99},{"version":"02cb56c5871a710fbb3f0080324577411609df19bc17200156e46a44fdf8d27a","impliedFormat":99},{"version":"57dba29ff984d0c81bb177bdfa07ab0e57dda6dcaea83067ad911eda34caf8b4","impliedFormat":99},{"version":"e576d9071ca12c411674ca573eb789590fb5604ae8037a2572886cfc293282d3","impliedFormat":99},{"version":"4d818da244b409a389c73e3eb75824fc0381b6e16ddaf80a8d15870c597a0195","impliedFormat":99},{"version":"f66b41b72c893a7d90bb8c6399a737e3965292488394040e509496a366edd1a4","impliedFormat":99},{"version":"e1b15aaae981aabbe7a8df2826f4c6f31aa0afdde1e23d15434e2b221a851887","impliedFormat":99},{"version":"10e6b4bb2c98b99ad66f1be41b2597076ada2dca513547292346b211caa31f4f","impliedFormat":99},{"version":"93abea381fd60a80fd3fa282b931d3522bd1e4caabd7dba49152f8f365106d82","impliedFormat":99},{"version":"b771ec60b06611363dd783f8e323f87d9c9432aca465f3cd3d39a6a4bcd79ade","impliedFormat":99},{"version":"baee3182e5624f4bbe9bbdb3512544bd77d07a08e803f36b898c292cc4650de6","impliedFormat":99},{"version":"028de137173a15dd541f16c8fe03c3da3f11a27d0fa1c58c336be102c440db89","impliedFormat":99},{"version":"be06143be469d3d0d5ce6a2ef95e368ae8454bd498d0c0b0be43aa4a6ecc88de","impliedFormat":99},{"version":"6b39082cbf46f9c0e56e73efefea459d85e9431ada4122755e51c4fdb35688cd","impliedFormat":99},{"version":"35ffeb76a74f42b609dba599cc110ff974c04d7382fc86d903fb5eb08787cab2","impliedFormat":99},{"version":"71ebf7cfd3b6d1e628450c875307a3c2b69aa9e94687237bb775a57f25cf1361","impliedFormat":99},{"version":"c0bb78950621e72b06d7e288280b6109885c5f7be8b583659d65e49d9af011fc","impliedFormat":99},{"version":"c6fea1f34d6a312a51ead56d2d9dd487cfe2ed243885b2da89cf51c1f4a3d811","impliedFormat":99},{"version":"9789a429c5349144946f1aeb7578a9cf517555e7bd2a5f8fa6889e8d58a8847f","impliedFormat":99},{"version":"e8388203c62a6cc3e00a4497fdf292b96954c99aed9621197aa7ad3a9845e3b8","impliedFormat":99},{"version":"0e7e5b08261dfe5ccdc9d9cf8b2aea22fa5345f96c317f03f5a0977acbb99e32","impliedFormat":99},{"version":"db4157be7d269a6daab5481918c15fbb5136765c3b8bb49489d3ee9626491b4c","impliedFormat":99},{"version":"b3fbadc1bc66794f535b892f5523ff3ae360d65ad72806bd24ef4602ba81c2f6","impliedFormat":99},{"version":"1f24cff6fb79847abba14795c5778f4cb1f137efb4e353e0a3fb1945e725290a","impliedFormat":99},{"version":"1056e3bf6369fe009b40647744c8402df6d0ba1f2d3a462a2aeffc0c83027934","impliedFormat":99},{"version":"b0da0c17082d1fcd42ba9a147e0002ce2f8e7fe8d7d1e2e9810b14331ca10cf7","impliedFormat":99},{"version":"f8a0dada5366f74f29291c9e6eeea48d81bf3b6dd7fed6aba386e60ecfaf2057","impliedFormat":99},{"version":"c8e93478ba85d6a953b7950a530a3228fd2b0663e76a42551fcf29599e5ae269","impliedFormat":99},{"version":"4e4a901be180e8174ebd0115037bee49eb8d0a5123e81f3a57b1b230f2fd7bb0","impliedFormat":99},{"version":"f4fe5a6412f5c4c2ce54119325f77804a5ff523d5e5d935e8a3c34c2d55e3a6f","impliedFormat":99},{"version":"da16b5d7e423e5e0096fce83b5703fd052ecadbd39573985baeae406a3ff406f","impliedFormat":99},{"version":"fd214d4558f949dc7cd55d2657db975a9272ad99a0a02f31af2100df72b0099f","impliedFormat":99},{"version":"ed2438ea4315e3db2767e79082e0066845c46ba040724ecb49b82d0597057987","impliedFormat":99},{"version":"e086358dcd0e44204dd616f050029b80e85d3df4e454d772ffc1580d2c42205c","impliedFormat":99},{"version":"b992f4b97e7284088fe8cd40efae6ceac1271fb8644173ff6015fd970d916818","impliedFormat":99},{"version":"cdcd99a7a4fcb0aa03586e374cc03c29edf192d79210d46ef2bd97a4e2ef6bcd","impliedFormat":99},{"version":"dd1a8059730f96916cceb5d6c734f59239cdc7aa6f5b0ee70fddbdcde89b1da8","impliedFormat":99},{"version":"82d3606bbaa51acea77cdfdc2e3199c4686ec2c6f71927972ea30ad6fc7b4a62","impliedFormat":99},{"version":"7588bf02783961f2b6871ecc6e9c60363ac79a0ea63ddfe4fffdbdf98a628a8b","impliedFormat":99},{"version":"f4ec160ed91e9bc5654099b8c9fa3c549e731c7a3f0de8d2cf14982dd126d1eb","impliedFormat":99},{"version":"330874360097f09e8cc4ab9c19d0c29ceb099ae500ab5d6461c9297b8c3cf0f7","impliedFormat":99},{"version":"1c4da43c55f396f8fba432a8827eee9fac8acf6c1494a57ef48177b57795abe0","impliedFormat":99},{"version":"1ce9891c6838a553f39b2ddc6f83075f3850a512475af31beef974f6f7cb292e","impliedFormat":99},{"version":"7911c13a1992969635e30dbc94eee146269dcfdd3e07e0e265daf5caadbd5f0a","impliedFormat":99},{"version":"6701c151b37be87bf02126312f18e65b3d91a2c20a7377833d33d919fd6df9c6","impliedFormat":99},{"version":"2a2283d33979c27b027ebc07e65a8f09d2f307f7a9efd1e07f0b29d88f787aa9","impliedFormat":99},{"version":"3c97002cb68bd560118a6c8cbba6ff2509bd73d87dd713edb3acd83e66bf4e35","impliedFormat":99},{"version":"664417e248d43d27f8a04b9ae5e1f3ddeab5aa6d9b41284ffd366705f18f4885","impliedFormat":99},{"version":"019210cf7ccaf627a430edae894d25b312db658fc0f2c282c36d04920b3f5ae1","impliedFormat":99},{"version":"a2ffa2e737e5b56c638654d4cf91fa6724b1b95c7be50a82b7478dea04ea8a7d","impliedFormat":99},{"version":"09abbe2cca1bd3d538def48c19a2fe62293bdf1f97504a52e26d40a3898144c3","impliedFormat":99},{"version":"3649547b460e5c107b12f6f29be60d9a81a59fb3034ef197979a694c687e77f1","impliedFormat":99},{"version":"f15d3906d25d611062b5c89d3145dd4a2ac60bf68f6f5e7f4d48d1189e474f46","impliedFormat":99},{"version":"6661f2e5e07a92e4267191cc689ad3930ebcc316cf44221ae8eb951e3d4612de","impliedFormat":99},{"version":"076c0467d216ed21904db5ac256da6a4fc1115cb870857be9905446da9e81341","impliedFormat":99},{"version":"1f659ae61eb9ef9148eafa4ec4171525da55c35a298b720f215ab0a89c045b8e","impliedFormat":99},{"version":"91753dc66ca2ba7e922513c6d73c9dbd3d6336ae1ba310e2d0520c99b93b99cf","impliedFormat":99},{"version":"ba087ea4f7c6bd22a19cb28e433a592ade91ebdfaf0d37f053051b81b3fd194c","impliedFormat":99},{"version":"490f6527eb1504768f00b4026ece4d21edd1949d5eca11bb76132330b5a8a55c","impliedFormat":99},{"version":"30c18c79997adc72842a146fef84249191bd8ee28f3456605c014b1e316dd7b3","impliedFormat":99},{"version":"fbd2d2f4374aad855367713ffce22d19c87e9483da420533084c0c734df1523b","impliedFormat":99},{"version":"b0e8320ce37a2a4f1cabd3d9c3e7c72065b847fba43562fa7680e436bdebea3e","impliedFormat":99},{"version":"9a6cd826888b63061bda7c34e6bdb871e7c0b01c344f15fcc3330cf5c0f99594","impliedFormat":99},{"version":"36101c7781871da39fcd8939e8faf083c606a896553fdcd7eb4b2f7c6ec47a43","impliedFormat":99},{"version":"ec266fef2d1fe9b7c49ae608b3ac60c4713d8d1cd2073c92f5db1a73a39556cd","impliedFormat":99},{"version":"34bc73c461e18692931c22a7afb38d308f7deaad9f21de13ea54dba0ca4336fd","impliedFormat":99},{"version":"574f30981211d1f1fdce83fad7c9b093ce986124480ce09ca871633ba6a17489","impliedFormat":99},{"version":"2083cc805a15babbf2d0abdf9d702fa6f75711590bae3fceb699ac26a4c76621","impliedFormat":99},{"version":"c51825d37dab66cb975c5442706fe6451b9213e098e3ff5f846e5a77539a7421","impliedFormat":99},{"version":"9068ab90549e1a5c0f165b9798650d60bd38e7f8615c05862edcc7d6dd10d5df","impliedFormat":99},{"version":"9def60b8c5edd45e81d01f89c7717c92584cb821b0fb14fbd025aa10b0ab3bf2","impliedFormat":99},{"version":"c7a0c488560b1dc8baa8c7f399cc474a221f7cc7b7380d0fe6014cb35f807840","impliedFormat":99},{"version":"81393d54e070aa48685972683871a707f160f408622954ede5d2a2f34ad332df","impliedFormat":99},{"version":"238e9e20c91fc4ccc94d52291ecef44762188d515f649095ed0ac99d59ff4fc4","impliedFormat":99},{"version":"77da76559d39664d9f60942ae9c12082b4fe475a67773bdae73073fd11b3888d","impliedFormat":99},{"version":"cf1189bc5bf2286b630f33be24872477888ba5d270b763e8f240a20e0fc5957d","impliedFormat":99},{"version":"f8081297cbe7510cabcd2142cc09294c076194a782ea5422c1fa5aa02bb662b6","impliedFormat":99},{"version":"1426f595ea21e6da826b69bd69c046e7443a77bf7a4434a9183297f46aabe509","impliedFormat":99},{"version":"79a74245aa7b853b8b5b0c249243529340426691807c11697106ed49d8c96381","impliedFormat":99},{"version":"e849d81b6db10ba5f8b89b25ebe91fbc005fb531b8cb417b6dda49b5263bf485","impliedFormat":99},{"version":"b19fe3a95a628557bca5b5ba33377870602b9c24bfb4eef0085fa0f04bd8f7cb","impliedFormat":99},{"version":"ebc64c6ca9a2f7942c0aaa51bac5d44d5d714e562693415a158dd409c2959de4","impliedFormat":99},{"version":"fdc0a465ffda280fc5c52ef5862816082f737f07f24086d1899b3b90ee03581a","impliedFormat":99},{"version":"e15e7ff9e28153e0c1c0589f35d82929e7918cbd60436c837c5604288f1572aa","impliedFormat":99},{"version":"1466a57f95e268e08d94cf92a030e469d4e6f8c180951d9c0fa453ab0a38e1da","impliedFormat":99},{"version":"d234d63170c7f6c82460feb9e8e7df14e38a694e90bb780f5054081847e8a971","impliedFormat":99},{"version":"5a353f55cd755eacd87196e6d14e8e8cfaaed147b08b19fe7e8721e3cff7e4e6","impliedFormat":99},{"version":"ef65b08cb958fa2bd14dac358334d8f500a3583fdb0f5d0d36eff66c6d2926b2","impliedFormat":99},{"version":"bc23a8c1d5732b76eee7581bb2757a98cf02048426f3a6f94632ad25547848a7","impliedFormat":99},{"version":"37820ebe50ca6e567034fba5022c1b2b35fc2dd748ffdab1f6a267696e041729","impliedFormat":99},{"version":"b7f56968a5aca1b41d82fd99d0859c366bb1e24c21610573ac69717c6c69cfcf","impliedFormat":99},{"version":"90889a47a83550ef4d6bb79f61a46f790318a5810874848df91ab1ce83bfa5e1","impliedFormat":99},{"version":"09ac02d7d979b4bfdd333f1133c60731f8e02f77ede93a58eee7c2e2894f8ed0","impliedFormat":99},{"version":"3a9e9b5c7ccef9aa106e8d38d624fc1ef7b61023f1cc99e49e0d34d806717aa2","impliedFormat":99},{"version":"280ca67f0276359a04f91526e7904723c634b8307f36e88b8ed1d55174d65646","impliedFormat":99},{"version":"56380192c5502ce3cbdaab811c03293ae0a3477dfec5ad999e0561c7a55cc049","impliedFormat":99},{"version":"a75dbe057fa7121e02effb45fab47e3c12d43063707c633be18c92b0a863a37f","impliedFormat":99},{"version":"813ecfd69412e80b3dd7bbf45217ed1f76d70a939457bc4213a38db216bb6e4c","impliedFormat":99},{"version":"8f4accfb1ff30808a2aec06f15c493e88683a576c5ef4871388ce7cf0dc80da8","impliedFormat":99},{"version":"1cfb8467bd39e186a94ead6da6a9549de18583c998a3d6ca7a7bf92922b7cfe5","impliedFormat":99},{"version":"095a8f6c16d323c4f1899434f895179bf3a318302fbbde8e25a0caed37832c41","impliedFormat":99},{"version":"e68ac7298d9feab31b040212b8c81d47146c89e2f0b044078413ab84dfabe024","impliedFormat":99},{"version":"669aa01bd96f92b0fa1f9f5dfdd7b974b8823e876d690d2aec1c480b70d2d178","impliedFormat":99},{"version":"1ad942280beb8fd7cb99508d5ec9ba3c0034523bd9ac8cb6059cbe9545194977","impliedFormat":99},{"version":"4429304845afb8cb868836562673380e3926380bd4600fa7a0a3ca8ef546cb7b","impliedFormat":99},{"version":"55d10877f0755054ab010faa6273fd064165339b9ff24e9f26a9a57b68a24c3e","impliedFormat":99},{"version":"510ec596cd8c9dc087ba99465428d24b027f504df7d399d97fc971d0aeb961c8","impliedFormat":99},{"version":"59cd0cdf1fa93bed733d6d84b0d5147501d87bfae8ce4668b4b093c22e16c563","impliedFormat":99},{"version":"854a4ed2d2ce9680a275cefab3ff654fd76627503ee311d19c0e2a25069627f8","impliedFormat":99},{"version":"edc84564b1feb469da3da5b7e1efcd6f48fa2e04f006f07aeef4c6a5659c03e0","impliedFormat":99},{"version":"b076daa179dc64180ee9538fafa4fa6e5796a3a81539eb3349737ed08d57e2c6","impliedFormat":99},{"version":"80c166471e9529f02214e75d8bb590870f822fba82a3f32cae59795e26d660a0","impliedFormat":99},{"version":"25aa189f1265f4674b7fcaa43004d7c7cbc46b6e1f3460fc413f3cac61c77da1","impliedFormat":99},{"version":"97b2bc30456543136698a248328f804aeeae10ff3211f5368e96bb9ddf532272","impliedFormat":99},{"version":"c9f27874d3107b39c845a4380551ffcdd721246db1c82bcf43cad86d66ea1249","impliedFormat":99},{"version":"451418c8195f8533477ee9f08c4642f7a8ffc9813d73a747d77fa70eeb66a79b","impliedFormat":99},{"version":"e768ad0e15d014a0a09e47dfb4c3d6c9d5247b186ec2887f07e984eceeeadeed","impliedFormat":99},{"version":"77d3636c84e22e5692cea961ba0957d687aecd776ca48cfa5f1c38f3fef6ce26","impliedFormat":99},{"version":"119c30d96ef567d5eb44ecf9caeeccdfe4b4af9321fe687d10b238f64a1f16c7","impliedFormat":99},{"version":"a4191368ca3082ba97bc919f8de837e29cedd508f11c20d559421ed90f5648c3","impliedFormat":99},{"version":"7424fdb26b9156029a3d0282191a16576bb1656f7e77c1da961b9e44e9fb502f","impliedFormat":99},{"version":"94e8a85d1d6ca2a4fe056f231dca96691acbefb9b0273ee551109bf69ce53f11","impliedFormat":99},{"version":"b78d4a5e2cbc7f6b244155da9fbd30d6016d225739abe750b47d443ad0057289","impliedFormat":99},{"version":"289db195422725ce6e021fcd4ef250c4702248355515ca1648227723a98d618c","impliedFormat":99},{"version":"41f3b546b4f1810ad4ae11e8a32664e70ec2b118d72e7d6cf04c85ae29d8a43a","impliedFormat":99},{"version":"ede452edea60a6ba0214f4201f5b959d57e7c26a743a5936a05f182a4bc55930","impliedFormat":99},{"version":"0a52552297c1d0af3470ecaa85e504b3f87af7fb327da36b5ef63ba06f135e20","impliedFormat":99},{"version":"ea7dbb28b1ebb092c8f974336a33caee5b29145b699ac1e8ce765979790bbb35","impliedFormat":99},{"version":"acc64e8177b7e4fe1a2545bbdf2875a89852ca5b042471fb05901c5e2a6d8fca","impliedFormat":99},{"version":"eea6ac739630bfb73b2e59bdd90d6f278a7ef0228f09525fd6adaf09d90f7280","impliedFormat":99},{"version":"d60137c38ec70f4d3495e2cf71ed73bf75f405f78c5c8644165bdfb0d9eef528","impliedFormat":99},{"version":"b437a4e1ad5b26d9c0d740ce71f956181c74bb283abb0d2510360ff065b0ff3c","impliedFormat":99},{"version":"7639369a2b3ad9cb82a464144871c8f90990443f92320c1fd3fd777c2ff5bdc3","impliedFormat":99},{"version":"c058887683e283e99658518eafc8ec08754f5b16792662b09a638d5a317a7719","impliedFormat":99},{"version":"1dee7843ead6b1135839649de81ec125fa95b5c7c80c52b8a08d8fb7c40ece9e","impliedFormat":99},{"version":"e3d7986bd6b3e8949cf921f9a50fd955da64d399dbd817f5394f772f7d52b6d6","impliedFormat":99},{"version":"4115d25268a762ed4b047dd9d5e29f46687ba84049cff9fb4c68b18d60e910d9","impliedFormat":99},{"version":"1ed9ce51e9bcac81f9d2c4d27ac2704c0a2267917fbd3dc6d207413cd7a6b272","impliedFormat":99},{"version":"f13cd5883699bdc863db77c15ba94050548e23e98fa5a5b26455fa105fd15549","impliedFormat":99},{"version":"008f7e03cecd8c3a12015053fb8714b8d738d35a35ed1bfe4c4b02be0116b89e","impliedFormat":99},{"version":"d86f6bbbc83f4d8944ffba72ebf5b486afa462fd26b9e04fbb199b4d2dd920c2","impliedFormat":99},{"version":"4bd9c7cecc7b653a34f633729cc1a5a954f95320f2dae63c48e8416a625b36de","impliedFormat":99},{"version":"765f3ebb07e1f7568ef6ca14d2e7f80900ac5dbab6dd25872f16e23fe5ef4d34","impliedFormat":99},{"version":"6cc361c360c6fe2723b28810e8725b894d9c88e4c4cbc197a8a6ae304452ceb1","impliedFormat":99},{"version":"386d783e5c235fc03eb9d3be33a41ed3a3744708c6f184fe9618a25b6caf9a58","impliedFormat":99},{"version":"fae4c4fcfb20aa2860f880aa7807d8d8102abda026c539c261e4da53997d9659","impliedFormat":99},{"version":"a4a256ff9f03798c49a001a0d4bc708e96a20be188d80d3f4d6f45e1d2480b91","impliedFormat":99},{"version":"80cc57ed8b2f7b94ac5d6b61ffa975eac13e39cc55ed9d32f2a4c03b07c9ce2c","impliedFormat":99},{"version":"6a1c4cb49ef0a86d4985496e9250de9fb38f286fa7bba5c2556855398e24d98c","impliedFormat":99},{"version":"94613cc30b4c60bc7b5e41f0014f5afc1f70238a9f3112400e2ed802b9edc2e5","impliedFormat":99},{"version":"81b5b7d4670aab0d1999b8480d483e3b0d12a8ef6a47238737bdbca5cc5b3af4","impliedFormat":99},{"version":"0a75c44f704965ede175c60995e6ef37943ace985c82b37ec004a02a23d6f54f","impliedFormat":99},{"version":"dc6fb79c45f464f758e0e2b6a09c34e0e88c980e3573c04333639d1061479dff","impliedFormat":99},{"version":"1d49ef9a4c8784be6dd7d91afb621b78c0fc8017769b9dd846ca63232e905467","impliedFormat":99},{"version":"db18fc8ed779ede2de97ba0e9bc61d13d1e971711bb85fa085d2be02376203dc","impliedFormat":99},{"version":"d92de62f96a0cf43b1625552f278468e06061453105a5b60ff78c6f09c30ad8b","impliedFormat":99},{"version":"4a0b017378d2a33ab5c70d2d885b9db3c10846e1f0f9b685e3be5edb59ea3eac","impliedFormat":99},{"version":"1296c3ac64a45bb17d8c90629bd2241c5942ec6ec51a4013ba540f2aab85eb07","impliedFormat":99},{"version":"7ace98c6830758e1f8e22def1defa1b77ccdebfd07d3508a1fc455cf098a62a8","impliedFormat":99},{"version":"e7f716b3a0ff08e8d289109d49b76e90644247d65a80cbaae2f476d3ca954bf3","impliedFormat":99},{"version":"5f5f47b68b781eb477da7e844badb481b34489a6e8686c1ba155bbcf2e7a133b","impliedFormat":99},{"version":"d863e0158ab6d1a5e8f315f879c255c7c64a4e45e5a980c2739c73c8ef9b1813","impliedFormat":99},{"version":"bffcf294ab82808982b50b77c7ed624a48b51b362e5108c98e3dacdd6b96605f","impliedFormat":99},{"version":"9ead7db9d2f12cb8ba534475698fa8d5cf6422e6ea0e77584b31e59ecf25eb63","impliedFormat":99},{"version":"1e2c2fc640fe117bc83f6320e5fd181f6e51a86a7eee232d510ed0c8b2909091","impliedFormat":99},{"version":"fe6441d144419863eae6218ec1ab1fb52af6c4f2f2c9993980038501ddb392e7","impliedFormat":99},{"version":"f928aeb71d76a99ebad7fc109e96135e497989ddb0c0ee16465e35de24f0cfc1","impliedFormat":99},{"version":"c883c7b209cf3e51a693023de37186e199d7e2342cd41f1f0b8ab9ca34851cf6","impliedFormat":99},{"version":"0fbe381899728959b9f565371a95921f76e4255dc9813ca95a423c7a81cf157b","impliedFormat":99},{"version":"b1dffe769906190c61aa2de29ba423c0d9764f05aea7ebbeea97f8323f6bab95","impliedFormat":99},{"version":"5f697a3ca1e2ce84e63f5c6fefd55ee00f4608a450aa765c923abc907f0032fb","impliedFormat":99},{"version":"6c8bedda58d1dcd5cade3495643fd5a1d1e6af75f50b961922b4214003c34daf","impliedFormat":99},{"version":"3d8ca129295708074c35d06f4e9b40e11e9ef3233df0dca6ae1aae5007bc1235","impliedFormat":99},{"version":"310790a0b20dca6d4fa1884837f48775ac1a7b711dab75bb25e203544c82a46f","impliedFormat":99},{"version":"03889f2863e44d756e96e03ec365dc1a299653897025ea1ded75e99f4183026d","impliedFormat":99},{"version":"66d50cba2ce96e5ff08affeb25d1ac3e6206887585a650ebf6cd712935c7bdfb","impliedFormat":99},{"version":"f72510666ed2d0ac50c3999c90e6a628ccfddeb123783759aedf8b64afc472c7","impliedFormat":99},{"version":"82d2796cae92487b15c2ce8bbc220d9d6ce8e6dbbe521b08f1d52eeddd83627d","impliedFormat":99},{"version":"66b417c8ef1aad8f6f4c2185673d0a3702aae2bee03885edd91a8df598d087ce","impliedFormat":99},{"version":"a7b40cfee10f0cde9d2d0d368e143a879af2fb8eda8dd86d722010b37d67fc22","impliedFormat":99},{"version":"584c9a3408fa4608c3f267c88f9942b23f3ff65a14daadf3eb1d24e1109a34e7","impliedFormat":99},{"version":"3933b9179508da74e2466ed5af41790695e53bef479533eef408ab34c08c3805","impliedFormat":99},{"version":"50aa52ceb6b51e337f65deb87aa418a7c24794fc0f9eabe41357461fa3106dd5","impliedFormat":99},{"version":"f6867a201454c8b60a78672c53367fa9dbc1aba247db27156c3e5a2fb3cbfb55","impliedFormat":99},{"version":"2bb7ed42f0bb306c77fa17ee006759f2f3cc6b6817fc4337d729ce010e7f8fa9","impliedFormat":99},{"version":"05c7c9e1d12cf2e7ec37dd86fcca61e4b1b4a2fff3fdf3648ac7210b5c09d944","impliedFormat":99},{"version":"8acc21ead62f0be0b6f6415e6dcf89ca2089d262a5d9da84f4688c9a37a9397b","impliedFormat":99},{"version":"e6b5b68af5046e3d64bbff45d3b41e0fa5da06f85efda33a07aef32c2fa4b54e","impliedFormat":99},{"version":"bb3b6049fb550829d304ff7024150cd4acf3650c11d9230e52d194caab19393b","impliedFormat":99},{"version":"bb119081db62488bf65a9563919a80d270201a1aca45d8ebd25a6eda85af1b78","impliedFormat":99},{"version":"abb85df073721c70450b1af3713cef5ab1025a36cc1566c31cf39475c512e842","impliedFormat":99},{"version":"8407d00275c737789e3e526a2f63542d43240d39cc813e0f391d0791e796751e","impliedFormat":99},{"version":"678b7873a38230d98a4ef8879f1b84b658b01506519e05a0291e887b914a4924","impliedFormat":99},{"version":"f474bc9e506a7690f97b073c4c93f16a67fe1859a7610cb08b54513b62f076e9","impliedFormat":99},{"version":"ce2b604e7fedfa087e8fc68f7d850a2208f2b0e5393db59a4fc7e21ebf04fa60","impliedFormat":99},{"version":"286b74c5381464962234a6e6fb7e41b56434a0466c0b8072f7762d102941e4e8","impliedFormat":99},{"version":"781a8c3f0fd5a7bb5c73ef1a804a09167ee6e72031be68af06d09a85d38003e5","impliedFormat":99},{"version":"d514bd8b93d377b46f889857af29d5a56246697136b3640514b376e15c88d9d5","impliedFormat":99},{"version":"e8e5d7cd52764357a339835c34327ebb8634c5cb932d2709f93c152f2abc3129","impliedFormat":99},{"version":"79583eda9e4c9b3807c71fac738a25625b11fa7ed587b2d1b5be69341219365d","impliedFormat":99},{"version":"e839194cdc481038bd67ed3c1566f5d29390c2af98f6b580115e7515ff3120e0","impliedFormat":99},{"version":"f347639fa958762371b8408e36bb5342a58affa28768131a834797c2a9ed07ad","impliedFormat":99},{"version":"053994ec3f7884ddb63bec643bf2276a4da93210bd12926ce4ea51cdd2f1af00","impliedFormat":99},{"version":"38bcc4a561e59c0a0e6304fcf9ed28df9a18471a06f7d25d4d839aa0f273b4e3","impliedFormat":99},{"version":"fa83e95a170c109f9e52f892a28a59973a8454979a2cc4161c765173e67f86ab","impliedFormat":99},{"version":"08a5be336a00293970580fdaf71e1197054ef2c9cd87769b19f7461cb3c617a5","impliedFormat":99},{"version":"ce1ec8f1a46ac13b31b36828b903ddc8b5f0a4f1cd59d6a1b122221fd0da4164","impliedFormat":99},{"version":"361fdf24d40b6d7f3250dac622b9d37becb257e4f855f85f0a30dd6558d50e99","impliedFormat":99},{"version":"1758b1f8898f121a176226b62e39461eef854bd33ed0552991c64cfcfd237826","impliedFormat":99},{"version":"7ef114c434371bf0bb373d8afb5e7cfdc5e1b2678683b92b89588a359bc01d46","impliedFormat":99},{"version":"56ec6bb075d116568daeb44a00ad710e9645b9e383fb61d83078a9e0d59ddac2","impliedFormat":99},{"version":"4d62e78223979185bf0fcea9a50e9eeb81e20e4df1f924511efaba42333d39da","impliedFormat":99},{"version":"170475025a9322720723114bb937bfacc4e5096666073e99d7f1df897cfaa46f","impliedFormat":99},{"version":"9dc2f4660f991088c1df79af054f451e7763b592b83911b2f55865282e5ffeea","impliedFormat":99},{"version":"3efbb5dbfabf41264c36e3e8c154ca2ec5a28dbc3dae87eb299ce826cec00eb5","impliedFormat":99},{"version":"ce0d485a733403bf3c9a552234e183b2f6b4f2a9f392ce8593ee52d09a7b4227","impliedFormat":99},{"version":"21d7d9fe27f34102a480656861392bd4fd37ca27837f9dca3542854bab35ed92","impliedFormat":99},{"version":"c0561d3440cc84a4e1a289b392dbde82e307d89eea71449c3a41b609daa9715a","impliedFormat":99},{"version":"ba519b143a14fee5242e9e8e549c5944bc6e6361af1162363c8336bb83289708","impliedFormat":99},{"version":"ddba8d73eee6f39c8a1458c244b9bf5cc54749f9d96b3e4c020bc27587afc05a","impliedFormat":99},{"version":"abf16ed784c74fd46c656cac5f5f7128a8fc9ce72bde1377d83333b32e160824","impliedFormat":99},{"version":"297f7c98f8447d6d8171c2c830a5769ac5d815ffb1a41b31ceba551b1869f91d","impliedFormat":99},{"version":"73bbe80f02235433340e10426a1a30e4862f302d8a4773d391544c47f6c44a59","impliedFormat":99},{"version":"091f41ba847167078b84a31ad0ff781613e22926b1aeb2bb9c5a5b81829e950a","impliedFormat":99},{"version":"fd8c79b9432d4c75dc3a776ca5cfa6c0cb01579667604ab7d3b564adfe02a1cb","impliedFormat":99},{"version":"a474af2d3c46c4ffb9ac67c35794d3188c99d0a9e29ebb851c925e966376d867","impliedFormat":99},{"version":"43f3124b51d65427823ac7ac1a77ddcf9d1aaffcafa199307c8359f96579d956","impliedFormat":99},{"version":"8b5edc0c16524d7ce61e374614f7be58eaf72aa31779e7995d75a48d8d321153","impliedFormat":99},{"version":"833d94d5f9ba3c0a0e0a9d98c79f4ee0ee099ef6f1aa6c594f98e9a503eb20bd","impliedFormat":99},{"version":"1073447c7d241622e16b03261a5a35e1ab9511a726fe2e9d9472a98531e08ebe","impliedFormat":99},{"version":"678498cea62d90c7b6f6fe6d77d6913a498207292fc5ac085c3ca6673e1ac390","impliedFormat":99},{"version":"07ce6472819a84a9553d35477e08e843adc1c4e06f706c32aaa6bf660573abe8","impliedFormat":99},{"version":"b49acee84c7c1e58e404d674f3fe8a72a73bea8f21a3384739ffac376dbc4d9d","impliedFormat":99},{"version":"e05f80fd2fd9766d62e58ca19f342980594df24b67d046b2407bdbbc642c20fc","impliedFormat":99},{"version":"31150f240226c796b061e96be00586546e8691604f5e8e074b6eaa1cf7ccbda8","impliedFormat":99},{"version":"bc4051bf149154816a313aeaafccd606224c7dcb5797faaf1461c7eb7b9dd32a","impliedFormat":99},{"version":"8384d125cdbde45b18b143511eecb4cb1a630393b20e0f384da7ce53ad500200","impliedFormat":99},{"version":"bd1bf0a339f399d23c42b3c71077411fa0516521cf650f2a979b6b3ba1bd5776","impliedFormat":99},{"version":"7382c0c8f0db3389d4c2deb5555a6a13510cb2f3b1299a5be434c78959065adb","impliedFormat":99},{"version":"28d190c786629e69bd4663183c7f6cdc6f6d95661abb33c4acf8e864bb17d6c2","impliedFormat":99},{"version":"f7dc29a70b2c22eb0ee37c58fa13b92c56a03cb8d07e517e50745fb8f3180fd0","impliedFormat":99},{"version":"2f7ff4d8be24993c494c9174d6d0d567a2f777d47ae605bdcd1f369561d3b1b9","impliedFormat":99},{"version":"3c5011b14981547a762a9a4b23494d3bc56000e016c61cf288cc282cab4565a9","impliedFormat":99},{"version":"31d6f6e05ea3be94b6d0958fe20585c624e37139efb2714c6d4716ee2e83e39c","impliedFormat":99},{"version":"46380cbf7064fd9f0c68902243e97e6c50d044c1c2075c728f9ec710b3d4764a","impliedFormat":99},{"version":"ad56ff5c498ae19096bea2f2e48a483496a69e7f882378ec702d0dab3431adbc","impliedFormat":99},{"version":"33ac964aaec5d03a7f2bdf85235133d8f8a542ee8cd53cdb6370cf12a5fbca1d","impliedFormat":99},{"version":"cb525b94462aaffa1953f40ca64f30af02c056ddf190a005c9372140edfb1520","impliedFormat":99},{"version":"f9c4cad499989bc9e52fb20fb79ddf145e74f0bbf658c11e632ff27784df8d67","impliedFormat":99},{"version":"8b2416a382ec4e4d165f2eb918be0656e116328a89517376a344e155f1f20574","impliedFormat":99},{"version":"c2b0b8ab0839ebf444fb041be8baa98073cf24e7d34e9d7b025283bcc19e4f6f","impliedFormat":99},{"version":"6b83038103737e8a2a62c32a504cb51ec0ae8c290245392b1ed3ae6422dd92ad","impliedFormat":99},{"version":"b8c56895889493917c83e010b52a20503a577fb619bd2dbf93dfc96194d1507e","impliedFormat":99},{"version":"a346e366f5b0bc3b7ed1246b37970ed4cf285ae542a9322fa570461ecab1ce50","impliedFormat":99},{"version":"ac08e7ce22f77cb1c3e394319bf6c5e91765260cfc1592fe4ec98d7b6dfce063","impliedFormat":99},{"version":"936087f474e826b32d78e7207349207d340d684a888366348c4f21e588b80af1","impliedFormat":99},{"version":"7a62127857134b78a06fa3eaf7c5cb640aaeb4c5f68b286dde92530b0d91439a","impliedFormat":99},{"version":"d68366828b46684cdec1e5167d55a37eb12ba413a8dfa7a9f3bcba9b0eedda79","impliedFormat":99},{"version":"1e29f487dba82fe1e01581eaa5452778335c8e8035dc7bc897a08438349e015a","impliedFormat":99},{"version":"436e04e198949a9de4d12437e9a0e22a635cd572f6a1e7569c69367aebd564a1","impliedFormat":99},{"version":"2de8f43486975db9345e8671658af70b6732714b921338efeee75332fc9d2b9d","impliedFormat":99},{"version":"a6042f5361a7d639267a950bfe7b8071c8fac0a22c3460516aa57132e5e8d783","impliedFormat":99},{"version":"994706f0de0e7cdc500fe2df830df39e8673b95e21052b860833bafa47e3b3e9","impliedFormat":99},{"version":"eceeb11208e29be4ee959d8601d44a160e5891acfaa2890ad3381d9ca4552a3a","impliedFormat":99},{"version":"1d4ca5e0f18a48b4c9bb13d191acf780c72d6364f53bdd5cccaae3da8dc75ec9","impliedFormat":99},{"version":"9ce599bdf3ac0d33b85546886643ef3826894f290a8fdccc09f34673a773d585","impliedFormat":99},{"version":"1aded17d799608c0ba976d9c017b71b552428923ae175c4ce2d03c6c251fc293","impliedFormat":99},{"version":"110a028c72500ec8975f8fe8e9c58bc3c53ad1b8cecedfdcc9b13d01c82f9fc6","impliedFormat":99},{"version":"0f28079d1c3a5b121158ca2992b65c9b39ea578d10f9a660edf19f0a3df74d72","impliedFormat":99},{"version":"6c543b666c02de0cb90fba1b177ad2e0f38c024b2d35baf7866d88a772335013","impliedFormat":99},{"version":"22ec74740daba4895b82f71ee7a81e8d84ebf8ca87d750a9cb7eebfb53715cb5","impliedFormat":99},{"version":"a99162f184a2eacda687014590c6cdb127b309361ca893876df04e6f42899933","impliedFormat":99},{"version":"a2e7959cfc8d0b1e2a8fea12946fdcee9d3d39ec83f9f69fd4fd3019dd729b1c","impliedFormat":99},{"version":"f75cefd211302ed3f67f21cca8fcec37a261f61aa74c8506818a594d63987c50","impliedFormat":99},{"version":"0bc6eaa27ee3b289d58fd31f9597fb3786fc5109a6fd247f2d18025cd8bdbfdd","impliedFormat":99},{"version":"2c0c57f8d531e350d0bee50b45fd4979073ad3e6770fcc82ee5d9434d33f01be","impliedFormat":99},{"version":"657ac562004aa622ba5adf699048ec590ad1b4c0c47c77ad86b8d3f491c068ba","impliedFormat":99},{"version":"b95426b6a6ef360b38ca32ed9a16d827079eb9f9c2e018be263a6f9a6d4dc62e","impliedFormat":99},{"version":"9c7501860d6585a6fb5d1021c57a33bb953398da637c5dec0effcd7877a52bfd","impliedFormat":99},{"version":"618c2d571eeea05cb19350eb01fd25e3362faf19fba3465eda421d8ee393bdf3","impliedFormat":99},{"version":"55430d53d77e54aeb57496d12b469c03d1970776db91e2ffebb9746f67f49db3","impliedFormat":99},{"version":"7aeb98df985447d55fe2c79d236a8ac5d9298828f5f64eed23943e28c91aeb1c","impliedFormat":99},{"version":"724c015bd6ca5e48308f10bee2f034ab5e0a5b13452e36bf05fb5f455a1e9ef9","impliedFormat":99},{"version":"8637d71c11793ae5cdd3171517ab0453ddaa84a916f6069cc7d21756f01c9a13","impliedFormat":99},{"version":"7b564c8ffe25811dd0300e0fa16d9e1bdb57307300a569aa4442a39c794b38da","impliedFormat":99},{"version":"b9aca9e3eae5ace3397362e7093655ed2f2000a3299003a0be3ba63fcd8a1cf7","impliedFormat":99},{"version":"1e06d6137283a011ec689e6ec5e76df3dd46abd938745d363a260adb54b0b6e3","impliedFormat":99},{"version":"9e0bc78a0cf6afc736a142062ad0186d496b8ef9dd72b5a3d2847508ac9281f2","impliedFormat":99},{"version":"12f6a1fc30cc21367b7bd024a1f234f1c87c2694e5123791c4c1336008a97ae0","impliedFormat":99},{"version":"62a82040362407115b58a948e8f2cfd6a8c277a2d549c18fc06d21de2c3931fa","impliedFormat":99},{"version":"1d5cd62166fb45b821f6292a748f772620525688c4844ed81ddca13253ffe99f","impliedFormat":99},{"version":"b6007d32fa2029a0a1aaa3c405900ede8b00d3ab717af0a1ce3e681bbdd7cbd2","impliedFormat":99},{"version":"d430e252cb220478232cf6783dac71b221875110f508ed3ffb4dd58a93cd3bcd","impliedFormat":99},{"version":"0ad363f8072fbe9e4f6a5b90a870ff30f962eee48c5fdb543445f709675250bf","impliedFormat":99},{"version":"5dd81b737d6f72e731aaac4678c763af0ea6897d7fd8196f04e5477757db3e16","impliedFormat":99},{"version":"c9de554ffd41dc88473b51f8a726f8e6752ba4f8afa12100fe24b9f18ce2794c","impliedFormat":99},{"version":"f7f004f03df753e513625d261669f87c49d92bc2ffff624b809d5c8c8068806b","impliedFormat":99},{"version":"651cbda75a78fdf3da54f3a7eb5de87652390a44a34140303fecc2de9983040f","impliedFormat":99},{"version":"200120eafe59da37d180ceea37b342957849377c7215d2efa9294edf537e745c","impliedFormat":99},{"version":"54b641ae9f41f8d05b6141e6a02acda77b0743e1c3b0bef93e689f890981b1eb","impliedFormat":99},{"version":"b231fa6be4cec8a6b90f98071335cb22a6196b64724af56b1e851851fce48bed","impliedFormat":99},{"version":"f9f8a5c8b56a99c29943ba345f03102f159330ee4984ac0c06a4b93f3f9d6c1a","impliedFormat":99},{"version":"2cfe431d866a5dc7a23dcb1cd896aeb995dd1416a668591c79d7c0548b2bc8e4","impliedFormat":99},{"version":"8def9a68149edf17ea5df2669bde45acd5cb3f5d28ad79042a428e830a24af1f","impliedFormat":99},{"version":"a00a6157f232a7d36c78bdd7c85d34c8c9e8dd7bd11cf2540748f5fb9030330e","impliedFormat":99},{"version":"2b08bc4a87ef16bf7f587f074bb9194c112b69462fda07d5410476c8513f9a7f","impliedFormat":99},{"version":"615607b6a29e3f697222ea2b0109a513d0c7a961969eaf9498917d36db55ebbc","impliedFormat":99},{"version":"343987d6dae8f8ec43e2eb17aabb2bc5a15be8e7c797d37c74792e4bd43ca839","impliedFormat":99},{"version":"a80b7bb7f5c675ece7f1e73bbf4f4f9632ea8e919c1170ed9bae7cc6fb707e77","impliedFormat":99},{"version":"c27b0fbf9267c8beebf4ce5b1696934e7bc08847f28b2c9249659441a94b9da3","impliedFormat":99},{"version":"24ae591b2f12be72a4a9fe993b92135d6bb3e5e1bdb13cc8097625651404c4be","impliedFormat":99},{"version":"0a1a4813f7ecee0d0c39fcd50583dac3b63d408a95072905ba16d469919985ae","impliedFormat":99},{"version":"7dfa35a959b024bf2fa0483f2488ea6ed893ba1277ccc075e018a1730270d544","impliedFormat":99},{"version":"c0e98150595af80066480e9583f89e6370693cd0827fc89b68ecabfa5cdf4a72","impliedFormat":99},{"version":"10134fdfdf255c70e3e1838ad9ef47047677383aa6978883c15eb0f5c17c3563","impliedFormat":99},{"version":"39056f5033d13f6d66c2980c3e0e20bf84ceb64d51567156451695773148ab1b","impliedFormat":99},{"version":"4d79b57384b19b721f29cc120ccd4c8aee6c2351d8626a6bc3c43e1e7dd555fd","impliedFormat":99},{"version":"ec110162f200873cca9707c8be48a53fb509377db99e916b839b1a36332a655e","impliedFormat":99},{"version":"77f67d567cba48115ebc24484cbd0ae510dcd1e41f9508ee1f5bedfc0a925520","impliedFormat":99},{"version":"45c5df088d0b2fd4aaebabae4ac3e69f05ead369aa0e146067dc7f553b0a8279","impliedFormat":99},{"version":"6428679bceeae2bc835cf15366c8219a9f4a3baf9133cd2004dac51a87ebde8c","impliedFormat":99},{"version":"163555f7f6c6ec766b30dd054fab8fa69f5184d82698c4f5e7457b4f22710fab","impliedFormat":99},{"version":"8a92621a4d723e1c2f868b18f4ffba76739a0c93e8437850f99f5009499b8848","impliedFormat":99},{"version":"2bbde324e159d9f59ab56a4c77128737958704e9c4331caf646b075c93d58ea8","impliedFormat":99},{"version":"b7c30808b1e0801ebc2929e8112cbc6471473f227d25fa3c338ddf8b4f2cc972","impliedFormat":99},{"version":"a5e0dbdd3c5ebcc3561c493df20fb1c35094444b67e5cdf894d5ca83455f0dc4","impliedFormat":99},{"version":"bd0ba36a4dc087b698b83e8f210c57b5b8cb29c4e7cf09f52b9c53cfc8527508","impliedFormat":99},{"version":"40b46bcc69563ffbeaad0e7a9be85f7ece978902c7e17481874d3e40b6f30baa","impliedFormat":99},{"version":"24fec85fbf17a72b387916cb73ac60273753eb2f75bdba89fd9d8373d2f8e823","impliedFormat":99},{"version":"0fda2c7354705f8e3c7e88495fc14af255e1e4fc6ab5fd2510b0ded969550128","impliedFormat":99},{"version":"8364b396dccb914a0fdd1a43ac72eab807e2285c023aabdceb4a90175ea1fcaf","impliedFormat":99},{"version":"267fce2a9d770603e7497ff4d2ebabd4ccf6b6c40b379574fab6e7bf16df3635","impliedFormat":99},{"version":"6a92542761d442813efe8c992d14ecdb9f0f88d29128ababad72d5372d377a41","impliedFormat":99},{"version":"a913e963331c6b05ee3b833b505855f555b1632bb7784fe97933f01569b64221","impliedFormat":99},{"version":"a96a6cc809d8f09952880373df55104b7869b601c45b58be80ea50ad46bbb0db","impliedFormat":99},{"version":"6f13100cf876318d0f1e8f3600beafb1622b52c8ecad388f82d5c8a7ec5c3982","impliedFormat":99},{"version":"12d6a24ab50e258055b79b5620e1ab58fe1d5e53f816d7d24bf63b2bd41399af","impliedFormat":99},{"version":"4d71c3f2950cceeea5a198a49f9548d4c1744b2e08e799026b2c01e26c30ad84","impliedFormat":99},{"version":"56e5330e3c63f36f57cf87db4674dc0da3e84c9745431e3ee4eea014372e6ae3","impliedFormat":99},{"version":"06454590fb020d26332487e466caa15be9d4ab476cd1f2b502d041df6e73ace4","impliedFormat":99},{"version":"0af1d04da71458d3b24e9d4fccebd327335f147e0b822871151c6fd74d8a945d","impliedFormat":99},{"version":"0a65f24484673f5ff0ffbf09d8970f509a4c7140cf4a92fb94f4ea8be759b150","impliedFormat":99},{"version":"c3ef829e6159fc25cbb3ffb2392cdc65fa0bee0de45d1905eef39ce72a30b223","impliedFormat":99},{"version":"1a2dd1a4760aed2479369e605adde150d3425e1081be79753e3a1e4238bbd4d3","impliedFormat":99},{"version":"8a580ca7dfe72e5393d3e68f966e9a6770a0a67ed31a06783a0fc2d5f1bf41aa","impliedFormat":99},{"version":"dc5c180e2c2ecfb91687fa245c0ef789abb2f258925c53a46c40b5be5cc06d7b","impliedFormat":99},{"version":"2e03d78647e74bdec38e689f32471393ec37f477b75305ca299fe7afb378a900","impliedFormat":99},{"version":"d7d10dd270b953176d3633315fdacf90cf2c3fdefc7980b948e7d242e1f83d20","impliedFormat":99},{"version":"5e2880e69e0b2f69713a7b5c8595d08353d8129e62f14fbeac5e3a7a2f350111","impliedFormat":99},{"version":"26541ee839fa2672a9aee147d1bd77c92304c07c9c794f4e70d98fca4ac4d5d8","impliedFormat":99},{"version":"e6e906f2106464f4ff8ff9d653ab434dd57d14f1a86ac364f0d764633cbd4fc1","impliedFormat":99},{"version":"2dfff976aaa4c0efbfb0694bc9a0115b3d745473b9ce80949fa02f249df466c1","impliedFormat":99},{"version":"4eb1912637486f1b4a360658f7b1899aafc2b07761ed99f60617d11f596ea58f","impliedFormat":99},{"version":"be1378176c12ced525f5dfb672356dcb44c3ed826b76f1ed7c2e14c17e698690","impliedFormat":99},{"version":"6bf5d30cc1060528895d2db6fc2039c65606d2871c575667913cc67f28a8e2c4","impliedFormat":99},{"version":"a6cdbac42ca8870acf70615c430f50664236917dbadda4829b2ca85e22f65dc2","impliedFormat":99},{"version":"1a35594e8294b60a08ca90d0712772b851d3bd3343fc3f40c517e8f91118ae81","impliedFormat":99},{"version":"bc992f34d8a1ea9b6bf76ce99de74c427f5c578c36d40f0f47627d7edefd1396","impliedFormat":99},{"version":"239c64046bfc03eaddf462ca3bbf31f3f629f47c42292681eb8174ab4a1bf080","impliedFormat":99},{"version":"e9922a0bd88d88458bd8e1b59629942989a4606cdc73104549b1d975e11c716d","impliedFormat":99},{"version":"fa4277a5b715291925ee253e3d5f4ace6858e30527cfce7c981dc3d910b282f6","impliedFormat":99},{"version":"32e62dcf57f473fe959c8e55c05b85fc6f2c41bcede76f192462688214ac52af","impliedFormat":99},{"version":"fb4d45a4a5a2d6bd3e55a9bac0c06fdfcfc437364122611b4eba92331b550764","impliedFormat":99},{"version":"fdd44bceea44c6b6bbfdcc60b21a749ece00c3c9ca39effd76728769abdbd3e7","impliedFormat":99},{"version":"5c3e3cb494f815df8289e573e275f5af22b90f65ea4f84ccc02db71cfda44c10","impliedFormat":99},{"version":"6156ec87a3211fab0e201ac49e23bfa7b305e4e144bd3096e6fe134d7b89b608","impliedFormat":99},{"version":"bd18b9e00a08f52ed006cecd5278e09636c9a8f554a53cab6980436f6ddb930e","impliedFormat":99},{"version":"76f6f91c693dddac2959f67e0dd1694cafe5a60d648308ba37a8b553157e08cd","impliedFormat":99},{"version":"dc9283c141dbfa236f0cc44a80455f03127d43f9f099a347d577499131bbf0d1","impliedFormat":99},{"version":"2408d8663c9b5598c32539ce5a2e63e61d3a9c783981441be2ba91c59a214bfd","impliedFormat":99},{"version":"c54b3671ac0947ccb76b538e9ad5c2c7bba2d6b4e2facfe90ed3883e5fc870c4","impliedFormat":99},{"version":"acb187dcbf37d298e9aa2188723266fd52bc691c21368f7ffad1f5cf5efc8f23","impliedFormat":99},{"version":"f844308a48c568900f8e3618cf117fc82ed6a6436b0ac3d2965af03d14c6b096","impliedFormat":99},{"version":"b0f5047634786f8ca1ed076ef456eecfb357a7bae8696f02608d996ad8afc52a","impliedFormat":99},{"version":"4dbd3281bbe8fa74971a802b8c1e1a0747d2e70762b9a4814f7ff442d3244230","impliedFormat":99},{"version":"c364b9476c21321d77f63075ede02113e60943fbbde14b86cc910d7891a5218a","impliedFormat":99},{"version":"653fdee1ae608312fce98873672eab205ac9c27b23de1b2791031a0f6d2b98a7","impliedFormat":99},{"version":"e4fd76ab9cce4eb4f61d7288e26bb8a5cafffc80954c3ff18fb27b89204d3442","impliedFormat":99},{"version":"ecd553fb6353dc1c393f596ef37cc74ef38fc0be23e07e780ff49a39bd448ed2","impliedFormat":99},{"version":"0e06ba8ad31c92c97ff790a2bf54d322d8b926d7a7a086ee0982e955a7399bf0","impliedFormat":99},{"version":"1a9e58fb9dba9bd5f06eeefec5c2f8d5292781b06972fb9c9fb1bbd8f15ad5f9","impliedFormat":99},{"version":"1dc595c305bbf9c102977fb7970e0374d1912357e17b3a95148580c6ab46b5cd","impliedFormat":99},{"version":"af4ded8d2788d0228df353955c9a0ad6c24ef0cef8d63b589629cebdf3e5c0dc","impliedFormat":99},{"version":"d64e5c26af45311b8642ff27d05c49d8b94b9828d353540ec1c0084b92e2963b","impliedFormat":99},{"version":"ea52f5796671ac35eb62145531a9d9b33e18624c7ea907b2ba054425865ef23a","impliedFormat":99},{"version":"63ddc0222be4dfbe4edab975080455c6753b18fde348d060a6d3ed93e0097cb0","impliedFormat":99},{"version":"79cd6112cda96ee5a62a7c4ff9f7b08651af15fe45205751655cd4b4c2d1b58e","impliedFormat":99},{"version":"2fafc95d1afc4b30891cfae6447b0547fb21a4eaef4e7b6f47b789eb07698cf4","impliedFormat":99},{"version":"cecd28c55bb2e5f66e02fa64c5eea751f9273c8515918820ca2409cbb90c802a","impliedFormat":99},{"version":"4e0d0aa02da405ab61975064bfff8a927b493239e7c2694b091ce3a87512b802","impliedFormat":99},{"version":"0bce1056c3ad5ae75512bffd21985a8107b6c7520bf073e4d1fac19ef1970c4b","impliedFormat":99},{"version":"dea629ac95fc8d6abde0a2486299c3f3c7e6ddfe7c14c3ce1302ec17c025a021","impliedFormat":99},{"version":"e6ccd8091551b224ce7989079751cbeff03207986bc77aee9e1d50c0d4eaa6e7","impliedFormat":99},{"version":"7d209a3d160e8412a320568c8343f4aa5e2a216e019f1e382f3d4c6b1069295e","impliedFormat":99},{"version":"aecc37bca58dc791685b01ce18238f8d2a03fdeffd4ec2f316e37f5b7307334c","impliedFormat":99},{"version":"7b8bfb125f9de5a4ba30f5d81b5f671772cf76987d880147f786e33fa878a5b3","impliedFormat":99},{"version":"d57d9fbf2673c403c6bfcc61ab70c16c4984a6880e647dc46c51333b1f812833","impliedFormat":99},{"version":"f3354264b00ad46c7f3949220e00ff70955bb67889e0a23e0d055153966b6294","impliedFormat":99},{"version":"7fa9b40a7f202ccd3c9a22a5777f02e50d0c009f633d23c8d8cc7877e95c89d0","impliedFormat":99},{"version":"1186f9e84db92d299247dbb5a283311055f82de1f8808dfb048566d1207fdb82","impliedFormat":99},{"version":"c30f1892b9de9bd083512b9fb5858cb5787481ecdad8920d7ff75586cc88d432","impliedFormat":99},{"version":"e43ce675a68782c430c60de48267f8268bdd682697cc38e54eb9d03f53b7791a","impliedFormat":99},{"version":"df1d3cca4a0197138ca725503c85ae59e06cc21e1dba64dcae94b8e8c2b1fffa","impliedFormat":99},{"version":"6d74fdf0a7ce758f316a2b2c8960ffc50235320727326a35f580612c0d593a4a","impliedFormat":99},{"version":"ff77c6d5963b87d427ccfe6509756ef01de1aedd685d186e177603ed741c93c4","impliedFormat":99},{"version":"62c3d6cc07f01164ab6b94b1daff72afbdea44a42efa750673e7c65739b85816","impliedFormat":99},{"version":"f9aa7dd2db630e9ad51214d9d0e14da672a82322684d908e361d1bae4bf64e01","impliedFormat":99},{"version":"eca2962342ba258932717a7431741e432d275beae879d6e655eea3cddd69ca91","impliedFormat":99},{"version":"807091b6bb063571171ba50d3d7da2daf4e718de25a32b4d168d9b2854b16979","impliedFormat":99},{"version":"2256e03055dc0cfcb237da2751a763b4c695f6c6c82003cf0d36851cfe77384f","impliedFormat":99},{"version":"af7cc8267b8302c517bd0a7367642bb1cfe2e516b00bd855ef85f2bfdba59c60","impliedFormat":99},{"version":"fc490848f97ceb21a52dd6afe32a9b98cb1cb2e6320806b5fb9c24757a1ca769","impliedFormat":99},{"version":"c06313963ee23643e32bb4a0deab3d69453115fc1aa59eb2e9699516fd9883bb","impliedFormat":99},{"version":"31ed9dbe091c55243ca0d95c7d3796448367091cb1e958033c3830cb58d873dd","impliedFormat":99},{"version":"ef436a3aff282493c3ca803abc5dcb5f678be8c2345cacb3a0356a47c6bad708","impliedFormat":99},{"version":"75c0e4d715175affceaf29516d4f46316bd757d2e30945ccce722aed9aa91ec4","impliedFormat":99},{"version":"cc7ff6ad94cae8f1b6b73cb0f3694e1bfaaaeb7db708efb3aa63d657d453cd05","impliedFormat":99},{"version":"4dea994dff6f8f13a75aac0d5fd62f867790c72af9c49f2153b48f1fbe94a545","impliedFormat":99},{"version":"c119857e4642cdd774d2a84d9547ea6daecc225b2273cc6e57035bd422f5ae1e","impliedFormat":99},{"version":"04127fb55c6a3db066777ec0efa8196f461e779ae5f25be1460c5b77bc6fffe9","impliedFormat":99},{"version":"0c11f88d9828efad354c4cee7152ee7eaec74fe59ae13ae29eaa68c1e65521a0","impliedFormat":99},{"version":"df3e033a605c7e31ac7a6e7517c422dbba4a940c8aaefbb8a64730bbcdbbd199","impliedFormat":99},{"version":"738ca31cb07d20afdee107364e270214da052479973e0b08a9a886f8f90d2803","impliedFormat":99},{"version":"bd034d73f41f90d3cfce994b51a759b887632bded1cb36f1dbe2773973a1ddf5","impliedFormat":99},{"version":"35a17e3fc0e53518707795ed24bd428633c45a4e8fcd4657eea2963b42366eb2","impliedFormat":99},{"version":"b3fd4b12bc1b4f73f1a110ccd99ffea459864afb8e682768d641de1be3508bc7","impliedFormat":99},{"version":"d1dcfea8733aec727e00c133901efd6974a9f7601c4c19ccf9c2e99616efc104","impliedFormat":99},{"version":"eb0b20ca60a2a2ee1daba9b78bfe8ae99487de57223aa6f0f6b99252b0cf9363","impliedFormat":99},{"version":"8c868f22cbfa1cd301a05eeef770dbc4453dc42f065fce267945674b4d82f3c0","impliedFormat":99},{"version":"e6ef6469aa806b0907c02b67207a86bdfc8a9291c5e63f3ee0a72437df56c055","impliedFormat":99},{"version":"85c677f795a09a5134768fc909906713afa46536fb7c178a58a2dbc8f981ee41","impliedFormat":99},{"version":"97ba6fc4a6c7975f53b16bc72ff0ca05d41104ef2a605f07f219ff23ba6643fc","impliedFormat":99},{"version":"59e5e42bd98ddb731aee619aa16b1d7403e598e54bf75d2daff25c57495a13d6","impliedFormat":99},{"version":"54e79ba20e85bc05dbf39eb24f94c0bf485ff76b096654420eb32dbd7a616c53","impliedFormat":99},{"version":"80a960337c67f64bddaea4ac2fd437ff09dcd64c50ebef0ad0e5abed981c862f","impliedFormat":99},{"version":"98590ff94f0c45c9da700bf9c972714e4367cee30842aa130ab501f463574bbe","impliedFormat":99},{"version":"7d4539a233361ed71d335793db13085aeafbc1e28920a9784b01a8b2d461d354","impliedFormat":99},{"version":"a00c3e3e9475eb832c523f41734a7ebef312b1ac1d6ecb68d22df37798e18c02","impliedFormat":99},{"version":"275d39d59a9a5c7ad2d13757bb35bd190f487cf5fe221b8a556be2117ce6c2a3","impliedFormat":99},{"version":"072c8a4438ecf5be5f093ca727bd03874fdcf7ea8b810a5f3d5b5e9a1a158646","impliedFormat":99},{"version":"6808d7d909f594bc5e0695b09e9f663f79b08573e3d95b837c1f15294481516f","impliedFormat":99},{"version":"1c699544448121e8a6521399e2b9e709c9561b768bdc3249b035be0ff5a458ed","impliedFormat":99},{"version":"c0f9d148738c7f952a6e0075e7f7528e67fe813e5473741b6ae2d7bd1c701727","impliedFormat":99},{"version":"9594f39327c3776aa4083e472770ceffc14d45e669998536b60b5de5b1006143","impliedFormat":99},{"version":"4830175a6be86164822a5b2f7fef7a97fee781b33a52453ac8d8b50e3ec91830","impliedFormat":99},{"version":"d82b5aaf44272f7e153a3a469db46739c306b5c173e0382cebea70bf469d3a52","impliedFormat":99},{"version":"65d1b54d95e8712f8bfec843cfdffcbaaf6d92d0a69abb7345ba55f3f5712017","impliedFormat":99},{"version":"80464d99a301e3db960da2a7b010ada29874dd6dbc5f24731473a2641cee217c","impliedFormat":99},{"version":"3834d1fff358eaf5b52078c27881964e31e54fd1b5be8cb097a2ca75c2d97b7c","impliedFormat":99},{"version":"3fb4902f08c9b5a77956e9a6856505e00a7fe476a586e832571c3d4f83ddba31","impliedFormat":99},{"version":"93c8e1d9bdc1cfd856abb2ddb43c31da1adb5bb23a3172422ac3426d80687f97","impliedFormat":99},{"version":"82dc653116ac560acfa8623cd3fb7de40ac5f2e3d65991ce36070364b4f1bb07","impliedFormat":99},{"version":"ed6c38e10a8ef5ff290aa185177153ad1e0a85c7d867047532d33a6b1bbf2c4c","impliedFormat":99},{"version":"bab1312d15063c1685b8aa51252669c1c5843f3f7c3568674dce1a342cd1f7a3","impliedFormat":99},{"version":"023a397566c9c9ba724750a017783ce78006b04d52f96322f42ec104daa1f776","impliedFormat":99},{"version":"10fc62a7f653cff767df362868a121e6d5fe9d872fa4c0fe3de8b1acd4324f0a","impliedFormat":99},{"version":"05346e4aa851fc01eef2d4ccd77b5c8e5ef306ad044ecbc8594aeb7d753e1d33","impliedFormat":99},{"version":"05e97bc0985fe092ec1fa0204a4ba209902419231941be9d7109e759992af3a4","impliedFormat":99},{"version":"d7baa0aaffbdb80eb363c76f5c062841441281757037ed9a740d2e8ab9cdc391","impliedFormat":99},{"version":"cfc54c8c0b1974dab7994739dc901c13fc8cef6ed11cc0ca2777dc0eb1751f40","impliedFormat":99},{"version":"9815136c848202c8b0705c8e56a6546d2052cd0abee889fc0a14a08c8a13dc0b","impliedFormat":99},{"version":"4b77dd1d6d600b721c6b475b9479455233e7a189c1e8db14a53a8e34726d2f55","impliedFormat":99},{"version":"132c03d02eced90fa294ae08f814348ab056e1bb6e041a4802aab72deb61db78","impliedFormat":99},{"version":"3bbe7954dae9f4355f7da44a99dddcabe92ec11239e38a0c3c89da998156d9f4","impliedFormat":99},{"version":"3531151069b2a08dee7b82bf7c3437f707048c682395003a49fd630968f5ce15","impliedFormat":99},{"version":"51a2a1e0465147c66d3b3ba8b6776caa67e473db9aa5ba771a7fd5f661d994f9","impliedFormat":99},{"version":"616fc8cf7d4a11d695eb0e309522f1facee105a1c740e74fee5f710dc745bb40","impliedFormat":99},{"version":"c14a02a41bbdce485e6b9fb0a70c91a354a2044b55e2563e6731d51a3b3ead5e","impliedFormat":99},{"version":"bcdc75c3befba305fa771f51762f600ef3c7f60e12ff9b0ed6eddb3b11da3792","impliedFormat":99},{"version":"9b681badef747116e902328e3ca5bcfcdebb16259a8b8419a7e95132977e9e60","impliedFormat":99},{"version":"fbb328355422560a1393277f37065465dc36c25c5afb716c6dbbb4107f2c3adf","impliedFormat":99},{"version":"f9c5a5df867ff31c79e8dc2e7bcaafdca06d8a8adc28a099d8d05a1a4efae2b3","impliedFormat":99},{"version":"2e3ae086adbdd8ee059a46739badcbc7f46ce88b16dbc2afe2b669b9130a1fb2","impliedFormat":99},{"version":"fddbed7f42a61dd91910d468774ab7aece510e4bfc8acc8d6dee2f0b2cc3024a","impliedFormat":99},{"version":"d0c25a9039e1b56414c154cc2c3e22e84c8be8855c9780f4c1ff793f9e551589","impliedFormat":99},{"version":"1f700fe107041685043548d72a01cd21bd31d658a5a4d6d230367840ce65b389","impliedFormat":99},{"version":"c08f35285d1267946e19663f7c121f6d3e16cc03004a76506abc9f9f8bdc8b6c","impliedFormat":99},{"version":"021902fc642e31e811caed40c5ad07e0b105d7e269f609226b6447fcfbf62733","impliedFormat":99},{"version":"0a45d152162e8a7803ad6b0644e9f2098e28281f6e5ac08f21f14587564f568b","impliedFormat":99},{"version":"5b85b4c8d575c506088c9e77dce0607988506e12ad1a011f7068c9a35e5abdf4","impliedFormat":99},{"version":"d64b38d73752d637905e2ee9f39f7f82e2102dc96171adba9ec6454e396e0319","impliedFormat":99},{"version":"119acee61f07781e3ac933bf590854365e8117c31c896bf4bf1b9e3f399ef492","impliedFormat":99},{"version":"95be4119f87bdda94d4302cc6e6c1e2d1b849d170c5f187815224eadf7b1bcfd","impliedFormat":99},{"version":"ddcec9094b6fe3c92c6758cd338292672416b7d58ee807483dc8ddf629d699d4","impliedFormat":99},{"version":"283daf40cfa9417647d1b581cb734366581a803620bd20c60d92bdb7bb807beb","impliedFormat":99},{"version":"94d19f12b5d52237ee39b35048a1b7aca7c0b8fbfda6457c2dfd83414a6ecb89","impliedFormat":99},{"version":"7b14ae6939622c3fea912933aac786f88fb39c20f115eb7496ef890eadaab2f0","impliedFormat":99},{"version":"1023d9d72029b02a767d59537342fa1be3f3a33d901b52d7e0d47d42269f0215","impliedFormat":99},{"version":"a594453ed8c004df6b340bda0226e7cfe94ee67698d1c0dc1b9207d1e20e0ff6","impliedFormat":99},{"version":"4c3c179bd19a0c96c14749c9095714c9b150fc6ff2506c81b877d25644045630","impliedFormat":99},{"version":"21d8b3b7300ed19f41050d3fd6317f5b7c65dec299e1698502fb6767ac30d839","impliedFormat":99},{"version":"a6a5c59f2cf45d5ab475340ae96ebeca495094d15d72102b7bff05b7f0bf7383","impliedFormat":99},{"version":"eb7628d3567bcd483094fc2688ceb5305ece0563463787cca7035efce9f43c2f","impliedFormat":99},{"version":"6d79ded4df43562c8062badc829bace67925c70d18a7b72c09b7d23797cd0891","impliedFormat":99},{"version":"d25e9a88e761b13dd58628d2d41641195ad79ae927bb268387082656673ebe0e","impliedFormat":99},{"version":"b161e27190a5249c6e5660288e014bcdcb1e5bcc2733f848351b027e0d772ff4","impliedFormat":99},{"version":"ef547825b57ce9440a18bbd170125b89cc5bb8ce7504dfa6cd528a3dc4489e76","impliedFormat":99},{"version":"e74cf49b55f4550883d9d46173dc10ba5fd38d55f69f8617ca147b6d39c8a811","impliedFormat":99},{"version":"339e68b5bb386ddf9129bb3370d01f22f8919cd0e40ca71e06f881f69e02af66","impliedFormat":99},{"version":"8c65681a3636770c9b9b2b52d14ee4d59b48092175ae3124c044a2637fc84153","impliedFormat":99},{"version":"c6bd0b212d354956e2c5edc8e0249adb3c0e9c942e7e1794e23fe9f0dc721828","impliedFormat":99},{"version":"5e3b5745889dc9efc2e6f5515ae5bcb8135f2a8412d4a1facf374e09176f7cb0","impliedFormat":99},{"version":"f0576bc1e933fdc38f0f182775c24efab54f2a7a9b4a1953abe77a620346b9de","impliedFormat":99},{"version":"f061956ca6ce7bd52bf726d2e87e620aa928807f3ae526d3d432742d1da6e2e5","impliedFormat":99},{"version":"39b7dda3a4bd1ebfe126c67d3df5ec230681097b54a4f5a7abbd841cb321c003","impliedFormat":99},{"version":"532cdefa9aa613089dbd91804d4d9de824ed6e9f44980db04a14465e19a9e4e7","impliedFormat":99},{"version":"d0682d488ea0a7deeefc809d65c42e09f339dde50dec54f901104ba35c70f5d5","impliedFormat":99},{"version":"d4bf07baf86b8e6fbefb578d8a630db479bd8feae8a9932175c4d412c21f27f7","impliedFormat":99},{"version":"f76ccf2e0dc0bdbd29cde0b9054b0d510719730e6455db17e98f2b10646eaa59","impliedFormat":99},{"version":"f8dc3be04418be55ab97a46357ad0f6102a118b63e756f0fad0de94be2094d3f","impliedFormat":99},{"version":"3c0ebcc673f72499ae0ed99b0fddd52a60fcda51d50b11d1adc046e5985916a2","impliedFormat":99},{"version":"5395a87aca9a065a768051b7a6c66d3cef55e097ac2ad6ab917e27c3c92c4e49","impliedFormat":99},{"version":"79bcdbfebd96644cd9e93ca0b53ad0dfd398e0382c03e58f3135474ece45ca13","impliedFormat":99},{"version":"a134f53667b920e6ec7095c1c3cf0bcaa95008cd43000d3bdab1e570ac70cafc","impliedFormat":99},{"version":"116808caf097e8bf31ce1cccf1bf4060608cb7d91bc426b92abd97f7287de047","impliedFormat":99},{"version":"bf7b4bbe862d400269c378a2f744a5a94df5467cd18c805ee3a5ad741766ca40","impliedFormat":99},{"version":"2bb9ec2ead61f07ae6d8277af9318e37205b49abc9271604597844346ed3959c","impliedFormat":99},{"version":"d75af40a0b511d0633157556a35141a834d084094b01a8908d78dec2dd80fc64","impliedFormat":99},{"version":"ec2ca88bd0a13a87374a11d5bfacadc96b55810aae7a008cc44279b7757839b1","impliedFormat":99},{"version":"83551e90c20424cc93773db3ed94f8c43b39635830bf5548455d0836deb96393","impliedFormat":99},{"version":"945b49df2cc8667365e20dd3c1f8de64447e0b32f1d91c23ad06b07b0aae44ea","impliedFormat":99},{"version":"d6dcc687d0baf6635c1808c740aba4db6e37a3b5526f2655f0c291accec0decc","impliedFormat":99},{"version":"1dde80f3943e6bb56df526b77bc7a41dbc234d4393f1b8f19cc6672171ead575","impliedFormat":99},{"version":"7811c9c49dcddf09a7b307acaeb6f3c9b4d1d1b97961d87cc94670c46ea0362e","impliedFormat":99},{"version":"25c965403446cdcc5417d13db187a7f0394f7106cd1a45e1b9cd3a2c08aec4b2","impliedFormat":99},{"version":"1dc95a1964076bc1aeb6731a17ae5f7163846f248f60db0e0961ced43db22c6c","impliedFormat":99},{"version":"63482e1d5b8a0f3a669807bfa5355d3a9790856b120f512b4bc40a0dc65c78b6","impliedFormat":99},{"version":"7755b72611ef60e8cb35ce5e7ad393577e7389c485d4683570751e88177b1bc6","impliedFormat":99},{"version":"5445c1b45a4b24cb793cea4f1f8678912f2a7eda127afa72c48614aceb3059db","impliedFormat":99},{"version":"b600d5e621219860f2f6f9e1aa25d777c6b6c469a9048839b0bc256f16e65cb8","impliedFormat":99},{"version":"ed89af0e95cfc3c3aa05ab7f10f39252e304864be96702d3002e3a0b5314b058","impliedFormat":99},{"version":"6329a32dffec51eeb23377ccaead107d1ae30efe84e019e70d92a529df7e48bd","impliedFormat":99},{"version":"05650f29c7b38c2cf78950caa7386acbc7936a7cb08711bd1975cd4818c5cb09","impliedFormat":99},{"version":"12ccebd398ecb9ff4452279fc72aa34c70ff770926652dbdc7d34ad21777f466","impliedFormat":99},{"version":"1c4b858e912db3388433ea26a3b99b2c0ef72048da6946614463596b00298c5b","impliedFormat":99},{"version":"dd531d326e40577dadb38f2a931264139865f767bdd762af1e81f316b0c03a45","impliedFormat":99},{"version":"e8d0fd2600751d9b4abcb81e3067f1a6823763a25322401cc8a0578747692bf5","impliedFormat":99},{"version":"63964d043dc01122a1db457afec463743918a5c71c4beed6e2906f509e015a4f","impliedFormat":99},{"version":"4247f6bd3d537c2f7ee7a31067c7e95b70327bfd55a379fd96a42e9f2aa6d46f","impliedFormat":99},{"version":"e2ebacb3dd831a48a1beb9915bff463005845a398d999214a0bfba620602b741","impliedFormat":99},{"version":"5bf7ca566fde86fd0469836409db26264d98380002545a6b8ad048de46f47489","impliedFormat":99},{"version":"e860b60d342ee8666f83bf61339fa74fe7613f2ac7ed599f0f802ef3d85778a0","impliedFormat":99},{"version":"130de79e5e21aa52d0ac67eaa51182d90dc0354eac7c35a542a56426e93062cc","impliedFormat":99},{"version":"d590eeb146c65796d33043d08e48449c205b37033ac4157af8984bf1019928d6","impliedFormat":99},{"version":"68b3f5d095283a725fed296ee8cd36c1373a2476aec8cd9d8c953de792161248","impliedFormat":99},{"version":"55804c2d006cf28fa308eb3b608e5673ee4ef0e3d9999e532efcb9d703ceb522","impliedFormat":99},{"version":"e1dae322a476b97875adaa6cff6aeca7b3273e2a0fad1e175e329c4ce3d02542","impliedFormat":99},{"version":"36334b90aee2fe5d6f2971f05af58a15c68059aaa806e9a94652b324ea630e18","impliedFormat":99},{"version":"9e5ea08cabcd47ef88501f69a76fd8bcaae5149e6f92251e612e544af3f58a00","impliedFormat":99},{"version":"390b90167c23bdcaaa56041c620b04d9e85957f79d103a0b8a4f40f1159a486c","impliedFormat":99},{"version":"b97b7f29234eac44f2395e36457abffc93f7b709d599821df52bef118009a959","impliedFormat":99},{"version":"d8a29ab9ec8a59aa4f7a46217dd76da3fe9b98cea738f0a3031595e7e3633106","impliedFormat":99},{"version":"1efa9583067ef597f832bca0ebdb5a1e2c940d4b67fcbbbf4679528843e38834","impliedFormat":99},{"version":"ac9e0128567c5676b83e5364abc4230a6610fb9bbc698392b5ed197b99d95278","impliedFormat":99},{"version":"d8250e45341b1e98b42e3008bae572623c2690e331950ba0a7b6c0ce6cd59d50","impliedFormat":99},{"version":"7ff384e556272b468d2710a54ddc17eea161d98dd44485d0c0d4161ac7e7da85","impliedFormat":99},{"version":"1388631fa8cdd249a9812333f0c2ce35490055ad8013972eb920e123bc5eb8e2","impliedFormat":99},{"version":"ee6b73c727bb809d7f5e6e22b4a668f466a5ab65ee1b8f214f8ccc3e311a2451","impliedFormat":99},{"version":"35fb1d611af3bdd39f5d5402847167af43f150716a477de3796c7c4ed071f004","impliedFormat":99},{"version":"708088bfcef2939f193d1ec862b1e576a9f345638600a9e82e398ea6f2e006d6","impliedFormat":99},{"version":"e66d27a7e54d9cd5e3bf7acb28838419aed6cf78c8ef567b9ec1427fac774f56","impliedFormat":99},{"version":"d19cd315889739ab3e1956053ded5eb062348ba8cb9891a661d0186b91770f21","impliedFormat":99},{"version":"a0eab628c5edf5340163c01613f55ac9fdfd5186c52d96372528c576152f3795","impliedFormat":99},{"version":"619c675e7f67b1343992c6f35c4ec9a52fda78bb025ff72519089a6da62d1a47","impliedFormat":99},{"version":"e190626bea4b1e20d7b3e830606a43aadc25815806fa1527d527e961a35e8bcb","impliedFormat":99},{"version":"94df71ff0eea0e304a2ef7722ab413d75adc8a98e0c741a0107643276560c7dc","impliedFormat":99},{"version":"1a6e320abcdea25b8489b6e39cb4a4d8c90d0f0ba9f597231e95420c723b9dd3","impliedFormat":99},{"version":"2f838725d0b114c8aba336f110037c0b00b6248958227a74d80fb62946ee5b18","impliedFormat":99},{"version":"c9dcdbf46d97fb2df29586c68cd5ae6748c081a0c53fc37a6132ffa27f6955fb","impliedFormat":99},{"version":"8f430a46820c2649bc2d07c6febccbec75be9bfaddf35bf264590f8191e94373","impliedFormat":99},{"version":"9b110210c3df13bd4e53db3576f4416c4f56142d50b986f46e39450c88c6b780","impliedFormat":99},{"version":"c2d231b90096f0d5dfce494e54bf81666758316e087781f14bb6da1aff9e8700","impliedFormat":99},{"version":"1e1dade75405e843690120e917bf189f5a1a8dcbe60caa2815d949dfa4b5d5be","impliedFormat":99},{"version":"e7c7954921e22f5f8945230f89cb777668b059a7354b350e0e357987aa0417a0","impliedFormat":99},{"version":"3267519b49ae97bae8a7bcc12936ebb116209c6aecdc9f15234b0160ae66300f","impliedFormat":99},{"version":"8d5680d71ff8394d96be70eb3e03ed4332e1b7e5191502aff1576900c120ca16","impliedFormat":99},{"version":"60aa61caeda93417fe0d1c238def5ac44869ad867bc779a82be7c9a1c06d4734","impliedFormat":99},{"version":"2709edab013c18a69f6bd497d4abddf8368a14e0baf1bb30ad5d0df59bf42693","impliedFormat":99},{"version":"c5c079a529300647828ea61619a49261b416ae65f46f968511519c5f8a79489c","impliedFormat":99},{"version":"a746fb3152e96412346ce01d24d5ed2817daed4ea188016d4aad0eb486d193f8","impliedFormat":99},{"version":"9b5dec24186dbc05171cb3f9e4f1e191154d3d4b7f187dde95ed0b08bd38c32d","impliedFormat":99},{"version":"c21c62c5f7e9448de7e9b0fa9f240d5febe46ef3f170ba4f976b24b4d2270cc9","impliedFormat":99},{"version":"b0f482d75e79e076a84d8f83abe57cf80d75bfe4f64faf96e0a6c965ca6e2a6f","impliedFormat":99},{"version":"2d72fb98ce4a52674d73af8bb2afe471cc480afe5de81e4e1fa40fb576169bb7","impliedFormat":99},{"version":"5ad98fb3cfd67c6c38af8bd2761a605f9d911d6e03955fddb0c7fb7cf824c694","impliedFormat":99},{"version":"67f46739541c08dc52bdfdfc8b77534dd9443e7fb4bc31467a211acc699a02de","impliedFormat":99},{"version":"7d8515bfa58add7868c423b29c77598203e0c7696b7345d933f4dc8b04c5aec7","impliedFormat":99},{"version":"6bf2b0fdef53d2460e7f49b6e7272a25b74ea474c052275a9215f645b60b0f64","impliedFormat":99},{"version":"94b181dbd37f644090e1ef29852d9dd6368d8874cf2f4c0ae0a298feaf991eaf","impliedFormat":99},{"version":"2d74c63d20d7eca1904f26dddb4d8b8d8fca12529bebe4bda7d2d14d24bde067","impliedFormat":99},{"version":"eefefc2f2dfa29e2572a60421e45dcf8530a34b17c3a6d43c5799a5ef0550686","impliedFormat":99},{"version":"8e6551df9921ce8c6a3b4fb520d007e28353a0d3d8a1d06f6778c6f1486207f3","impliedFormat":99},{"version":"68954597f1d7f67b99005951e94ca60a3a62bf3913362f2cc7cc653de3f19496","impliedFormat":99},{"version":"4773ec8c467186c29116dc3c3cbb7927437de3311a09b052687c3dfe067c16d7","impliedFormat":99},{"version":"0c710c1c886c67727bb7deb8197d009a9146b1f5afaff62b7342acc76b73f279","impliedFormat":99},{"version":"4d62901366dbbd759da77f66c16897747f70a2d8dfdacecbf8606e668cc6c301","impliedFormat":99},{"version":"60b81bc5977f284d06c8c89cc04b8cddb45ade80758d1a0455c30161b34b437b","impliedFormat":99},{"version":"56e436146023b114fb661baf70bfce2041d5806721935746699df3d1331fc6af","impliedFormat":99},{"version":"7cd4bc26d96221eb7fe5fa0c1b503386377fbcc6757d26ec50014e176a61b7d8","impliedFormat":99},{"version":"bde451f81ffba547053111934cd0ae75bdde203ddefae30976b77033136de1f1","impliedFormat":99},{"version":"775d6a8112d08a9c5fa5d2cb8aa97881ca81cd2344f6e9e158dc81efab171b07","impliedFormat":99},{"version":"4cd295e5f329970c707fb48b9d88d15b32faa9f760fcc977ee10eb160f4e4a6f","impliedFormat":99},{"version":"fc4038d8a91384abffe294d3df8c3a06e3df7073bcc2251272fb31d912e6fe2c","impliedFormat":99},{"version":"22bf99ca0b3d239d88d6d8e6e2bf155afb30b4aca7fc09335087938467543a09","impliedFormat":99},{"version":"cd3682274f378c2462bc4fbb41ccb5300d71cc5c008c12fa9d35ccc54b34cbca","impliedFormat":99},{"version":"67dc58c0b812bd006ecabbd29e8f9d762c41b0549910fa6991411c16e95bbb59","impliedFormat":99},{"version":"2bc40ddafd68113f9625ab18be76b9d69d8622534674ba26e32123e74fc8667f","impliedFormat":99},{"version":"9c099d02e2e82d484012f3713a164cf55c7f63e5cd9c2fda4dc4076648ab862a","impliedFormat":99},{"version":"48b3074e05dbe986b0228044afa1ab2b130f562920e20ad6199c3219b2629d17","impliedFormat":99},{"version":"c9829c5ebf26778156e33b866eacf467eef9beda248f32cfa5042cd2ede8de50","impliedFormat":99},{"version":"658ee70a53b7a4f30af822940b5863208e367769715698fff58d0f38939ce858","impliedFormat":99},{"version":"ca1bca6d1b00d79b032c2dbb48ff021fa7eaed6b0aacc796ef5d0873933891ce","impliedFormat":99},{"version":"bdde7f266379e321a38646d74c7da791308d1de89073299a9d98e356634f7c08","impliedFormat":99},{"version":"dc3b92eb315796d2568e17de9dbbcf25796565d440e63805642fda5cb68b9baf","impliedFormat":99},{"version":"d486d1fb1ab86280b3f8d730a0770d5843cbaee267a13748c210a49d5d8701e7","impliedFormat":99},{"version":"6a1edff3f864b17879bd05bdf8dbff682d14d2b701892256b74da0693616e06e","impliedFormat":99},{"version":"1c3a5421df2a1a0f71e86ff5aabc804934ae48ab0495acb257324b713d2e5c3a","impliedFormat":99},{"version":"6d604fdd569f7e30ff284c132db9b5185c8f9c80fe405d23e2b07c0e663f6278","impliedFormat":99},{"version":"91e3013fbc9ab4ae9415de1dfabd24b20eb1a448a8aa1227f8a1206975626585","impliedFormat":99},{"version":"e811d3bfe878fb14b09ee7746624751e7f861369ab6301d6e3b340f6c5209873","impliedFormat":99},{"version":"c181f4ed01c4d578e7cbfc15121db9d1e53d3292e0e674e89b8def9afc33f2de","impliedFormat":99},{"version":"3aaa8b4924cfba7d4dcec41271cd848ea987093376caf1da8cba263b1a8f604c","impliedFormat":99},{"version":"5c28b10c7829e6f8961a9a03a600e3037ad4d9e005ba3a177ce88c76cad419c1","impliedFormat":99},{"version":"c93bbc1a968312df22be64d3fa283d9a8794e1619f5413b134d7543884a26481","impliedFormat":99},{"version":"3367c741cb20d44594a33c81189e92fb6312ef1ad80e731e8c3782ea7cdc3b50","impliedFormat":99},{"version":"57da5fcf4facb95e01fdebff97414e51417d12d61948324cb1a504959055efe7","impliedFormat":99},{"version":"b9171a4741909269fe324049b8a2c560aa829a95c1d1770be18c9d137f820304","impliedFormat":99},{"version":"f05eaa4c4151749a5994f68172bae0b621e4000e6763eda011b802f5c675871a","impliedFormat":99},{"version":"d59306afb4025cddcefbb888fe9b5e530f36c13dae04f045d783591db4a09af1","impliedFormat":99},{"version":"a5cefa0fba77455d5ae3fe0b49edaeebee2ab7a02eb1fc3f2c1d1ef0f89e80a0","impliedFormat":99},{"version":"06dce6f582073c6fd71ea95e87fc30681c363f0136aa26aaf01b5072f8a747ee","impliedFormat":99},{"version":"7f39fb5640073a2c8292f58c332b8ea1dc40e6771e82485353ff5c01de3004e2","impliedFormat":99},{"version":"eec3d5956e9cdbf258c3052d1da1be6a5414ce9b925adadfbc69772a0f560ea5","impliedFormat":99},{"version":"ca904be0ecc01a5c6db3cd367b323989c367ec5a1b8fc8b290d566030350af63","impliedFormat":99},{"version":"71be24f0406ad4969187a22b62d5a5bca07a9e69fd4695332b823ba50b7221f7","impliedFormat":99},{"version":"dba595f82dfed85bbf4e39b50e27b9c9f52c20a48c72036dfc2ad8658f835bc2","impliedFormat":99},{"version":"81d42dccaf051e8d599b1d70281c410a8a501ac6ba6462dd95b66e06bc2086fd","impliedFormat":99},{"version":"2ce213f1fa2a9d38a4320272de78bb70e7ed1285090783732457d42064a66ed5","impliedFormat":99},{"version":"bba6e7d4458c3bc24b69f68a5152963eb6e9dd72d38618f83b3698153f635d45","impliedFormat":99},{"version":"0e7650ed5439e7d872df4e6bef9d75606da9c73a0682782f52c700936088eaf4","impliedFormat":99},{"version":"f101801894b206a26d61f2b84d1bd5587441e47557bd946f7d651fe0c6ee1f94","impliedFormat":99},{"version":"f2c1d36ed7cb9f429874c7865ae1d193bb27bf0669829e50bccf4bcb2c6ef300","impliedFormat":99},{"version":"d90c065d25c7043fd9b8d3d44cbc3f082b048a641d491ce27812b97eb5545a29","impliedFormat":99},{"version":"6a81e1ba677caa156e6624eb2ef502cf5b3e87cc259656ce649ec39e9ee97606","impliedFormat":99},{"version":"dce3724933c25a776d212550af0a1da5655035339daddc4ff9d4e3eb22ef13a1","impliedFormat":99},{"version":"7fab59a9579956454a09e5ac8001fd78365e650db43364f6aec5be52ae8711e5","impliedFormat":99},{"version":"b2fccbb91f9a6c85e91da363c4304c76f8a7b26db84f7f1bf8dbe5ffb2d49e50","impliedFormat":99},{"version":"bf890587b717c5562425aa385b021ba18900eaa0f176e3e57f0d1016b647d32f","impliedFormat":99},{"version":"3428eb55e4db8b21337d9bbee986cb297e3bd788e2405f02adcb37ad371811b8","impliedFormat":99},{"version":"abd06f3aee8945b159cf67d05a92ca23d2b35a1163773eef91f7cc2618915ee0","impliedFormat":99},{"version":"c6ec8754b8ce679004c28bf2cb0f2eaeaa8de0acff94ba5082fe16ce642ba92c","impliedFormat":99},{"version":"a3005d619de5f9e5d0208596083fc7110aec861b8dfa18f681395c216cc95fd5","impliedFormat":99},{"version":"5c3ba312c2cef70f54aff90e59fba9b61101e1e941c2b3970c1353c453f25155","impliedFormat":99},{"version":"cc8d78d412e3ae3997d0075078dd2787d842b6023bed13a6d9f3e07bb1e7d073","impliedFormat":99},{"version":"eefb675743146703d1c5a1b3e8171b4b95ae65c41120425312846f90c0132017","impliedFormat":99},{"version":"5928755ef02a97a3831fe4c85f9b32aa157d499acc21b3724c911b7733804c89","impliedFormat":99},{"version":"8627e628c30fc555b119326c656a5101e92548b05ceccbf38d6b5916062fb976","impliedFormat":99},{"version":"184c2412e3d88d7acfe70bddecff9004f4610afc87eebe042272f2fb7e0d3c89","impliedFormat":99},{"version":"6f9b9e4b4f44fef1d0b98eb1bb602345f0e22e0a137ef40a615503d4e8b35bd2","impliedFormat":99},{"version":"cacf616e3fb3ea7c2880cf4d1feef47a3dbed29b0bf248b0bdd47fcd8c8b5945","impliedFormat":99},{"version":"48eb53c96dcd4745c4c8bee4d1104ecaa6a877eefb8a5b57af0f7ddded949a4d","impliedFormat":99},{"version":"e0e35716709f99220dee1be057e8f7f08e1d8134c94ad414129b79cdd9b41f8e","impliedFormat":99},{"version":"ea544bfc5e4ff015c70ef62acaf356dfcbf1f39f10f07ca3f414278094e56b56","impliedFormat":99},{"version":"7d439735b74cc5a3de2a8855fa941341dff0628d1fb2b5f2dadc10a5bb6d9fad","impliedFormat":99},{"version":"e12142b93d24c7c67fca041df35d357f21d3751eae8b2afc5684d49630d12d37","impliedFormat":99},{"version":"b1bb63b43bc374799ca0e916542b0e71a7c8bb06d6c8e5f94848a8969536c933","impliedFormat":99},{"version":"d714669ac93d063f5ac5a0dc8136e796545c6b1358554ab423d07fdcca0bc7b2","impliedFormat":99},{"version":"208dfef5e3aa4e176a5112b91b5d1ca082c28d2eb33bceb82c0261ebdeee74bc","impliedFormat":99},{"version":"8361e095def6c5f9fe7303b341c4b3249e82354f78f8ac9602a076fc5a04e3db","impliedFormat":99},{"version":"e047505265ecef24ac538e166898c74fe4ddde9a208446b298ea9805a1337ebc","impliedFormat":99},{"version":"13a9d63fe4bcf62c0115da6fce6ff28caed592d7cf3718bdf2852616a9318304","impliedFormat":99},{"version":"5dbc1632a49ae9232d2006a9283086c23676a72c2869348fab07a92ad25894fa","impliedFormat":99},{"version":"3b24a42d6ff7eb9fbdaeb74d38c2bae20b455d9ecea76759c3bed2c9a70d3b9f","impliedFormat":99},{"version":"ab15374738d77b8203d5054b306e883bc12ae980f3de59b9bb2ab3c299eee15f","impliedFormat":99},{"version":"7fd8a28b8373c1ae0a9690ea4ad8ee96da351b2ddf9fff8f0fc33ba81bd49615","impliedFormat":99},{"version":"0dbf9eb173a832b643337fab8eb3153f2f82d40648cd9d0b654f37e469dde44b","impliedFormat":99},{"version":"a69420221cdbd10d0e9298b3b94d53a633606634ad0357da5cc541ff814d8c5f","impliedFormat":99},{"version":"e706e16bc6c83d4a60da03d7a423048f244423ed55064134d0db9a0a5d1a31ef","impliedFormat":99},{"version":"b11860ace9980039b9a876c8aa763228cd2eb7dc1ff1d4e4b6791fefa8270271","impliedFormat":99},{"version":"a5f1e4c5671abc235aac21bd99603fd151232360064d2622f6d21b592fde4cc0","impliedFormat":99},{"version":"a026df81b303bd8a8256705e4ba7f7845096a35a20885403143ecc25482fb5c6","impliedFormat":99},{"version":"3ad573ea6506a5b47d89fb43f6e7b3e24c9af3dad66408349bfdbea4d0ec9762","impliedFormat":99},{"version":"f08d5516ded9072f6ef4a9bd95d4301b7f168afb484dfcdc3f9fa0032fff1406","impliedFormat":99},{"version":"3532ffeb99fb16886cad07caf0feb76a19cc1fa14a648ce6e6558b04ba91bdcb","impliedFormat":99},{"version":"825a2b8b6cac11eb3228d4cf75487a3c4ed7daad1dcc1fb01c2f67dc75fa6e2c","impliedFormat":99},{"version":"f6976b6c4bfa0dd945409221c74e8adb9ac21110e43e6de6e5564d71a4faa010","impliedFormat":99},{"version":"3ba19528d73345e791808428a0ac7f251f3a03075f73b89393d5b7df828001bf","impliedFormat":99},{"version":"ed4fe0fdd2dd66de8ce064556270713b73bb71126c016db3a755a1b9ddb2b079","impliedFormat":99},{"version":"94535dcbd25f61962f2b2c9a36098001f0529186fcd9aaefd804bc7c3008e0e6","impliedFormat":99},{"version":"a3394d25f46ed8a6ede20cf2ebb07cad72e0928987c437dbe0a80799177268a2","impliedFormat":99},{"version":"979b1767dec45cc88bf49235cc88b3bf84f9072e0cadcaccabc3f51f37dfb4ba","impliedFormat":99},{"version":"53538d2fe5ed0d17a8fb3ed894b35590af1478a2864273f64ea153dc931f5137","impliedFormat":99},{"version":"ceed655ca8647e687782de09d86aa52aaeb71a04db53f7317b294afd98e745ec","impliedFormat":99},{"version":"a19f58bc593383ee611214b5aff06db6ec0c9abff34fbde4e937d56db230fe2d","impliedFormat":99},{"version":"12f07c1ca64c24a16c6b863a1b39053ba466391a42fb48fcdc731b5fbac19c2f","impliedFormat":99},{"version":"8fa98834033c5bd66d016570ad710aaeae12014b87799f57d8c107931308da75","impliedFormat":99},{"version":"5540adb5ed9f7b2a3b93cbae6ba4cc15c9c5aa0230f0b2c4ea65df9fb2d35ade","impliedFormat":99},{"version":"237549157534b24eb1486ad6338a5b11ad017da0b2a433597ca0d62c3978c166","impliedFormat":99},{"version":"14f449fd97d14b30b7d7e74ccb5dc52065397f5a159f109a81de462cbc2ee735","impliedFormat":99},{"version":"1da1c5e42d173cdb28539057403afbdcdba7ba70d1ca88131d478a3461146631","impliedFormat":99},{"version":"84e2defcc0264038c29dc40ffcb934623cf2906e721546276a11749645d650a9","impliedFormat":99},{"version":"981a6d13fdb1a917808b2c0021adf15df76b77d15ce32942f2567dacaa636818","impliedFormat":99},{"version":"8f2f419e0fefd82149f1bee26ef5962d27a2bd1c0ef5652f4558d603debd0cd0","impliedFormat":99},{"version":"20d839e1a5bd43ca94fc3855594dddfb4b04051ca87a6c0f61dee0d2135afed4","impliedFormat":99},{"version":"1327881b3a0726661b36d1d011b4722b301f6dd1d428b82d78f1bf94d7c5a1be","impliedFormat":99},{"version":"3776840bb69fac8d6715b70c236bd06b99ecdd2c0784a2cf0be7899fb7be13a3","impliedFormat":99},{"version":"ff224ec5ccda457a52bdf0747d643ad6029bc7ac8cf898f94047361fde72291c","impliedFormat":99},{"version":"b58c384659075652971d0c6cd25ad07ae6f193ee37820bd8daee6e3436a8aaa2","impliedFormat":99},{"version":"daecca2dbb88b1b1d759e2172245e8187180d777c2066296762811a33703db67","impliedFormat":99},{"version":"caf1e76335a50ba27f655209a1089e342e44c10410c834436308266cae1a0ed5","impliedFormat":99},{"version":"ce73f579eac2b41a8f1539d870ab294efc1b4e0a5680b57e027d2d69464bc5d4","impliedFormat":99},"59e39608df1163e62f99cf050ebfb8c3719e527948bc23d14ae666a82091aa86","ac748e09d32a8e75e20dd6fbdea8dc8d30d1867368d13b533ac33f1ab897814a","867bb97b1d704542850b3fcfb211c3927527e6c1d54dc5212e2dbaf43610c08c","01545352cd50165f0e9acb3bab9ccad3836b900a933f9dfd2f3d8eac85a4e23d","c6b22252fd81fab88777c261294894afb19ed3b650a76ec5e3a4644950bb9f8a","4f86bb43bcfb2bd8840c139e569b7aefda3cd185e79f1e7830b4c5f4a83e211b","7ee58ec779ca09640a261bdc4ca5866f7c4ce460c56eda867ebaa80ea54447a6",{"version":"072f1b6e02d778a7cb4690ca0d6ab3a5bbe82109a669e9df7da5eeb713f39d65","signature":"c91abaac1daaf8ed1eff25e455b0c7bc21c88352526b7ba908e7b34d9136736b"},{"version":"fedc552a6eeda0e058b9dac5889b12477d4ccde96bef40e137c9c986edfda865","signature":"3579885a04403eaccef959a657d76eafb5aadfd21c1c85601ddfc7c3a23e7104"},{"version":"1aa35951a35f3a9f0d6b98a97aa8618f493aac1cd4dafa00a8fadde523388a65","impliedFormat":99},{"version":"fc617375b45ee09d7cb8a72b353a19274fe9417d9d20fc9090d91dc81518cca3","impliedFormat":99},{"version":"5888b0947a884c9fde925e7c673b34c60be9204aa592be3adb2b88fa2a1f5cdc","impliedFormat":99},{"version":"a77de3d536866c603794061a04b219dc4268946f2c7c728a7fed33600f05e8fe","impliedFormat":99},{"version":"40db523fa785a3b46bd70b1a25a695c27d46ab166ee776702fabb179a147822b","impliedFormat":99},{"version":"500b32eb5dc828f25d6809d545fe5fc290b080db92676e37c07a44d8190f3f67","impliedFormat":99},{"version":"50875ff16ada1ff33d8e18733603003776bab2a16335ed9cc809326bc6c61b43","impliedFormat":99},{"version":"e645540c570c2e1046691874adc1b7376aea883755ccf9aa48a654065684882c","impliedFormat":99},{"version":"aba4a3c7faa69d25a40e7600c4fc2db23f0488a2fa951dfb4827db5aa38ebff1","impliedFormat":99},{"version":"0e053682370a25a792dc16878e2af8657a444cf97c12618274db74eabb0f9010","impliedFormat":99},{"version":"867ecd736f6f31716faadf9a3574a6694f987128388edfa4e687eb5e89a67065","impliedFormat":99},{"version":"30f10da5b47fb74c69b91cd730c4715a395a484b09b0735538f6ec1666b556b8","impliedFormat":99},{"version":"62fb8b584d851bfcd3980b943e066e0074ba8065dc95829f86da499d4c9351b5","impliedFormat":99},{"version":"93767dd1d97ae870b40fa30b69b995abd6c7f40a35c23cc2da5a09a7d978910d","impliedFormat":99},{"version":"efc69974888eaa43c023f0c84188e0f51c33de8416d84757198709f0827da696","signature":"005298810d360fd8cccce2ba580b1665057eb621f5414aaec8b0987d46c59804"},{"version":"25399dfe8085cb9ce8099d20645a028b4f7e06ded03c9478e93d85fb43caa69d","signature":"50025650c61b0e6bc3bcc6f826aa6d9c545f7405ac133d3e299b04acce93c6f9"},{"version":"23c52d0f3672038f767ddeb9599b99a38b9e91425ae696612d1b09e35c8434dd","signature":"4a3cec3ecec51afa81ebabc96039a33df414b36aa5890be88b12ac4232c6be67"},{"version":"64472367554c80c3c8e325ff91bd06f3533b50ce8cd015c6028fb642ec5a0ab4","signature":"8739e7ea3e0d3ae0c8f714ef2b6b7071d589f85e027c7ac5cd3a5e0e3cf3b5e0"},{"version":"805302d3dc7d8c3a3ec2b3bf3719eba4e0b2505f1418717f66605bbf6bdec1ae","signature":"b0fbe81a8f41cc46cce3ea8a75d8c39c6dc893e02514f9b5e62a8af74b61ba98"},{"version":"d229dfd0bb42210f6271240bc480f4d5c3fb6a7d90b479baa63cf65687d84c79","signature":"14539cd94354da6480482d112cf72f1203cbbc04b7b6dd8e314c1a8bcdae83a9"},{"version":"6fca1a908743be1b2536c777d9d2d76dd40d6982b11b75efef0552c920b3697b","signature":"d8308ad2a37ec7e7529ee9822cd246efa5498faf9e3f5ee67e7bce43b45e8f17"},{"version":"893e60efa37b72e5b319ac2d5d9acc74463e1e606ecc7722bff69546ddce6780","signature":"a74203e045b8c862febb8e53018926bb4eae1073b739a32cd3c8705c54e28fcd"},{"version":"3d3a27c628bfb86f4fce6c96c11c330ef84ad17853fa492665e99c44db8329db","signature":"dab649fee9049c275c1dc6f63dd5d3ef29e78bda75e8a10e7f09207c94ca1add"},{"version":"6153f46318a903c0315d471b93c4bb5f1547c6654926d6e084b4e5a956cdf216","signature":"83accb8e9e226dfa4fe818bf9a3e585dfb950b25aaa88f966ad8c80719f47358"},{"version":"218e5b753296e767f2909df4357994983ebea5b8b8129e2207308c67a14e0c10","signature":"ec32d9a7a391deacdf18f4d47c61a3f703dd9480cf072d783ec8a8279e230198"},{"version":"3082f7de64e748a97ad512077d8fc7304adca59889ad8eec28ce01ae602b3a57","signature":"b810721c1eb9e490253a08a1d67d4985c7c0d22f02da451bbf3f06770b480462"},{"version":"0367925b7c6e8f5dcc1d1a0562b0acf9d703b6c09a0a569ac553bc979646dd31","signature":"55f3ab5158171a0b28af1369a15fc398310d06c969978b45aa32ddfb52f40031"},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"9cf2117b904bb6d7d12e9132f38426ad37d92a93727feafb3c6e1657c930f3d3","impliedFormat":1},{"version":"d48904eee50b64e6c906aae902322aedbf1a85ea24ceb79959d3b4e69e309ab7","impliedFormat":1},{"version":"baab83d67c6d161736e5598d36999ac45cd45cc0201347c0b979ae749bb29c36","impliedFormat":1},{"version":"0f80d673b777749ff3b474f8b0058db232c41a0324ba9875a73bb27e71341a17","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"1d0fddf9f4d63dd72476d369c981fb3937f7459c0706337c5f266522c746d568","impliedFormat":1},{"version":"21360500b20e0ec570f26f1cbb388c155ede043698970f316969840da4f16465","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"568b463d762d0df07ed10081293715069168ad7cf6308525a3bb93777b127845","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8926594ee895917e90701d8cbb5fdf77fc238b266ac540f929c7253f8ad6233d","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":99},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":99},{"version":"a3c6c6dc66a0e864b2472d6fbb32e71e0f2a4abe1e8343c2b5d1f172234bc2aa","impliedFormat":99},{"version":"7007626fc0d98e012e02caf70ae36647d7288b06c9121b51b20af592ebec3d53","impliedFormat":99},{"version":"baab83d67c6d161736e5598d36999ac45cd45cc0201347c0b979ae749bb29c36","impliedFormat":99},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"3b25e966fd93475d8ca2834194ea78321d741a21ca9d1f606b25ec99c1bbc29a","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"3b25e966fd93475d8ca2834194ea78321d741a21ca9d1f606b25ec99c1bbc29a","impliedFormat":99},{"version":"3b25e966fd93475d8ca2834194ea78321d741a21ca9d1f606b25ec99c1bbc29a","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"3b25e966fd93475d8ca2834194ea78321d741a21ca9d1f606b25ec99c1bbc29a","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"3b25e966fd93475d8ca2834194ea78321d741a21ca9d1f606b25ec99c1bbc29a","impliedFormat":99},{"version":"e2a9a2ee24da53cf39abdc8ccb2c8b09e8b6b7c8f692448b90698d5208ed5e2d","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"3b25e966fd93475d8ca2834194ea78321d741a21ca9d1f606b25ec99c1bbc29a","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"3b25e966fd93475d8ca2834194ea78321d741a21ca9d1f606b25ec99c1bbc29a","impliedFormat":99},{"version":"6484b25a0de66353ff65d498318289e1ee89515bd6105c73d64dddfff8835699","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"7ceb8bc679a90951354f89379bc37228e7cf87b753069cd7b62310d5cbbe1f11","impliedFormat":99},{"version":"c2f910ba0fa231610e69919a9fa3b9106132e1a961c7fc9c50baa58ab5b6ac53","impliedFormat":99},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":99},{"version":"abb8f126c997b7568b0697a0f632e578c4ecac8827781531304309419949e731","impliedFormat":99},{"version":"a611b498f79f351a0198617160e20ec4dce6d9a9142d5b520769736caeff4944","impliedFormat":99},{"version":"dd4d1d262d8cfd2854ae77c168ad4d82b4cf2809074c1cec1f9b0f86ae2ac61e","impliedFormat":99},{"version":"f9698820ee8371215e8d015cfa060230c62e65428397dce83f78e6538976301c","impliedFormat":99},{"version":"fcff41acfc427b85bc61038e5e005dc08a78de6446ef906e14cae05f15a340ae","impliedFormat":99},{"version":"0f1c865b6be68a4287afa456a6ff4b590c2ba2c88c613b2fe944f00d2617b764","impliedFormat":99},{"version":"3b22881e19fba860247cde1f60807cca7ce44ad78814fe5789316c3cc16208db","impliedFormat":99},{"version":"4db734567df9686a8ea37b9592b8f5c191b3d4fe954da6e795e600ddf49b7c09","impliedFormat":99},{"version":"f0ebd1c2e1708e7e7d105883430d3ee1d856560e26b346469ff584ec68859e9e","impliedFormat":99},{"version":"7576d06c1b52d6e3dbd8ea3c53778b5a8d8065fbff3678db495c6166a698eda3","impliedFormat":99},{"version":"cdbfa8f0aa11a09117ea0427128d413c4b69d6f7a39e4b3f73c24622cb1e8233","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"77b93ef691f1565400f9b67140aab6b463bd0af8a1139acac2512555a1a4faa7","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"3206d1300300275d7565e647ed130c5d2e11fd1eb621fc92f2f9403473aa5135","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"d4a5b1d2ff02c37643e18db302488cd64c342b00e2786e65caac4e12bda9219b","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"47eb88553f70c448e8cc7f30eff9e20d2943888fee35b9187b845a9729ae5e44","signature":"1b714392d2bd826da13bb0ac94daf6ba9d75b79ac24322982110a5d7ccc57e32"},{"version":"8ef54364acc4820ed0d5b300dde8b4e9d7a8962f520f174f8a45bff739a87ea5","signature":"8a8d5f63efe0879c973bd9ebef3b4213fa25a8ff54ac060f95e902d20ea5cdb2"},{"version":"9124122a31ffdde2190a4390dd48e9ddbb18168041d343e2a42df8c4a468c154","signature":"7eabacba1f0977a5252a75797b2092643db6c78b596953796c57d82d34cf0bef"},{"version":"9dad906ca9a4c50cc4da2b6f80a1582658ec9e356a00b8394416b11f6736955c","signature":"4944c99d31c1fd596b7b0d6e7e8aaa0e834ab276d14eef84c7235deddad04832"},{"version":"4267f25f95ac4eac372b04b1c6fd25c1a376b88dcaa2ec3177726932200d53d9","signature":"86dacf0aff6b655bfbe9eeba18931daf061121b6a5e189b5108a5c213dffc908"},{"version":"f9800ee41019d4c7612364fd1eb3862dd535166959e139c8e54c61c421fdb799","impliedFormat":1},{"version":"c868f50837eedd81fa9f61bd42de6665f74e7eb7a459135c6a14ac33ddc86798","impliedFormat":1},{"version":"de5165b21a147313da6139415f3ec72be10553d21567f4f103d1a2f00d4a673a","signature":"06faf0943dba7a708f7f55553ab0b4baa55ff07c8bf406463bc312035fccd4c9"},{"version":"d9ab3101ca611de4bf8e8bf05ba1c3861d4830db2196dbca324dad4d047be562","signature":"2651feec3bba44f2c0b903c643c01dea460a601f2a74daac6e14dd2fec2fa301"},{"version":"e9ae0e1274ddb22d44611d7fd74a49c90969fddac43859721a1de67474deb59b","signature":"2ef5c0e058c9d01057a015d4d65effb0ae830b8e032a17cb20d88a6bf5a43e77"},{"version":"b3bf5f018fff157fa25cb19ab5313fa12b3e887ff849f16d23cba4211adddee4","signature":"ed5d1066c53063ce8f7ff4e38eb26a9decb3756e9dc099767eddb77a935e4e9e"},{"version":"88a3a6f8c2a1640d8d5fd30d8d86462f8babd86a1e52fab0e8b7f7c141fb348e","impliedFormat":1},{"version":"345f76c854da724803c96f727a3f9c75e26cf95c6e7b8c1064dbc4e7727b74e6","impliedFormat":1},{"version":"ab7b7a15a5d73eb0cfc2b973e580f357f07492bff6608669d7e899e2d49ac9a3","impliedFormat":1},{"version":"c2084a7d7f213da66ddb25132d3aff5c1f4355fa733fcdf76130aac2067b0d1e","signature":"44298c31045e158aa151c54e72ece9f004128c07a4d34ac01555d8077dc49a5e"},{"version":"1eac292137d82dcf49252d8bab8082ce91d6c6c4650c30f7298666a0aee458c6","signature":"4642b5e8482f782c1ef5cc53adc7866766f31394498a58b63f55ef0a1c965a34"},{"version":"15145fba156e5b9fc1eddeca77d8b689796971233adb711ba200709708957bc9","signature":"621aa1105a7779233bbe3150b78aad858dec3f2b8ee56e08bdb0e0503928b0ef"},{"version":"e280cf451413ee9802d303ddf3aa7bb8827f1b22e1516faa28b6e777370bb045","signature":"fca1a3e666bf9722ee8115b72e89fdb39d2b0bce14f9f64f57c34bf0ac854a80"},{"version":"d05e05cf5853fbeb0c6ece03d83911c25418bb05da89e4eb1dc819a92aedda12","signature":"a8f6c3f267c9c94695689a38ff0dd94a0f3662f3445381a340548bcba627957f"},{"version":"2315674631123ab12c9869c9f9621a4d90d3d5de60ca5d469eb66e908a836c2c","impliedFormat":99},{"version":"acf8ad22752301247864f14024924665dfdbe0b8414696676c4d8a39321d63bc","impliedFormat":99},{"version":"4c7f6be76cccefccf0d639f0d5edd365c881ecf386dc0d852d111105bc432067","impliedFormat":99},{"version":"8e30fa9af744a2a74b32f39a1606a7433fc05b3c6009b955f182609a59fcdcbf","signature":"9d5a15864ec4c45f761c1141d5c9ba8f845105e29d802116628afc323ad55035"},{"version":"e282fc317b5f6982257e4d1f55711caecf345d56d9ef7f87dc4d8ac8c5c79e3d","signature":"90c226114414fdac23160ebe159d5d48e163abfb3e48b115eb2f9a1eaa72fea1"},{"version":"94e9b4bc2c3652a09e11b80eda31dcc11032113127a17758be5b225aaeaa3142","signature":"18f4ff438a292a9c45d98e984b54aab35bf04d1ce3538c47145586d201b9815f"},{"version":"f3ad9459d5598a6c94d23a3356452eca8cb33203d2a977e721b491395de9c743","signature":"7ab9ecc859c20eaa5ab1d35e7ff4d53d5ee371ec04abee93e5befabaeed70e9a"},{"version":"d13c430df8d1c63e599664ee73479196b682500b90be1e7a6c415bbf13e8fe64","impliedFormat":99},{"version":"6d0ce56cb49437d8ee045dbf270030f71330ca5a1567571fe5dfe634cd4804bb","impliedFormat":99},{"version":"76039a996bb80ad697cfed59506388f4cccad3108a45d50e575ed913b3dd2f98","impliedFormat":99},{"version":"b5f3feb217de05697cfd25a439a68170885298ad21d74e845bb65aa8fc259d8b","impliedFormat":99},{"version":"1a20dc6881269b15d337502291d983d77828cfa17258b872206649f64ca6a959","impliedFormat":99},{"version":"0a2ac493c731dcdaf2b616a41701072255dfb5c76930efe4af4f677993753c0e","impliedFormat":99},{"version":"65a6284f31d83fa6f0c182fffd9f649bbdf5861ca918f4ac71a51682e525ba3e","impliedFormat":99},{"version":"746e91d417dbc040597451cc3fc1a937613670b661f4a4b7b074e21fdca2580b","impliedFormat":99},{"version":"0f3a17cb6fd1c9b136bbbd8ba6db017f878b4a5169df683b976fa6989c083301","affectsGlobalScope":true,"impliedFormat":99},{"version":"4c0885f7f19f7bfc84a30385a016ad6c905696b202b8d94363fb53477da38c68","impliedFormat":99},{"version":"595af119907d6cd7787ad70d94cbc181d6be8c91feadd69bf16ccc974ee3446c","impliedFormat":99},{"version":"2ae6d6197a8627746e6d0aba3526851154bfe38208cd827342cb1b026a9bef47","impliedFormat":99},{"version":"7ee6c5e82e333cb97acb44a6679e886e5a72b5249d7c4ed9697d9721a92469d4","impliedFormat":99},{"version":"8008df553e1ac6d74912108aefb7d411493b5f8887d30cf7aecc49770e2104d8","impliedFormat":99},{"version":"873171c45667506f02d8ce188204ec602338da7133421141a00b26a460c1d0f9","impliedFormat":99},{"version":"4bb9712426e9546c2024e284739387b9a109d717f0496f9106160ccc2bd45734","impliedFormat":99},{"version":"805f6d6728dea6c0f2e630e3348d6cd2015859380c2b49f88f9a3c699a332961","impliedFormat":99},{"version":"8e3dcebb18dc5cc45cccedb3f9b841240936ed909fd07b0da73957888139d626","impliedFormat":99},{"version":"05bd3792a1db7acc2a52e5582d69cc62db97f9463573b996951689acb5d75e39","impliedFormat":99},{"version":"5e7dc32d64c6658f6854c042ec30a078fd0f9a27d8a245a049ccbb8e4775ed59","impliedFormat":99},{"version":"ed0a2c0a086145f6ba9731f1e21420f2e4570b66607d0c50d6354d5058739cf3","impliedFormat":99},{"version":"7564cc7d7b9ddb35e7b78796cbb9c02fe039387f655f73f6b87198653f3b2e21","impliedFormat":99},{"version":"a44a14f85fcbb4cc4e4bf8b52f9fd9632e3bf3a54838521262efc04a2bb09833","impliedFormat":99},{"version":"9cd9486a759a4df86952f8f0af47fa45888db7d83d3bdb9ecc077caae69f90e5","impliedFormat":99},{"version":"19d9bf892b7cf258c5eb81fde5d01c23a1bf0c7960c3be62ecf5963f7a8e1f87","impliedFormat":99},{"version":"648c3de818afe228f6cd8a88e366abca244a1aac9a51d61b2c961355566e7631","impliedFormat":99},{"version":"aa7e9c5521ee62863fd31f776b451d4c067633ff1e776abbb88f8444bbaeab6f","impliedFormat":99},{"version":"e0759ab5886e2613dfb547ade1f98c3d1ffd4bef981d9113255f2903373e1b7a","impliedFormat":99},{"version":"5711f3fe916f78b8631167321e198e7e33e1ed6ba31c51a4495f48f8d2efc935","impliedFormat":99},{"version":"003c3ed15cb44fffcc28b99565852112ed28449157985d2c346e238e552c369a","impliedFormat":99},{"version":"0ba26f164e4bfeb5fdadf483bbaf6efdf685eddc88021b13f6a161554cdb6975","signature":"5a7d164fac7c439bd62671feb64c0623537af7293e2b3b147c4a967e19cb4ead"},{"version":"fbdf242ce7746eef5e39b22ec3cf496779ea56e272a51ec288a69c495c1acd5e","signature":"0ce0c8795913b7ef727fff5caf50378df27efa158c72cbed7885ddf784c83bf6"},{"version":"e751ed2f206a13b0ae609cf4f43a064ad7eb0473946d59e0cbd339f7e346a1cf","signature":"1a68bf58bce0daa705989c65597071e884746342a1cd3501d7de02d472ffe9f3"},{"version":"09fa1c68179f1a7a19527ee89ba5153f3eb78b7d85da181d4a9018bdac6d044c","signature":"ed7de64006598b4e9cc89fef7b51ae477831c8c307aae10755b195df3c5e5914"},{"version":"521099bc10aef07334707955dd2cf0edc6d8960e8ceb7170a06779e3024ad301","signature":"21cd8079eca82e4d9f65511cc7922d5dd659241c809c8d6dcbb1f0827bb5caa7"},{"version":"f192750486e3de819d006e1b8efdccc2a89cf723a5ca7615c929a3a80d42e911","signature":"ef71917eb80830d01e3178e2f5a892cf6341081aa342a3b015797d80cf130a93"},{"version":"cff399d99c68e4fafdd5835d443a980622267a39ac6f3f59b9e3d60d60c4f133","impliedFormat":99},{"version":"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","impliedFormat":99},{"version":"e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","impliedFormat":99},{"version":"73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","impliedFormat":99},{"version":"fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","impliedFormat":99},{"version":"4f041ef66167b5f9c73101e5fd8468774b09429932067926f9b2960cc3e4f99d","impliedFormat":99},{"version":"31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","impliedFormat":99},{"version":"7bc76e7d4bbe3764abaf054aed3a622c5cdbac694e474050d71ce9d4ab93ea4b","impliedFormat":99},{"version":"ff4e9db3eb1e95d7ba4b5765e4dc7f512b90fb3b588adfd5ca9b0d9d7a56a1ae","impliedFormat":99},{"version":"f205fd03cd15ea054f7006b7ef8378ef29c315149da0726f4928d291e7dce7b9","impliedFormat":99},{"version":"d683908557d53abeb1b94747e764b3bd6b6226273514b96a942340e9ce4b7be7","impliedFormat":99},{"version":"7c6d5704e2f236fddaf8dbe9131d998a4f5132609ef795b78c3b63f46317f88a","impliedFormat":99},{"version":"d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","impliedFormat":99},{"version":"b6436d90a5487d9b3c3916b939f68e43f7eaca4b0bb305d897d5124180a122b9","impliedFormat":99},{"version":"04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","impliedFormat":99},{"version":"57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","impliedFormat":99},{"version":"badcc9d59770b91987e962f8e3ddfa1e06671b0e4c5e2738bbd002255cad3f38","impliedFormat":99},{"version":"f95cf9edcd841c6beaf8d6f64e240ffe698968098849ec61663c83ecb92dc4c0","signature":"137c4501073306ac0e7825f1a1f83ccd469e108bec3ffd7892bad997798b6749"},{"version":"db68e86de6a9a53f56a408268a3f35243ccdaf1b9cc0f0803d53007675b4f15a","signature":"3ef77e9066ea483b18f9a43541d430416a581413f78e206ff5cdd353ad00c647"},{"version":"296f16ae2774e34413c697a8d9fc0ae9019212a510852be917f87a8b5007d753","signature":"3c0c7d06cefdf33f689d455be2fa9e904ef0f2ba45a567b028cb2931dc2e303d"},{"version":"c239748d30034f9699c4406aad092dba5e79963a06d4921cca685322a1034644","signature":"17dca3f65ec4d9359925416476ee0dd88191376b75b21d82b6ad5d7ccba96f40"},{"version":"47c639d51322d099a85c47693da2fb01bc97b2a1209a7a30761e568b53388d67","signature":"8b4f24dffac49976cb5058fbfb61afee033e8489c9f52c743b3beca06aeaaacb"},{"version":"b43aa0bebcd3ca8e6d0ec9f1c8b756c003bfe9a36584e52890535b326b87d537","signature":"c5db0d80bbadce11943b519705d443121daab61e9e9beb0b080323c1f071ed6a"},{"version":"4a8204fb994e9f83c7d186652b3610599f03580cba5538f3dd722a7c3fbef0d0","signature":"754199ec5f090a143f76566b234d21d60072ac9fe823d79011b6852615db0b3f"},{"version":"7dc82399ef6dd31280bce9c84af9749d1c8e84ad61695e5e981dff3be0f28adc","signature":"2a587af2c98fc11affc475f5fca21b888b8d74010597a4b8a28a2f80a47b90ed"},{"version":"c4af7861eecf5bd6cb12ba941f68ba3a67d013fff24c22ad0897b125ae1c909b","signature":"f6c4e8c16d579f6f741c0b8e047b4d2817c68f8aa5036438570cdfd816ece773"},{"version":"75de8edca07d7c1e6230cb6b8649f225f9e850182f9bb935326a5084f7eb7c2a","signature":"3fafa42b11a9fb8aabcd44857cbfa3a25fc528aa7adfd3316de79fe21e23528a"},{"version":"b23ec77e4fdffb508092a40fda21e1d28825e8282d31207372b538c1c84e39e7","signature":"b10591a679b27887b3430c4b0db3e95865cde05570abef0e4d85254d6eb81f10"},{"version":"167ced96683f186704b35a2bd131c120d0222abf14087a1a8ce4310c32a7e40a","signature":"c4b443131c709383e7aa19e4c27872fa55a407e4a6ddf1dd93d6a63d7dd50f05"},{"version":"19a848a45b2371a727c845cf4ee2571d345c2c6ec58791f0c1df4566fa350648","signature":"87221dcfae9bf3a8ba5a425b200d0a56768901b060e81615b628a2ad20780c42"},{"version":"d5245acdfe800882eb2a8fb12c6ac5d3b9b497e99d47c534f37ff3ca2edcf2cc","signature":"76e15149d5bd45c342af0d0097be14b0405a5c0d159b227f5fdff6224009bdc6"},{"version":"0b85ad848867d141b9be81e6a4c22c1f428361ec212d9a90426598f891581e17","signature":"55e442ec3da299613d42ebd1f20c72efdd17af8d72777a6c224ca111dc8cc332"},{"version":"245a6d49a8c543c8224fc8e936e5cdfe9f8031397a0baca21df7875d3e1c0793","impliedFormat":99},{"version":"56277c308ec8aeb151402bbe00936244f731912bd52bbe404f9861a1ac56ce38","impliedFormat":99},{"version":"a65e2b08014c58503f4736c4d2acf8bd0fa9bf8bb26594661e5589878fa12777","impliedFormat":99},{"version":"73419d0dea42db5f9dce032ecce8438bbf31186ad88a69fa64cc63c35b532112","impliedFormat":99},{"version":"ab35d635fbc9525840a47c7ae869682a34e237e7693163dcd905f512e5754c60","impliedFormat":99},{"version":"ee7a1f5f7f64294940b5de9e1f2176b32283466e7deb7e2b59c285226cd91e11","impliedFormat":99},{"version":"b659e5187910757fde10ae751a7daf1d5223b5ede3e7da4fd8a6802377a8c066","impliedFormat":99},{"version":"8a8d60f4f3ef95822142926bf9385e7373e518270944375db95232c4d71cf3c4","impliedFormat":99},{"version":"b864648301753313ece820ecba983f75d24fd41d557b0251bb1d3d80aefdf71a","impliedFormat":99},{"version":"9e591650a82bc321ed7bdeecb30a0ea9b105be913727e6b5bddb88e49d65c41a","impliedFormat":99},{"version":"0a044cb626f8ca7f5150d9c545b92b67d1ce65a0f0c06af1c310bdfe79adf9ed","impliedFormat":99},{"version":"7a34bc48c16e36599d2557e0c3551c02c2d2c65786d636fa4642dddb7861ef01","impliedFormat":99},{"version":"074aca4e6e82a8965426ec5e5926ca3aa10240a3815b77b40307a9be3ddd15a8","impliedFormat":99},{"version":"b092c5b5d580b68d779275cb451b3f7dc07efe4f6bb33fb704fa93ec10175dc2","impliedFormat":99},{"version":"d084de09e030e1af6f242f4a52d0c5fbd68bde6d32920e01a684bec2d3453852","impliedFormat":99},{"version":"b7933efc957e83aec2f30c831212adbd4d15215f756d7ab33fb9e3ebf856fdad","impliedFormat":99},{"version":"949eb33fa405ee20dca30f39f9b9056fa9c1feb9b71a3ef0e8ef22cdc5925c62","impliedFormat":99},{"version":"a3bd0fcb5f2725be426dd059489112c116078fab537ed46b0ef30240dd5fefa9","impliedFormat":99},{"version":"e699d592213bdc71301dbbbe7b00501a3ea7df631afff96f84a81a0dab4d4210","impliedFormat":99},{"version":"1f699f13de7568a6d155915f6df922d37d28c21385d8870c5d0b39631114f2ec","impliedFormat":99},{"version":"c9c5c1285ed64b9d73561bab43177b87dbff5d70763bf9a0a94fb5db6877ce00","impliedFormat":99},{"version":"5cbb2c0ad2cb72f2903219edcfa11f726d598b6a366dff0ba7605dea95304019","signature":"27069d32070e1d2913a0de89ae0c74295b2457c2ff5a29b6c45ff3e94e0b2d70"},{"version":"b2c50c8fa40b88dc4e701f2f2386be66f1ef2af881885154d0aba254d32edaab","signature":"6621c06e436bed55a462483f18309262bf29975f7e892a13e8e989527e65e0dd"},{"version":"1b7b60a40629659431029dc59547d9b8a9b0f7462bd06862a5d42780b478cf0c","signature":"e0daee9583e05be57e2b362ee770459ec06b6b89a3412a80f430c64f67eb2cf3"},{"version":"0c272b5059614bc905e221106dba74957ba6332c82d2c8eb4fae0ff3ce884212","signature":"b9df08f25ead158f10f2dcd5829a00e0937da814e17c80c13e67d76c301dab37"},{"version":"afec5201b0ac82f071b726c59b2d36cf94001ff9e6bfd544ed9512c694f7bd55","signature":"7998242868ea25a20d3de7b0a42d258bbda7ff58790d3971ed75f9c103320da8"},{"version":"ca691ca30737e54f007fc9efefe707087a66f80b8b32ea41bf5a784a5d2696f6","signature":"f7fb81db50d1d7d5de84f781de294ab07813f3321f685fffb8821270d8a5e3ae"},{"version":"97dd3ededc51ac34a575d402be50e4e27fb9a975c85bfd61ec5f9b158e0df6f8","signature":"5a4cfffa4310501ac00a5bdd217f95c6dbc2fc1d385709fd14d0d876fc07df04"},{"version":"22a6495b1214df83ce164d7e07a6ac674243ce7d169cd937f7688eaafc7c49b2","signature":"f7bb10a179903b14b5d209e2de42de3d0e34576f34a4e32e8250b669e2542a48"},{"version":"f2210984b49aae27d2665afd97319a33329c4dcef97c3fda791992f74ac15874","signature":"819b643531f6025648fcc1089be90b6186624a7a6ab7907827c7ccf72919e45c"},{"version":"afa6063cf88bea4d55daf324272c36729a111154a5d6c0af9d5270a831d68e1c","signature":"d5d49ca198d5f65b05240582947063e1d2210c76b2b5038595aad4e0fec51e23"},{"version":"0d2b843908335f2bf51b490875fbddf78082803983abcd6cd7d2c5b97a61e1eb","signature":"1c0fb858525c1a28e6da850211bbb7ac91b09d7720e19f8045957e87f95b39be"},{"version":"ea66297fe7bc4f8f1d947c8c040f3e7ef47765f453a9768306a2c9036db94c18","signature":"a866e83e9eb1193a532446d2cad05c97b57b9b0467432780dbfec13af5ff330d"},{"version":"50cf7a23fc93928995caec8d7956206990f82113beeb6b3242dae8124edc3ca0","impliedFormat":99},{"version":"352031ac2e53031b69a09355e09ad7d95361edf32cc827cfe2417d80247a5a50","impliedFormat":99},{"version":"9971931daaf18158fc38266e838d56eb5d9d1f13360b1181bb4735a05f534c03","impliedFormat":99},{"version":"06d635a90365afe107c7e2daaa9851f5d3f062d78ebe4524b1b23b122469a1e2","impliedFormat":99},{"version":"aa103fbc4677b71d3deda20d37088cc2f39c3db8c2566ddf516b56ce7532d00a","impliedFormat":99},{"version":"0c5b705d31420477189618154d1b6a9bb62a34fa6055f56ade1a316f6adb6b3a","impliedFormat":99},{"version":"853b8bdb5da8c8e5d31e4d715a8057d8e96059d6774b13545c3616ed216b890c","impliedFormat":99},{"version":"430f4fa4e99e5e0a7ca2bbdde84abc8536bdfde4fd0de26009db508b8f571bb5","impliedFormat":99},{"version":"fe3c64bf61fcfec9b9861725c6d92de03f33748a01d982760ccfa798d777cf9d","impliedFormat":99},{"version":"1120a39f36c968298e2ca1d8cb1405389f9696f6b49e13b335626a94c16930bb","impliedFormat":99},{"version":"0a049adb920f3b42e1933c037052bcbc5e78b4704ad080bf078353c7f8ed6225","impliedFormat":99},{"version":"42e7132b2adf667cb4b3256b041158e6ddb0334421ed97d600c3add9f95fa116","impliedFormat":99},{"version":"6fb88daae6b46b2c83d62fb9cdffdbcd3fae80873c0fe3720ac8c21e8e23924f","impliedFormat":99},{"version":"a53e8e05b890e392a6daec3964ce9333121de7bec95bf024ce3b5174b06231ff","signature":"ae27dcaa1a623c9e414f92e08d97694a7099ec95d053c7a255b6df97991b4291"},{"version":"4b8f922855918e27faf0e4162a49fdda6972ba19f8bd2e1cef66113a683dfbb6","signature":"0813eea47ed03092fa8c60dc303b29eb4ea30b61ee7f3b4c9fd9f96f8b9cd5b6"},{"version":"29dcdfcc3c796ae3d2539aed606d04357c0577c0ec141450f6eb09462eed8774","signature":"118a4e7104e75c2e541fb6eaa56e94cd8f78a0f96b64bae39a9c1495d4fd0c8d"},{"version":"049bf9486437b06a60b7aa3e9653d1ff5603f4612e1ce514eee408d7cfa1fd8a","signature":"b00cf6ec6a7ca52650b43698edd2973d2f3b1387304c9015ae1e628526274468"},{"version":"c132d5d5e5b643e1e3fc2317287a03eef1a8c16cbc64fccb412bfd5e07b2b793","signature":"16fd80d07ec7f4679925e229ee9833821e5977778c72f47445262676fba08a93"},{"version":"f59b803a2097c3f970880c267890ea5820b238422385b657a4b24e2c16701503","signature":"25936db15d1be2d54ea5dd6df639c49495ccc1fa0113b313b0cde0709c8278b0"},{"version":"74ad783bbefed67918dcb9bf6fca64c2ed4ebcfbeac684f3468cfbf5c9b6b88a","signature":"bdead48f2b4d6b689ad6af0cfcb82568f0909dcd8f86a03e30e36efbc346aec9"},{"version":"a59eda13d842727bfe31a2238fb7d1863a53809086d76ed95e386779186ed1ed","signature":"84da10cb6023d4784a7e4c033f0ff361946be664dfe1b13e9bc9bc24914fbe03"},{"version":"035a76ca6a2b0500f668fa56b8a7e6137b9acdd15b5a6b3bfb0144daaeec5d49","signature":"3e927d972f488b1062388ae054f0ad66b7cefa42544764600fa3d81820a7a737"},{"version":"fa5e276014fa5732255d929fb9af8f29642934b550c52c47c6727d963e2c6f4b","impliedFormat":1},{"version":"5d26ec412b1a5dfb4f49c964e6ffc1e8b8b4262396aeb1aa37590fad011ced6e","impliedFormat":1},{"version":"2a1d1adc0e86b2e9a6a47e8a22151b8ebb3b1d6d16d4d8d3f9625daf7aa1dab2","impliedFormat":1},{"version":"c7cc11d2c50c17bad22961cb7157024ac98a0ea968c2482231ef1b7afe1f5b54","impliedFormat":1},{"version":"d64ff6b095b9b0127d5d0e482bffd0d81a6be74478b185f252c8eca531399249","impliedFormat":1},{"version":"f472ba72c0f7b123e6195c0c6e05a08101ddc2dd0262a4a39229fb88f9e6cf01","impliedFormat":1},{"version":"4addfcd11d5f371d5ae0e40ac35b2ff00ee157fd84a0f9d994d70ca7d8e2ec88","signature":"fb3f059c08593f1b2fd653c52e67bf842ce1c3e9bb3a88d0126d5abbf93d4adf"},{"version":"a08d29129f1c0ab06c9eb5d8cd4a2ac7351d713abe8e155dd86e6d95dd936ae0","signature":"5ed2229b0bdbdfc44f977d6843b0f4fb5035197cad541182262bb57e683d4fa7"},{"version":"773a78a1e8bef0fe01887bb8222b67433fab82bb2e9f8f4366c846c7ec546cde","signature":"bca7e1507429d51f50e0e020f27ac460df9c0674b2ecbc8b8c08611b6be45dc8"},{"version":"c3af5645ff25c431fd2272583841d1b4fb8039e7c080fcaced0a2bcdca5f861b","signature":"8420e8864d1236d3425056714d8ef35de684eddca5370a1297ec545f10222c95"},{"version":"66e1339b9301f474482b066199ad4e03984260eba65da4e1b91f6be3d36faa0f","signature":"7c3168046fc36e009680104dc32095e1e5fec551718bbab122c7ac4cefde86d7"},{"version":"9b39a362f1d3396b668e12d18cdc9064a5a5d910c84c3e80f3f375ec6a6be1a6","signature":"506e38dfe2b3193bfcd089efb5b36e44a7238cef4f7ad11ca431b37dd6c0e79f"},{"version":"5da34e80e99e69052739ab46ac39282665a2409b920b464972665fcad91ccb17","signature":"c523faaa88a0edb683fc6b35c8c9554059581d0f046377586da661965af158be"},{"version":"bc46a0605616579e7bdfcc1aa1c8be68da9ada7913657bb81057a702b4e4ca13","signature":"3d208f5f379dbc1c5b9b9d11de15fc94bfb7942180d2bc2f1d8bd0c774734901"},{"version":"f4cdfe66d2ed75d3d71ce8b71ee563c818b2230a29e7c41a9268e5490ffaac96","signature":"70d9037ee059e2e6524ae7fbbfe6733dc270b69e835c8fc84526d0622d0edbd1"},{"version":"ebc573acc451b7972d87477aacf6418218514668b49e7aa9989498538107f329","signature":"b85857af3f7464bbfbff0d8c43d6d6d552b75896da2db572fcb2f21d70007515"},{"version":"d9af4e87571d888f2fafa3b260638666fcdaed22478bac8498c8b7f165bb822d","signature":"bb1bc7fc18b49c4097d3520060cf1f390054460659c85360ea308a5975590d59"},{"version":"f577c7a1b152fdc31266fff6ec678d5b0eb29ce7b934cb78aa0dba5a16994ff2","signature":"8e395cfd28cba77fd0fe89c5568b0b06b4c47a0015281692661bd77f2d73a011"},{"version":"f46bc7eb6a1a19b73790df53e5e4f0d91c524d689df88785034acf3a915efa3d","signature":"90b0afaaf312acabd3df950c570a447d42cbf53c9a11caebf8164b0a2f14f2bd"},{"version":"026953fc9ac49ece8bb001ca40b7aa5b7cf1723653cca3f06043daf45cc437fd","signature":"b1a70cc095ba7a1cbdf427da217449ac9f69708ac1426ae53a332074267ffe6f"},{"version":"6e7c9b9e8d27fd17e8b5878ffbd2f2c1f9a02067e78ba4ac374dbc7503ad40d0","signature":"5970f8c60f2d5622b94ee0fb473f71a20dbc32bf2d7d04f2807a9b400706f72b"},{"version":"7c640d8991fc47af7de0fed0638cf9709565bdb2b98f71f802b04eeb2a41c51a","signature":"fb4066ea9fbbef937e900e0abf2a0558463dee7eebc1942d9fb403d77994391b"},{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"0173acc09dc043d6e33ff3355b0093db227fdacea06840f02c57ca1abbf4576a","signature":"646e7178e5e651bdabaa297b0cfee53b0ec595870cb8e776fc73ee127ce4ccf8"},{"version":"7271f7f7c290874491fa0f0e5b0004645787feaba8e3607113972689606b84bd","signature":"e84b63d08a00126d775ad0ea845397aa781e9dc1d8c6caafc51a87d35f50a3c4"},{"version":"875384c71acfc5d5871590b1d8cb96c5690c1a909f5ec6d5353124fe0320434a","signature":"30a4b7ebff76cec8e9705658812bbe695ec6665d32f4cfa211f8fd27580add77"},{"version":"9cde448e4afa901137c65e1165018bf2d8811da97b291ad75905b7518f853205","signature":"a5c502000292eb20f7e9fcae726d86ca228048b9f4f85c8b1b3f3965d643962f"},{"version":"bb28fcca51f25d2c9c2958101c4f8300978a30f9d4ec1d76bd715bbdfedafe06","signature":"5c2b609c720ba93d83dc78d9aaa7dbc07da543656e526c21c4bb4b6c485e2aec"},{"version":"869e54fc328114dfb65267bc16d3f40e2663dcd9c4246c0eb80a0c86a38c0110","signature":"eb43d7fa2296f650aae97bd7214a36cb8bc98ba55dbfce09aab20d9aebdaf7be"},{"version":"07cbc706c24fa086bcc20daee910b9afa5dc5294e14771355861686c9d5235fd","impliedFormat":1},{"version":"51e9ea953a31fe319457ddba13afeddaf7068e16c4c2936a0907a3c9a08af446","impliedFormat":99},{"version":"aa6e7182b82376aaa7419457ce5a6d3868a570a69538c047567260acce0abddd","impliedFormat":99},{"version":"6a6981689493f77ba07b195882b126480cdadcd3aaf6aa9ac744479c67b424a0","impliedFormat":99},{"version":"5c845719505c5a3a16789efa30fdab2a613b1f04fb75f94dd53698c700f413e5","impliedFormat":99},{"version":"7c5dd7ed77ef7f36972da2b55e77f5125624b01440ca2e3c64914736571d8577","impliedFormat":99},{"version":"6d4b382214634490b266065102830c3fcc6705a6d28d8ab62357f516697e13a3","signature":"e0b344c11f90bab78e98bbc1ee79f974b1bec7f75d7dd82817a95513fdaf2198"},{"version":"d412a10b78dc524a44f448e7dd4da9df18bb08bc60d59e21922bc151020fabc8","signature":"32ff1739eb33b4a5becb70601eb20b69f41120e3ce5acc6daf2d59e6363f4b63"},{"version":"d8b74a163fbf8c952ab7c61380bb70cd24e738945bfbc9c1b6520061c971fd10","signature":"0b4b4c2fb1e897e1dbba196b4190e38e8ce869f2c3c1bf1fd19a9256730059b2"},{"version":"b07047a60f37f65427574e262a781e6936af9036cf92b540311e033956fd49be","impliedFormat":1},{"version":"25ba804522003eb8212efb1e6a4c2d114662a894b479351c36bd9c7491ceb04f","impliedFormat":1},{"version":"6445fe8e47b350b2460b465d7df81a08b75b984a87ee594caf4a57510f6ec02e","impliedFormat":1},{"version":"425e1299147c67205df40ce396f52ff012c1bf501dcfbf1c7123bbd11f027ab0","impliedFormat":1},{"version":"3abf6b0a561eed97d2f2b58f2d647487ba33191c0ecb96764cc12be4c3dd6b55","impliedFormat":1},{"version":"01cc05d0db041f1733a41beec0ddaeea416e10950f47e6336b3be26070346720","impliedFormat":1},{"version":"e21813719193807d4ca53bb158f1e7581df8aa6401a6a006727b56720b62b139","impliedFormat":1},{"version":"f4f9ca492b1a0306dcb34aa46d84ca3870623db46a669c2b7e5403a4c5bcbbd6","impliedFormat":1},{"version":"492d38565cf9cce8a4f239d36353c94b24ef46a43462d3d411e90c8bef2f8503","impliedFormat":1},{"version":"9f94dc8fb29d482f80aec57af2d982858a1820a8c8872910f89ae2f7fd9bee7f","impliedFormat":1},{"version":"a23f14db3212d53b6c76c346caca80c3627bf900362ce7a896229675a67ae49b","impliedFormat":1},{"version":"f317cf0107576c3e70d3fc9040d767272e4eb5940a1a22666cc81ae491b69d12","impliedFormat":1},{"version":"f317cf0107576c3e70d3fc9040d767272e4eb5940a1a22666cc81ae491b69d12","impliedFormat":1},{"version":"eedb957064af583258d82b6fd845c4df7d0806868cb18cbc2c6a8b0b51eb00bd","impliedFormat":1},{"version":"b6967a67f087fd77eb1980a8abb701ad040679404ed62bd4d6b40406a621fc45","impliedFormat":1},{"version":"092f99777813f42f32abf6f2e4ef1649b6e74cd94db499f2df64fc78d3f969e4","impliedFormat":1},{"version":"3d86c7feb4ee3862d71fe42e3fc120131decf6aa4a21bdf8b3bb9f8c5228aed2","impliedFormat":1},{"version":"ab70ea5d6d02c8631da210783199dc0f6c51ac5dfbc4265fdb8f1526fa0fdc7f","impliedFormat":1},{"version":"427acaa3bbea7c0b1f57d7d9190bedbbb49c147ef36b9088f8f43d1c57974d6e","impliedFormat":1},{"version":"bbd32da0338c47c74e40436d262d787e9a61c11de6d70d431b830babe79aa679","impliedFormat":1},{"version":"cb852ce7eb0ab4281cd3c5a1710d819f54f58fba0f0e9d4b797195416f254883","impliedFormat":1},{"version":"34465f88f94a4b0748055fa5702528e54ef9937c039e29a6bcde810deefd73d0","impliedFormat":1},{"version":"c451606558ca4e1e71e38396f94778b7c9a553a3b33f376ab5e4991dd3633e28","impliedFormat":1},{"version":"22986fb5b95b473335e2bbcc62a9438e8a242ca3d1b28c220d8b99e0d5874678","impliedFormat":1},{"version":"838dc2c15fe68509985a94d1853e96b1e519992a711a7a0cd8568dfd36bf757e","impliedFormat":1},{"version":"bb894fb593532cd9819c43f747cc7b0901136a93758e78482a9f675563beacdf","impliedFormat":1},{"version":"9575c608269abe4889b7c1382762c09deb7493812284bde0a429789fa963838b","impliedFormat":1},{"version":"c8c57e8f7e28927748918e0420c0d6dd55734a200d38d560e16dc99858710f2b","impliedFormat":1},{"version":"64903d7216ed30f8511f03812db3333152f3418de6d422c00bde966045885fb7","impliedFormat":1},{"version":"8ff3e2f7d218a5c4498a2a657956f0ca000352074b46dbaf4e0e0475e05a1b12","impliedFormat":1},{"version":"498f87ea2a046a47910a04cf457a1b05d52d31e986a090b9abc569142f0d4260","impliedFormat":1},{"version":"5ac05c0f6855db16afa699dccfd9e3bd3a7a5160e83d7dce0b23b21d3c7353b9","impliedFormat":1},{"version":"7e792c18f8e4ac8b17c2b786e90f9e2e26cf967145ad615f5c1d09ab0303241f","impliedFormat":1},{"version":"a528a860066cc462a9f0bddc9dbe314739d5f8232b2b49934f84a0ce3a86de81","impliedFormat":1},{"version":"81760466a2f14607fcacf84be44e75ef9dcc7f7267a266d97094895a5c37cbac","impliedFormat":1},{"version":"ee05b32eccbf91646cb264de32701b48a37143708065b74ed0116199d4774e86","impliedFormat":1},{"version":"60f3443b1c23d4956fb9b239e20d31859ea57670cd9f5b827f1cd0cac24c9297","impliedFormat":1},{"version":"648eacd046cfe3e9cba80da0cf2dc69c68aa749be900d7ee4b25ce28099ffa72","impliedFormat":1},{"version":"6a69d5ec5a4ed88455753431cf4d72411d210f04bce62475f9f1a97c4cf4294e","impliedFormat":1},{"version":"11fb88d11384bea44dc08b42b7341a39e36719a68a6be5fed5da575cdaeb1ad8","impliedFormat":1},{"version":"2936dcfaf4b4d1585b73c5ae7ac6395f143e136474bc091cc95033aface47e5e","impliedFormat":1},{"version":"4719ef9fe00fb18f2c3844a1939111ebca55e64f1fa93b14ddcea050865b63f0","impliedFormat":1},{"version":"86edb0b4f12ce79243d5e6ca4bed776bdd7e7a774ce4961578905e775c994ea8","impliedFormat":1},{"version":"b4a4433d4d4601efe2aa677164dee3754e511de644080147421a8cac8d6aae68","impliedFormat":1},{"version":"09a2e34f98a73581d1fd923f2eafaf09bb3ebde6ea730779af09da35dffebbcd","impliedFormat":1},{"version":"f5b5545691bd2e4ca7cf306f99a088ba0ec7e80f3dfca53b87167dbbb44cd836","impliedFormat":1},{"version":"3bd5bd5fabd0b2c646e1413e4d4eb9bbca4bd5a9ffdc53c5375f50078c20c2e2","impliedFormat":1},{"version":"3bd5bd5fabd0b2c646e1413e4d4eb9bbca4bd5a9ffdc53c5375f50078c20c2e2","impliedFormat":1},{"version":"d5003e54842f82de63a808473357de001162f7ca56ab91266e5d790b620f6fdb","impliedFormat":1},{"version":"aa0761c822c96822508e663d9b0ee33ad12a751219565a12471da3e79c38f0ba","impliedFormat":1},{"version":"8338db69b3c23549e39ecf74af0de68417fcea11c98c4185a14f0b3ef833c933","impliedFormat":1},{"version":"85f208946133e169c6a8e57288362151b2072f0256dbed0a4b893bf41aab239a","impliedFormat":1},{"version":"e6957055d9796b6a50d2b942196ffece6a221ec424daf7a3eddcee908e1df7b0","impliedFormat":1},{"version":"e9142ff6ddb6b49da6a1f44171c8974c3cca4b72f06b0bbcaa3ef06721dda7b5","impliedFormat":1},{"version":"3961869af3e875a32e8db4641d118aa3a822642a78f6c6de753aa2dbb4e1ab77","impliedFormat":1},{"version":"4a688c0080652b8dc7d2762491fbc97d8339086877e5fcba74f78f892368e273","impliedFormat":1},{"version":"c81b913615690710c5bcfff0845301e605e7e0e1ebc7b1a9d159b90b0444fccf","impliedFormat":1},{"version":"2ced4431ecdda62fefcf7a2e999783759d08d802962adcff2b0105511f50056d","impliedFormat":1},{"version":"2ced4431ecdda62fefcf7a2e999783759d08d802962adcff2b0105511f50056d","impliedFormat":1},{"version":"e4c6c971ce45aef22b876b7e11d3cd3c64c72fcd6b0b87077197932c85a0d81d","impliedFormat":1},{"version":"7fd1258607eddcc1cf7d1fef9c120a3f224f999bba22da3a0835b25c8321a1d3","impliedFormat":1},{"version":"da3a1963324e9100d88c77ea9bec81385386dbb62acd45db8197d9aeb67284f7","impliedFormat":1},{"version":"f14deef45f1c4c76c96b765e2a7a2410c5e8ae211624fb99fe944d35da2f27c1","impliedFormat":1},{"version":"04dc76c64d88e872fafce2cceb7e25b00daa7180a678600be52c26387486a6d7","impliedFormat":1},{"version":"18c19498e351fb6f0ddbfa499a9c2c845a4d06ed076a976deb4ac28d7c613120","impliedFormat":1},{"version":"5738df287f7e6102687a9549c9b1402941632473e0423ef08bd8af6f394b2662","impliedFormat":1},{"version":"c67e42d11d442babad44a7821e5a18d55548271fdbe9dceb34e3f794e4e2c045","impliedFormat":1},{"version":"407bd942087ec965acd69dfb8f3196838337b07ce9bb3b6939b825bf01f6fb82","impliedFormat":1},{"version":"3d6e4bf3459c87e9cdf6016f51479c5f1e2535ef6b1e9d09ac5826c53d1f849c","impliedFormat":1},{"version":"c583b7e6c874476a42f22fb8afa7474f7ddedac69733e5e28fed9bde08418a3b","impliedFormat":1},{"version":"faf7c4d1fafaed99f524a1dc58b2c3f5602aebfb1a7cac119f279361bae6a0aa","impliedFormat":1},{"version":"d3ded63f1110dc555469fc51ce9873be767c72bff2df976e3afb771c34e91651","impliedFormat":1},{"version":"b0a1098565684d1291020613947d91e7ae92826ffbc3e64f2a829c8200bc6f05","impliedFormat":1},{"version":"1a5bbfae4f953a5552d9fa795efca39883e57b341f0d558466a0bf4868707eb4","impliedFormat":1},{"version":"fe542d91695a73fd82181e8d8898f3f5f3bec296c7480c5ff5e0e170fa50e382","impliedFormat":1},{"version":"891becf92219c25433153d17f9778dec9d76185bc8a86ca5050f6971eaf06a65","impliedFormat":1},{"version":"267f93fbddff4f28c34be3d6773ee8422b60c82f7d31066b6587dffa959a8a6a","impliedFormat":1},{"version":"276d36388f1d029c4543c0ddd5c208606aedcbaed157263f58f9c5016472057e","impliedFormat":1},{"version":"b018759002a9000a881dbb1f9394c6ef59c51fa4867705d00acba9c3245428ea","impliedFormat":1},{"version":"20bbf42534cbacbd0a8e1565d2c885152b7c423a3d4864c75352a8750bb6b52c","impliedFormat":1},{"version":"0ce3dbc76a8a8ed58f0f63868307014160c3c521bc93ed365de4306c85a4df33","impliedFormat":1},{"version":"d9a349eb9160735da163c23b54af6354a3e70229d07bb93d7343a87e1e35fd40","impliedFormat":1},{"version":"9bd17494fcb9407dcc6ace7bde10f4cf3fc06a4c92fe462712853688733c28a3","impliedFormat":1},{"version":"ba540f8efa123096aa3a7b6f01acb2dc81943fa88e5a1adb47d69ed80b949005","impliedFormat":1},{"version":"c6b20a3d20a9766f1dded11397bdba4531ab816fdb15aa5aa65ff94c065419cf","impliedFormat":1},{"version":"91e4a5e8b041f28f73862fb09cd855cfab3f2c7b38abe77089747923f3ad1458","impliedFormat":1},{"version":"2cebda0690ab1dee490774cb062761d520d6fabf80b2bd55346fde6f1f41e25d","impliedFormat":1},{"version":"bcc18e12e24c7eb5b7899b70f118c426889ac1dccfa55595c08427d529cc3ce1","impliedFormat":1},{"version":"6838d107125eeaf659e6fc353b104efd6d033d73cfc1db31224cb652256008f1","impliedFormat":1},{"version":"97b21e38c9273ccc7936946c5099f082778574bbb7a7ab1d9fc7543cbd452fd5","impliedFormat":1},{"version":"ae90b5359bc020cd0681b4cea028bf52b662dff76897f125fa3fe514a0b6727a","impliedFormat":1},{"version":"4596f03c529bd6c342761a19cf6e91221bee47faad3a8c7493abff692c966372","impliedFormat":1},{"version":"6682c8f50bd39495df3042d2d7a848066b63439e902bf8a00a41c3cfc9d7fafa","impliedFormat":1},{"version":"1b111caa0a85bcfd909df65219ecd567424ba17e3219c6847a4f40e71da9810b","impliedFormat":1},{"version":"b8df0a9e1e9c5bd6bcdba2ca39e1847b6a5ca023487785e6909b8039c0c57b16","impliedFormat":1},{"version":"2e26ca8ed836214ad99d54078a7dadec19c9c871a48cb565eaac5900074de31c","impliedFormat":1},{"version":"2b5705d85eb82d90680760b889ebedade29878dbb8cab2e56a206fd32b47e481","impliedFormat":1},{"version":"d131e0261dc711dd6437a69bac59ed3209687025b4e47d424408cf929ca6c17c","impliedFormat":1},{"version":"86c7f05da9abdecf1a1ea777e6172a69f80aec6f9d37c665bd3a761a44ec177b","impliedFormat":1},{"version":"840fe0bc4a365211bae1b83d683bfd94a0818121a76d73674ee38081b0d65454","impliedFormat":1},{"version":"1b6e2a3019f57e4c72998b4ddeea6ee1f637c07cc9199126475b0f17ba5a6c48","impliedFormat":1},{"version":"69920354aa42af33820391f6ec39605c37a944741c36007c1ff317fc255b1272","impliedFormat":1},{"version":"054186ff3657c66e43567635eed91ad9d10a8c590f007ba9eae7182e5042300b","impliedFormat":1},{"version":"1d543a56cb8c953804d7a5572b193c7feb3475f1d1f7045541a227eced6bf265","impliedFormat":1},{"version":"67374297518cf483af96aa68f52f446e2931b7a84fa8982ab85b6dd3fc4accce","impliedFormat":1},{"version":"cf9bfdf581e8998f45f486fdb1422edd7fc05cc9bc39a0bf45c293805176bf7d","impliedFormat":1},{"version":"cf9bfdf581e8998f45f486fdb1422edd7fc05cc9bc39a0bf45c293805176bf7d","impliedFormat":1},{"version":"849d09d5dc6836815767c3f8e2e4c561c8c1986d5398a8e876208aed2cc691c3","impliedFormat":1},{"version":"849d09d5dc6836815767c3f8e2e4c561c8c1986d5398a8e876208aed2cc691c3","impliedFormat":1},{"version":"0dd43d0e8bc78b0c73b1bd20ad29dac4c82163ab92744551bf2ab46512c33b6c","impliedFormat":1},{"version":"0dd43d0e8bc78b0c73b1bd20ad29dac4c82163ab92744551bf2ab46512c33b6c","impliedFormat":1},{"version":"54a527b58cf10aae5525481b5446b81a28b2ae459ce27dc97bd56b13508ea11c","impliedFormat":1},{"version":"54a527b58cf10aae5525481b5446b81a28b2ae459ce27dc97bd56b13508ea11c","impliedFormat":1},{"version":"d1880d157445fdbf521eead6182f47f4b3e5405afd08293ed9e224c01578e26a","impliedFormat":1},{"version":"ed2f74c2566e99295f366f820e54db67d304c3814efcb4389ce791410e9178b0","impliedFormat":1},{"version":"4f7f0dd2d715968cbc88f63784e3323ef0166566fbd121f0ebeb0d07d1ef886b","impliedFormat":1},{"version":"b45e4210d7ffd6339cc7c44484a287bd6578440e4885610067d44d6a084e6719","impliedFormat":1},{"version":"86c931b4aaddf898feee19e37ebdc9f29715bc71e39717138a8dbfb7b56e964d","impliedFormat":1},{"version":"b23d3623bbd2371f16961b7a8ab48f827ee14a0fc9e64aace665e4fc92e0fabe","impliedFormat":1},{"version":"95742365fd6f187354ad59aa45ec521f276b19acfb3636a065bc53728ede2aa6","impliedFormat":1},{"version":"4ac7cb98cbdde71287119827a1ec79c75e4b31847e18b7522cc8ff613f37d0d7","impliedFormat":1},{"version":"ae46812138452a8bf885321878a4f3f66060843b136322cf00e5bdd291596f5a","impliedFormat":1},{"version":"dd708604a523a1f60485ff5273811ff5a2581c0f9d0ccaa9dd7788b598c3e4cb","impliedFormat":1},{"version":"dbdd0616bc8801c73ded285458dddbc468bbae511e55a2b93db71a6fca9fc8fa","impliedFormat":1},{"version":"7682d3f8f04441f516ce74f85733583138039097779b0ac008785e4ecd440ca3","impliedFormat":1},{"version":"7619775d1c3f0bf6c49df7f1cf46bb0729b2f217e84c05e452ce4bb4c50347ba","impliedFormat":1},{"version":"2bd5ad36a78749bf88e7405712ad6cec774fd7646458612e80992a023f3a4da2","impliedFormat":1},{"version":"29a9495b4092f60dd5f079e664be6be1b967b8c2d600bfbf3986104e1d936e77","impliedFormat":1},{"version":"b966a1ceb3c4e8cc5a195ea43a962a6383d55d528ed3c33e97e65e14d2926e8e","impliedFormat":1},{"version":"524138093155f10c138b3ee9cc07284697bf6ba6d90a072106a1f0f7a23f8bea","impliedFormat":1},{"version":"4d44be7af68c7b5a537781bd4f28d48f2262dfd846ff5167f67f665aa93c342b","impliedFormat":1},{"version":"b5534cd11582a3025fb774fbda25a5bfb3a310befb36df425a954b23e2f1872a","impliedFormat":1},{"version":"1eb50ff7cef891bb6f7970802d061dbeb460bde39aef2690937e4e5dbadd74f7","impliedFormat":1},{"version":"b65353223b43764d9ac3a5b3f6bc80ac69b4bb53dfb733dca5dbe580cb2c95ee","impliedFormat":1},{"version":"a843a1a722ebd9a53aeb0823d40190907bde19df318bd3b0911d2876482bd9fa","impliedFormat":1},{"version":"c587631255497ef0d8af1ed82867bfbafaab2d141b84eb67d88b8c4365b0c652","impliedFormat":1},{"version":"b6d3cd9024ab465ec8dd620aeb7d859e323a119ec1d8f70797921566d2c6ac20","impliedFormat":1},{"version":"c5ccf24c3c3229a2d8d15085c0c5289a2bd6a16cb782faadf70d12fddcd672ff","impliedFormat":1},{"version":"a7fc49e0bee3c7ecdcd5c86bc5b680bfad77d0c4f922d4a2361a9aa01f447483","impliedFormat":1},{"version":"3dab449a3c849381e5edb24331596c46442ad46995d5d430c980d7388b158cf8","impliedFormat":1},{"version":"5886a079613cbf07cf7047db32f4561f342b200a384163e0a5586d278842b98e","impliedFormat":1},{"version":"9dae0e7895da154bdc9f677945c3b12c5cc7071946f3237a413bbaa47be5eaa3","impliedFormat":1},{"version":"2d9f27cd0e3331a9c879ea3563b6ad071e1cf255f6b0348f2a5783abe4ec57fb","impliedFormat":1},{"version":"8e6039bba2448ceddd14dafcefd507b4d32df96a8a95ca311be7c87d1ea04644","impliedFormat":1},{"version":"9466d70d95144bf164cd2f0b249153e0875b8db1d6b101d27dce790fd3844faf","impliedFormat":1},{"version":"223ff122c0af20e8025151f11100e3274c1e27234915f75f355881a5aa996480","impliedFormat":1},{"version":"e89a09b50458d1a1ef9992d4c1952d5b9f49f8cfdf82cada3feb4f906d290681","impliedFormat":1},{"version":"2d46726ef0883e699242f2f429b09605beb94ec2ed90d4cccdee650cfd38e9bf","impliedFormat":1},{"version":"a5d3817a1198f3c0f05501d3c23c37e384172bc5a67eaaccbf8b22e7068b607e","impliedFormat":1},{"version":"4ff787695e6ab16b1516e7045d9e8ecf6041c543b7fbed27e26d5222ee86dc7b","impliedFormat":1},{"version":"2b04c4f7b22dfa427973fa1ae55e676cbef3b24bd13e80266cf9e908d1911ce4","impliedFormat":1},{"version":"e89136e2df173f909cb13cdffbc5241b269f24721fe7582e825738dbb44fd113","impliedFormat":1},{"version":"88cf175787ba17012d6808745d3a66b6e48a82bb10d0f192f7795e9e3b38bee0","impliedFormat":1},{"version":"415f027720b1fd2ef33e1076d1a152321acb27fd838d4609508e60280b47ad74","impliedFormat":1},{"version":"1b4034b0a074f5736ae3ec4bf6a13a87ec399779db129f324e08e7fff5b303f2","impliedFormat":1},{"version":"dcd22923b72f9a979a1cea97be236b10fc1fa3ba592c587807bfe3e10d53dbb2","impliedFormat":1},{"version":"dcd22923b72f9a979a1cea97be236b10fc1fa3ba592c587807bfe3e10d53dbb2","impliedFormat":1},{"version":"f34f40704ea9f38ee0c7e1d8f28dfde5a2720577bfdfcd5c6566df140dbe0f7a","impliedFormat":1},{"version":"ea4034d0a7d4878f0710457807ae81cc00529a5f343594bc6e5fe3337561960a","impliedFormat":1},{"version":"2d3dbed1071ac8188a9d210ec745547bc4df0a6c7f4271ac28a36865bb76ee18","impliedFormat":1},{"version":"f71430f4f235cf6fe3ab8f30b763853fe711d186fc9dc1a5f4e11ba84f2000ad","impliedFormat":1},{"version":"5c4dac355c9c745a43de2b296ec350af4ee5548639728f238996df8e4c209b68","impliedFormat":1},{"version":"e8f5dbeb59708cde836d76b5bc1ff2fff301f9374782ffd300a0d35f68dce758","impliedFormat":1},{"version":"04967e55a48ca84841da10c51d6df29f4c8fa1d5e9bd87dec6f66bb9d2830fac","impliedFormat":1},{"version":"22f5e1d0db609c82d53de417d0e4ee71795841131ad00bbd2e0bd18af1c17753","impliedFormat":1},{"version":"afd5a92d81974c5534c78c516e554ed272313a7861e0667240df802c2a11f380","impliedFormat":1},{"version":"d29b6618f255156c4e5b804640aec4863aa22c1e45e7bd71a03d7913ab14e9e2","impliedFormat":1},{"version":"3f8ac93d4f705777ac6bb059bbe759b641f57ae4b04c8b6d286324992cb426e8","impliedFormat":1},{"version":"ba151c6709816360064659d1adfc0123a89370232aead063f643edf4f9318556","impliedFormat":1},{"version":"7957745f950830ecd78ec6b0327d03f3368cfb6059f40f6cdfc087a2c8ade5c0","impliedFormat":1},{"version":"e864f9e69daecb21ce034a7c205cbea7dfc572f596b79bcd67daab646f96722a","impliedFormat":1},{"version":"ebfba0226d310d2ef2a5bc1e0b4c2bc47d545a13d7b10a46a6820e085bc8bcb2","impliedFormat":1},{"version":"dac79c8b6ab4beefba51a4d5f690b5735404f1b051ba31cd871da83405e7c322","impliedFormat":1},{"version":"1ec85583b56036da212d6d65e401a1ae45ae8866b554a65e98429646b8ba9f61","impliedFormat":1},{"version":"8a9c1e79d0d23d769863b1a1f3327d562cec0273e561fd8c503134b4387c391a","impliedFormat":1},{"version":"b274fdc8446e4900e8a64f918906ba3317aafe0c99dba2705947bab9ec433258","impliedFormat":1},{"version":"ecf8e87c10c59a57109f2893bf3ac5968e497519645c2866fbd0f0fda61804b8","impliedFormat":1},{"version":"fe27166cc321657b623da754ca733d2f8a9f56290190f74cc72caad5cb5ef56f","impliedFormat":1},{"version":"74f527519447d41a8b1518fbbc1aca5986e1d99018e8fcd85b08a20dc4daa2e1","impliedFormat":1},{"version":"63017fb1cfc05ccf0998661ec01a9c777e66d29f2809592d7c3ea1cb5dab7d78","impliedFormat":1},{"version":"d08a2d27ab3a89d06590047e1902ee63ca797f58408405729d73fc559253bbc0","impliedFormat":1},{"version":"30dc37fb1af1f77b2a0f6ea9c25b5dc9f501a1b58a8aae301daa8808e9003cf6","impliedFormat":1},{"version":"2e03022de1d40b39f44e2e14c182e54a72121bd96f9c360e1254b21931807053","impliedFormat":1},{"version":"c1563332a909140e521a3c1937472e6c2dda2bb5d0261b79ed0b2340242bdd7b","impliedFormat":1},{"version":"4f297b1208dd0a27348c2027f3254b702b0d020736e8be3a8d2c047f6aa894dd","impliedFormat":1},{"version":"db4d4a309f81d357711b3f988fb3a559eaa86c693cc0beca4c8186d791d167d2","impliedFormat":1},{"version":"67cd15fcb70bc0ee60319d128609ecf383db530e8ae7bab6f30bd42af316c52c","impliedFormat":1},{"version":"c9ecba6a0b84fd4c221eb18dfbae6f0cbf5869377a9a7f0751754da5765e9d3f","impliedFormat":1},{"version":"394a9a1186723be54a2db482d596fd7e46690bda5efc1b97a873f614367c5cea","impliedFormat":1},{"version":"4fb9545dbfaa84b5511cb254aa4fdc13e46aaaba28ddc4137fed3e23b1ae669a","impliedFormat":1},{"version":"b265ebd7aac3bc93ba4eab7e00671240ca281faefddd0f53daefac10cb522d39","impliedFormat":1},{"version":"feadb8e0d2c452da67507eb9353482a963ac3d69924f72e65ef04842aa4d5c2e","impliedFormat":1},{"version":"46beac4ebdcb4e52c2bb4f289ba679a0e60a1305f5085696fd46e8a314d32ce6","impliedFormat":1},{"version":"1bf6f348b6a9ff48d97e53245bb9d0455bc2375d48169207c7fc81880c5273d6","impliedFormat":1},{"version":"1b5c2c982f14a0e4153cbf5c314b8ba760e1cd6b3a27c784a4d3484f6468a098","impliedFormat":1},{"version":"894ce0e7a4cfe5d8c7d39fab698da847e2da40650e94a76229608cb7787d19e6","impliedFormat":1},{"version":"7453cc8b51ffd0883d98cba9fbb31cd84a058e96b2113837191c66099d3bb5a6","impliedFormat":1},{"version":"25f5fafbff6c845b22a3af76af090ddfc90e2defccca0aa41d0956b75fe14b90","impliedFormat":1},{"version":"41e3ec4b576a2830ff017112178e8d5056d09f186f4b44e1fa676c984f1cb84e","impliedFormat":1},{"version":"5617b31769e0275c6f93a14e14774398152d6d03cc8e40e8c821051ef270340e","impliedFormat":1},{"version":"60f19b2df1ca4df468fae1bf70df3c92579b99241e2e92bc6552dfb9d690b440","impliedFormat":1},{"version":"52cac457332357a1e9ea0d5c6e910b867ca1801b31e3463b1dcbaa0d939c4775","impliedFormat":1},{"version":"cf08008f1a9e30cd2f8a73bc1e362cad4c123bd827058f5dffed978b1aa41885","impliedFormat":1},{"version":"582bf54f4a355529a69c3bb4e995697ff5d9e7f36acfddba454f69487b028c66","impliedFormat":1},{"version":"d342554d650b595f2e64cb71e179b7b6112823b5b82fbadf30941be62f7a3e61","impliedFormat":1},{"version":"f7bfc25261dd1b50f2a1301fc68e180ac42a285da188868e6745b5c9f4ca7c8a","impliedFormat":1},{"version":"61d841329328554af2cfa378a3e8490712de88818f8580bde81f62d9b9c4bf67","impliedFormat":1},{"version":"be76374981d71d960c34053c73d618cad540b144b379a462a660ff8fbc81eabe","impliedFormat":1},{"version":"8d9629610c997948d3cfe823e8e74822123a4ef73f4ceda9d1e00452b9b6bbf3","impliedFormat":1},{"version":"0c15ca71d3f3f34ebf6027cf68c8d8acae7e578bb6cc7c70de90d940340bf9bd","impliedFormat":1},{"version":"e5d0a608dca46a22288adac256ec7404b22b6b63514a38acab459bf633e258e0","impliedFormat":1},{"version":"c6660b6ccec7356778f18045f64d88068959ec601230bab39d2ad8b310655f99","impliedFormat":1},{"version":"aaca412f82da34fb0fd6751cea6bbf415401f6bb4aed46416593f7fcfaf32cb5","impliedFormat":1},{"version":"5e283ec6c1867adf73635f1c05e89ee3883ba1c45d2d6b50e39076e0b27f7cd9","impliedFormat":1},{"version":"2712654a78ad0736783e46e97ce91210470b701c916a932d2018a22054ee9751","impliedFormat":1},{"version":"347872376770cb6222066957f9b1ab45083552d415687f92c8b91cb246fd5268","impliedFormat":1},{"version":"24ecb13ea03a8baa20da7df564b4ba48505b396cd746cd0fe64b1f891574a0c9","impliedFormat":1},{"version":"1ded976e25a882defb5c44c3cf0d86f6157aadc85ff86b3f1d6b0796d842e861","impliedFormat":1},{"version":"c15bc8c0b0d3c15dec944d1f8171f6db924cc63bc42a32bc67fbde04cf783b5f","impliedFormat":1},{"version":"5b0c4c470bd3189ea2421901b27a7447c755879ba2fd617ab96feefa2b854ba5","impliedFormat":1},{"version":"08299cc986c8199aeb9916f023c0f9e80c2b1360a3ab64634291f6ff2a6837b1","impliedFormat":1},{"version":"1c49adea5ebea9fbf8e9b28b71e5b5420bf27fee4bf2f30db6dfa980fdad8b07","impliedFormat":1},{"version":"24a741caee10040806ab1ad7cf007531464f22f6697260c19d54ea14a4b3b244","impliedFormat":1},{"version":"b08dfe9e6da10dd03e81829f099ae983095f77c0b6d07ffdd4e0eaf3887af17e","impliedFormat":1},{"version":"40bd28334947aab91205e557963d02c371c02dc76a03967c04ae8451c3702344","impliedFormat":1},{"version":"62e9943dc2f067bda73b19fe8bcf20b81459b489b4f0158170dd9f3b38c68d30","impliedFormat":1},{"version":"267c58ef692839390c97bbb578bdd64f8a162760b4afbd3f73eacacf77d6ea6e","impliedFormat":1},{"version":"6d2496f03c865b5883deee9deda63b98d41f26d60b925204044cd4b78f0f8596","impliedFormat":1},{"version":"02988c4a472902b6ec5cb00809ef193c8a81ffde90b1759dfc34eb18674e0b02","impliedFormat":1},{"version":"7b2b386bb8e6842a4406164027fb53ab4bfef3fbc0eca440f741555dc212d0e8","impliedFormat":1},{"version":"35d669220fc1b97204dc5675e124932294d45b021feb425a9aa16888df44716d","impliedFormat":1},{"version":"bb7b865996627537dbaba9f2fd2f4195003370b02022937cd9eb57c0a0e461d0","impliedFormat":1},{"version":"28a2b8c6566e5a25119829e96a0ac0f0720df78ff55553f1a7529fbce5a87749","impliedFormat":1},{"version":"a1bb9a53774db78ea94042f996663ccac2ba1a1f695dd3e9931ff8ee898cbd06","impliedFormat":1},{"version":"0875537e7be2600acd9e872204840dcfadcc1fe4092a08bd0172a1b766019513","impliedFormat":1},{"version":"4227776f77e27c7d441fd5b8777d16b527928a7b62a0ef86ab8b9c67014cb81c","impliedFormat":1},{"version":"fbf3b2da9b15b5636cbc84578e26ce32e09ddbbac273d1af0313134858ada13e","impliedFormat":1},{"version":"af6f476584c7f0cc7840d26bd53b8f2cb2d297fdfbbce545f054f6098c156760","impliedFormat":1},{"version":"e0dcee233f86aa9a287c8e5021568a9d141faf5f312f348742d77e0a3e57e57d","impliedFormat":1},{"version":"feb50e2e786d7ffebe305337c5fcfe0a8cb2e9eb86542eafffaaf765526075c3","impliedFormat":1},{"version":"154c7aa0bb4266ec1ba8cbc132a6d6f4f5a501c6f557e42fab1551f12d7aadb4","impliedFormat":1},{"version":"ff580bb5932bafb0e88770659100ebb12da80897ed6cc7ffbdf3687048e46555","impliedFormat":1},{"version":"ef2c75a07f97f5214fb2da7bf59bbe82cbaeb6b9cc081e39b674aed5ebdf7905","impliedFormat":1},{"version":"d0c05fadcba345577656a05bf79d4b39a1f00acf76f22c8e4cf18ff30467750e","impliedFormat":1},{"version":"d0c05fadcba345577656a05bf79d4b39a1f00acf76f22c8e4cf18ff30467750e","impliedFormat":1},{"version":"7014093354b80dd4a938ea58d26de184454c4a08bd0500ae00e80eb9a4c19739","impliedFormat":1},{"version":"d06d271d2c714876d2e99a3e91426ed486ef86e92a46d7bd6183bd7849495162","impliedFormat":1},{"version":"da0fb569b713681bfa283495f9f53de3da5a0934fd1794baa99d83686f0eb243","impliedFormat":1},{"version":"1af351fa79e3f56d6ad665ffcd9c19e13d66a76e6d87e1889047729411c34105","impliedFormat":1},{"version":"97b738457d2e1311435022a93b7fa0105d54d3cab2a9557da6df6c3578b9cbdb","impliedFormat":1},{"version":"4cd82c54df6351d625a16e533463ed589155ca392257d5d5d29908be9f6c6ab0","impliedFormat":1},{"version":"c1a3b064d216c0d2503265a68444cd07638b9894575ebcd28fb3ed87ef401641","impliedFormat":1},{"version":"11ddb81d72d7c1e9b70bdec8d887f5d6737c78448477f34b0e66b9d38c5fe960","impliedFormat":1},{"version":"7f2db8b69950287573e65133460d6d0c55afcf99d415f18b00024bd5f55c4941","impliedFormat":1},{"version":"f279cd82f0d7a8c257e9750beafdd375085419733539e6d5ede1ab242de8957f","impliedFormat":1},{"version":"3bd004b8e866ef11ced618495781fd2c936a2a5989927137bdebb3e4755741fd","impliedFormat":1},{"version":"6d34100e5393cbee1869db0f370436d583045f3120c85c7c20bf52377ab6d548","impliedFormat":1},{"version":"92d7ba36531ea86b2be88729546129e1a1d08e571d9d389b859f0867cf26432a","impliedFormat":1},{"version":"f3a6050138891f2cdfdeacf7f0da8da64afc3f2fc834668daf4c0b53425876fb","impliedFormat":1},{"version":"9f260829b83fa9bce26e1a5d3cbb87eef87d8b3db3e298e4ea411a4a0e54f1f5","impliedFormat":1},{"version":"1c23a5cd8c1e82ded17793c8610ca7743344600290cedaf6b387d3518226455b","impliedFormat":1},{"version":"152d05b7e36aac1557821d5e60905bff014fcfe9750911b9cf9c2945cac3df8d","impliedFormat":1},{"version":"6670f4292fc616f2e38c425a5d65d92afc9fb1de51ea391825fa6d173315299a","impliedFormat":1},{"version":"c61a39a1539862fbd48212ba355b5b7f8fe879117fd57db0086a5cbb6acc6285","impliedFormat":1},{"version":"ae9d88113c68896d77b2b51a9912664633887943b465cd80c4153a38267bf70b","impliedFormat":1},{"version":"5d2c41dad1cb904e5f7ae24b796148a08c28ce2d848146d1cdf3a3a8278e35b8","impliedFormat":1},{"version":"b900fa4a5ff019d04e6b779aef9275a26b05794cf060e7d663c0ba7365c2f8db","impliedFormat":1},{"version":"5b7afd1734a1afc68b97cc4649e0eb8d8e45ee3b0ccb4b6f0060592070d05b6d","impliedFormat":1},{"version":"0c83c39f23d669bcb3446ce179a3ba70942b95ef53f7ba4ce497468714b38b8c","impliedFormat":1},{"version":"e9113e322bd102340f125a23a26d1ccf412f55390ae2d6f8170e2e602e2ae61b","impliedFormat":1},{"version":"456308ee785a3c069ec42836d58681fe5897d7a4552576311dd0c34923c883be","impliedFormat":1},{"version":"31e7a65d3e792f2d79a15b60b659806151d6b78eb49cb5fc716c1e338eb819b5","impliedFormat":1},{"version":"a9902721e542fd2f4f58490f228efdad02ebafa732f61e27bb322dbd3c3a5add","impliedFormat":1},{"version":"6e846536a0747aa1e5db6eafec2b3f80f589df21eea932c87297b03e9979d4bf","impliedFormat":1},{"version":"8bd87605aca1cb62caeca63fa442590d4fc14173aa27316ff522f1db984c5d37","impliedFormat":1},{"version":"0ecce2ac996dc29c06ed8e455e9b5c4c7535c177dbfa6137532770d44f975953","impliedFormat":1},{"version":"e2ddd4c484b5c1a1072540b5378b8f8dd8a456b4f2fdd577b0e4a359a09f1a5a","impliedFormat":1},{"version":"db335cb8d7e7390f1d6f2c4ca03f4d2adc7fc6a7537548821948394482e60304","impliedFormat":1},{"version":"b8beb2b272c7b4ee9da75c23065126b8c89d764f8edc3406a8578e6e5b4583b2","impliedFormat":1},{"version":"71e50d029b1100c9f91801f39fd02d32e7e2d63c7961ecb53ed17548d73c150f","impliedFormat":1},{"version":"9af2013e20b53a733dd8052aa05d430d8c7e0c0a5d821a4f4be2d4b672ec22ae","impliedFormat":1},{"version":"8fbe1bc4365212d10f188649f6f8cc17afb5bb3ff12336eb1a9bd5f966d23ad2","impliedFormat":1},{"version":"8fbe1bc4365212d10f188649f6f8cc17afb5bb3ff12336eb1a9bd5f966d23ad2","impliedFormat":1},{"version":"7c2ad9924e9d856fbefbe4ada292bfbf8ffa9b75c419934ad54c7480ef974255","impliedFormat":1},{"version":"7c2ad9924e9d856fbefbe4ada292bfbf8ffa9b75c419934ad54c7480ef974255","impliedFormat":1},{"version":"8033abdbffc86e6d598c589e440ab1e941c2edf53da8e18b84a2bef8769f0f31","impliedFormat":1},{"version":"e88eb1d18b59684cd8261aa4cdef847d739192e46eab8ea05de4e59038401a19","impliedFormat":1},{"version":"834c394b6fdac7cdfe925443170ecdc2c7336ba5323aa38a67aaaf0b3fd8c303","impliedFormat":1},{"version":"831124f3dd3968ebd5fac3ede3c087279acb5c287f808767c3478035b63d8870","impliedFormat":1},{"version":"21d06468c64dba97ef6ee1ccffb718408164b0685d1bff5e4aadd61fcc038655","impliedFormat":1},{"version":"967e26dd598db7de16c9e0533126e624da94bd6c883fd48fbccc92c86e1163c5","impliedFormat":1},{"version":"e2bb71f5110046586149930b330c56f2e1057df69602f8051e11475e9e0adcb0","impliedFormat":1},{"version":"54d718265b1257a8fa8ebf8abe89f899e9a7ae55c2bbeb3fbe93a9ee63c27c08","impliedFormat":1},{"version":"52d09b2ffcfe8a291d70dd6ec8c301e75aff365b891241e5df9943a5bd2cd579","impliedFormat":1},{"version":"c4c282bd73a1a8944112ec3501b7aed380a17a1e950955bb7e67f3ef2ae3eacd","impliedFormat":1},{"version":"b68bffb8ec0c31f104751b7783ea3fca54a27e5562dc6a36467a59af2b9f45d0","impliedFormat":1},{"version":"5f5befc12e7070c00db287c98ebff95b1978d57c94e5eb7f1dc2cdc4351a132a","impliedFormat":1},{"version":"a1fb885801e6a1b76618c7db3dd88d547d696c34b54afb37c6188fdc5c552495","impliedFormat":1},{"version":"d72c555ebec376d349d016576506f1dc171a136206fe75ef8ee36efe0671d5c3","impliedFormat":1},{"version":"e48eda19a17d77b15d627b032d2c82c16dbe7a8714ea7a136919c6fd187a87e9","impliedFormat":1},{"version":"64f38f3e656034d61f6617bff57f6fce983d33b96017a6b1d7c13f310f12a949","impliedFormat":1},{"version":"044028281a4a777b67073a9226b3a3a5f6720083bb7b7bab8b0eeafe70ccf569","impliedFormat":1},{"version":"0dac330041ba1c056fe7bacd7912de9aebec6e3926ff482195b848c4cef64f1c","impliedFormat":1},{"version":"302de1a362e9241903e4ebf78f09133bc064ee3c080a4eda399f6586644dab87","impliedFormat":1},{"version":"940851ac1f3de81e46ea0e643fc8f8401d0d8e7f37ea94c0301bb6d4d9c88b58","impliedFormat":1},{"version":"afab51b01220571ecff8e1cb07f1922d2f6007bfa9e79dc6d2d8eea21e808629","impliedFormat":1},{"version":"0a22b9a7f9417349f39e9b75fb1e1442a4545f4ed51835c554ac025c4230ac95","impliedFormat":1},{"version":"11b8a00dbb655b33666ed4718a504a8c2bf6e86a37573717529eb2c3c9b913ad","impliedFormat":1},{"version":"c4f529f3b69dfcec1eed08479d7aa2b5e82d4ab6665daa78ada044a4a36638c2","impliedFormat":1},{"version":"56fb9431fdb234f604d6429889d99e1fec1c9b74f69b1e42a9485399fd8e9c68","impliedFormat":1},{"version":"1abfd55d146ec3bfa839ccba089245660f30b685b4fdfd464d2e17e9372f3edc","impliedFormat":1},{"version":"5ea23729bee3c921c25cd99589c8df1f88768cfaf47d6d850556cf20ec5afca8","impliedFormat":1},{"version":"0def6b14343fb4659d86c60d8edb412094d176c9730dc8491ce4adabdbe6703a","impliedFormat":1},{"version":"7871d8a4808eab42ceb28bc7edefa2052da07c5c82124fb8e98e3b2c0b483d6c","impliedFormat":1},{"version":"f7e0da46977f2f044ec06fd0089d2537ff44ceb204f687800741547056b2752f","impliedFormat":1},{"version":"586e954d44d5c634998586b9d822f96310321ee971219416227fc4269ea1cdaf","impliedFormat":1},{"version":"33a7a07bc3b4c26441fa544f84403b1321579293d6950070e7daeee0ed0699d8","impliedFormat":1},{"version":"4d000e850d001c9e0616fd8e7cc6968d94171d41267c703bd413619f649bd12a","impliedFormat":1},{"version":"a2d30f0ed971676999c2c69f9f7178965ecbe5c891f6f05bc9cbcd9246eda025","impliedFormat":1},{"version":"f94f93ce2edf775e2eeb43bc62c755f65fb15a404c0507936cc4a64c2a9b2244","impliedFormat":1},{"version":"b4275488913e1befb217560d484ca3f3bf12903a46ade488f3947e0848003473","impliedFormat":1},{"version":"b173f8a2bd54cee0ae0d63a42ca59a2150dce59c828649fc6434178b0905bc05","impliedFormat":1},{"version":"613afe0af900bad8ecb48d9d9f97f47c0759aaebd7975aab74591f5fe30cf887","impliedFormat":1},{"version":"7c43dd250932457013546c3d0ed6270bfe4b9d2800c9a52ad32ece15fc834ef4","impliedFormat":1},{"version":"d0875863f16a9c18b75ef7eab23a1cf93c2c36677c9bb450307b1fa5b7521746","impliedFormat":1},{"version":"37154c245da711d32d653ad43888aac64c93d6f32a8392b0d4635d38dd852e57","impliedFormat":1},{"version":"9be1d0f32a53f6979f12bf7d2b6032e4c55e21fdfb0d03cb58ba7986001187c1","impliedFormat":1},{"version":"6575f516755b10eb5ff65a5c125ab993c2d328e31a9af8bb2de739b180f1dabc","impliedFormat":1},{"version":"5580c4cc99b4fc0485694e0c2ffc3eddfb32b29a9d64bba2ba4ad258f29866bc","impliedFormat":1},{"version":"3217967a9d3d1e4762a2680891978415ee527f9b8ee3325941f979a06f80cd7b","impliedFormat":1},{"version":"430c5818b89acea539e1006499ed5250475fdda473305828a4bb950ada68b8bd","impliedFormat":1},{"version":"a8e3230eab879c9e34f9b8adee0acec5e169ea6e6332bc3c7a0355a65fbf6317","impliedFormat":1},{"version":"62563289e50fd9b9cf4f8d5c8a4a3239b826add45cfb0c90445b94b8ca8a8e46","impliedFormat":1},{"version":"e1f6516caf86d48fd690663b0fd5df8cf3adf232b07be61b4d1c5ba706260a56","impliedFormat":1},{"version":"c5fd755dac77788acc74a11934f225711e49014dd749f1786b812e3e40864072","impliedFormat":1},{"version":"672ed5d0ebc1e6a76437a0b3726cb8c3f9dd8885d8a47f0789e99025cfb5480d","impliedFormat":1},{"version":"e15305776c9a6d9aac03f8e678008f9f1b9cb3828a8fc51e6529d94df35f5f54","impliedFormat":1},{"version":"4da18bcf08c7b05b5266b2e1a2ac67a3b8223d73c12ee94cfa8dd5adf5fdcd5e","impliedFormat":1},{"version":"a4e14c24595a343a04635aff2e39572e46ae1df9b948cc84554730a22f3fc7a3","impliedFormat":1},{"version":"0f604aef146af876c69714386156b8071cdb831cb380811ed6749f0b456026bd","impliedFormat":1},{"version":"4868c0fb6c030a7533deb8819c9351a1201b146a046b2b1f5e50a136e5e35667","impliedFormat":1},{"version":"8a1cfeb14ca88225a95d8638ee58f357fc97b803fe12d10c8b52d07387103ff1","impliedFormat":1},{"version":"fac0f34a32af6ff4d4e96cd425e8fefb0c65339c4cb24022b27eb5f13377531f","impliedFormat":1},{"version":"7ec5a106f7a6de5a44eac318bb47cdece896e37b69650dd9e394b18132281714","impliedFormat":1},{"version":"a015f74e916643f2fd9fa41829dea6d8a7bedbb740fe2e567a210f216ac4dcad","impliedFormat":1},{"version":"4dbabbde1b07ee303db99222ef778a6c2af8362bc5ce185996c4dc91cba6b197","impliedFormat":1},{"version":"0873baae7b37627c77a36f8ead0ab3eb950848023c9e8a60318f4de659e04d54","impliedFormat":1},{"version":"dc7d167f4582a21e20ac5979cb0a9f58a0541d468b406fd22c739b92cd9f5eec","impliedFormat":1},{"version":"edeec378c31a644e8fa29cfcb90f3434a20db6e13ae65df8298163163865186f","impliedFormat":1},{"version":"12300e3a7ca6c3a71773c5299e0bca92e2e116517ab335ab8e82837260a04db7","impliedFormat":1},{"version":"2e6128893be82a1cbe26798df48fcfb050d94c9879d0a9c2edece4be23f99d9f","impliedFormat":1},{"version":"2819f355f57307c7e5a4d89715156750712ea15badcb9fbf6844c9151282a2b8","impliedFormat":1},{"version":"4e433094ed847239c14ae88ca6ddaa6067cb36d3e95edd3626cec09e809abc3b","impliedFormat":1},{"version":"7c592f0856a59c78dbfa856c8c98ba082f4dafb9f9e8cdd4aac16c0b608aaacd","impliedFormat":1},{"version":"9fb90c7b900cee6a576f1a1d20b2ef0ed222d76370bc74c1de41ea090224d05d","impliedFormat":1},{"version":"c94cfa7c0933700be94c2e0da753c6d0cf60569e30d434c3d0df4a279df7a470","impliedFormat":1},{"version":"b208e4729b03a250bc017f1231a27776db6e5396104c4a5cfe40a8de4d3ab33e","impliedFormat":1},{"version":"b208e4729b03a250bc017f1231a27776db6e5396104c4a5cfe40a8de4d3ab33e","impliedFormat":1},{"version":"83624214a41f105a6dd1fef1e8ebfcd2780dd2841ce37b84d36d6ae304cba74e","impliedFormat":1},{"version":"bc63f711ce6d1745bb9737e55093128f8012d67a9735c958aaaf1945225c4f1d","impliedFormat":1},{"version":"951404d7300f1a479a7e70bca4469ea5f90807db9d3adc293b57742b3c692173","impliedFormat":1},{"version":"e93bba957a27b85afb83b2387e03a0d8b237c02c85209fde7d807c2496f20d41","impliedFormat":1},{"version":"4537c199f28f3cd75ab9d57b21858267c201e48a90009484ef37e9321b9c8dbb","impliedFormat":1},{"version":"faae84acef05342e6009f3fa68a2e58e538ef668c7173d0fc2eacac0ad56beef","impliedFormat":1},{"version":"7e19092d64b042f55f4d7b057629159a8167ee319d4cccc4b4bdd12d74018a6c","impliedFormat":1},{"version":"39196b72ec09bdc29508c8f29705ce8bd9787117863ca1bcf015a628bed0f031","impliedFormat":1},{"version":"3f727217522dabc9aee8e9b08fccf9d67f65a85f8231c0a8dbcc66cf4c4f3b8d","impliedFormat":1},{"version":"bbeb72612b2d3014ce99b3601313b2e1a1f5e3ce7fdcd8a4b68ff728e047ffcd","impliedFormat":1},{"version":"c89cc13bad706b67c7ca6fca7b0bb88c7c6fa3bd014732f8fc9faa7096a3fad8","impliedFormat":1},{"version":"2272a72f13a836d0d6290f88759078ec25c535ec664e5dabc33d3557c1587335","impliedFormat":1},{"version":"1074e128c62c48b5b1801d1a9aeebac6f34df7eafa66e876486fbb40a919f31a","impliedFormat":1},{"version":"87bba2e1de16d3acb02070b54f13af1cb8b7e082e02bdfe716cb9b167e99383b","impliedFormat":1},{"version":"a2e3a26679c100fb4621248defda6b5ce2da72943da9afefccaf8c24c912c1cb","impliedFormat":1},{"version":"3ee7668b22592cc98820c0cf48ad7de48c2ad99255addb4e7d735af455e80b47","impliedFormat":1},{"version":"643e9615c85c77bc5110f34c9b8d88bce6f27c54963f3724ab3051e403026d05","impliedFormat":1},{"version":"35c13baa8f1f22894c1599f1b2b509bdeb35f7d4da12619b838d79c6f72564bb","impliedFormat":1},{"version":"7d001913c9bf95dbdc0d4a14ffacf796dbc6405794938fc2658a79a363f43f65","impliedFormat":1},{"version":"9906fbdb7d8e18b0105f61569701a07c8aaa7ea0ef6dc63f8f9fbba7de8e044e","impliedFormat":1},{"version":"9906fbdb7d8e18b0105f61569701a07c8aaa7ea0ef6dc63f8f9fbba7de8e044e","impliedFormat":1},{"version":"6a0840f6ab3f97f9348098b3946941a7ca67beb47a6f2a75417376015bde3d62","impliedFormat":1},{"version":"24c75bd8d8ba4660a4026b89abc5457037ed709759ca1e9e26bd68c610817069","impliedFormat":1},{"version":"8cc6185d8186c7fefa97462c6dd9915df9a9542bd97f220b564b3400cdf3ad82","impliedFormat":1},{"version":"2cad19f3eae8e3a9176bf34b9cffa640d55a3c73b69c78b0b80808130d5120c6","impliedFormat":1},{"version":"a140d8799bc197466ac82feef5a8f1f074efc1bb5f02c514200269601279a6ff","impliedFormat":1},{"version":"48bda2797d1005604d21de42a41af85dfe7688391d28f02b90c90c06f6604781","impliedFormat":1},{"version":"1454f42954c53c719ae3f166a71c2a8c4fbc95ee8a5c9ddba3ec15b792054a3d","impliedFormat":1},{"version":"ae4890722031fcaa66eed85d5ce06f0fc795f21dedbe4c7c53f777c79caf01dd","impliedFormat":1},{"version":"1a6ff336c6c59fa7b44cf01dc0db00baa1592d7280be70932110fe173c3a3ed6","impliedFormat":1},{"version":"95fa82863f56a7b924814921beeab97aa064d9e2c6547eb87492a3495533be0f","impliedFormat":1},{"version":"248cdafd23df89eee20f1ef00daef4f508850cfcbad9db399b64cdb1c3530c06","impliedFormat":1},{"version":"936579eb15fe5cf878d90bddaf083a5dce9e8ca7d2222c2d96a2e55b8022e562","impliedFormat":1},{"version":"1bd19890e78429873f6eb45f6bd3b802743120c2464b717462ec4c9668ce7b89","impliedFormat":1},{"version":"756c0802bc098388018b4f245a15457083aee847ebcd89beb545d58ccbf29a9f","impliedFormat":1},{"version":"8e00226014fc83b74b47868bfac6919b2ca51e1dc612ea3f396a581ba7da8fdd","impliedFormat":1},{"version":"27930087468a6afd3d42fd75c37d8cc7df6a695f3182eb6230fcea02fce46635","impliedFormat":1},{"version":"b6d0a876f84484d9087e8eadde589e25b3f1975d32a11d188f6da0bc5dcf1d1d","impliedFormat":1},{"version":"5a282b327e397cf1637717c454d71f5dff2af2514d7f3766562bd51721d5eaab","impliedFormat":1},{"version":"fba971f62ec18b0de02357aba23b11c19aeb512eb525b9867f6cc2495d3a9403","impliedFormat":1},{"version":"69334948e4bc7c2b5516ed02225eaf645c6d97d1c636b1ef6b7c9cfc3d3df230","impliedFormat":1},{"version":"4231544515c7ce9251e34db9d0e3f74fc38365e635c8f246f2d8b39461093dea","impliedFormat":1},{"version":"963d469b265ce3069e9b91c6807b4132c1e1d214169cf1b43c26bfbcb829b666","impliedFormat":1},{"version":"387616651414051e1dd73daf82d6106bbaefcbad21867f43628bd7cbe498992f","impliedFormat":1},{"version":"f3b6f646291c8ddfc232209a44310df6b4f2c345c7a847107b1b8bbde3d0060a","impliedFormat":1},{"version":"8fbbfbd7d5617c6f6306ffb94a1d48ca6fa2e8108c759329830c63ff051320e1","impliedFormat":1},{"version":"9912be1b33a6dfc3e1aaa3ad5460ee63a71262713f1629a86c9858470f94967d","impliedFormat":1},{"version":"57c32282724655f62bff2f182ce90934d83dc7ed14b4ac3f17081873d49ec15b","impliedFormat":1},{"version":"fabb2dcbe4a45ca45247dece4f024b954e2e1aada1b6ba4297d7465fac5f7fb3","impliedFormat":1},{"version":"449fa612f2861c3db22e394d1ad33a9544fe725326e09ec1c72a4d9e0a85ccf1","impliedFormat":1},{"version":"5e80786f1a47a61be5afde06ebd2eae0d1f980a069d34cea2519f41e518b31e8","impliedFormat":1},{"version":"565fbcf5374afdcb53e1bf48a4dd72db5c201551ec1cdf408aab9943fec4f525","impliedFormat":1},{"version":"8334934b3c4b83da15be9025d15b61fdada52adfb6b3c81e24bf61e33e4a8f56","impliedFormat":1},{"version":"0bf7ddc236561ac7e5dcd04bcbb9ac34ea66d1e54542f349dc027c08de120504","impliedFormat":1},{"version":"329b4b6fb23f225306f6a64f0af065bc7d5858024b2b04f46b482d238abe01ef","impliedFormat":1},{"version":"c70a7411a384063543b9703d072d38cfec64c54d9bdcc0916a24fcb7945907c3","impliedFormat":1},{"version":"d74eccab1a21737b12e17a94bacff23954496ccad820ee1bd4769353825ea1f0","impliedFormat":1},{"version":"5a169268ac5488e3555a333964a538ce27a8702b91fffa7f2f900b67bf943352","impliedFormat":1},{"version":"85931e79bdd6b16953de2303cebbe16ba1d66375f302ffe6c85b1630c64d4751","impliedFormat":1},{"version":"ad9da00aa581dca2f09a6fec43f0d03eff7801c0c3496613d0eb1d752abf44d9","impliedFormat":1},{"version":"28ea9e12e665d059b80a8f5424e53aa0dd8af739da7f751cc885f30440b64a7f","impliedFormat":1},{"version":"cdc22634df9ab0cd1e1ab5a32e382d034bba97afd7c12db7862b9079e5e3c4c0","impliedFormat":1},{"version":"73940b704df78d02da631af2f5f253222821da6482c21cd96f64e90141b34d38","impliedFormat":1},{"version":"76e64c191fe381ecbbb91a3132eaf16b54e33144aee0e00728d4f8ba9d3be3c1","impliedFormat":1},{"version":"de49fed066a921f1897ca031e5a3d3c754663b9a877b01362cc08fb6a250a8b6","impliedFormat":1},{"version":"833b691a43b7b18f4251fdb305babad29234dd6c228cf5b931118301c922283d","impliedFormat":1},{"version":"a5f925f6ad83aa535869fb4174e7ef99c465e5c01939d2e393b6f8c0def6d95e","impliedFormat":1},{"version":"db80344e9c5463e4fb49c496b05e313b3ebcc1b9c24e9bcd97f3e34429530302","impliedFormat":1},{"version":"f69e0962918f4391e8e5e50a1b3eb1e3fd40f63ed082da8242b34dda16c519ba","impliedFormat":1},{"version":"012dcd1847240a35fd1de3132d11afab38bb63e99ce1ca2679c2376567f5ef74","impliedFormat":1},{"version":"c4e34c7b331584cd9018fb2d51d602d38cf9f2aeec0bad092b61dd10ff602bd5","impliedFormat":1},{"version":"06675fa918f0abfe5632adbfae821517a34af861cadab135d4240f0b0fd975a5","impliedFormat":1},{"version":"a4919817b89aadcc8fb7121d41c3924a30448d017454cb3d1e3570f8413f74a6","impliedFormat":1},{"version":"2a37bd0673e5f0b487f05880d143883abcbdc9682d0ed54d550eb44e775dab46","impliedFormat":1},{"version":"8ed0765cafa7e4b10224672c29056e8ee4a9936df65ba4ea3ffd841c47aa2393","impliedFormat":1},{"version":"a38694615d4482f8b6556f6b0915374bbf167c3e92e182ae909f5e1046ebbc97","impliedFormat":1},{"version":"a0ff175b270170dd3444ee37fdd71e824b934dcdae77583d4cdea674349f980e","impliedFormat":1},{"version":"99391c62be7c4a7dc23d4a94954973e5f1c1ca0c33fdd8f6bb75c1ddc7ffc3ad","impliedFormat":1},{"version":"ea58d165e86c3e2e27cf07e94175c60d1672810f873e344f7bc85ad4ebe00cef","impliedFormat":1},{"version":"85c8e99f8cd30d3a742c4c0fe5500db8561e0028b8153dc60c3d1e64ef2a507f","impliedFormat":1},{"version":"e272f75b77cffbfbb88ba377d7892d55e49f67378a8ffa7bddce1be53634ca3b","impliedFormat":1},{"version":"67448f432a710a322eac4b9a56fd8145d0033c65206e90fca834d9ed6601a978","impliedFormat":1},{"version":"7a319bad5a59153a92e455bebcfce1c8bc6e6e80f8e6cc3b20dd7465662c9c8e","impliedFormat":1},{"version":"2d7bed8ff2044b202f9bd6c35bf3bda6f8baad9e0f136a9c0f33523252de4388","impliedFormat":1},{"version":"308786774814d57fc58f04109b9300f663cf74bd251567a01dc4d77e04c1cdc1","impliedFormat":1},{"version":"68af14958b6a2faf118853f3ecb5c0dbee770bd1e0eb6c2ef54244b68cecf027","impliedFormat":1},{"version":"1255747e5c6808391a8300476bdb88924b13f32287270084ebd7649737b41a6e","impliedFormat":1},{"version":"37b6feaa304b392841b97c22617b43f9faa1d97a10a3c6d6160ca1ea599d53ce","impliedFormat":1},{"version":"79adb3a92d650c166699bb01a7b02316ea456acc4c0fd6d3a88cdd591f1849b0","impliedFormat":1},{"version":"0dc547b11ab9604c7a2a9ca7bf29521f4018a14605cc39838394b3d4b1fbaf6d","impliedFormat":1},{"version":"31fedd478a3a7f343ee5df78f1135363d004521d8edf88cd91b91d5b57d92319","impliedFormat":1},{"version":"88b7ed7312f01063f327c5d435224e137c6a2f9009175530e7f4b744c1e8957f","impliedFormat":1},{"version":"3cf0c7a66940943decbf30a670ab6077a44e9895e7aea48033110a5b58e86d64","impliedFormat":1},{"version":"11776f5fa09779862e18ff381e4c3cb14432dd188d30d9e347dfc6d0bda757a8","impliedFormat":1},{"version":"a7c12ec0d02212110795c86bd68131c3e771b1a3f4980000ec06753eb652a5c4","impliedFormat":1},{"version":"8d6b33e4d153c1cc264f6d1bb194010221907b83463ad2aaaa936653f18bfc49","impliedFormat":1},{"version":"4e0537c4cd42225517a5cdec0aea71fdaaacbf535c42050011f1b80eda596bbd","impliedFormat":1},{"version":"cf2ada4c8b0e9aa9277bfac0e9d08df0d3d5fb0c0714f931d6cac3a41369ee07","impliedFormat":1},{"version":"3bdbf003167e4dffbb41f00ddca82bb657544bc992ef307ed2c60c322f43e423","impliedFormat":1},{"version":"9d62d820685dfbed3d1da3c5d9707ae629eac65ee42eeae249e6444271a43f79","impliedFormat":1},{"version":"9fc1d71181edb6028002b0757a4de17f505fb538c8b86da2dabb2c58618e9495","impliedFormat":1},{"version":"895c35a7b8bdd940bda4d9c709acfc4dd72d302cc618ec2fd76ae2b8cd9fd534","impliedFormat":1},{"version":"e7eb43e86a2dfcb8a8158b2cc4eff93ff736cfec1f3bf776c2c8fb320b344730","impliedFormat":1},{"version":"7d2f0645903a36fe4f96d547a75ea14863955b8e08511734931bd76f5bbc6466","impliedFormat":1},{"version":"4d88daa298c032f09bc2453facf917d848fcd73b9814b55c7553c3bf0036ac3d","impliedFormat":1},{"version":"7e46cd381a3ac5dbb328d4630db9bf0d76aae653083fc351718efba4bd4bf3b3","impliedFormat":1},{"version":"23cca6a0c124bd1b5864a74b0b2a9ab12130594543593dc58180c5b1873a3d16","impliedFormat":1},{"version":"286c428c74606deaa69e10660c1654b9334842ef9579fbfbb9690c3a3fd3d8c5","impliedFormat":1},{"version":"e838976838d7aa954c3c586cd8efc7f8810ec44623a1de18d6c4f0e1bc58a2b6","impliedFormat":1},{"version":"fe7b3e4b7b62b6f3457f246aa5b26181da0c24dc5fc3a3b4f1e93f66c41d819f","impliedFormat":1},{"version":"ea15abd31f5884334fa04683b322618f1f4526a23f6f77839b446dbeee8eb9a1","impliedFormat":1},{"version":"e55b5d8322642dda29ae2dea9534464e4261cb8aa719fe8cec26ce2d70753db5","impliedFormat":1},{"version":"6074dbe82ec2c1325ecda241075fa8d814e6e5195a6c1f6315aa5a582f8eb4cf","impliedFormat":1},{"version":"c044c7f653a4aff233adfdee4c3d4e05da4fc071dfb6f8f32f5a8cd30e8aacaa","impliedFormat":1},{"version":"2f5f95be086b3c700fe1c0f1b20a5ff18a26a15ae9924b495231555a3bed7f05","impliedFormat":1},{"version":"fb4de4bc74a1997282181648fecd3ec5bb19d39cdb0ff3a4fb8ac134b2e03eb8","impliedFormat":1},{"version":"ada6919a8c3d26712dac8469dbe297980d97258fd7927aa4b4f68d8a0efeb20b","impliedFormat":1},{"version":"b1f2367947cf2dfba2cd6cc0d1ed3c49e55059f4ee0e648590daafecd1b49e63","impliedFormat":1},{"version":"e7aee498fe1438535033fdfe126a12f06874e3608cd77d8710ff9542ebb7ba60","impliedFormat":1},{"version":"0017e3bbd2f7b139daf97c0f27bef8531a6f44572ba9387f5451e417b62ecd55","impliedFormat":1},{"version":"91dda5226ec658c3c71dfb8689231f6bfea4d559d08f27237d0d02f4eb3e4aa6","impliedFormat":1},{"version":"e1e2ee6fc32ea03e5e8b419d430ea236b20f22d393ba01cc9021b157727e1c59","impliedFormat":1},{"version":"8adfd735c00b78c24933596cd64c44072689ac113001445a7c35727cb9717f49","impliedFormat":1},{"version":"999bfcbaae834b8d00121c28de9448c72f24767d3562fc388751a5574c88bd45","impliedFormat":1},{"version":"110a52db87a91246f9097f284329ad1eedd88ff8c34d3260dcb7f4f731955761","impliedFormat":1},{"version":"8929df495a85b4cc158d584946f6a83bf9284572b428bb2147cc1b1f30ee5881","impliedFormat":1},{"version":"22c869750c8452121f92a511ef00898cc02d941109e159a0393a1346348c144a","impliedFormat":1},{"version":"d96e2ff73f69bc352844885f264d1dfc1289b4840d1719057f711afac357d13e","impliedFormat":1},{"version":"a01928da03f46c245f2173ced91efd9a2b3f04a1a34a46bc242442083babaab9","impliedFormat":1},{"version":"c175f6dd4abdfac371b1a0c35ebeaf01c745dffbf3561b3a5ecc968e755a718b","impliedFormat":1},{"version":"d3531db68a46747aee3fa41531926e6c43435b59cd79ccdbcb1697b619726e47","impliedFormat":1},{"version":"c1771980c6bcd097876fe8b78a787e28163008e3d6d46885e9506483ac6b9226","impliedFormat":1},{"version":"8c2cc0d0b9b8650ef75f186f6c3aeeb3c18695e3cd3d0342cf8ef1d6aea27997","impliedFormat":1},{"version":"0a9bcf65e6abc0497fffcb66be835e066533e5623e32262b7620f1091b98776b","impliedFormat":1},{"version":"235a1b88a060bd56a1fc38777e95b5dda9c68ecb42507960ec6999e8a2d159cc","impliedFormat":1},{"version":"dde6b3b63eb35c0d4e7cc8d59a126959a50651855fd753feceab3bbad1e8000a","impliedFormat":1},{"version":"1f80185133b25e1020cc883e6eeadd44abb67780175dc2e21c603b8062a86681","impliedFormat":1},{"version":"f4abdeb3e97536bc85f5a0b1cced295722d6f3fd0ef1dd59762fe8a0d194f602","impliedFormat":1},{"version":"9de5968f7244f12c0f75a105a79813539657df96fb33ea1dafa8d9c573a5001a","impliedFormat":1},{"version":"87ab1102c5f7fe3cffbbe00b9690694cba911699115f29a1e067052bb898155d","impliedFormat":1},{"version":"a5841bf09a0e29fdde1c93b97e9a411ba7c7f9608f0794cbb7cf30c6dcd84000","impliedFormat":1},{"version":"e9282e83efd5ab0937b318b751baac2690fc3a79634e7c034f6c7c4865b635b4","impliedFormat":1},{"version":"7469203511675b1cfb8c377df00c6691f2666afb1a30c0568146a332e3188cb3","impliedFormat":1},{"version":"86854a16385679c4451c12f00774d76e719d083333f474970de51b1fd4aeaa9a","impliedFormat":1},{"version":"eb948bd45504f08e641467880383a9d033221c92d5e5f9057a952bbb688af0f2","impliedFormat":1},{"version":"8ad3462b51ab1a76a049b9161e2343a56a903235a87a7b6fb7ed5df6fc3a7482","impliedFormat":1},{"version":"c5e3f5a8e311c1be603fca2ab0af315bb27b02e53cd42edc81c349ffb7471c7e","impliedFormat":1},{"version":"0785979b4c5059cde6095760bc402d936837cbdeaa2ce891abe42ebcc1be5141","impliedFormat":1},{"version":"224881bef60ae5cd6bcc05b56d7790e057f3f9d9eacf0ecd1b1fc6f02088df70","impliedFormat":1},{"version":"3d336a7e01d9326604b97a23d5461d48b87a6acf129616465e4de829344f3d88","impliedFormat":1},{"version":"27ae5474c2c9b8a160c2179f2ec89d9d7694f073bdfc7d50b32e961ef4464bf0","impliedFormat":1},{"version":"e5772c3a61ac515bdcbb21d8e7db7982327bca088484bf0efdc12d9e114ec4c4","impliedFormat":1},{"version":"37d515e173e580693d0fdb023035c8fb1a95259671af936ea0922397494999f1","impliedFormat":1},{"version":"9b75d00f49e437827beeec0ecd652f0e1f8923ff101c33a0643ce6bed7c71ce1","impliedFormat":1},{"version":"bca71e6fb60fb9b72072a65039a51039ac67ea28fd8ce9ffd3144b074f42e067","impliedFormat":1},{"version":"d9b3329d515ac9c8f3760557a44cbca614ad68ad6cf03995af643438fa6b1faa","impliedFormat":1},{"version":"66492516a8932a548f468705a0063189a406b772317f347e70b92658d891a48d","impliedFormat":1},{"version":"20ecc73297ec37a688d805463c5e9d2e9f107bf6b9a1360d1c44a2b365c0657b","impliedFormat":1},{"version":"8e5805f4aab86c828b7fa15be3820c795c67b26e1a451608a27f3e1a797d2bf0","impliedFormat":1},{"version":"bb841b0b3c3980f91594de12fdc4939bb47f954e501bd8e495b51a1237f269d6","impliedFormat":1},{"version":"c40a182c4231696bd4ea7ed0ce5782fc3d920697866a2d4049cf48a2823195cc","impliedFormat":1},{"version":"c2f1079984820437380eba543febfb3d77e533382cbc8c691e8ec7216c1632ae","impliedFormat":1},{"version":"8737160dbb0d29b3a8ea25529b8eca781885345adb5295aa777b2f0c79f4a43f","impliedFormat":1},{"version":"78c5ee6b2e6838b6cbda03917276dc239c4735761696bf279cea8fc6f57ab9b7","impliedFormat":1},{"version":"11f3e363dd67c504e7ac9c720e0ddee8eebca10212effe75558266b304200954","impliedFormat":1},{"version":"ca53a918dbe8b860e60fec27608a83d6d1db2a460ad13f2ffc583b6628be4c5c","impliedFormat":1},{"version":"b278ba14ce1ea93dd643cd5ad4e49269945e7faf344840ecdf3e5843432dc385","impliedFormat":1},{"version":"f590aedb4ab4a8fa99d5a20d3fce122f71ceb6a6ba42a5703ea57873e0b32b19","impliedFormat":1},{"version":"1b94fcec898a08ad0b7431b4b86742d1a68440fa4bc1cd51c0da5d1faaf8fda4","impliedFormat":1},{"version":"a6ca409cb4a4fb0921805038d02a29c7e6f914913de74ab7dc02604e744820f7","impliedFormat":1},{"version":"9e938bdb31700c1329362e2246192b3cd2fac25a688a2d9e7811d7a65b57cd48","impliedFormat":1},{"version":"22ab05103d6c1b0c7e6fd0d35d0b9561f2931614c67c91ba55e2d60d741af1aa","impliedFormat":1},{"version":"aeebcee8599e95eb96cf15e1b0046024354cc32045f7e6ec03a74dcb235097ec","impliedFormat":1},{"version":"6813230ae8fba431d73a653d3de3ed2dcf3a4b2e965ca529a1d7fefdfd2bfc05","impliedFormat":1},{"version":"2111a7f02e31dd161d7c62537a24ddcbd17b8a8de7a88436cb55cd237a1098b2","impliedFormat":1},{"version":"dcac554319421fbc60da5f4401c4b4849ec0c92260e33a812cd8265a28b66a50","impliedFormat":1},{"version":"69e79a58498dbd57c42bc70c6e6096b782f4c53430e1dc329326da37a83f534d","impliedFormat":1},{"version":"6f327fc6d6ffcf68338708b36a8a2516090e8518542e20bb7217e2227842c851","impliedFormat":1},{"version":"5d770e4cc5df14482c7561e05b953865c2fdd5375c01d9d31e944b911308b13a","impliedFormat":1},{"version":"80ad25f193466f8945f41e0e97b012e1dafe1bd31b98f2d5c6c69a5a97504c75","impliedFormat":1},{"version":"30e75a9da9cd1ff426edcf88a73c6932e0ef26f8cbe61eed608e64e2ec511b6c","impliedFormat":1},{"version":"9ee91f8325ece4840e74d01b0f0e24a4c9b9ec90eeca698a6884b73c0151aa11","impliedFormat":1},{"version":"7c3d6e13ac7868d6ff1641406e535fde89ebef163f0c1237c5be21e705ed4a92","impliedFormat":1},{"version":"13f2f82a4570688610db179b0d178f1a038b17403b3a8c80eaa89dbdc74ddfd6","impliedFormat":1},{"version":"f805bae240625c8af6d84ac0b9e3cf43c5a3574c632e48a990bcec6de75234fb","impliedFormat":1},{"version":"fa3ce6af18df2e1d3adca877a3fe814393917b2f59452a405028d3c008726393","impliedFormat":1},{"version":"274b8ce7763b1a086a8821b68a82587f2cb1e08020920ae9ec8e28db0a88cd24","impliedFormat":1},{"version":"ea5e168745ac57b4ee29d953a42dc8252d3644ad3b6dab9d2f0c556f93ce05b4","impliedFormat":1},{"version":"830020b6fe24d742c1c3951e09b8b10401a0e753b5e659a3cbdea7f1348daeac","impliedFormat":1},{"version":"b1f68144e6659b378f0e02218f3bd8dfa71311c2e27814ab176365ed104d445a","impliedFormat":1},{"version":"a7a375e4436286bc6e68ce61d680ffeb431dc87f951f6c175547308d24d9d7ab","impliedFormat":1},{"version":"e41845dbc0909b2f555e7bcb1ebc55321982c446d58264485ca87e71bf7704a8","impliedFormat":1},{"version":"546291fd95c3a93e1fc0acd24350c95430d842898fc838d8df9ba40fdc653d6a","impliedFormat":1},{"version":"a6e898c90498c82f5d4fd59740cb6eb64412b39e12ffeca57851c44fa7700ed4","impliedFormat":1},{"version":"c8fb0d7a81dac8e68673279a3879bee6059bf667941694de802c06695f3a62a9","impliedFormat":1},{"version":"0a0a0bf13b17a7418578abea1ddb82bf83406f6e5e24f4f74b4ffbab9582321f","impliedFormat":1},{"version":"c4ea3ac40fbbd06739e8b681c45a4d40eb291c46407c04d17a375c4f4b99d72c","impliedFormat":1},{"version":"0f65b5f6688a530d965a8822609e3927e69e17d053c875c8b2ff2aecc3cd3bf6","impliedFormat":1},{"version":"443e39ba1fa1206345a8b5d0c41decfe703b7cdab02c52b220d1d3d8d675be6f","impliedFormat":1},{"version":"eaf7a238913b3f959db67fe7b3ea76cd1f2eedc5120c3ba45af8c76c5a3b70ad","impliedFormat":1},{"version":"8638625d1375bbb588f97a830684980b7b103d953c28efffa01bd5b1b5f775d2","impliedFormat":1},{"version":"ee77e7073de8ddc79acf0a3e8c1a1c4f6c3d11164e19eb725fa353ce936a93b0","impliedFormat":1},{"version":"ac39c31661d41f20ca8ef9c831c6962dc8bccbfca8ad4793325637c6f69207a3","impliedFormat":1},{"version":"80d98332b76035499ccce75a1526adcf4a9d455219f33f4b5a2e074e18f343fe","impliedFormat":1},{"version":"0490b6e27352ca7187944d738400e1e0ccb8ad8cc2fb6a939980cec527f4a3f9","impliedFormat":1},{"version":"7759aad02ab8c1499f2b689b9df97c08a33da2cb5001fbf6aed790aa41606f48","impliedFormat":1},{"version":"cb3c2b54a3eb8364f9078cfbe5a3340fa582b14965266c84336ab83fa933f3c7","impliedFormat":1},{"version":"7bc5668328a4a22c3824974628d76957332e653f42928354e5ac95f4cd00664d","impliedFormat":1},{"version":"b1905e68299346cc9ea9d156efb298d85cdb31a74cef5dbb39fda0ba677d8cfc","impliedFormat":1},{"version":"3ab80817857677b976b89c91cd700738fc623f5d0c800c5e1d08f21ac2a61f2a","impliedFormat":1},{"version":"cab9fb386ad8f6b439d1e125653e9113f82646712d5ba5b1b9fd1424aa31650c","impliedFormat":1},{"version":"20af956da2baefb99392218a474114007f8f6763f235ae7c6aae129e7d009cb6","impliedFormat":1},{"version":"6bfc9175ea3ade8c3dce6796456f106eb6ddc6ac446c41a71534a4cdce92777a","impliedFormat":1},{"version":"c8290d0b597260fd0e55016690b70823501170e8db01991785a43d7e1e18435f","impliedFormat":1},{"version":"002dfb1c48a9aa8de9d2cbe4d0b74edd85b9e0c1b77c865dcfcacd734c47dd40","impliedFormat":1},{"version":"17638e7a71f068c258a1502bd2c62cd6562e773c9c8649be283d924dc5d3bada","impliedFormat":1},{"version":"4b5e02a4d0b8f5ab0e81927c23b3533778000d6f8dfe0c2d23f93b55f0dcf62e","impliedFormat":1},{"version":"7bcdcafce502819733dc4e9fbbd97b2e392c29ae058bd44273941966314e46b1","impliedFormat":1},{"version":"39fefe9a886121c86979946858e5d28e801245c58f64f2ae4b79c01ffe858664","impliedFormat":1},{"version":"e68ec97e9e9340128260e57ef7d0d876a6b42d8873bfa1500ddead2bef28c71a","impliedFormat":1},{"version":"b944068d6efd24f3e064d341c63161297dc7a6ebe71fd033144891370b664e6d","impliedFormat":1},{"version":"9aee6c3a933af38de188f46937bdc5f875e10b016136c4709a3df6a8ce7ce01d","impliedFormat":1},{"version":"c0f4cd570839560ba29091ce66e35147908526f429fcc1a4f7c895a79bbbc902","impliedFormat":1},{"version":"3d44d824b1d25e86fb24a1be0c2b4d102b14740e8f10d9f3a320a4c863d0acad","impliedFormat":1},{"version":"f80511b23e419a4ba794d3c5dadea7f17c86934fa7a9ac118adc71b01ad290e3","impliedFormat":1},{"version":"633eabeec387c19b9ad140a1254448928804887581e2f0460f991edb2b37f231","impliedFormat":1},{"version":"f7083bbe258f85d7b7b8524dd12e0c3ee8af56a43e72111c568c9912453173a6","impliedFormat":1},{"version":"067a32d6f333784d2aff45019e36d0fc96fff17931bb2813b9108f6d54a6f247","impliedFormat":1},{"version":"0c85a6e84e5e646a3e473d18f7cd8b3373b30d3b3080394faee8997ad50c0457","impliedFormat":1},{"version":"f554099b0cfd1002cbacf24969437fabec98d717756344734fbae48fb454b799","impliedFormat":1},{"version":"1c39be289d87da293d21110f82a31139d5c6030e7a738bdf6eb835b304664fdd","impliedFormat":1},{"version":"5e9da3344309ac5aa7b64276ea17820de87695e533c177f690a66d9219f78a1e","impliedFormat":1},{"version":"1d4258f658eda95ee39cd978a00299d8161c4fef8e3ceb9d5221dac0d7798242","impliedFormat":1},{"version":"7df3bac8f280e1a3366ecf6e7688b7f9bbc1a652eb6ad8c62c3690cc444932e3","impliedFormat":1},{"version":"816c71bf50425c02608c516df18dfcb2ed0fca6baef0dbb30931c4b93fb6ab28","impliedFormat":1},{"version":"a32e227cdf4c5338506e23f71d5464e892416ef6f936bafa911000f98b4f6285","impliedFormat":1},{"version":"215474b938cc87665c20fe984755e5d6857374627953428c783d0456149c4bda","impliedFormat":1},{"version":"6b4915d3c74438a424e04cd4645b13b8b74733d6da8e9403f90e2c2775501f49","impliedFormat":1},{"version":"780c26fecbc481a3ef0009349147859b8bd22df6947990d4563626a38b9598b8","impliedFormat":1},{"version":"41a87a15fdf586ff0815281cccfb87c5f8a47d0d5913eed6a3504dc28e60d588","impliedFormat":1},{"version":"0973d91f2e6c5e62a642685913f03ab9cb314f7090db789f2ed22c3df2117273","impliedFormat":1},{"version":"082b8f847d1e765685159f8fe4e7812850c30ab9c6bd59d3b032c2c8be172e29","impliedFormat":1},{"version":"63033aacc38308d6a07919ef6d5a2a62073f2c4eb9cd84d535cdb7a0ab986278","impliedFormat":1},{"version":"f30f24d34853a57aed37ad873cbabf07b93aff2d29a0dd2466649127f2a905ff","impliedFormat":1},{"version":"1828d9ea4868ea824046076bde3adfd5325d30c4749835379a731b74e1388c2a","impliedFormat":1},{"version":"4ac7ee4f70260e796b7a58e8ea394df1eaa932cdaf778aa54ef412d9b17fe51a","impliedFormat":1},{"version":"9ddbe84084a2b5a20dd14ca2c78b5a1f86a328662b11d506b9f22963415e7e8d","impliedFormat":1},{"version":"871e5cd964fafda0cd5736e757ba6f2465fd0f08b9ae27b08d0913ea9b18bea1","impliedFormat":1},{"version":"95b61511b685d6510b15c6f2f200d436161d462d768a7d61082bfba4a6b21f24","impliedFormat":1},{"version":"3a0f071c1c982b7a7e5f9aaea73791665b865f830b1ea7be795bc0d1fb11a65e","impliedFormat":1},{"version":"6fcdac5e4f572c04b1b9ff5d4dace84e7b0dcccf3d12f4f08d296db34c2c6ea7","impliedFormat":1},{"version":"04381d40188f648371f9583e3f72a466e36e940bd03c21e0fcf96c59170032f8","impliedFormat":1},{"version":"5b249815b2ab6fdfe06b99dc1b2a939065d6c08c6acf83f2f51983a2deabebce","impliedFormat":1},{"version":"93333bd511c70dc88cc8a458ee781b48d72f468a755fd2090d73f6998197d6d4","impliedFormat":1},{"version":"1f64a238917b7e245930c4d32d708703dcbd8997487c726fcbadaa706ebd45dc","impliedFormat":1},{"version":"17d463fd5e7535eecc4f4a8fd65f7b25b820959e918d1b7478178115b4878de0","impliedFormat":1},{"version":"10d5b512f0eeab3e815a58758d40abe1979b420b463f69e8acccbb8b8d6ef376","impliedFormat":1},{"version":"e3c6af799b71db2de29cf7513ec58d179af51c7aef539968b057b43f5830da06","impliedFormat":1},{"version":"fbd151883aa8bb8c7ea9c5d0a323662662e026419e335a0c3bd53772bd767ec5","impliedFormat":1},{"version":"7b55d29011568662da4e570f3a87f61b8238024bc82f5c14ae7a7d977dbd42b6","impliedFormat":1},{"version":"1a693131491bf438a4b2f5303f4c5e1761973ca20b224e5e9dcd4db77c45f09b","impliedFormat":1},{"version":"09181ba5e7efec5094c82be1eb7914a8fc81780d7e77f365812182307745d94f","impliedFormat":1},{"version":"fb5a59f40321ec0c04a23faa9cf0a0640e8b5de7f91408fb2ecaaec34d6b9caf","impliedFormat":1},{"version":"0e2578d08d1c0139ba788d05ef1a62aa50373e0540fd1cad3b1c0a0c13107362","impliedFormat":1},{"version":"65f22fbb80df4ffdd06b9616ec27887d25b30fd346d971ced3ab6e35d459e201","impliedFormat":1},{"version":"adf56fbfbd48d96ff2525dae160ad28bcb304d2145d23c19f7c5ba0d28d1c0cf","impliedFormat":1},{"version":"e972d127886b4ba51a40ef3fa3864f744645a7eaeb4452cb23a4895ccde4943e","impliedFormat":1},{"version":"5af6ea9946b587557f4d164a2c937bb3b383211fef5d5fd33980dc5b91d31927","impliedFormat":1},{"version":"bffa47537197a5462836b3bb95f567236fa144752f4b09c9fa53b2bf0ac4e39a","impliedFormat":1},{"version":"76e485bb46a79126e76c8c40487497f5831c5faa8d990a31182ad5bf9487409c","impliedFormat":1},{"version":"34c367f253d9f9f247a4d0af9c3cfcfaabb900e24db79917704cd2d48375d74c","impliedFormat":1},{"version":"1b7b16cceca67082cd6f10eeaf1845514def524c2bc293498ba491009b678df3","impliedFormat":1},{"version":"81ad399f8c6e85270b05682461ea97e3c3138f7233d81ddbe4010b09e485fce0","impliedFormat":1},{"version":"8baaf66fecb2a385e480f785a8509ac3723c1061ca3d038b80828e672891cccf","impliedFormat":1},{"version":"6ed1f646454dff5d7e5ce7bc5e9234d4e2b956a7573ef0d9b664412e0d82b83e","impliedFormat":1},{"version":"6777b3a04a9ff554b3e20c4cb106b8eb974caad374a3d2651d138f7166202f59","impliedFormat":1},{"version":"cc2a85161dab1f8b55134792706ecf2cf2813ad248048e6495f72e74ecb2462c","impliedFormat":1},{"version":"c994de814eca4580bfad6aeec3cbe0d5d910ae7a455ff2823b2d6dce1bbb1b46","impliedFormat":1},{"version":"a8fdd65c83f0a8bdfe393cf30b7596968ba2b6db83236332649817810cc095b6","impliedFormat":1},{"version":"2cc71c110752712ff13cea7fb5d9af9f5b8cfd6c1b299533eeaf200d870c25db","impliedFormat":1},{"version":"07047dd47ed22aec9867d241eed00bccb19a4de4a9e309c2d4c1efb03152722f","impliedFormat":1},{"version":"ce8f3cd9fd2507d87d944d8cdb2ba970359ea74821798eee65fd20e76877d204","impliedFormat":1},{"version":"5e63289e02fb09d73791ae06e9a36bf8e9b8b7471485f6169a2103cb57272803","impliedFormat":1},{"version":"16496edeb3f8f0358f2a9460202d7b841488b7b8f2049a294afcba8b1fce98f7","impliedFormat":1},{"version":"5f4931a81fac0f2f5b99f97936eb7a93e6286367b0991957ccd2aa0a86ce67e8","impliedFormat":1},{"version":"0c81c0048b48ba7b579b09ea739848f11582a6002f00c66fde4920c436754511","impliedFormat":1},{"version":"2a9efc08880e301d05e31f876eb43feb4f96fa409ec91cd0f454afddbedade99","impliedFormat":1},{"version":"8b84db0f190e26aeed913f2b6f7e6ec43fb7aeec40bf7447404db696bb10a1aa","impliedFormat":1},{"version":"3faa4463234d22b90d546925c128ad8e02b614227fb4bceb491f4169426a6496","impliedFormat":1},{"version":"83dc14a31138985c30d2b8bdf6b2510f17d9c1cd567f7aadd4cbfd793bd320b8","impliedFormat":1},{"version":"4c21526acf3a205b96962c5e0dc8fa73adbce05dd66a5b3960e71527f0fb8022","impliedFormat":1},{"version":"8de35ab4fcd11681a8a7dae4c4c25a1c98e9f66fbd597998ca3cea58012801a8","impliedFormat":1},{"version":"40a50581f3fa685fda5bbd869f6951272e64ccb973a07d75a6babf5ad8a7ec51","impliedFormat":1},{"version":"5575fd41771e3ff65a19744105d7fed575d45f9a570a64e3f1357fe47180e2a2","impliedFormat":1},{"version":"ea94b0150a7529c409871f6143436ead5939187d0c4ec1c15e0363468c1025cc","impliedFormat":1},{"version":"b8deddcf64481b14aa88489617e5708fcb64d4f64db914f10abbd755c8deb548","impliedFormat":1},{"version":"e2e932518d27e7c23070a8bbd6f367102a00107b7efdd4101c9906ac2c52c3f3","impliedFormat":1},{"version":"1a1a8889de2d1c898d4e786b8edf97a33b8778c2bb81f79bcf8b9446b01663dd","impliedFormat":1},{"version":"bb66806363baa6551bd61dd79941a3f620f64d4166148be8c708bf6f998c980b","impliedFormat":1},{"version":"23b58237fc8fbbcb111e7eb10e487303f5614e0e8715ec2a90d2f3a21fd1b1c0","impliedFormat":1},{"version":"c63bb5b72efbb8557fb731dc72705f1470284093652eca986621c392d6d273ab","impliedFormat":1},{"version":"9495b9e35a57c9bfec88bfb56d3d5995d32b681317449ad2f7d9f6fc72877fd0","impliedFormat":1},{"version":"8974fe4b0f39020e105e3f70ab8375a179896410c0b55ca87c6671e84dec6887","impliedFormat":1},{"version":"7f76d6eef38a5e8c7e59c7620b4b99205905f855f7481cb36a18b4fdef58926d","impliedFormat":1},{"version":"a74437aba4dd5f607ea08d9988146cee831b05e2d62942f85a04d5ad89d1a57a","impliedFormat":1},{"version":"65faea365a560d6cadac8dbf33953474ea5e1ef20ee3d8ff71f016b8d1d8eb7c","impliedFormat":1},{"version":"1d30c65c095214469a2cfa1fd40e881f8943d20352a5933aa1ed96e53118ca7e","impliedFormat":1},{"version":"342e05e460b6d55bfbbe2cf832a169d9987162535b4127c9f21eaf9b4d06578b","impliedFormat":1},{"version":"8bfced5b1cd8441ba225c7cbb2a85557f1cc49449051f0f71843bbb34399bbea","impliedFormat":1},{"version":"9388132f0cb90e5f0a44a5255f4293b384c6a79b0c9206249b3bcf49ff988659","impliedFormat":1},{"version":"a7e8f748de2465278f4698fe8656dd1891e49f9f81e719d6fc3eaf53b4df87ce","impliedFormat":1},{"version":"1ef1dcd20772be36891fd4038ad11c8e644fe91df42e4ccdbc5a5a4d0cfddf13","impliedFormat":1},{"version":"3e77ee3d425a8d762c12bb85fe879d7bc93a0a7ea2030f104653c631807c5b2e","impliedFormat":1},{"version":"e76004b4d4ce5ad970862190c3ef3ab96e8c4db211b0e680e55a61950183ff16","impliedFormat":1},{"version":"b959e66e49bfb7ff4ce79e73411ebc686e3c66b6b51bf7b3f369cc06814095f7","impliedFormat":1},{"version":"3e39e5b385a2e15183fc01c1f1d388beca6f56cd1259d3fe7c3024304b5fd7aa","impliedFormat":1},{"version":"3a4560b216670712294747d0bb4e6b391ca49271628514a1fe57d455258803db","impliedFormat":1},{"version":"f9458d81561e721f66bd4d91fb2d4351d6116e0f36c41459ad68fdbb0db30e0a","impliedFormat":1},{"version":"c7d36ae7ed49be7463825d42216648d2fb71831b48eb191bea324717ba0a7e59","impliedFormat":1},{"version":"5a1ae4a5e568072f2e45c2eed8bd9b9fceeb20b94e21fb3b1cec8b937ea56540","impliedFormat":1},{"version":"acbbea204ba808da0806b92039c87ae46f08c7277f9a32bf691c174cb791ddff","impliedFormat":1},{"version":"055489a2a42b6ece1cb9666e3d68de3b52ed95c7f6d02be3069cc3a6c84c428c","impliedFormat":1},{"version":"3038efd75c0661c7b3ff41d901447711c1363ef4aef4485f374847a8a2fcb921","impliedFormat":1},{"version":"0022901e655f49011384f960d6b67c5d225e84e2ea66aa4aae1576974a4e9b40","impliedFormat":1},{"version":"0022901e655f49011384f960d6b67c5d225e84e2ea66aa4aae1576974a4e9b40","impliedFormat":1},{"version":"9d2106024e848eccaeaa6bd9e0fd78742a0c542f2fbc8e3bb3ab29e88ece73a9","impliedFormat":1},{"version":"668a9d5803e4afcd23cd0a930886afdf161faa004f533e47a3c9508218df7ecd","impliedFormat":1},{"version":"dd769708426135f5f07cd5e218ac43bf5bcf03473c7cbf35f507e291c27161e7","impliedFormat":1},{"version":"6067f7620f896d6acb874d5cc2c4a97f1aa89d42b89bd597d6d640d947daefb8","impliedFormat":1},{"version":"8fd3454aaa1b0e0697667729d7c653076cf079180ef93f5515aabc012063e2c1","impliedFormat":1},{"version":"f13786f9349b7afc35d82e287c68fa9b298beb1be24daa100e1f346e213ca870","impliedFormat":1},{"version":"5e9f0e652f497c3b96749ed3e481d6fab67a3131f9de0a5ff01404b793799de4","impliedFormat":1},{"version":"1ad85c92299611b7cd621c9968b6346909bc571ea0135a3f2c7d0df04858c942","impliedFormat":1},{"version":"08ef30c7a3064a4296471363d4306337b044839b5d8c793db77d3b8beefbce5d","impliedFormat":1},{"version":"b700f2b2a2083253b82da74e01cac2aa9efd42ba3b3041b825f91f467fa1e532","impliedFormat":1},{"version":"0edbad572cdd86ec40e1f27f3a337b82574a8b1df277a466a4e83a90a2d62e76","impliedFormat":1},{"version":"cc2930e8215efe63048efb7ff3954df91eca64eab6bb596740dceb1ad959b9d4","impliedFormat":1},{"version":"1cf8615b4f02bbabb030a656aa1c7b7619b30da7a07d57e49b6e1f7864df995f","impliedFormat":1},{"version":"2cbd0adfb60e3fed2667e738eba35d9312ab61c46dbc6700a8babed2266ddcf2","impliedFormat":1},{"version":"bed2e48fefb5a30e82f176e79c8bd95d59915d3ae19f68e8e6f3a6df3719503f","impliedFormat":1},{"version":"032a6c17ee79d48039e97e8edb242fe2bd4fc86d53307a10248c2eda47dbd11d","impliedFormat":1},{"version":"83b28226a0b5697872ea7db24c4a1de91bbf046815b81deaa572b960a189702a","impliedFormat":1},{"version":"8c08bc40a514c6730c5e13e065905e9da7346a09d314d09acc832a6c4da73192","impliedFormat":1},{"version":"b95a07e367ec719ecc96922d863ab13cce18a35dde3400194ba2c4baccfafdc0","impliedFormat":1},{"version":"36e86973743ca5b4c8a08633ef077baf9ba47038002b8bbe1ac0a54a3554c53e","impliedFormat":1},{"version":"b8c19863be74de48ff0b5d806d3b51dc51c80bcf78902a828eb27c260b64e9f1","impliedFormat":1},{"version":"3555db94117fb741753ef5c37ffdb79f1b3e64e9f24652eecb5f00f1e0b1941c","impliedFormat":1},{"version":"52b3bc9c614a193402af641bee64a85783cd2988a46a09bdfe4bddd33410d1b8","impliedFormat":1},{"version":"52b3bc9c614a193402af641bee64a85783cd2988a46a09bdfe4bddd33410d1b8","impliedFormat":1},{"version":"deb25b0ec046c31b288ad7f4942c83ad29e5e10374bdb8af9a01e669df33d59d","impliedFormat":1},{"version":"deb25b0ec046c31b288ad7f4942c83ad29e5e10374bdb8af9a01e669df33d59d","impliedFormat":1},{"version":"a3eb808480fe13c0466917415aa067f695c102b00df00c4996525f1c9e847e4f","impliedFormat":1},{"version":"5d5e54ce407a53ac52fd481f08c29695a3d38f776fc5349ab69976d007b3198e","impliedFormat":1},{"version":"6f796d66834f2c70dd13cfd7c4746327754a806169505c7b21845f3d1cabd80a","impliedFormat":1},{"version":"bde869609f3f4f88d949dc94b55b6f44955a17b8b0c582cdef8113e0015523fa","impliedFormat":1},{"version":"9c16e682b23a335013941640433544800c225dc8ad4be7c0c74be357482603d5","impliedFormat":1},{"version":"622abbfd1bb206b8ea1131bb379ec1f0d7e9047eddefcfbe104e235bfc084926","impliedFormat":1},{"version":"3e5f94b435e7a57e4c176a9dc613cd4fb8fad9a647d69a3e9b77d469cdcdd611","impliedFormat":1},{"version":"f00c110b9e44555c0add02ccd23d2773e0208e8ceb8e124b10888be27473872d","impliedFormat":1},{"version":"0be282634869c94b20838acba1ac7b7fee09762dbed938bf8de7a264ba7c6856","impliedFormat":1},{"version":"a640827fd747f949c3e519742d15976d07da5e4d4ce6c2213f8e0dac12e9be6c","impliedFormat":1},{"version":"56dee4cdfa23843048dc72c3d86868bf81279dbf5acf917497e9f14f999de091","impliedFormat":1},{"version":"7890136a58cd9a38ac4d554830c6afd3a3fbff65a92d39ab9d1ef9ab9148c966","impliedFormat":1},{"version":"9ebd2b45f52de301defb043b3a09ee0dd698fc5867e539955a0174810b5bdf75","impliedFormat":1},{"version":"cbad726f60c617d0e5acb13aa12c34a42dc272889ac1e29b8cb2ae142c5257b5","impliedFormat":1},{"version":"009022c683276077897955237ca6cb866a2dfa2fe4c47fadcf9106bc9f393ae4","impliedFormat":1},{"version":"b03e6b5f2218fd844b35e2b6669541c8ad59066e1427f4f29b061f98b79aceeb","impliedFormat":1},{"version":"8451b7c29351c3be99ec247186bb17c8bde43871568488d8eb2739acab645635","impliedFormat":1},{"version":"2c2e64c339be849033f557267e98bd5130d9cb16d0dccada07048b03ac9bbc79","impliedFormat":1},{"version":"39c6cc52fed82f7208a47737a262916fbe0d9883d92556bd586559c94ef03486","impliedFormat":1},{"version":"5c467e74171c2d82381bb9c975a5d4b9185c78006c3f5da03e368ea8c1c3a32e","impliedFormat":1},{"version":"ef1e298d4ff9312d023336e6089a93ee1a35d7846be90b5f874ddd478185eac6","impliedFormat":1},{"version":"d829e88b60117a6bc2ca644f25b6f8bbaa40fc8998217536dbbbfd760677ae60","impliedFormat":1},{"version":"e922987ed23d56084ec8cce2d677352355b4afb372a4c7e36f6e507995811c43","impliedFormat":1},{"version":"9cca233ee9942aaafcf19a8d1f2929fed21299d836f489623c9abfb157b8cd87","impliedFormat":1},{"version":"0dc1aac5e460ea012fe8c67d885e875dbdc5bf38d6cb9addf3f2a0cc3558a670","impliedFormat":1},{"version":"1e350495bd8b33f251c59539c7aef25287ea4907feb08dab5651b78a989a2e6a","impliedFormat":1},{"version":"1e350495bd8b33f251c59539c7aef25287ea4907feb08dab5651b78a989a2e6a","impliedFormat":1},{"version":"4181ed429a8aac8124ea36bfc716d9360f49374eb36f1cc8872dcbbf545969eb","impliedFormat":1},{"version":"948b77bdc160db8025bf63cc0e53661f27c5c5244165505cc48024a388a9f003","impliedFormat":1},{"version":"b3ae4b9b7ec83e0630ce00728a9db6c8bb7909c59608d48cded3534d8ed8fa47","impliedFormat":1},{"version":"c2fa2cba39fcabec0be6d2163b8bc76d78ebe45972a098cca404b1a853aa5184","impliedFormat":1},{"version":"f98232fe7507f6c70831a27ddd5b4d759d6c17c948ed6635247a373b3cfee79e","impliedFormat":1},{"version":"61db0df9acc950cc1ac82897e6f24b6ab077f374059a37f9973bf5f2848cfa56","impliedFormat":1},{"version":"c185ceb3a4cd31153e213375f175e7b3f44f8c848f73faf8338a03fffb17f12b","impliedFormat":1},{"version":"bfa04fde894ce3277a5e99b3a8bec59f49dde8caaaa7fb69d2b72080b56aedbd","impliedFormat":1},{"version":"f4405ec08057cd8002910f210922de51c9273f577f456381aeb8671b678653c9","impliedFormat":1},{"version":"631f50cc97049c071368bf25e269380fad54314ce67722072d78219bff768e92","impliedFormat":1},{"version":"c88a192e6d7ec5545ad530112a595c34b2181acd91b2873f40135a0a2547b779","impliedFormat":1},{"version":"ddcb839b5b893c67e9cc75eacf49b2d4425518cfe0e9ebc818f558505c085f47","impliedFormat":1},{"version":"d962bdaac968c264a4fe36e6a4f658606a541c82a4a33fe3506e2c3511d3e40a","impliedFormat":1},{"version":"549daccede3355c1ed522e733f7ab19a458b3b11fb8055761b01df072584130a","impliedFormat":1},{"version":"2852612c7ca733311fe9443e38417fab3618d1aac9ba414ad32d0c7eced70005","impliedFormat":1},{"version":"f86a58fa606fec7ee8e2a079f6ff68b44b6ea68042eb4a8f5241a77116fbd166","impliedFormat":1},{"version":"434b612696740efb83d03dd244cb3426425cf9902f805f329b5ff66a91125f29","impliedFormat":1},{"version":"e6edb14c8330ab18bdd8d6f7110e6ff60e5d0a463aac2af32630d311dd5c1600","impliedFormat":1},{"version":"f5e8edbedcf04f12df6d55dc839c389c37740aa3acaa88b4fd9741402f155934","impliedFormat":1},{"version":"794d44962d68ae737d5fc8607c4c8447955fc953f99e9e0629cac557e4baf215","impliedFormat":1},{"version":"8d1fd96e52bc5e5b3b8d638a23060ef53f4c4f9e9e752aba64e1982fae5585fa","impliedFormat":1},{"version":"4881c78bd0526b6e865fcf38e174014645e098ac115cacd46b40be01ac85f384","impliedFormat":1},{"version":"56e5e78ff2acc23ad1524fc50579780bc2a9058024793f7674ec834759efc9de","impliedFormat":1},{"version":"13b9d386e5ee49b2f5caff5e7ed25b99135610dcda45638027c5a194cc463e27","impliedFormat":1},{"version":"631634948d2178785c3a707d5567ae0250a75bf531439381492fc26ef57d6e7f","impliedFormat":1},{"version":"1058b9b3ba92dd408e70dd8ea75cdde72557204a8224f29a6e4a8e8354da9773","impliedFormat":1},{"version":"997c112040764089156e67bab2b847d09af823cc494fe09e429cef375ef03af9","impliedFormat":1},{"version":"9ddf7550e43329fa373a0694316ddc3d423ae9bffa93d84b7b3bb66cf821dfae","impliedFormat":1},{"version":"fdb2517484c7860d404ba1adb1e97a82e890ba0941f50a850f1f4e34cfd6b735","impliedFormat":1},{"version":"5116b61c4784252a73847f6216fdbff5afa03faaab5ff110d9d7812dff5ddc3f","impliedFormat":1},{"version":"f68c1ecd47627db8041410fcb35b5327220b3b35287d2a3fcca9bf4274761e69","impliedFormat":1},{"version":"9d1726afaf9e34a7f31f3be543710d37b1854f40f635e351a63d47a74ceef774","impliedFormat":1},{"version":"a3a805ec9621188f85f9d3dda03b87b47cd31a92b76d2732eba540cc2af9612d","impliedFormat":1},{"version":"0f9e65ffa38ea63a48cf29eb6702bb4864238989628e039a08d2d7588be4ab15","impliedFormat":1},{"version":"3993a8d6d3068092ed74bb31715d4e1321bf0bbb094db0005e8aa2f7fbab0f93","impliedFormat":1},{"version":"bcc3756f063548f340191869980e14ded6d5cb030b3308875f9e6e0ce52071ed","impliedFormat":1},{"version":"7da3fcacec0dc6c8067601e3f2c39662827d7011ea06b61e06af2d253b55a363","impliedFormat":1},{"version":"d101d3030fb8b29ed44f999d0d03e5ec532f908c58fefb26c4ecd248fe8819c5","impliedFormat":1},{"version":"2898bf44723a97450bf234b9208bce7c524d1e7735a1396d9aabcba0a3f48896","impliedFormat":1},{"version":"3f04902889a4eb04ef34da100820d21b53a0327e9e4a6ef63cd6a9682538dc6f","impliedFormat":1},{"version":"67b0df47d30dad3449ba62d2f4e9c382ee25cb509540eb536ded3f59fb3fdf41","impliedFormat":1},{"version":"526e0604ed8cf5ec53d629c168013d99f06c0673108281e676053f04ee3afc6d","impliedFormat":1},{"version":"79f84d0bccc2f08c62a74cc4fcf445f996ef637579191edfc8c7c5bf351d4bd2","impliedFormat":1},{"version":"26694ee75957b55b34e637e9752742c6eee761155e8b87f8cdec335aee598da4","impliedFormat":1},{"version":"017b4f63bafe1e29d69dc2fecc5c3e1f119e8aa8e3c7a0e82c2f5b572dbc8969","impliedFormat":1},{"version":"74faaea9ae62eea1299cc853c34404ac2113117624060b6f89280f3bc5ed27de","impliedFormat":1},{"version":"3b114825464c5cafc64ffd133b5485aec7df022ec771cc5d985e1c2d03e9b772","impliedFormat":1},{"version":"c6711470bc8e21805a45681f432bf3916e735e167274e788120bcef2a639ebef","impliedFormat":1},{"version":"ad379db2a69abb28bb8aaf09679d24ac59a10b12b1b76d1201a75c51817a3b7c","impliedFormat":1},{"version":"3be0897930eb5a7ce6995bc03fa29ff0a245915975a1ad0b9285cfaa3834c370","impliedFormat":1},{"version":"0d6cf8d44b6c42cd9cd209a966725c5f06956b3c8b653ba395c5a142e96a7b80","impliedFormat":1},{"version":"0242e0818acc4d6b9da05da236279b1d6192f929959ebbd41f2fc899af504449","impliedFormat":1},{"version":"dbf3580e00ea32ec07da17de068f8f9aa63ad02e225bc51057466f1dfed18c32","impliedFormat":1},{"version":"e87ad82343dae2a5183ef77ab7c25e2ac086f0359850af8bfaf31195fb51bebe","impliedFormat":1},{"version":"0659ac04895ce1bfb7231fe37361e628f616eb48336dad0182860c21c8731564","impliedFormat":1},{"version":"627ec421b4dfad81f9f8fcbfe8e063edc2f3b77e7a84f9956583bdd9f9792683","impliedFormat":1},{"version":"d428bae78f42e0a022ca13ad4cdf83cc215357841338c8d4d20a78e100069c49","impliedFormat":1},{"version":"4843347a4d4fc2ebbdf8a1f3c2c5dc66a368271c4bddc0b80032ed849f87d418","impliedFormat":1},{"version":"3e05200e625222d97cf21f15793524b64a8f9d852e1490c4d4f1565a2f61dc4d","impliedFormat":1},{"version":"5d367e88114f344516c440a41c89f6efb85adb953b8cc1174e392c44b2ac06b6","impliedFormat":1},{"version":"22dc8f5847b8642e75b847ba174c24f61068d6ad77db8f0c23f4e46febdb36bb","impliedFormat":1},{"version":"7350c18dd0c7133c8d2ec272b1aa10784a801104d28669efc90071564750da6d","impliedFormat":1},{"version":"45bd73d4cb89c3fb2003257a4579cbce04c01a19b01fda4b5f1a819bcea71a2e","impliedFormat":1},{"version":"6684e81b54855f813639599aa847578f51c78b9933ff7eee306b6ce1b178bc0c","impliedFormat":1},{"version":"36ecc67bce3e36e22ea8af1a17c3bfade5bf1119fb87190f47366a678e823129","impliedFormat":1},{"version":"dbcc536b6bc9365e611989560eb30b81a07140602a9db632cc4761c66228b001","impliedFormat":1},{"version":"cb0b26b99104ec6b125c364fe81991b1e4fb7acdcb0315fff04a1f0c939d5e5d","impliedFormat":1},{"version":"e77adac69fbf0785ad1624a1dbaf02794877f38d75c095facd150bfef9cb0cc5","impliedFormat":1},{"version":"44710cf3db1cc8d826e242d2e251aff0d007fd9736a77d449fbe82b15a931919","impliedFormat":1},{"version":"44710cf3db1cc8d826e242d2e251aff0d007fd9736a77d449fbe82b15a931919","impliedFormat":1},{"version":"0d216597eed091e23091571e8df74ed2cb2813f0c8c2ce6003396a0e2e2ea07d","impliedFormat":1},{"version":"b6a0d16f4580faa215e0f0a6811bdc8403306a306637fc6cc6b47bf7e680dcca","impliedFormat":1},{"version":"9b4b8072aac21a792a2833eb803e6d49fd84043c0fd4996aa8d931c537fe3a36","impliedFormat":1},{"version":"9b4b8072aac21a792a2833eb803e6d49fd84043c0fd4996aa8d931c537fe3a36","impliedFormat":1},{"version":"67bcfdec85f9c235e7feb6faa04e312418e7997cd7341b524fb8d850c5b02888","impliedFormat":1},{"version":"519f452d81a2890c468cca90b9b285742b303a9b9fd1f88f264bb3dda4549430","impliedFormat":1},{"version":"519f452d81a2890c468cca90b9b285742b303a9b9fd1f88f264bb3dda4549430","impliedFormat":1},{"version":"d58d25fa1c781a2e5671e508223bf10a3faf0cde1105bc3f576adf2c31dd8289","impliedFormat":1},{"version":"376bc1793d293b7cd871fe58b7e58c65762db6144524cb022ffc2ced7fcc5d86","impliedFormat":1},{"version":"40bd62bd598ec259b1fa17cf9874618efe892fa3c009a228cb04a792cce425c8","impliedFormat":1},{"version":"8f5ac4753bd52889a1fa42edefab3860a07f198d67b6b7d8ac781f0d8938667b","impliedFormat":1},{"version":"962287ca67eb84fe22656190668a49b3f0f9202ec3bc590b103a249dca296acf","impliedFormat":1},{"version":"3dab1e83f2adb7547c95e0eec0143c4d6c28736490e78015ac50ca0e66e02cb0","impliedFormat":1},{"version":"7f0cfb5861870e909cc45778f5e22a4a1e9ecdec34c31e9d5232e691dd1370c8","impliedFormat":1},{"version":"8c645a4aa022e976b9cedd711b995bcff088ea3f0fb7bc81dcc568f810e3c77a","impliedFormat":1},{"version":"4cc2d393cffad281983daaf1a3022f3c3d36f5c6650325d02286b245705c4de3","impliedFormat":1},{"version":"f0913fc03a814cebb1ca50666fce2c43ef9455d73b838c8951123a8d85f41348","impliedFormat":1},{"version":"a8cfdf77b5434eff8b88b80ccefa27356d65c4e23456e3dd800106c45af07c3c","impliedFormat":1},{"version":"494fdf98dfa2d19b87d99812056417c7649b6c7da377b8e4f6e4e5de0591df1d","impliedFormat":1},{"version":"989034200895a6eaae08b5fd0e0336c91f95197d2975800fc8029df9556103c4","impliedFormat":1},{"version":"0ac4c61bb4d3668436aa3cd54fb82824d689ad42a05da3acb0ca1d9247a24179","impliedFormat":1},{"version":"c889405864afce2e14f1cffd72c0fccddcc3c2371e0a6b894381cc6b292c3d32","impliedFormat":1},{"version":"6d728524e535acd4d13e04d233fb2e4e1ef2793ffa94f6d513550c2567d6d4b4","impliedFormat":1},{"version":"14d6af39980aff7455152e2ebb5eb0ab4841e9c65a9b4297693153695f8610d5","impliedFormat":1},{"version":"44944d3b25469e4c910a9b3b5502b336f021a2f9fe67dd69d33afc30b64133b3","impliedFormat":1},{"version":"7aa71d2fa9dfb6e40bdd2cfa97e9152f4b2bd4898e677a9b9aeb7d703f1ca9ad","impliedFormat":1},{"version":"1f03bc3ba45c2ddca3a335532e2d2d133039f4648f2a1126ff2d03fb410be5dd","impliedFormat":1},{"version":"8b6fadc7df773879c30c0f954a11ec59e9b7430d50823c6bfb36fcc67b59eb42","impliedFormat":1},{"version":"689cb95de8ea23df837129d80a0037fe6fbadba25042199d9bb0c9366ace83b7","impliedFormat":1},{"version":"6f03efcc02e984ebc513acfb165515b057ca69553e0d212027000876be7c6293","signature":"5ce699f9f177cd96e6618c0047f2fdf6372c150c736263d0e7fb0e24690c4607"},{"version":"af9753433dec6dc41a2d3141804113a4d34f09fb19eb9eea063bd8800aa28db6","impliedFormat":99},{"version":"832f2fd6cf5eeaac22e2bdb0e3d7e2498cd8dd4058b853cd6b42033f126680ee","impliedFormat":99},{"version":"22fe66950a6308b2c6a0e11ed74930e90ba9d8a5fd2910666565007678875c13","impliedFormat":99},{"version":"084c09a35a9611e1777c02343c11ab8b1be48eb4895bbe6da90222979940b4a6","impliedFormat":99},{"version":"4b3049a2c849f0217ff4def308637931661461c329e4cf36aeb31db34c4c0c64","impliedFormat":99},{"version":"6245aa515481727f994d1cf7adfc71e36b5fc48216a92d7e932274cee3268000","impliedFormat":99},{"version":"3550708c55e4b79c5c13870f994461bcec97208e1d6758395a178913bbf05de3","impliedFormat":99},{"version":"660ce583eaa09bb39eef5ad7af9d1b5f027a9d1fbf9f76bf5b9dc9ef1be2830e","impliedFormat":99},{"version":"b7d9ca4e3248f643fa86ff11872623fdc8ed2c6009836bec0e38b163b6faed0c","impliedFormat":99},{"version":"904a01fef87360fa2fd0c2e934af92995b669565fe0bfb546ed0ff23769999cb","impliedFormat":99},{"version":"d4f7a7a5f66b9bc6fbfd53fa08dcf8007ff752064df816da05edfa35abd2c97c","impliedFormat":99},{"version":"1f38ecf63dead74c85180bf18376dc6bc152522ef3aedf7b588cadbbd5877506","impliedFormat":99},{"version":"82fb33c00b1300c19591105fc25ccf78acba220f58d162b120fe3f4292a5605f","impliedFormat":99},{"version":"facde2bec0f59cf92f4635ece51b2c3fa2d0a3bbb67458d24af61e7e6b8f003c","impliedFormat":99},{"version":"4669194e4ca5f7c160833bbb198f25681e629418a6326aba08cf0891821bfe8f","impliedFormat":99},{"version":"db185b403e30e91c5b90f3f2cfa062832d764c9d7df3ad7f5db7e17596344fe8","impliedFormat":99},{"version":"669b62a7169354658d4ae1e043ad8203728655492a8f70a940a11ca5ed4d5029","impliedFormat":99},{"version":"a95cd11c5c8bc03eab4011f8e339a48f9a87293e90c0bf3e9003d7a6f833f557","impliedFormat":99},{"version":"e9bc0db0144701fab1e98c4d595a293c7c840d209b389144142f0adbc36b5ec2","impliedFormat":99},{"version":"9d884b885c4b2d89286685406b45911dcaab03e08e948850e3e41e29af69561c","impliedFormat":99},{"version":"5212a60216433a9b19c335ea88904c1a03e664b744dbc1949e5aa6eeed36b755","signature":"02173651543fd9b9933cb4002bad80cd2c5c048311d3c78fabc009674a6d58fb"},{"version":"ce456e43993ad4673209c9cd0e661d6d746ea66e579e8abc82f47c884f67b96e","signature":"7ed4b3886b568a2ed982c7754923358821639116da5ef04dac995cd7dd694ba5"},{"version":"b6351d79ff75a926441bd441b7fbfb37420a01c66fddaa03a06baae79c759a9d","signature":"2928057abe12e608410b19b514d8f0ade6432c76ff5e75c61cdbabc4539c95c9"},{"version":"948b2d89a171c6e80f01ce269e10cf3ca823c14fdaf9cab86bda8b5984f070a2","signature":"614a0e6ec405f68f0abe683f1c29500a98890a77306d0842aa43274ed88a284b"},{"version":"f81dcca07223f7b326d3ba02eebe3f4a3eca2ad2fbbae3ea6c984d34b5ecc0e7","signature":"c2372a7eac31d480a3ebdea485a1fca02a1a587104adfd9ea823997cb91d4b18"},{"version":"ae00606a4d175a3954206a059adfdfc1ba0ae00101377a6e75171ec9f4542a78","signature":"90e71f3c75c9456e70dfa459eed920cca3f575a46661bcded81b9e4385d754dc"},{"version":"48261931be8502cfc071efebb0e9437fae055634c0aefbe7be0bb7bed28147c0","signature":"fa2b949bea4bd7510a5d2958a352d99bdd46e619ccef96f9de32494d64c20c26"},{"version":"8d159ed291192d9529345fdde8dad6e5a5ffebc673620fb71d91873e1261f1b0","signature":"1f15289b8cd8d2acd7beced3116476c86e9b70b4c5819d7ec972704ab87e07df"},{"version":"17ad7c01f4fe05e6d39126474badc7c0f8f7041a0829f70685a7fc1eee3a9c49","signature":"663b1f1bdfbad9136acdece371742fbdad7e98f73b2a71d61d009bb60353b883"},{"version":"eee97dd68753c0d9ad318838f0cc538df3c3599a62046df028f799ec13c6de08","impliedFormat":1},{"version":"a1fc010ad70aaa737e5d354ffbd5f49a83ca21e433a8356b1eab11fdd65b8da5","signature":"49774261c1f75b48a52de77062964ca0062fbc78c601919ea9332eb88d61163c"},{"version":"eccaa6c100cbc5fd24abea36fe30443124e90d0a4a0feb8135f7a40c784188b5","signature":"2da21b4a9c13de34130dd9fce09b86c66eaab75ef47cb5c79a450d01f8ac3c55"},{"version":"956b9de8725a373d957acae5fda136a11cda19e8c9cdb73e7c31f4b1550c81c8","signature":"7512dedbdf13f624cbc900f7f6410a05fb0ee4fa40e7d5f195b6522b250c1c80"},{"version":"0091c1ebc3ef776b3e1fc1d158d5dc5d409530a421de8dbf6646d5959da748a2","signature":"1c5fab5d26703950cd1434597d6e3b31db0bcd0d71118c9ec40ba36d4c0e66fc"},{"version":"9afe17d27d974f041a016edd49af659b1dc98ed321868b34ce9440575236d8ac","signature":"68632332c03911117e3516f2d64815925a3ff3ebb3490f04a7c49b83ac5120b0"},{"version":"c34274c48e68908fc5836377406c5a3895628ef9bc4a582dd853c0ac1648cce3","signature":"3dc0171847890bf34b0f93715b5b006c38ab563c7ecd936eb4e23e42324d7321"},{"version":"17a15100713fb05008996f2ef76e8f4dac06228ca2ade411735443b4bb269c71","signature":"b37634453bdae659f58a3d086599cfa800e399ecf7ce94deb78907528b265e43"},{"version":"328d4610a503f938dffee550383d314b587091179505f0d938c96d1c0aef273c","signature":"f6497665a193e7b96c8e98b1985caa978159caa3e15e29cccc0d6dab70506fee"},{"version":"3e31f02578e3fd39e52470a70ff8aac29172a20fab7a9cca45a028f7930e474c","signature":"99feb33707b1b6a8a90486cba553698cc46869dd399efe081b0a059f33f26267"},{"version":"75e6bedd126476999c99330b33459493252bb7a89d987beec886662ff6c4486e","signature":"def1b763a8d8e1135540fb0098f9d1c9eaa04e07024250bc82696130a383038a"},{"version":"0006ba0b708dffb8a3f20d90028b21a25849d894ea4a15a912c4e5979000c8ac","signature":"81a6d1ddaae8b9ee7e586913a040d9b2ba59cc30f6bed92aed34b103deaf78dd"},{"version":"838418271fb9adbf04cb363046823f769b3beaf49a5f2a63c41aeaceaa31919f","signature":"89d0540388169b1483903f0dbebbe2ef9725e5366bb6caf7833e465dd74dec27"},{"version":"7e5d7550ef3cb8e9e5c2d96dd5cf6df489f2de7d4797a0eeef7a6e118aec8131","signature":"2fb02fe70954eb6fe9a3378f5dbb60fc83c5ac9a53ef417d51ce0e10d8e6cf05"},{"version":"e4af37f767c190e826afa204814051f6ae8c14670d56d6d346676d2c905cfcc7","signature":"903af711a69af63596e0e5970971ae650609c9874836c06c80e37f3a447e7516"},{"version":"4b7f5b00f5fb84487d150babfb110a5c8a58dc63eeb3ded99eef6619e5a7370c","signature":"072fc56e11c53863de67bc9f92c1bbc49d3c3b68721949cc5c50c1b7d0ee07b1"},{"version":"d8c75486b4937af77f5afc683c3854187e97c8aa931f3fb8362cb45ed0e3828e","signature":"5ec18cb4b08730d44b0fd1f38a64a142e0b54363afc3395dadb354e1e585e763"},{"version":"3a647fc860790a0ccb5c1e4ad51f89380f0ffeedfd7ff451b5b2990541886261","signature":"ae3131335f2027885032c1bf7239dc261915f383c7348c6347d612de88a94c07"},{"version":"dd9dd2cb18b68edbd5090accff850e4ebaa268499e9c2d4c4a9c769a63b2999b","signature":"e5b97ecd9caeb69b5c52034ea510b99173a01fff97e1ad1731f818515a661af9"},{"version":"6db5d40d3e49d323a20a9044451df3a032a19a7f8df889876e381b41d37ad795","signature":"bd7dfad38d7b0bc15db21f0f554246059a9980949bbddaa49fa03c6a6cc78d48"},{"version":"89a8e9f3725c6aa0d1eda15a3adc15c48762b77c366c83844dabeb15b309ee70","signature":"fd496d914c66d23772d0e7396686ac8d4e2f43f1b4d68fdd6d6d1652e321e19f"},{"version":"9f0a3b8552889302ca5ed7f4a08d01d55e9f03aa837c80607499c7dc9d52786c","signature":"c47037903ed6250d2447c45be7fd782ba2474bac59d2d2461738d6dcd088c429"},{"version":"6058dcf5cbcc65ead6f2768dbe90dcb9a07563b1c31b38ba3a4b9e6a1eb8448d","signature":"ff0bd7b7808155dc22fbe077e31a21c798f691b34624d7139f601d54b8d91aa0"},{"version":"c1f1c65bc5942a6e608dd381f760529235f3f947c5567406c1aebaed7bf3c25b","signature":"60af298eadc19a20ea72e722c8c7c62388a2d0410f6a9225348c32c7b470c9de"},{"version":"009991d902f66c607d473d1b5a78946d7111aea9af76217f9109ae1eae4c94a2","signature":"3d0868c72a50405bcddb06a94a8384e8bd0f7af9a2eb5e3264b226abe9522b2c"},{"version":"c9901b03aca2654cc15b04235e5c6bd40d2a1c399bb9d8e3e5fea84138f48455","signature":"e4377e2117fad27fd6671835a8d58ecf4fdbbdc3a2688693795dbc57b8e66554"},{"version":"20e6fc130800438dcbd54fda1aaaffe3b7f072469734128ab47c0b8e8a24efab","signature":"3285704bb5f41f76af204375c5411af38fed14ab901354a7735274ea16d0e7d9"},{"version":"c2eb47ee38a6f03f5eacac44859358b83ebcf38282dc8828403d2b25f6fa7dab","signature":"15b7ee42eba96af854245ade438745c0122add9d6cc457a4ddd79ede2d956b68"},{"version":"330d3967e22adb2dd0fcb28d96b409b4bb4fdd7705a960f35e81ca72fc7f7d73","signature":"aa57bdf301172c79edd4013191b3461ee9865f81817a8df16b85bfc98338f837"},{"version":"d0ae8cc3194f9df7add47fdf3d95f3edf7a02c26ca85b66c9cc4cdd5f7e41f1a","signature":"99fe1e0c160faa69fc8bb5178dc1d5b59eb90973be0ddcfa0f55cf2edd758885"},{"version":"034024c8dc4186e91de000f5c2c1a625a1b719b453d3490dc9054830aa00bafa","signature":"1a8fb9fcce14354454df28f7f2b713ab23e862148e9ccc48108394287fd66540"},{"version":"17de424f3224a47ed70b6aeb33008d4e0449ff35b7637e0dc6d6b57e960ebab0","signature":"e058b09d1fcdabbf2b223751a13e3fff89e6908d6418c5d8c852ea49d9ebd2b8"},{"version":"5df9dad563f4201266942c7690992a94bd7e0cf95cf2c500ddf73d2056c47cbd","signature":"2bdd4bd461dcd571cae198045c059a35cc52e3915952ea2ac3baedecf121f06a"},{"version":"79f743a9409f5823daf399dc26d92851b783a998b3a6c48ead12a8eb9298ac16","signature":"d65c0e089e01bf26bc74d4e1ae0924a77a90002b6e1fe92764cf40aff15e161d"},{"version":"d45695ed5f93a946fbf6ebd0fcf02dd01ba2438fa2745ef87e45a225739cd19e","signature":"960eb9bff7ccb0f8efc3534fdc516115a8302a0a4633ce66bd15b736cf7f6e6a"},{"version":"fea95fba42546ccdd8f136cb6aa32e29bb7530e557186ea39be8803e78da4f8a","impliedFormat":1},{"version":"fd0e90f520a290bbc63659c0e324d31c45f6d018967a0c05cbe23b7eb0068518","signature":"9b340473b2b7e50f5442d04e82b91f3e000211d7ef7c08718e7bdd01a0c3a0ff"},{"version":"adb2f79fee9351c36703d0832a42580d8360a8bbd15be7411af68060620d39db","signature":"79f96b74d33fa0a54756be1a2fdcab740d8e0b8a98d577013b63472be6cf89e4"},{"version":"7c4d00a6e887f14d5a100f6b1cde7137efe2a4a537898f35bb212d2da6ee5a8e","impliedFormat":99},{"version":"c132ee86f0043f7346142953baf378c41b2c5ef80d67fec29c401a91b62224e5","impliedFormat":99},{"version":"6f54d7ff890853b3d60134ed0ee4d7e353f5f4bfd91aafda84ccca6dfe826f89","impliedFormat":99},{"version":"d47d3db63a62db9aa78d559dbf0558c1a0c6f21e5c2ce8df99823a37cfc1cfdf","signature":"2fea331708d47df2cdc30fa7b5d0f9251dba501d284ae448d3b18c0463bda21b"},{"version":"5cc23e021a3354f5277a4771bc2970138cb2426801817ff664c1d06079957e6a","signature":"acf63bb8c133a64973ad6a6a52817fa466329a15cb81bb0b08aff16eec300871"},{"version":"581ff02e6bd4ea5bbbaaa478023ecf52bda92e14b1157a220e95ffbc5bb42ac3","signature":"c6ce48eb456fff09a2ebbc8393d37e1744a1814edd18f98c7067c460ea6ded35"},{"version":"fc132047c384c45a619346edfb7c34c1d02e1a62aeba366138249b17f6f51a68","signature":"e1f4e03a198486961ebc7d997ad12432ee9757db7c29c595db2fd215687d781d"},{"version":"312428011337c6b4e039bdb8584fd10b1dc3ef5963574d20ed88d380845f3643","signature":"58031c1eab800d1a9c9fe3332fc298b261895e336985bad81a42a5e8771e1cc7"},{"version":"4f4bbf2a37afc0509bae29d43a2fb3d46375532b0b80f5af36bbc73879665ed8","signature":"8a9a14316588cd57c1334a6adcb9b0a8af5cdd95e9bfaa18258b6d822d2942ba"},{"version":"ec1d0a08157e1f253e919288455ae2178f678e80c2c5af2af43d153a0135b7f7","signature":"5f01409cf755021f276dde88bc6386d296c8c5b8aa8ebe39174ca90b676e7392"},{"version":"5db493292724efe7ea8309513efabc164523a44c70c07dc1106897c07c73986a","signature":"98f27bc9ec2f64e2b3f0753ee1c4587827e41fb29fea91b22b8d6cbf4538e8eb"},{"version":"868d4b8889c29372f1a142c2c78f24e2f5b6a8778c16b7c1914a393356426e67","signature":"a238efeff9ec292ee8a6fe9285efb9cf895648198c17395e39163eec217df44d"},{"version":"1f8270d6a3dd1fe1c2b35670d77bcf50bc378ef34b3421dea3fbbc95ebea57f8","signature":"dd9d1b2e8a8a423bb4098a2ec13d19b7e4bb926dffd0e26f56e9ecfdfdf1242e"},{"version":"f3dc06439f16f67b5f325650a435765ec394bf247240d99704d8744c1fd425b8","signature":"6f17324dc898bcc41ff19f8e48125a1cde8af93903e9c5d877fac20c0166b8f2"},{"version":"a45a5559bfc8bbea7231d26cc974ef82cc777342e7823a98e6939f3189119a2f","signature":"a92bdf4480b8d49d8ee1d48a5742da9051537c5843e078d5a75da637977cba93"},{"version":"f844a0254a20c75866cc317a9df73bbb5d2f137532abd37521ced6cde2653d5c","signature":"e879a03582ccf250ca5e6005984a7d8327bbf3a0209d55db4417e7e9a5aebcd5"},{"version":"42783fb9fe4e9a3d9e242a68ce6a75e7c961409400450d87da82b537a80936e2","signature":"3ab461d00338076bfbf4c60dd1194f47127f0d72d4049344660a560607e15a1d"},{"version":"5c65fe08f2297c61f38e64d2508dd946c3a32330231205585ef9a2af5ecb35cb","signature":"4b0a603a778797cc49ebaa04661f5aa91146130af9a90fd708b896eb6570bcdd"},{"version":"74e606cd1ecfb312629d2a32ec2c7c66f7e71b91ac8c1bac37a0917b1382a772","signature":"ff4f93816998b7c8c90fdce049fffc9925930fac1c56217b47ff37b570a1644e"},{"version":"cd76f314e277b2cdc574bb1525849553b23cbbdc30c0822910262e7e6d307fbb","signature":"4cb521f1bcd83849679da3f5674ee0673e6fe6b48493d93b2693505ff1c53b9b"},{"version":"8971816a5e5685c96fe6a9d8fc232c6627935b0e3fc7159564fbac6cc5247821","signature":"cf3f720b6a8438ccdfdba67e9a1f1624d2916138f0e7148d94f8c7643d81b6eb"},{"version":"90753387f9f7634fa9875ccacc8a921490c3808050355a70c4eea4db3420c271","signature":"855924353ce89ba42ca8aca6b337bea7575d41ae4f58302d57dd7f02153d908d"},{"version":"6af8b2ae9f5879099878eacf1e463f18d4686553c988c064a8d425b9375de015","signature":"40f55f2c08c4583a6d6aff9a9d3c3f953f7845bcad33d5706f02259d73ce94a1"},{"version":"003cd255513d0a177de3d075a6c9e6e7d86f0679df02c3d6c263dee462c0698f","signature":"a3f2b6ed70ef63e56aced7ae1913ea01005051905ec50aadc2040b7312f1c114"},{"version":"ad5b07d623d0c8fa8978aee9fa5891a36623c5cb37eaa21a45b45d24d81b50e5","signature":"ad2f284b3f214e0a34b1d18879e3dbda325f7517bcc0bcf52c5f8e7dcfc56a06"},{"version":"6010d8460cf06c87332c212f778f95e4e6cf9a4a4643e1c7567d38016dd7413e","signature":"44f2213f84bb0b199f733c5f427f7ffb621554bba4bb03d079f2b23d9b90433f"},{"version":"bc051259c48f09352eeeb72b2f9ae879830040fb69dc04d6c1b57759e4fd2230","signature":"7e1c7c9eb8b50cdf25f288a9620cd622ed7453c17af973958b4b424edf8aadec"},{"version":"0dc09b8682fddd1d2449afb5f017717102be7ada6f09884d3449f3a36855cab9","signature":"0b0a702d72ed95899863868fd283c04784b4a46aa99c3c267c2794333b4f4481"},{"version":"06338dbaef9796920ac9cde345e3c5147ce469269c9fa50c45f9d58c497e8d42","signature":"0507b3b5aba6a6b6b01eecb8b1b0fe08b61a3769cd8687084fea9b59c636aa26"},{"version":"5bdc47b25d11c626b067361ed41d17ca81d2ef5c91b38b2be62751e53236be42","signature":"82296ea3162f211e453c81621b26b2a2a249abe26273cdf3f908054890c15584"},{"version":"bfe2f45cc7acfc7cf189c563ee860f19443542ab5f60c06520404c6c3d803044","signature":"3f3737cd0d61d4c7b49b8d1d03cd0e73f2ec56d538f9e94478c744e5baf8fc3c"},{"version":"41ac689b4df19a1b3d716221a9430894ef9c77327365c0d5f6b393c23d4f203c","signature":"5251b23faf8caf93a187f99b1b4544e4bf1bad0429240f1ce0e52d4468785160"},{"version":"d523a23d9363996f82cbb9092b65fd0fef13d04dc108a70c63291f6efb27ce48","signature":"b8fbe07bf5735cc55e23a331c90a09e12516b2f2056248bea013707b0e044022"},{"version":"8933d8e23406a5e33f53820bd531b979071aa651c7cc1bb5f1d2e820cf62991e","signature":"c87c38f882ce57ae2930f28481cd6b74067a7e5c14ffaf5341a360817c921e03"},{"version":"1e6a76f6e152b373de945c5065d3094f7361f0567cff85e368f38a2ead87ee9e","signature":"475ea51decd29e9a0ccc13faab82e955bf32fbaee04baa32cff4f49f89b5c72b"},{"version":"b59aa430182901d3d8d5306fbd46ce05ea2fdf5a730a47551a475899a86aff5a","signature":"9366b81eb06ff3cf72ed45f09a512d928ee04e442249b671485d1c4a9ed6cf2f"},{"version":"4613c13f66a38dc74e6c133ebeee6c60034ea6b3b40ab6a0a7f4313d018cb022","signature":"c951aec23e97f932689ddf1708bf71cb754384d3af0a53e3619172043b67ea71"},{"version":"85409d2df96696a02837fc442d4b81f78e5e813c26732b592f97fb524987a417","signature":"f7c5a249e19450b43adf844aa775a165b9e3a54de7fcd146bfadd2aa0f940a9c"},{"version":"2d569b2116f70459fe20d92f13556dd5d53862a43bcf229f691f0a6147255a7d","signature":"718f3ecc854af419d91fb7c9360af9177c490d96dea913e898229ecb46e6de20"},{"version":"5303df340a0911820938bff588dcde8fca02bf431cbf7c8b0b6e0e95b4a77ce4","signature":"a932f1b0a8f7a39100d03751c9a84d7d7352e2cebcb2d7d2196d0d0213b01377"},{"version":"4db7f05732f6da774e8588ccfc55d0f26e5bef9e1582d450f07a2e62220605a2","signature":"65d291d1f3a973c26b8d9093b92b71b2782a64923422ca0e8b7b76801c3debe7"},{"version":"d1c4f9b3297117d4c82d2a63f282d5dda1676364e3a7ac0574928851f3ba3792","signature":"25161fb57c9980f74ea77eb1b55316dc9d4614db29940f004be8eedc971fc4f4"},{"version":"a44c8c2faf000598361ab9c3d23701a58d3abf82d5fe1ab9cbfd5a743bc87870","signature":"3edabacd015280c488b2184c4456599161076f43e0c2ecc09847551da1f48bdb"},{"version":"65cbdfab18b014a6840b68fe80183b1cf3637d435b497c99ba1a502f8303e391","impliedFormat":1},{"version":"3b133b5cb1fab24798fee6c349c3925d9b2e46429669c3a290f5324d9a210025","impliedFormat":1},{"version":"ef783fa8760c66a585666ee47571f1b5beb6ee39c65feac3c6d11b9419b23a73","impliedFormat":1},{"version":"e66b54d888e7c4aa706f68cb4f423c9a7e4466c116140b3b751f94b9f6cdefd0","impliedFormat":1},{"version":"6a334b9a856fb9942989438d731fdba29babdfbfae340b4f7182f1db740de71f","impliedFormat":1},{"version":"e184c188c53f56fb830a9baac037236bfe181e9e56034686eeabe17af4ce47fe","impliedFormat":1},{"version":"c894ba99b642d34dc85b6f996ba006bb5c75262e8ba01d6989cde022ff91c33e","impliedFormat":1},{"version":"9c2ba9dc651dcc4fb19a90a9aa2673c42418890e6adf4f9b2f4cb0190c355afb","impliedFormat":1},{"version":"9a32c6873b8adfe2da4a2fb2e2fbb574227f13810d7596cdbf83b5eb9b9ca0d2","impliedFormat":1},{"version":"1b95f9db514599f21c2330d53b93495513c679fcef1aebf767098d6a9c61833a","impliedFormat":1},{"version":"b0d3f577d89cafb77845b87ca77553e992435b919221f3c8397075bdcb7a32ef","impliedFormat":1},{"version":"af7770fb80c5c4bfd4e9a2b245ae35ca927e618161bdb3cc4b305ee3928187d7","impliedFormat":1},{"version":"2c3ec41b38f7758ee3e53609a4d473205caf25f8b10ca6978587a760842d179f","impliedFormat":1},{"version":"2c2c3d4340a36df89a0f4d8776618705fb4a03f6a20b6136e53c522f4080663e","impliedFormat":1},{"version":"56bbd1661909b6600753fc71ed0243f6e8adcae647ef67fc0b62b60e2675a5b5","impliedFormat":1},{"version":"0f99e68df1ea45629adae539a99c2905fe434028fe6704f167271f4ff4f05264","impliedFormat":1},{"version":"aeeb9c352e3d514304dd4e14c2df6df811235874c47fcd735466a08fa7c96841","impliedFormat":1},{"version":"85788c0c598c4056da67fe8a59fe45a5500fb99419aad0f674bb6da07f793288","impliedFormat":1},{"version":"3da22475af910d44c68144a18133de616353aeb85218516e3d7324d8d5dde33f","impliedFormat":1},{"version":"3ec462a0e5c193a2fbb9132b3ac1554512475b2889555c2842686fd4fad53540","impliedFormat":1},{"version":"f7fe6ae99cdb6d40c8a49235f43532d6aa6386f62dea97bbbe5b40fff5d9e7bf","impliedFormat":1},{"version":"3f6da7b72f49f175c8697f0b595c61b9c6379ccbd5bb52c188af80e97755d91d","impliedFormat":1},{"version":"c26e3f5d9b91fcf817e6ed3565abc561ae1b8b5510d26b1780f7c36565463ea7","impliedFormat":1},{"version":"ba82909968e9b21ba2756849a8e3960378bba2071e7e534678c97a6d0923141d","impliedFormat":1},{"version":"77b3fc3e5036f6d435fd1a7ceac8301d654cddb9ea50d9c77f9c8b9400711685","impliedFormat":1},{"version":"3b7765c7de1b17a0ec47070ee2000bf0da31cdecef6f61647cd2eb17d33cdef8","impliedFormat":1},{"version":"3da62cc0ecc4ccc373936142c3aef5219493ee7fd013a1426d733a1de178d064","impliedFormat":1},{"version":"3bd67be4d356ced8037d48437abd6fa8c4c2aa2b44b5e6fd98df41127807197a","impliedFormat":1},{"version":"70ef66c42dc83eb786c79d24d292e9f40407b03d6c37112adbced4c5fd353303","impliedFormat":1},{"version":"12a7629d2d48dda27e51c66aa511f28721e78a7d50877d87d656db7256e5f8b4","impliedFormat":1},{"version":"92f7c675afce2d60b571ecc378741035a199f15ad9e6953f69221236594312b4","impliedFormat":1},{"version":"adf5c789e6eca6c64627db24726fe41667ddd646e5557b83afbf69ca4bc798e2","impliedFormat":1},{"version":"caf51d543f4b7d544eba6565759ca7af138a423d4dad62c9c74d4f3d6093ab20","signature":"8fc227fe239ad46349c6d9c8de180704e4dc5839d6e6f2dc55afcfff5eabe2ee"},{"version":"0a7ba2189d43f9af93d3491d825fc17be7ad382d17a1904f5ac3dd6fb787d3ba","signature":"0a18303f2d536b010795b609a73c5fe4f79c4eed72258042b9972f3717bdd7df"},{"version":"bd6e2d28c0d03af18319f7f04da622af069a29a141dda6d81331f5890e9d69b4","signature":"c6ea73f1761b86a22d323e13665edeab1621b63adffb13de381b2f566e5cdfde"},{"version":"4def5c5bd7a63e8c3f7a62ebb6d65f22eae382251d86a7ca0d3376412812517b","signature":"28b06be553d7a1d19210efced5820c78b78cf86615cdb1588c3c01f3d5350342"},{"version":"b23a8180ec6441f031953258c8d6db557f2146a8652cdf103d82c683e2c5a467","signature":"f4913294580411e297a9c08c2667cc5f7529fc49b163436056ac0ebc912bf959"},{"version":"3e7e91c8cf8ff00b4fd9485f3d1a6e53a7e068d9650d0d664a259bb3bea2d575","signature":"ff6c6b6460e8357f5c249255c43baa49f89c431d673efa1091e09c477ec23e96"},{"version":"eed679257705ce73ef0dedd1bba5b54aa5ef7fb7bf566562123346edd295d1f5","signature":"a58fc73ad52ca7b8c991848ef31a698482348e20f4e0f75c84f88968883a3944"},"9f0e2e6008634fa546e08ddbbdd3b15d52d93b0f2ae9f287365832f291673eec",{"version":"b342c1c521edc944ddded4b4c144a8b7f4d7d8533baa6161d6d0afc1835e6365","signature":"360af6e9cad29c3c201bcbdc6655d2a592eb4beed9286248a86e7536a344c4d9"},{"version":"8d680c18fcc8860f6dcb7e5d8fc2836768ac0f835b77ba94237f564014bece93","signature":"d1a1ccd2147ce336995aaaba3909ea6d420c7290bf6555fc513b2ea25dbb464a"},{"version":"76ad24ad02212c4038d0106569fc7765c0d8b77580545cac50e9084c8633e846","signature":"fb8cd82b5c882c7f8fde03304696452c390761dc144e437f0ee121207d65b3a3"},{"version":"1ff37c121a6807d1932961db4bb752d6bca8131631212b81d313a3689ed1f515","signature":"a5e207f98dcb58154f4f0674a30ed54a11f353492309ed2e282509c573faaade"},{"version":"abd730adda333d47e9d276198487c2e156482331dc26033cbaf7056eba726fca","signature":"2e168eba5d9fae55cf1ceba797065f2fd6d325ce70cc78a864496800c8eea0da"},{"version":"92909467bc7a8efadfe7c0482f9440c9e6609bf8466ca6027b47e1ca37f0b7de","signature":"7b564323becc1055f664a3868d47a23dcd1b59f8daed17c31b17b5d12b39182a"},{"version":"04538ed505f66b7eb40eb7b73953f58a7dc4657d871866a025b13ba48d874cd4","signature":"2d6533e0d7db7b5ef1974351dccef2ef6ce84b2b3afd49c13cf016a209d5b957"},{"version":"2f972a614ff8f805cf792dddd5fe898643e508bd7074f816b8530e9a10545a7d","signature":"346d9f6cd2903e018f11f3af77d52269fd9b1412b4c4149c9c593c69b6898f4b"},{"version":"495c01ecfca1fec4c2030fa5c49e4e90986b6413f12d0345a76ad2f20763c0a2","signature":"fe5a2493b0dadc8b300d58bae57676bbde041c25d8eeeeab5986d6a8b3e6cf5f"},{"version":"e0339e5967c30b4df1140101a6903504676f522c956716875a519da0cc263958","signature":"c332ad3b68fcb642b971247d2598aa0075e5c0dec5195deb0069830ebeb62eb6"},{"version":"e47c8e0738b8bb436b8d14a53aec1d037f8c554184b7cd23177fabc15dea12c0","signature":"afd880a1851cd2d554e915a684d5925e54f7b446dba3150015efa3a7885d46dd"},{"version":"22b709465b3cfe2abe3f3f27f4fea5cc8047170986a1a4ef258fe7002163ad83","signature":"97640ef9463f4c33af72f64d092f428e0cccadb4490d6608ccea6e1d919df4df"},{"version":"cdce84de2a3bdb777fb7141b48443389b01e2e4c08ad59c97d9ef4212aafcc2c","signature":"4486664d0936e4f7c100f2a1822e53841c5a56d2ac8b121836312f7978f7183b"},{"version":"65e00a820fc03cb31f046120291f0b64d6f779201dace3ca90fadcef6c114038","signature":"82f681c6ce7828604a93bceb1f63c7d11f99e42157d9412f2eedc519ef89aa76"},{"version":"952f7644e691ff7c92ebebc0983a023b1ccb181d0becad81c3d5266bc99b2ed5","signature":"95274ed80c90b84ee0d1ace571f5f114fdfcd0372f02fcccbd6ae70904fa3f50"},{"version":"1c1004f8424b616baf5b9e4a83a8464743542a5c3e5e07a161bbdd7e8e380443","signature":"23204f61e6227114f09d2497e78617fbe5d665c49762d8d66ea3051e9e616488"},{"version":"264b45d9a688e5381dedd0e45a1e34692613b8a137626b309d1eaa0efc1b4ffb","signature":"b0bf45d2cdab6f3291b1515bad8a054d4a48b884e2e887843b92e2cea97c5870"},{"version":"49cbc38aa01933a3f984c62c3e2d6381ec65d7bd8643b7d1bbde35fd9c5c143e","signature":"07bae9a70273fbcb6b38a94ae8b3bd63caefd716c7b2996ad0faef87d78ee86d"},{"version":"7381c20f2f03972c2ade0dacc8606ba8b2b90e07b24d250408ff8c84683a6a0b","signature":"9ac04a7e97a4a8980b1b91e9e585a857ff97f8d419df315e4c601afc6f9a209b"},{"version":"ace61048f83458da4081be56f754310e25b79addef300d0aeff1b4b916562f83","signature":"cb7ea6ba79a1a691e26eb9540917321ebae08cadae280bbba68f06e1d9cf9d1b"},{"version":"7f5696927356ee6af35fbc2ea67a7bc59285392c9a1d25e5f1df8c073af2a7b5","signature":"0792d4c20eeeeb555a1ac382dd047c6bef6fdba298747a845998bd7d105b111b"},{"version":"b179a9181b72bf0a1ffc0e923226f4c9c6996b5e24be1530cdf480a69b313caf","signature":"8e1c6a127b3feaeaeec1cc8a65b5ad0908d6fd5b4fe5e3b9b6a31c6022a2f0ae"},{"version":"49ab5bcddda9af8dcefb339935203196bd33586aa8983bdb6e54305f30ca8eba","signature":"3fcb3b1f76d9491c450fea7bb6e37f313ba3a5c9092bdd765926154d1a8f7a4b"},{"version":"e5f2cebdd12e4090e0293fb8310c4c71c2f760abdff25b4f11e391fdfd10e58d","signature":"3e29235448783af4b77174939863b401cfb5bb2c632fb8873bd07c233de0e959"},{"version":"d4eebe59c1b434e3596af1fa804ccad5eaa9ded6353b3b410dd2af5501b25afa","signature":"6ce5a9a271acad690cb209eaba0a15eef9503719ae79726b35754918d3eb7387"},{"version":"776d6a639d8c22fac3eccdc4bd24d65138f97a4b83efbe83c8880fbf18b07291","signature":"423cc4ab0bbef49dd19ac408ad5a874b3378b5b8d3e827d22feeac555e73f178"},{"version":"92e2e273399989f0bf397c3c0ac6c77197f6652834873eba0f5d29968e368c17","signature":"2658e8b4b8acaf7b3f4454a6267245f56b1bd3d8ec4af1625839cc3233addf82"},{"version":"b28856f599bfa142c895daaae8e98a052e25efdfee04ecc588fc849c98cae638","signature":"cbbc99eee18da0e2aa3f6814fd3d4653701aa8e30da461824b8843d405863e8a"},{"version":"6836667873ae3fd1259b849ebffb36c814d8ed8eb2178acbe01f385dcefd24e9","signature":"9fa4f2fbdda40b40ae9c066e16ee2db96f9089b8c5db49a4f2c8c172803fe8ea"},{"version":"73b9bfd5cd913457b33d73ba78ff8e930b60ce3939ee202481092c01b676fc28","signature":"95b0c6e7656d7e2d4d35d3301b076e558237fceddfac8b7cf155f3d6fc7213da"},{"version":"8e1caf21da964be80fb317e08aca2f5d6592191e93b73aa61e04a3a3bc213f28","signature":"174a100a460a0564173dddd80e56d984744323c84c403d09cc4c3e944a90dc71"},{"version":"d51383daddc397e3bc05724ba2231bdcd529a5fb4c384bcb1917809b40d1c2c7","signature":"ec36fa80019e1ed78cfe8d769d4b6af6d645cf5130cd336fdd7196169ffbe656"},{"version":"798589ecde4b0469b6feff94936a0e3e4839b837897f7cd547891e4973637539","signature":"e438a6925c604d082c0b72545836f476d8b0c4d1fc68856abe07af0f9bd34758"},{"version":"ced3fb1e0b00c621fe9c3ae96ae29fe36c63bf4193d28ba9dd33e6a4a9b02f52","signature":"2133d04fd279eb1047c8b70f7be0f459797ea946e4f6b48fa5cc09466ae186de"},{"version":"4afd569c8d1d6d529b32d88d0cf2c6e5dcdfc797578f705e273e116d8851dce9","signature":"dfb2f325ee8aace7d6f080aca9239c3b569151d9f4d453f3da85a6ac415c566e"},"d190c0721ccfde3fcd90887a64d65f5fd74308ab11fbf426a1d7249b611658d4","5da773260fa66694907d18cac65d73b5730d32c95214857074f939e663fee395",{"version":"1b8850fc391f70a60f8c5b8fa3a6cadf29cd778cb7eddb035549c6891ded0331","signature":"79ef258c72bcbd779ad849b912b7b7853418731adadb52d02b0c8a1081b36332"},{"version":"2c79d0e39021171b21b738f4fbdefcee738bfa8de77ed508f8899893a42a64b6","signature":"2443f8af5ea7a2b1c0d3d07554fd1f7ba8f31ce8312db5c715023fe8c3f55617"},{"version":"8e90b96eec245065c4bc8cbeb5cd68622beba91298729115f84f624cfd10a16e","signature":"cca1ef5c771a5d84b51e5ff25115db33d42a6d4ef4c5f6b5e4dccf6d460cf89e"},{"version":"4b71af485d3b7f81a5a7e51898d08d16f326fdc523413e77f8697df1eb4317e0","signature":"5b36256a3922e374a5be6105931a972915586529abf4e5ca8e32bb474cc4707e"},{"version":"169b9400c2cca2cfde9bf5a0a97e7cb56e1a19617fb1341698ad78af407d9617","signature":"0ab1a873adc96e324551df4b6fe76f515add29033747cedee73b3af408c38746"},{"version":"8254bf06ed1cbefc05dbdccd55675a9df75020aadc413832d337dbba53fe607f","signature":"18066249ca5174b9642ac694409c33ce3f7dfafb06b34e2385524617418a2361"},{"version":"cc9cb79fb2a167676ae8bd360f331aa1c6b1b2a5c9146f00ca0360f858f6b456","signature":"34657d0081c438499dbda0987d8594fb60b55a6161b34ccfb40bf0af612bee71"},{"version":"9d4f09529b0fdeaca53797d36326952ceed1500c8c0a2bc7bf168a964dee1b2f","signature":"53cd35e0df672820fe8f6908e4f63abeb2e76183fcbb80649a296c356b91f8d8"},{"version":"e8b0247fdb531a7d5cdcbb45018e8236a976e9f8f147ad3768ffa38e0dcfa838","signature":"017ab4a09fa430451baf52847fd0ed9fca2854585372c2dbdc19542b3180e525"},{"version":"652ce0b8e00bd2215b63bd9af51dd2a007c0edbbc4a79467303d23b69ad507f9","signature":"e9a655f25cfc02eaf2a63aae8d4e385715a1068a6fb4edcc2a9957dd0ffc94b5"},{"version":"c0d7fd0e0fa09f5d08eef669844ccaddf6fa84767e1ecdd86b3fe4e49d17e12f","signature":"dc324b7b5312dd0529d6f2d1c65c5d3a27a19fe85a920916a99066c72c2abe45"},{"version":"9b7127b58bd02c7fcede60eea5a89e7c4c7ea4e074af14216d1ae94bacc41088","signature":"c43e81cd3926db0d3e686512adda88b1a93c41e6d25f6f440dbbe43504431486"},{"version":"707ea133c2012b5a0fed0bb4402240207507bdcd756633cf2037a1b17582d025","signature":"0fc944830478f38c258214ee6f341d663053b5c22451dac8e61d1ef42ce7d389"},{"version":"baccdca8e526b957f3f258c23ebd468c2ba8231f39877ad9f16fc61f13ca1ecb","signature":"6bc019095a0cd3963b83cb17ef1c15342ac9eb61afbb951361dfd23c20036a0f"},{"version":"ff557425a049a1c9b3c4f9bed9a5b0dd86bde12fea184bf68d4f523442838316","signature":"7873e0b3b9a5a5ea947842158ae452fe9c38b6516e1070ee0a647d9716c9c8a0"},{"version":"4235c6fc3e65fef9dcbf3cb4abd19cda824c073033b95e0baefdfac7d7c79e77","signature":"bf8f81006dcf055c6801aa3adfa418b771a0532339de74c91a383eca6bbb8a27"},{"version":"046fba1c521ad64b58738eb98363f490468abc9d684a87bb936cb697368250bd","signature":"a8f80de6080af6e696a3af92fa57ed59100c6e6e4f0c00b991e3abc57e14142d"},{"version":"49967a0d810cf1e4e560a23969af1772f693639ac721a4b8c08c4d2e08f2ee5c","signature":"04b26fb9151ab7899f8df792e5e17f11ad475feb55147dad9bc9c8a970e6db8f"},{"version":"a0590e4f0e357d718b2447efc87cb93b59a728305a06ece4ae39599913577d48","signature":"3bd4d5eef28faba66b9e98655e9d06050687f2a1e2e5fce13de08bb96aa5f9ff"},{"version":"fd72287e0fcbc684e7680b567fa070e636d604fce7d92e69e49119c6f358efb8","signature":"2ede830b7be2cf71a9299e0b6e0e6bcae7e2002b9ec38f85f1d5d8cc23f674ab"},{"version":"034688258442585e987b758aeb5275acf5485da3ef16dc7b11c66a6689ec8822","signature":"3989e60f98cecac125e818d2e5ec7caacb95e316bea97261977bc0858badd3c8"},{"version":"557d2ce4b55ab91cb278627fcc50627bdfccb250197c72bce97151662abda2fe","signature":"ab1197700d08c378c2f01ef1643f5603b81be501cf5384da005d6e4e205e3417"},{"version":"e0fa4fd66fd0ed7692bfba8d6967b1804ca9438dc5d87c73a02a64fff0f25ab4","signature":"847fc1eb937c8f52a76d70ece89d96ec28e56f74e886af09a6c7c968cf3953f2"},{"version":"2939f98ce35c311e6823502c846a2c9b3bf74b900d2d9c3d7269d11b9a3a8138","signature":"058ce151b011c0e4c913b0a88f91833d561720b901919a373d4d3db97f8f1337"},{"version":"bd73d10c7d451e3b8d5807e080ead0876f6e3ce09392df8acc805019587787f7","signature":"f99c2c698fc8fa3dffdc16d30116ef6ac8a9b7449822e92c638e7b8f658fe295"},{"version":"7ac90488c78f5804f689ac6dc26b2c86633f2ab4efd28e227d3d41d4973bc756","impliedFormat":1},{"version":"7f74f5ec60aee814c692a888d8f26a2cb10ed4e8697a0efed6c4c4f4f1ea7b99","impliedFormat":1},{"version":"d3388c60fd55c2af029d7cc6bd52dbffe13977cfdf6da91961fe0cbc4a12907e","impliedFormat":1},{"version":"319f826bbc838a10769f2077709bc8c116a506c67a6f1069b1e164e2d6436711","impliedFormat":1},{"version":"95df64ddd7e4d55ad039cb22a667de6a1128505188a1c5c05c636f1a2cf530ca","impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"5d3768fc5b8efe202a58025f69d63b6242dceb8823cdcff1429901de8eed3761","affectsGlobalScope":true,"impliedFormat":1},{"version":"ef758d5717031dfa47cf4d40bc1ab07956d4191df72ed54641115611ea408b98","impliedFormat":1},{"version":"99738f018af9d5575e941425d63b2d448b1d4b45e1833108f532a4189c95325a","impliedFormat":1},{"version":"03d4252ad2204675754354a29444973bd01ca5e912b50392b6a224328341a0d4","impliedFormat":1},{"version":"05348c2851ed52688d599ce9ebf794719733a50effab6c8cfff0fa810a4156fc","impliedFormat":1},{"version":"f1d62600e6527bf00ee913643988881636862a3dbc5e2ca089c78d32578b701c","impliedFormat":1},{"version":"ec81978792aad854797159737c8423e8d081aca6473373d124c63e1d0274bab5","impliedFormat":1},{"version":"8d2e4d3ac106cd4346545440dfa15567611249e5148da30725d0fde808b61a39","impliedFormat":1},{"version":"c7e3dddefad6ce0bdb773ef6995fcfb13a0f1f43274cf57a4a720177649c4c4b","impliedFormat":1},{"version":"5f07b7754716e444d33c35baa0802a76d83eb5e4d8c544051f78c19c4e649fd0","impliedFormat":1},{"version":"c4c59b9732ae7aad52d102d9d3fdd2a84ad3e2e0a2c6e102bb56f80069efd6ea","impliedFormat":1},{"version":"9f64955c4bd5b8f8ae7f33e9083eb6e2bc73bc679c3b1ef0e56f95671f030c9f","impliedFormat":1},{"version":"7a1dd1e9c8bf5e23129495b10718b280340c7500570e0cfe5cffcdee51e13e48","impliedFormat":1},{"version":"95bf7c19205d7a4c92f1699dae58e217bb18f324276dfe06b1c2e312c7c75cf2","impliedFormat":99},{"version":"380b919bfa0516118edaf25b99e45f855e7bc3fd75ce4163a1cfe4a666388804","impliedFormat":1},{"version":"0d89e5c4ce6e3096e64504e1fa45a8ddccf488cb5fdc1980ea09db2a451f0b91","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"5a0b15210129310cee9fa6af9200714bb4b12af4a04d890e15f34dbea1cf1852","impliedFormat":1},{"version":"0244119dbcbcf34faf3ffdae72dab1e9bc2bc9efc3c477b2240ffa94af3bca56","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"b6f9de62790db96554ad17ff5ff2b37e18e9eecca311430bb200b8318e282113","impliedFormat":1},{"version":"65c1c78b3644720b56ef65eab69618fe82a8eed3a98419155b9fce8aab4cf252","signature":"1ebf289441030cedfb52c7fc464541208b9af7afe70c224a77af58ee19430d93"},{"version":"a05b0e6c41d4d0977bfad3ed4ecad92c85f6a06c39955917ba91d1b3d7f87c13","signature":"347b3e107cdea6543bd5b78fbde1f706cb4ae75848b6d4fa82b0edbdb12becaa"},{"version":"a003ca830bedc3abe2d314c38c92621c313e5afdfdd9a7a4931859d8c6286214","signature":"92fb4b57b2bf1d0f447423e63265a29b75adbfab1d1414df95872715701b3be9"},{"version":"a24d420af77fabdb56a8a798727afc3b1ffb9f6e5735d8a20c0a87140d7950f8","signature":"73ca331959724d2479a6e98f41a6d8d4378c6de8e9efca24a09ab514fcd45d84"},{"version":"8fd4c87b181ad9f5f952fd65369eae2c45188a66981778f114c15e510d1ea76d","signature":"7613bfa0fe5a125a61b1a8fa7f1831632085c151c2b76d3e4a807620cb8df7a7"},{"version":"999f4b3f28347bc79cfee3b173475e4bc83b467a7cd6b404dbfb7abfa9ff3902","signature":"c66f3d87674ad7340b3bfbe589654bfaf0d9c13cd65edf48b555c65bae0f6433"},{"version":"f43ec0a4cdbac80044ab66e9903d333df4ca579d02d2df7b8cebd745e8dbaf57","signature":"cef105d70825b7b3f096de8877c3643e8f20429602e47788ab6fd5230bb957da"},{"version":"8166bc03121b50fcd422ac8995d0b67b7ef90f1f48dd9790988c21693f10afff","signature":"6bc14adb67ee62d7bad56d9b2a4c57d31fe4f3dbff73d1a946ac9176a0e59106"},{"version":"2781ebc77a0d1fbb546d1d18a382ace5fbde658b3740d7a9c629ff56469fd21b","impliedFormat":1},{"version":"95fafba676eff373408bec9695d4574edb93ae7c68a9d2bdb2348ce27398964e","signature":"582b3de1872a284f42f927d8e796af85db7d8e567af9ef0110a6909d485c4c42"},{"version":"15f93f337824ba2fa017ab4db5446d83d2b2904f17ad96b7a0fc9dfa813bcdc1","signature":"b3fd7735610e58598bf26aa71e36944c3d7220056d325be3530c4afe86d2f80c"},{"version":"be0df0a7c4cef054db6bbab14fddca2713c2ca95bd23a3a66aa5c058ded22f2e","signature":"381be63df9fd67a9c568d265bfd8d22ce34c77db78d93bed74da3b0667242295"},"5dc01bab7315340428017dbdd202160a7ed907c9836c95ab16011e7171ec4db9",{"version":"4916e64bbc91ae75203d66442856efde91b67e0f57aca9abd91a85c3d7d7cc35","signature":"71b2a521e70df1b6a5461cb639cf91b8b43e076954841d4545d25512a392a74e"},{"version":"df69ef5e7778818e66751ffa32871b0f7c7c3b7a996fffa9d1a5ce17c5755931","signature":"9b0356f06a16b91250e171d1c4d68bb33065a6b301db59e282492f90b7583990"},{"version":"85b34e6c5cd1152492417d722762d11f2d3bf3ef8657af0e055f18c5c3600df5","signature":"85a9a8215a24b1257421bef28a5a795f2e1e89e2c57524fad0f08383a3ba8c38"},{"version":"da065c7792442ccc21b62aab8db54519ba2c96a1b4b9a9b6e05eb951098644f2","signature":"fc8e80b152d9070252f98ae011c075e62f30bbf2f9aad2443f1077789216a106"},{"version":"e7dee7f76bf4d0ee6ff6a7a2733890ee98ae5a195209f8b80236aca86e99eeb6","signature":"775132b7eee8eafc26f57beb9ff74ba1abab8dbb118a973e2fd2199891e8f172"},{"version":"a312475a0d48317b7a671a46d237064a31a1b659e7379ca12122f0c80f7bbda4","signature":"c1f492f46a96278d4e0045391c09cac16b98a0a6e101f13bae10402ef504161a"},{"version":"5238a0333f1b64f8352825e30376abd49aa1157ac4ddba0cea349fb054240f23","signature":"fa5d7ebbed39ad63656584c6a2884afa7b281318861ba8f245a40c0d571aad1a"},{"version":"77a2dfc437948103526dcb3636447af2dafdbcedb73cc01069450d72f3d88a92","signature":"0fc70a2c2e59c83b219a2cf1e9e8c5bf04aeef190416dd732bc87b86a11e0932"},{"version":"a9a788f7d19ebe9fa108c3c8d3075d7329a7e464362ab2e3741babba1bb4e337","signature":"30109a1051f88fbc5621c7ae88961b7f7d5ceeb25e245c1cbaa9764cde7f45ea"},{"version":"bef47254c956d18d5b7e478c249359abb40c8599782e516305f2c7d5817c08fa","signature":"e58d5e96bd68fcff5dab08ef0143a7570a783c8b2aa8861fffcfb5a9adfca524"},{"version":"fd564af7b3ee8fbfdc7ec05691c8f4f6c034236fd7179f95f1644350b567500b","signature":"44e7a82ad302092b212767dfc28f3902acc21cf98a7015b632786ef4d3124d82"},{"version":"2cf41b7aad0563f6cfd32125330d18d3d77b94868ca4ea4fe08f8a84df8a3c45","signature":"e52622e738e127cf75153b5ef0683390d040feaf0845cc6ce6add26a8652b44f"},{"version":"20c776acaf8507f955db2a3000dd34455519e07317a3ca7593fcce2f45113cea","signature":"b5fb8af088f977b64c4fccb4fdd954bb5fb41e973fddd1c602da6240f084a1c7"},{"version":"8847957cb0183ff99869cfb9989438a8f87189301bbfc78c92b3b49a024e1180","signature":"78595985c9c73ab1ccbf1aff0877f3ba48cde65dbdcada443353b35e03d33557"},{"version":"32af018d046b77450d21683f4e673ad5797675235aa861b899332c1238a60748","signature":"d4e9173e74d0b1fb1b6bb7a721eb15a7e410a25e635b6d530e8901bee4f1799c"},{"version":"73af554a9d886e748c44fc9a189cffa3e7a01b5d349139422b15f560fe0399bc","impliedFormat":1},{"version":"9503abb5f4cec90d15508bea5b9b346ee318b61cd216197abdfba7c23a1b7f98","impliedFormat":1},{"version":"b6f079ae4e4700f39f0c3a298bd5b392759538f78b7bed691b5395a84af7240c","impliedFormat":1},{"version":"e4ba8f098bf50e8d3c239b7b77bc1eb42f99fb660518263e9fba63e364da5cc5","impliedFormat":1},{"version":"84d080fa6d7e2042fa889bed74d9d916ddc41dec3c4ab5795b7979d1c26452c5","impliedFormat":1},{"version":"5a34046f2f97ba150630bb2ec8e8ebe79f1c00f0587aa8b648900f56f0d89d9b","impliedFormat":1},{"version":"10895af044c43ba0f283562b53e8c6c8e129b86bb327735297821745cf702982","impliedFormat":1},{"version":"ffda5bfa664984a6b5fb52c5305b3305b0b4226e507defb219986d2851dbf271","impliedFormat":1},{"version":"e4f54b323cbf50a0c7dd16d2e00fbb65fe703507bd1b6c92834760f3818c73ee","impliedFormat":1},{"version":"e943f29aad5d086910fa813644df591992329f1ae3216ddad2cbbeba8b498ce8","impliedFormat":1},{"version":"f77731933f64e0282d2f817631c33ce4968308f0105a9d00c02b3da0d4e1bec9","impliedFormat":1},{"version":"4961298a242a5b62c67d7ab4f9b6e8cc5a00e13f15db729d41b0d52bf657fd0f","impliedFormat":1},{"version":"27dba65ef76f5a18dacf979f7318823f6477b3001ad0d5c768e97195dbe1a9cf","impliedFormat":1},{"version":"b5d9f34b4093ac500ae683bc619adc06ee2fa7894dd6c48bc6c6d547e3e17c8f","impliedFormat":1},{"version":"abc82190d7bae3005c472d8d05bbcd985ede5656fc0207aa68fa4e7da9a9ec65","impliedFormat":1},{"version":"949b926885b92ea08bba54d67dfcfba17c70ef891a9782f47be2a60eb90beafc","impliedFormat":1},{"version":"6af5270cfa74794027a2bce6f4206f93c92ea44134ebe8565a25a29207b8b448","impliedFormat":1},{"version":"f8d5ed9aeabcb45105f2123ad38d4a2f92f0d2aae404126354c2eb3b58c220b6","impliedFormat":1},{"version":"5e12507f43f37d079ad3832b65d5db02ed6dbe97efaa91c49d2e4012c743b058","impliedFormat":1},{"version":"71db4f6d5abbc45e7eb3efbc2895920efea43b1ae608d5a5ba3bc729034938f6","impliedFormat":1},{"version":"d30645b44bcc7ffc2bb5ffe066afede5fdfc9d0f7e66a42f70e3159e0674d51b","impliedFormat":1},{"version":"21f8a2249185447d1704a8bd027ce6e3b347f23fc94469cda8d904e51380dd0a","impliedFormat":1},{"version":"d1be07cc5e0e74e27695e768bca88b2d888d99bbb7a125d3e86bf972dd685e3e","impliedFormat":1},{"version":"292196805807ea78ad9c6c7f2d08d04c662f43adc67d823e98b8e07a6c6dfb57","impliedFormat":1},{"version":"82f9e99f5d09b9b40fb1e0338051f614f2fba2f0eb6ffb493e9cbe0cdd775858","impliedFormat":1},{"version":"268011eaa3e078d8e8f3cf68270bfaea3d847c02b3a787a557199d242ba6d859","impliedFormat":1},{"version":"8adc8827063d144ad3e2fdeeff9da1f079bbd0a4ed7b18611cde219c3237c5fa","impliedFormat":1},{"version":"116e06ad30ce51f3ddda64ca96da17c9c91763d32391f156fbe257d7d7314ad2","impliedFormat":1},{"version":"0f8a804a7f912f83768aadb08e60153be70037e11c63c34e8fec0352d7f6b128","impliedFormat":1},{"version":"d04253b154d2a9ea9f68c979c8613b08d6496d0cf9e6513b73d334e817aab32d","impliedFormat":1},{"version":"7231e125b797ca135cafc311bd151e347b59860aedd79944084cf8d01ac96a1a","impliedFormat":1},{"version":"aad18902ee38b01acc71b9c31dbfcf8d0c52d17b25ae45bdd35f583562b6c707","impliedFormat":1},{"version":"33436b63f7c6073de5a917147a773a77e8fd58364d25c5faedb74478241c6269","impliedFormat":1},{"version":"78a8d887a071f75e3c050a989ae975bb1d2150fa3c99422c3c51311d1a94e1e9","impliedFormat":1},{"version":"d82ea836d2434bb371852052b26aa68035ab04a2357856a1ac05d93d9c54deb5","impliedFormat":1},{"version":"c61ec527147406aec6f57d00c6c16a94e85117aa77fc69f6292e1634a89c2ebb","impliedFormat":1},{"version":"f9f4c9dd4009f598ae0c58cefe5357c543896306f928385f4e051b720cb60d5f","impliedFormat":1},{"version":"7886aa13eaca6bfc19cf2b1356f19c8700fc15eae4fadd1f4f0d532a828c7086","impliedFormat":1},{"version":"14f424115ea24772fc229445abdb4796843ef0b2e045ba1af79d57b4f827e405","impliedFormat":1},{"version":"072019d86f92e254cf5f55fcbd70d63a650a8a1446df72a3a000dfcb5252e3b3","impliedFormat":1},{"version":"4fe87825c09efeb964de1cf96060f1b4ec38dfca7b0f18745df5c41b1bac93c2","impliedFormat":1},{"version":"50f420215670df2b573ca3f285fff0b02553c6343c4dcad0f54aeda377e670cc","impliedFormat":1},{"version":"f0b4bb1db8b5a8128e0a697718ff036d5f0111d8350dd15c085f46514ae6b82a","impliedFormat":1},{"version":"7123b9721000ae1922b781a4e433d4680e084838f42540d04cdf12899fe2c92f","impliedFormat":1},{"version":"8b55dff75bd49b91aed9544bab98908fa097a9b59f2d377d1b0c3030c3a51df4","impliedFormat":1},{"version":"41da71ce4e7d2822875601d7adc94656914c4acbdee60dd47b0fe89a717e3f6b","impliedFormat":1},{"version":"edd24543cf5249aed34684d4a023cf4bcce789afe1bb589fd7044f7ff92ad3bc","impliedFormat":1},{"version":"26fdf6cf4c9caafd474b7d59cb35fe1fba89b0ae866c4216d2764d376ef83db5","signature":"2145fc0efd6c5044f7064bd07449cc2e63538133dbbeec866d2ad57f090879ab"},{"version":"4944e5f89bee43c33b6c2b58b90d0c2ce0fefe1b3fbaec7b0740fc7fa4a66c6f","signature":"4dd10bad0030c4a55104b49795abbf649ab2947a3b8bd5b0266ff9d7f0d021ab"},{"version":"e9d330bc1a693a2f588327a35c08434eb37b7cd938bec998394c12a49e9a586d","signature":"2c747cc4177daef849189574305cc32e62fd85f6ab6389c98d8f645c019e9d3d"},{"version":"d5e05630866ef8a6e034b12d73764befb12be951dce252bc3868e0fd38f030b5","impliedFormat":1},{"version":"9f9ff16f18f018272fc524f080fa4c262bec388fdc25ac263950e095b45d4ef8","impliedFormat":1},{"version":"96d390bd130517e38168d664bbe7520b760d7c9e2630d3fbfd0fab607e55cb30","impliedFormat":1},{"version":"8f7e65bf94b451566ccc763a6747ce12fec95632a5b7fce0004e334ee6bcc39e","impliedFormat":1},{"version":"6b70758c713c983c9d5dc6dd445418908f75ebbc9826ddc60dd77f512f602d43","impliedFormat":1},{"version":"be9375425de452daa3df406df9aea9894067fe26d271cb976b14721b8ac47d51","impliedFormat":1},{"version":"4c49392780a40b54add2e3e49d5589596b4c63952504ae4d39d1515053db5a39","impliedFormat":1},{"version":"70729025d7a95fea345f6ff9406586fb5f79ddec543bfba261d21c24792373cd","impliedFormat":1},{"version":"0d41f43bdf9cde7f9fd999fe6673e1ed1c8edb502d88ae53d59589a58b7be957","impliedFormat":1},{"version":"1783fb47e2a354fbabb007e3002ab8f358ea4ad24a45d0ec449ac8f0a17f539d","impliedFormat":1},{"version":"d392641c75f73d1b959f4a092a653ae9183bd6efb42d9ec4b68c61de1dd0e92b","impliedFormat":1},{"version":"0ebb3fa6a7dbd95a31d1224af1c793ed1c6c2bad79c9e4b34015b02fa699c33c","impliedFormat":1},{"version":"45abea3a99410b2cf77f60cce1142069e13fa7b0924d3299d545e223104b3b18","impliedFormat":1},{"version":"ecfc23192cce500660053f0a67ad2b08d794af1bbdbb31ed9618c1114a82fd13","impliedFormat":1},{"version":"abdf22b6d089381dd5c85315b62f38ee2924a74f1588e842de614f4e8061b85c","impliedFormat":1},{"version":"64289c9eefeeeaf6e61a12759a9a1e24327dce388451e0fb9af22e5bbabb0f55","impliedFormat":1},{"version":"483b966f5fd635f1e771ca337eb34724bbcf593923d526271a195e17e99178b0","impliedFormat":1},{"version":"694dc7d79f90b5f3100138c37e7b28f3933d9465b4e9b1aef575934862d500df","impliedFormat":1},{"version":"5daf6903b2985d880509d068cc236193bab65dd132bafc8199f587eaaf221802","impliedFormat":1},{"version":"a00ae454ce09263fa12863904d66e792a62fef817367cbc6dddb1110e8a738c1","signature":"7576d9bdb727a88f927c78060edb63fe4943aa617e18d8edd7f5ae140da66c0f"},{"version":"94d38a2b31677b430912fb772288a3d7d4ffb4b6c939666d1a074012d92ff176","signature":"e919dc6dad959402ed8c008cd263352d4c530afc0793fcb4034e8834c9852de2"},{"version":"fb8812bc073c9300f9b42a789f39404a60fbf9b7b313ade2912c730174fecc02","signature":"15d00f8be4ef2e29211c261d22aae09beecf4c0481d5db0c3a3127c60c5dcff5"},{"version":"42744d859eaf2e5c09d920a06665fee913efcaea4e54e65f8b7a3ef699e9e85c","signature":"16b551f93c533552d0cfea872db06667884a78ac7b27c14c2eaa273e1885b8bb"},{"version":"86e12122b182f5f61ca41be1f7dca411e5cba881ec4e686d9bbc39833d70e060","impliedFormat":1},{"version":"5706415d42018565943155cd65fd5123e77f6d4898c7ae6d1d1615edbffb0a55","signature":"04c3bd8d74f5af35cd9ee09da1ba118a7bbeebb59af8c34936a320ece0bb9e76"},{"version":"584e3a9683bdeed04bf937e281c54399c4c5b782256df296023c99ad3bca691a","impliedFormat":1},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"70bf585bdacf3b20d843740b27b0359c9256c817a818bf7d18e74762be6bea91","impliedFormat":99},{"version":"30c56fea29afcc473944166b04b9cb8a47891cc6d488a78a33bcf08669cb7abc","impliedFormat":99},{"version":"31d7b899cbfe067f501de32fdc681e61792ea77a4bd7c0e5b5120fe2a82ddeae","signature":"c55ef0a20dd83aa20c286158e42d40d00deff056f2538af6f153c04e74044bfb"},{"version":"c2fe73ef69acf587f5185faf3263a57958b0be8e842d0eb4b9294b95173b8bf6","signature":"5034841e59be6e111f589f77ca2b0785b174f7d4d8c62c722036f07445a77a4f"},{"version":"71bf679a63a007e4c00a7b741b481b6ed0874413cfdd8e3be7ad6f41f0af87a5","signature":"93f05c34de3603d345398f92def518a380c77e19a8b7043a52bb0e932de34a61"},{"version":"4ed3d09d151c7df17b4aed08151dcec1b6cf5517efb9317e68255c9f0e87e3a7","impliedFormat":1},{"version":"fd7892e95b960cda2a6c3a19a013a2ae7365d711fa300752f8613b692fcdbb29","impliedFormat":1},{"version":"dccefd8430cef0207205ffc711b374b257ac1e60458e9a786eee920cfad1327e","impliedFormat":1},{"version":"65b6875e601e3b67b4b6ddc2847978e1ee2f5c728bcb2b371d0ad110bd85249d","impliedFormat":1},{"version":"de4c5ca97170bbd073eccb461a279334da29e6c6524a17274fdf6779f6c9f9a2","impliedFormat":1},{"version":"e48eaa4b3669076b49ac70c36f8b317a6b757f5da069011d0a74f918ca60362b","signature":"9053ca9c579d5a957ed668d0c83759308ea452fe31438a0d4b35147abc753f67"},{"version":"835b2d19fe47a43b0146c8f38e8b34e5c654b28b5affb2d212e43b0e9eae03e4","signature":"0e60954687ce0de2b91563f0f17fe1d89480a4396f378e90665fcf708a9e633b"},{"version":"37ffe3c12813b6a6d512f7c27b71f3388d03dafa10555ad5094cea393ed3d1f6","impliedFormat":1},{"version":"4d8bfff7c9d3dc63adf1ca49ce6f687bfc9aabc32f267d1b21cbf22b04fe16f8","signature":"24648db01f643a72f27ff461d9f734122c173b9109b5226eca3a2252d86250fd"},{"version":"6c55899f23b7f7e85a4aef9540e2a499ad5e48c7513888f0c7384ce497b73b1a","signature":"67cbbad98ab227b6c9a5cd882d3d9cf20192fda19ec6046a8fd16ce5c46edf1d"},{"version":"1e0040a6b45ab8c3ccdbb242345979fe36fea414ca87d441a7e51fb0513e71d4","signature":"b258b3e5a23df421a9d42598dfde39cb8840aeb9f8e629277529ab4ca7dfa0eb"},{"version":"40e3d05487a1d0154e2350e20e936e9aab4c1a9e1099fc704eaac869583a0d3b","signature":"800dcc9140b2fac25c0f1102b7480c63c8325bf17bb578923df5921818f4bb82"},{"version":"fa58456fcc065a8a936be6f031bad3e6d089e15f7507d43d3e3500f4f9e7fe68","impliedFormat":1},{"version":"041f7e951bc0367e7577e91293d1777e9943de7649b06568e72082f111f2acb2","impliedFormat":1},{"version":"1d153bb9bb073d77329405e74913b76ef9f81fcc8dc42e6e7cf4f97026b5ed4b","impliedFormat":1},{"version":"822d9c166e04ef7c05898ab41bdfcc413d4d0ea7393e3c4a4ccb7c4c0983fb47","signature":"ae13cdd626270d4496e81ed4af0aa344e75ea62157fe713b34abb11ed859cbf8"},{"version":"370a23ba855b146e510586e95d80629bd2d8d4a0142b629bd9946bd76a5a8b0e","signature":"0ab370d31892e6675a87eb8ba47e22bfee27795aa7e7d17d80c6b4c938b6d835"},{"version":"88189d9b3b74b6bd64d212469bfaa006b8509afc27fe42235864c9f5d14d4e63","signature":"8de974ed83425a364593826f031e44ebfc996a72541ba2e2d3b8643bfaac56dc"},{"version":"7242184e0ef530438576901bd90189b161ac4834f02b64d5073187d4c72912a1","signature":"b56b789c1f904c6a9cf271f19e867b2af1d9117e25c57bf716b38a0371c8c00f"},{"version":"337adf23477480bc3403c53bf75cd0107e8fd6b4815e588402f694c58b9eed6f","signature":"df8cecda7c2cfd2889e09323e7e62dfce52403706fb7e33602590a37c0c473e5"},{"version":"2c34c7f7b105189e7acbf43d712d7eb60ac54c192735bc443938c2fbf5d3a6e2","signature":"786ecec898900b10baae6be10041921de14608a3c48b4e047b3360b3fa4f38bd"},{"version":"50df88c60607b2677aa3e725684ee9dd99c9160e403b54309f4c0a96548ba706","signature":"392d0efdb1188a9160c8c6de9796bc493e9fa94082ef863e1f1605225b54c825"},{"version":"bef82ad2a7159ee140e541c9ea2f85e0018f07c4b557d2b75b95b52145064247","signature":"45de0d291dd06cfb6512c8d96ba8a65529dd6828aa2d1632ae56c874d278189b"},{"version":"7ac4b3d71b00fe8dfd5166e43ff89dc4bd205328e2a4ac464db381d7a5f2f842","signature":"afd72c57f7b4defe8e819274d6966b106a9acd0bc1e69c31d701e197d5106c72"},{"version":"e3748ebe8a615c6909a3c6ad864b093f62d41a1fae0f5b3fe5daef24f09c6664","signature":"972975beebd88980c0b2c92dacb8ee2f0a7b8bbdc711f31b9f693e18b98aac5a"},{"version":"3dbe9bed266563d46f5c465e507107b821ade9c03adac0f7936e84243e3d69ed","signature":"7156d5eb72549419bee8fa568549f74c0aab0c829ec854ac8f5c84cc05618f86","affectsGlobalScope":true},{"version":"b52439c98d3f2be745a00c7e294f4c6bb9132d134d77c65c95a1646ac6e568ef","signature":"fe109dcc3908f3daad442f39771d3789c5c42397515f71833593e0b7257053b3"},{"version":"9330685618c006e1139f49790e02b0cbf87eef6692edc360865ab1a449d8b3ae","signature":"35b8e9a18209c777590f8fb4688c1563c0fc31003c86ea8b7aa01d1a6fb90b70"},{"version":"eacb10eeaa82454d1ec886297bac05b9878d21db91a8af92ac432ee384652f28","signature":"394d2b88d0bd9367165e7dab7a56edca7287e8cdfee19a53f42f43552cdbb33a"},{"version":"4280074e17f1e38fda3e855ac5b725c3afe4e204008971dba9d2111aacfea393","signature":"96c903af55234c0d608a908c082a91d6eeeb3b80cd0a02e6050cad4f2fc5c9ae"},{"version":"55861622876aa83e202a1f9d0259788ac219aed9f8958899f956c66a177e24f7","signature":"f19d5172a97af986a910e83f738d9b14d17931ea953b4f9bbcfd93e97876c8c3"},{"version":"3bf6de450958a276169e8f47a7c8b6e5ec017be8c91bdbb95b43c7795fe384f0","impliedFormat":1},{"version":"a2d1a0b09f20f8022341be0140a5318e74f69032e6283ca92c9267464118f29c","impliedFormat":1},{"version":"d819de1bb4d2a3a5eaefedd09252739d191c5b20cb5c7f2dca965121b6dfca3f","signature":"70b8467dab1b530565a4b0d4e485af7d09777de081f85efc90b50f4ffb0c9199"},{"version":"99697cb3cb60c2296f42a5ad7e658a9a70d36af138fc073b7eb281be819045b1","signature":"bdbf2435e0d9590f91f2155345f05e1994fe6c3581ddfd635a0ea1963a07f918"},{"version":"69d08493a4f83165751e73d5b094ec6574ce4ad5890d42ac257da1543214741d","signature":"2a0fb76e18d67f1ecf14f2f4ccc382fb46f64df58f1b13adaf06d7ae129313e0"},{"version":"52dce0ad2c748d103510b81236463cb1552700bdac3552645e666ee35f0d4353","signature":"ae8a050c863baabf9787b7350b7829b509c4bab1cc6049d020a94fe140bec8bd"},{"version":"d9d0e6de2e8196e0d03652b43f6ed422e41b062d26b928eab55a9e9acf357111","signature":"f26104380ca1d3ac4deb6647f828b8d1ada472a25184d985188879090cbd972d"},{"version":"fbe216db6e8c15d1930f9b01e97479baa64e99e48104d0ec944f36669e9137eb","signature":"f4f91caeb9c78e0b24f52545dbdf1d70d0f7e99adbb6bd59128c0ffab80cb781"},{"version":"ce4436eb77c37563b5ccbeed3c175a160bbab311b74844b11623bbdf31394f93","signature":"98e82710d962329f57bf1f8697b19de25cfe91a0f0a75b8954482ca52c55a2da"},{"version":"ac47380082a3910ce7310124b1322788493d962f061de6e12f7668e623fea0f1","signature":"f593c0b0eb9c2f3df47430e9f14b15f7fa1ce3ba420ff09e3a4014cbb6ecffe3"},{"version":"75f44d6b9a00a0fb8e76924d17f9ad8ae635b7c32be4420b4bc3f76faf1409cf","signature":"eb6e16ed8fe1bb36fe1777897c1cadc186b007303b97fe495b726d40aa8024fc"},{"version":"3326207105872efcce8015cbff28a8ec1d727c1b2400001b9224feadbdf5fa02","signature":"4ea56fb83d0b754420b2f060ff9eb72aebca5419331d6dbfe52b79d93d8858b8"},{"version":"b3f7ade6aab01a197d36b14f208ae183a03e48cdee46feaafd7051b0563dd1c5","signature":"e2dc3a92218ca2afaefa80f6ffe087ce867dbf658349ae1287303ecfe3bd6ddd"},{"version":"6b976d579ce36d22b38dfc1c88f5ba1f7a5345d9d3403338ec25dbe67528b0c5","signature":"770097aaa1a66b171c09874d41d9d978ec05bd0fc7b286efe059a5fe7e3f77e4"},{"version":"84825d4124bdd6e74682d6720f4a4c91790d2feeacd4b1c8a291fe74c29c639b","signature":"9deb33a29ed49666efcaae7784a651043b4cc87012b443f9e40378ffabe24e80"},{"version":"be0c5606830804e5e7558c510a2a0a44e40a95a0d67cfcb5c8779f1b49040283","signature":"e10f7b8af4e25d28e626dce9126ea1b5cd1d4df133fa764104ea10a39f4f50d2","affectsGlobalScope":true},{"version":"7d79dbe217c7351e8a05e0fa66d2e65a73ee706dc6dc8adc39b82ba846557ecc","signature":"b4bf3e256d9cb95b5dbcc7a5270d7e37039209611e1893fb64089bc3c2a07eae"},{"version":"a67e729198eba6a73974082843f240d84d25c9b41573c72ce79aed10e2c72587","signature":"822461bd23eda9740bcf3155bde49cd3dc6654433ea53af9dbbd65df30a7cbaf"},{"version":"eadfe392e16b2534814ddb9872c486f1d47e4058558bfcfa59d54062daf6468c","signature":"9c2160a83ba5b8a5f9018f4435b54755d62fc70ef2fe651a8d7cfafd8c29cb33"},{"version":"97f18a73dbf6d15ee26602a1578f48758fc1b9d46d820aa7a4c9536649002262","signature":"326bd24d7036b771218434982f09da8449b9235a6126b6cc6ca72ac34f0cf6ad"},{"version":"7bf35feeb0535076ab85d43515981a4d6f9e4cae19a698dd914e666b7226066c","signature":"8ec3f4f35ad1a3231e5870ed951ca02b3772dcf35106b8bac32cc59541263e89"},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"88247402edb737af32da5c7f69ff80e66e831262065b7f0feb32ea8293260d22","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"b50ee4bde16b52ecb08e2407dca49a5649b38e046e353485335aa024f6efb8ef","impliedFormat":99},{"version":"a3d603c46b55d51493799241b8a456169d36301cc926ff72c75f5480e7eb25bf","impliedFormat":99},{"version":"324869b470cb6aa2bc54e8fb057b90d972f90d24c7059c027869b2587efe01aa","impliedFormat":99},{"version":"14e5a5e21a0759cdc890e87a76fd12f4458e435b50d5ad98dd415cd7f92cf4a3","signature":"5441f1d39896bf508439228479a09cd50bfebd334dedfa830db1647a48c6a0ab"},{"version":"2b19a3a26fcbedbe99c1d52fddcfdccd434b768b38937287ea75ea8e37bb66b6","signature":"8a1dbbf38fe52afdb57c4fbab0578492cef0cebfbaac38957e5eb016370f7714"},{"version":"3be465983d1e22f479e34e8c4f8943bb3501add0a04bebd819c5cb2d90077447","signature":"99b123dceb7f1feb8d6e0c934e1ced6c9963866fb77f6a8f9970957b5d124306"},{"version":"bd05f961ddbd7023eb460eda89c425cb75a040e33311bf295dcdeee3ef508cd7","impliedFormat":1},{"version":"31022e9d82f5278e19ad2cb8702efe9fbb3c3fc1fbc34ad6c0650f3957af28f9","impliedFormat":1},{"version":"4b3508e42cb795afaacea89cb0614428bb26be66e7d477125cc0c658ae2ca802","impliedFormat":1},{"version":"dfa501173fcd48021c4e4136813c0af4c8f5551200378eddee2927899e189e9c","impliedFormat":1},{"version":"ec38834d7e9a3082bdaac634d489338d4ef2d21a2dc8ef4f9b1fa8bb83ab3aa0","impliedFormat":1},{"version":"1e2f76a7ef63647e902b3dbce9c9308bf5956d25bd68646a01c0b760307a9bd5","impliedFormat":1},{"version":"58ac9d2789658be4fa523ebab63353f5b1774054bf2df83d52eb7535037f416c","impliedFormat":1},{"version":"4660bff9d449352e2d58194fe322c563b458272e7285ad1a5e23233064ab16bb","signature":"fb3ec7d5ca6a08024ce3ce93c43ccf5e88a2e3c09edf1e8af875a55498cd798d"},{"version":"ac6028c63d49d5fe09fd19abc7e39161e6e94657bc6aeb4bbf4973462cbc2d47","signature":"f046e751fcc99af9a0f7a614535791b9f5fafb2ddd83dfd58e76c3a6a09f1e03"},{"version":"da04880fc92951fac4ee2d7b929a5c00bbdd7323d347e066ad98986958a6f290","signature":"89b6ab1fd42a3b55329707b3cd72d7ed862c0ea253d026e2a06b45feda001dce"},{"version":"9e4f768589072d2daa7f8215bf8adba18998d08cd3d0bf02f40eb1d656750ab7","signature":"cb4723c3a79e7c14acf9b516111a1e3f2dde97e83781b508fd0412210a4de52e"},{"version":"3c74da8d5ba06cf5674b806bc1a2ea98b3773871f5b5f94545f25dd5930aa813","signature":"4e55c472d4ff6d8e0e518f9edf27140456951074a80b539f30fc4effd247ddcd"},"6d12d059caa090e9798ab3f4be52411e6df50069d8d15c9269cf3bcb2a1325a3",{"version":"7bf1b3142d2850e0842032011da57bec05d68692820048c50be1f9c38f7b5081","signature":"32bf2520bec41bc11345076b2471e856bfcaf295614ecb77e26451a247072444"},{"version":"f0af6bbeea44deba24fb5487027837a68942ca5d1b3b167a71cbbe476c663a3d","signature":"dd9b88a3848ff4acced79e87f1cfee001a6e431762df9358691dc91201cdc340","affectsGlobalScope":true},{"version":"11c3c879a8890dac677419067ce6620fec6871902fae54aabe3e0e9db90e680e","signature":"f86d3afd7c64c21b47843a3ceb116359a2a009a3c5ccb2ba01514e0f626023d2"},{"version":"b4b307bcfb8ea5d0a666e73fe752e0b80956e31747c24e6952ae9a134f9fec10","signature":"4d462afc764bf8a758cead6b47067337b494691bb2d4636a6c3ef1f25537b17e"},{"version":"1b31ea3c695d8d75c0b8e1ca11736008098c3ea148e36fc63da33354927c67f7","signature":"26c5c3442326c98bcc905f80d7d6ce51e05600b16ed3d5206e083bc3a6e43a9a"},{"version":"b71f4dc5519fc998208e3c7dd214b0642d5d3e56d6ced780d06f22690c678bdf","signature":"8ce40f7e6977f496955743449811d9008bc51cfcc1d4e832c994be1878a812bf"},{"version":"434f1dd873245fcd300100cc06510d427209bcbcef3be01db22c2df7bb35ba43","signature":"82f3d6d7c2e91f5ca141950992cc1dc501646c23429681797ff9106a01ff12ff"},{"version":"f866e9a3d45f1cf05432df369f98313573ac95cb97b4a28e8f05126155adc8ec","signature":"e334a7b3bd1e83318b1eceebd9bbbf92ed3a30715fa56ad14a503941bea3e72d"},{"version":"43fb0a8738a18d71c8cb34a3fbfc583b74cdca81d810ae3434707df554ac0c16","signature":"162a5fe4177fac4de6275c1f91592a9ac05985d883cff32fc5435d1c34745290"},{"version":"35ac2bbed9857db90332b0b2deeea5f8a6e284fe12618949bf9b71743fc73d11","signature":"1351aff8c025fc517ea62a4a88ae97af4681e728b45c43cf0368fef305998797"},{"version":"585873b585de666e74f239fd02d12dcf3f5529c5c6f4b3fc2b51451a687485b7","signature":"bdd66e857cbe1eefa6c0ee3a8f886bca669b6690ae73a063d371d743a7ced15d"},{"version":"839476359b458ab9b94d2084b4647b0d026b51a25c2bc739b6f08f01c5e46ddd","signature":"a552b458743713f0ebef7e5b39415442655d9a081d37fb100a60e8dd7b80c953"},{"version":"320ca7af2336222bbfa2848b602849c02a53e283da0a31ce1bdb5f39edf15e4b","signature":"e9ae625b6f2ee60c6b579484cb6c055a04522479b8c120927ca8f871e525ee21"},{"version":"dcf67f8849fd6504e1ee50a58ed566edd72b78be8e48d8ad40da8d5418aba4b3","signature":"b91d5a049e371a9936afaec607eac81fc549a39388643da81bf6a27ef22cb4ab"},{"version":"c3864bcfd9c96588174ab6ed45ea08629ae46ad02f54a5260b9cb4363f41faec","signature":"1a794e8310e5169f5a7da79efd2711b485cfb353e3c30648c21ac96b668ea4ef"},{"version":"8325c24d6287151bab7559ae4ec664dae935e1ca279a5383c64813904f2c22b9","signature":"d41b7edf7a7ebf547a8d5088094530c041a8e97142601f4de85336ee45883eba"},{"version":"70bb1bdab0580b565c274922811d18fc9b4d91632c4494974384c13957e7b2df","signature":"d21daa6a214d1e8daf828c8a8ac8413779e4e866e2f78377129ce7ac1d711cea"},{"version":"4b1cab48e3a3de6aa44531614b066706d7b402c0db26ae88f15a04d35de721ba","signature":"4a48e91f7ca046448dba3b853f58be269ec6610c962a48a78912e982ff1b0e48"},{"version":"ffe12afd81d10ee00a30b3409ae063afe52dc66279c2f597d49c6307baacd87f","signature":"ce8cf9606c307764082ca56e78b6d5706faabae0a2a6eb62528c6186bdef5c4c"},{"version":"e64b9e6b95a62ee627126e9bdd30b9ac0bd016c20da11a8e24b1e564d2ba9b58","signature":"6c284eabed865e66b0c96524ed251524fd73cadf9cde926cfbf08b4376dd51a4"},{"version":"235cddce51692e2b05a5ce083b56ee19bc74aa0d9ea5675e8ab2fc5b3eec4b37","signature":"aa36ffbaef443c7cbbeee74bb7db4788b7364089022185a380d12b9b3e64eb83"},{"version":"23166b5a7466f310d37e1127ec219cfd5c57a47964771e2a6423e54c58a5b3f6","signature":"c06a3747a01148b8f7a44e38c94eb25c295c89074a4de505002f80d9a525e53d"},{"version":"c4fb71fe7562b8d6fcb0d65a601e264ef1fdb4649a1ac0cf855ee59596717f1b","signature":"7d5fe071872060854ba47699e2491bb09b96c605f154755a1b448f60306076e5"},{"version":"2f35e40eab07f4d415c3a00e90d9730fd165a8502308713b23dd78fe904e9faf","signature":"8f320d25669c50a731d7aef94f1cddc1d8539b3e1af4c80a625663d5154f457d"},{"version":"cfadfe8ab5ff48422c77dc1179f6dc5763e51c1f1ad0ce844ede5015730c00ad","signature":"990afbd834fea07812ada5781d0330d2bb0e9c8693042ed8e679e242c21cc87c"},{"version":"ca597f639dac77349d4c2d664b60831db93fbcf2a28561888d55abbc24d606e9","signature":"bbdcc0fbeced4edc6f1a162bcd0967a62facee0aa955d14d0c7a322b5ba6b2ac"},{"version":"dad6dabb796b8ed4ff675e396eff527eca4301397855040d8cc836f92bdf2e7a","signature":"2f497bb6a64360514fa3452f222b2fcc13d0d40cba0bfbe5004b1edc8696f5cf"},{"version":"64d5f2f2899755badc378908935688868d30aac65850f594f7c673297dd3ec97","signature":"9a9ae59dbc6fec56263fe90c28398d3777878b6efb0b81428200606f4c0b784d"},{"version":"f81418d4da8e57a701040f7360be54990ff28533f61eb934f070d32b912ec886","signature":"a22d92fae84f70ba40df2a9d0cfde214a9571e5376a7141235b5c9d4f4de11a9"},{"version":"0d7ed5402375d9406249e69d609e6dcb305963f538294ad4bf5d239319d103c9","signature":"bc63350eafb281ddff10597cc06978309aadb5ebcb72dcc972a92b96832feb6f"},"e0cafee604efd66fec38a031fffe59a58c11030445d55374fd0eb80a592638f5","71967f8e3e42ec35aba399cb376d066c089940cbe9fa3de1fcbb798cd5a2f310","babe9b58dfdc01f11853608eb7aa20f6e6ae71f04d42f5acea3f2e3401de234d",{"version":"2e03a5a3cea459d827c4598f31d426ffa8238a80fce43023102aacd4d693d634","signature":"cc9f6ec9e28e833c916f739c08a41a2eb826e979140732b01e6822223b47bfaa"},{"version":"df10e464eeaf1c32f1c3c09ecddfc32954c8323edd40b35890a224c0e966bb60","signature":"59d77de7f0102d87fee21993fc91bf56d777d7447ea37483abefd7b54e35816a"},{"version":"b0dbd29b9cc9e0c32e6ea58a18e99af66a8f5ce06f302b9d184ff9e211966bfa","signature":"f9dc457a9f35be0ff3e1b011a7046efc14590a7c6bcc8f792460c300b477ffde"},{"version":"1527527cb512238453cab26bc1549c730d32857b999f8ecb89c836505274e827","signature":"10707e38b538ccd6aae850015cc83bae893ec6d5392b293caa85adcfac37e63f"},{"version":"19013249c33809efc4c8861130590dbf2ba7e8e2c2837a6b0773a6402c168aff","signature":"6d60e474f2830bf05212fe5df2e6c0a04f61d5bfb33faa1be16a8ea310ecda22"},{"version":"06bed1d217e5de08b11ce532c0a5ec94b819cef561a7ed697190a1f87d781524","signature":"d68a52c7d3d231113e19c7a37ef11f87fca9dc8c866d9d3dcfdda8e7d644de4f"},{"version":"c2a52c85cae7c7623983d911cbcb8aea998b33915d5da219b047bf1d2c2a21b4","signature":"17a18daf9618d76f9f402f1927223f1602d1e21c571429fc3791fc214838a846"},{"version":"91f1272d239dab465119ef15d29f1db38c2f28d612903fa4e1fef72f20db81f8","signature":"1f5d21bdb1aa18076f52b913be1be81f2132a773041d4d731daeca3d5bf962b8"},{"version":"dba52636bbedf4d89208c96f0912846321f48267ab30f613772e4305c22438c0","signature":"16add0fe3c59ed9e4ad20ffd6d67c81140e405030e9bf20578ce734db4fe62b2"},{"version":"9920bd3a9f2cfacfddb60d8686e5d9ec6371b371e95089cc9a0f823abd1bd85d","signature":"6b8e51747c64438a46983c26956ceed9ac42ec95c9443cf060b7d2cee19f37d4"},{"version":"6c7c4ef8d97db54293b566fc41573ffe7f10f4f81f98658f57cbc305d4efe95c","signature":"024786b804da647e1ebead0ca9b99f992a38a968b0bcc02fde2bea700700587e"},{"version":"833cf45c686b7c05bf12137e1d0592e08aec38e5ae292c35759b0c2c0e255bcd","signature":"235e13560ab3c1faf6b141a45badd48cacb9d7d60dd522a4f821be5689df2d08"},{"version":"78ca50a15885d8c23727f2a0825a076c84ca3b2676f51b4a0dec9c0375de8396","signature":"506e5160a8fbfd45e3e6caced2dee1baa056b59d1ae5af32ca91b4cc6a807347"},{"version":"264624a74c732d5a8af504b09f69d7f0a9313274df9e89719c78d545f2bc51b8","signature":"39d737c1c8261ffd644a6e1b11b301104fa6303c828e1b629f14c32b17e01977"},{"version":"bf1d08e2f3d45f1979755b9be5cf67e64745089f7e53bcea81072557624c882a","signature":"48815090de72cffea16fb80eb87dcd451e4992b422c1f01b707ecd1493271731"},{"version":"b7cd59e7ee2790774ec2bcb97d4e9b240452fce4ecfcf43df178380763592606","signature":"0c456e6c1cc997773f9a4f60180512ea745cfe881212b25d714c2924b5782dca"},"50ff92782ca63ae0cec5a76a067c99e2f1939ec2474e04d65dc4c56e18785110","030e1423cd30113d2d137ae90c35338009550b5463dfce7ae93a4dae4834ebd1","8b0ccdd4ceaebd7b629f972205ca1bf07d2dbda7a96c3aa783fe9b0953413f08","b6b92f7ddb96b6e8841e48cfa32afd933a4b8e2d79ee8b1ec35bd9a927cad65c","8071c261b980da4b072ff5e19f1caf203d3e7b749b0df99387ca27145da7489b",{"version":"54064eab1ae460d10a821755668311fc51267e2b84dc8047ba3f274e1c7805eb","signature":"f86556e069904c2a7df1e1cfb7484e8ab5c9da3b5495a3fb1e9d25cb9d9f1a00"},{"version":"faf770b3935c2ba6558b2bb65af5d5de58945d81f496dc1a5938c41a1abb358b","impliedFormat":99},{"version":"edc6621769a855ebe9e8c83ec1becec3a43a7494c95739a437424dcabfa3adff","signature":"5d58c490a89c308c376a460cbfeedb2b92751d5e90dd4c7cd566f13201d50320"},{"version":"159998a4f7f5c063a5b9f462551f87b00db04990f9448953ddc6aa2c11285cfb","signature":"ee1edfbead6745405d328658287b6e8f957bee22c3217398ca713d6d02d8249f"},{"version":"562f1d33874e0cb0bd40d46761196c2726c67523e35c67fe2821532882cb99f1","signature":"aaddb0a5c28543f15f831b75b07f09ac07a2b19899075a30c562ea0c7f643f2f"},"03fbde7f900b63e59820f0d5ade893818363b85231c3b3ffd5a53b1e6562d028","ef5eaa6fe939cb4ab4c590dc6df28fbc67638da5ba932dfe38c72dce9ef1682f","61403edf9f57568183e77fdd534e6a6069c58909163384a0fe57d2361f8c4f0f",{"version":"ead6737db8d55a97a8ec00558eaae86eec35af382ac4fc6b0c116380690d8c4e","signature":"dbbafbd0631e4e00fbc7604692abe4fcf46d3f6ffb6c68a8728bf4da9a70defb"},"7e9f5682df3bdca1881908d986b9f43a7faa69e793718f98dd9e3ec6ee36f204",{"version":"8c7bb1d03e5607e5ad3d27f48e53dbe70b61372ea73d75000c9ead7ad2ac0fbd","impliedFormat":1},"9285b1cee368d7ba0e845eafb87f39fde65b279826aa4a429f5cc992ebb4c707","80cf82a09c71fccb3abdf9887386c81781655c511878e783a2dc551ae736b68c","19801ca841b46e95a395eebc1c0b2de245edb194f887531c56df52c7533afc92","25302663e4dc594f102a1cb44392397232ff52793eef7a37ab8708655db62589","582cefca81c11261c157e848a54fdcf6ff8cc208946525b6f62ec3409ff5e3fa","8c5f07462608edd40d3e650e3ac9af1a2885c0fa55b0f8f4c3de4ff4b9cc5bb5","483702bf1252fd5f3a89419ab2354a041fdcf7a7538bc5d5112757064c8afed7","b664378d9886c86988a60219e43ce8afa4bbe3f6be0ed6d6d15c57974b5b8d2b",{"version":"25081b18ca6c8e5b466dde616d45a7d1fb3cc84a63092cc5955282a280b672e5","signature":"9e2dae03ff6f42f7aed36dae1003b7f8645cf56d79a5d9f3c7ee2c3302b93893"},{"version":"66cb7a13460a452dc5c8c48dfa31557264c1c864e019e4ed3286a0338c6d2932","signature":"3a3fe47eb358aad030cb25cba478fd0395e770159c4a12b07d95ecab600c408e"},{"version":"4cb4de18c94a3396b88661ba455e1983ea4f8482b5473add39442b1b8cb79ebe","signature":"e8300b85153b666ce31b428d9aa75f57018e90cd8195a3dbcb1b63919d255acc"},"61cef71892f18c3fe7eede187fbef635171d00221a7dd4a31934484427ff3eb2","38930413dcbd59215dd3760ec5081332a02e04ca9b3e271b0bfca9d29db323fc","1672443b74eb315e811b8dba448cede9f941841ab068ccac3e52d0000bc7aac5","9374c5a378a72169a046e0f2d625e9915e64c403931f7d02a7a55acc1109cc09",{"version":"d51d97f9297b44b97fee3575a363c5d84f2bcaedbfc48b6b258c502987c5d032","signature":"2c8c1c0cc2b21b9c66aecec6396dfd18d20fa94b68e8d7715d96e17651963981"},"cc6dfe469585942b95246890868c545cb84e8e0fb8dad6ca725b7fadf02e3479","7bc184e6231adae6881c19e6c7e289cc4a0497101d268c240f51cd8b081ae52b",{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a667702ac90442a91165e87ade6f92636a4cedf9402a312783bbe7858daade47","impliedFormat":99},{"version":"d745d125635e987cf69e1619ce24af3fea489df4a86e0c26aab73ac78fe38d72","impliedFormat":99},{"version":"277cea364b64847fd86d7898ece20a0614547ab7359785d11f4cd574e6a1ef47","impliedFormat":99},{"version":"d1c9188e3730b01d8d03c9823df40c2a65a7d07dfe2ef4bab233ced4e8c048ce","impliedFormat":99},"64c1c05e21fb936a0e704b79eb1a958a291f9c98238b1cd798f1c2bfc4e3d41f","fc4ff06a62cb0c0701692b1fdec94b908890473f5f84bb58532fd07fd7337eff","dfed5c37348bd682914387eaf60d299fad579400c7b6507c632aa19c15c342af","369637c6a827bfd173902558d3665a21280d9e61b8cd96e242afdf47866ac5e0","ad7ca3c9618b45712bf510d9101b368f837d9f4205d14185272956fa534ebf77",{"version":"dbd7bf10827d449b9a67741380b328287aec6552c58b96d22548e522d34488e0","signature":"036d0aba5aa00a701e6ad41058474c07d66a51cf822e2ee159ba74fae03e8f36"},"1dfc503deb489636b12fb573cee8b14d490da3842612840225708b5032d6b93e","9155603fbbfda409772c1029014bc4e5bbcb623c4288ccd7dd5f39987ce60a54","6dc3787d0a15a8053af1ffc87a074c124df09dabe9d6c1d6f30bcaeeac6b0559","d4ea93591a9f66c3d4a1f3f179c8b4be5afc177f1143cffed92b6d7f76246b6d","d591d5e7696d2e8f724373661cb000409e0dd5d62b8583c5d89b99fc89e80597",{"version":"38965b3d56ee21bfe1e452af3db5bca6e594217bef316e516f62ab338fced0cd","signature":"b0191e6f3d74ba58906c9e1fddb620012242b7901efe7b87e7c9754b68921f82"},"442ca28761accf26ab14ca482e8cdaf66c6429dc4a1e33f0f76f39f9421fb25c","c74142aceedac61573d7a3af39472d3f0c3892f9a8039f522ad794edd15dcea7","75b17387478a60967db3a516dffa17b4a654726b8eac183685e9f47fa928395a","5557716aaf017db3be11c77a21d8d43545255be5285833ec5795187bcfbab4ee","3ab3a02782166821ef492f4acf38be10b9d39b624e6431304c286cb0ea2d30d2","f8b01918cb2349bc3bcd179e35e2868457b1dbb2f014fa5d6c872be46e2b4b9e","74efd73daada328add890bf95dd1f2e6e953c58f6add8277dd7182ab7c80c08e","381add1567a632ed5e535d420fba64313043c7aab0fa5e355dedf4fcfdc34eeb","c365b4171dbf702fc78eb8891491c22c34889d46a163e2005d55368c16870924","e92459e81ecce9254bed4bf565b8d3087b485cda576aa552a3e47d33d41167be","f7505a1161dea2efb56ce88d43ea3291861ac4e1bbd59f1de8e08479a815ea62","2557cfd79e15bbc808eaaea1181a850a92659eeb6a581cf0071a67b86464ab95","e2bdf334d8442ee11213b19c84de48b51bade7978ef0b9e10e5900211a52bbc3","7c5b1904466f877bf10761d10fa23b0754f13f06433594a6721db2a7cfae463d","4ca4a5464e4569484e10e7d88c6e4592f8bc2539bc8607aed908bf18a373ce3a","74004f7f68d5513b1a65bb8b101bf4bf9527f556ce5fb8cc2260468ae989b515","f3dddeb278a410601d20282a57433de4f79b742b7d1480b66031007bb45ed77c","860be8e63a2428db1de1185e02af4359be7a7f698f0f10321de789bfa0db96a5","dffc25d03f105209c1193b9bdfea9c9ebfe319354bb7e080ffb6701498b8f62a","0981dd9f28fa036a79e37950f9e4cad2a31bcd391fb18863604e1aa5b216c524","cb8ac2ddf81fc96b9007383dda6abda351ef1f197c5d1a67ff7924797234728b","6855bc6dc2a19fc3618189c8ad82b153e77385d13c17ba666b6b0d37903e92e6",{"version":"261e3e087c314a2f4b93e015598bb31739756ee0058600ce9e0c5596ec67186a","signature":"69c57db4c351794073608d51130947c199948a1fedd6df18f2c197540c5f5066"},"0eecb642fa557fbde083ca54642a5cdcd410239d29b0384756d5aa6b9e27b1da","da3f9bbfc4a5f0a7b698da0408b6a6a523762f24b53f54a28d5fbf6509d00165","7505753e64efeb13a0ca7994171aa906e3fea4114347bf46b549c5a0e9051d92","d939d4e8b0219e03aa57960a50718efb3c8ae0eed21d8dee96c34f2cb5fa4aa7","cd7c1285d11777bfc7f35638ad42910c73b3f78043ad4f5e2654b1c7f1653c13","3dc7b06eb159eee0e91f59e63f1d60aa3e13abba42655e28fa6c17ec6a2e5cfd","74b0a40f3605160e124d4770cf05fe9a40ca3ad979e7f24ed31451cec2af6538","e7266c8ac02720f04ee17a40c08b76e37b0f48db34987cd616d459e503929042","87d8e2ec343fea71e4627318cf0707523955e5fda3feffe7aeb11aebca883e17","839065894e7bbb35ef6662f047b4d97bd652c3907fca9d2b4e4576d061519ab4",{"version":"6a9827883676510cd412cebaccdc7215601e57310e70cc37c4802069d20d20bf","signature":"dfdb01e2735e572605131b9b8778cce5f8ae79bd1cdb6cdb0b55f6bba2b4ffae"},"d28af7f4e149193729f2c1de7197f468c7c3ae9c6413fee5535602b424baf6ae","bff1a67d13355b1c34e020a6798c180ec6dfb0e5e55ed21cd31a989f49873c5e","6edff6a6d4600eca144830af216f11fd415152dfdb760ef83ee01fdcaf5fa550",{"version":"fd84bfbee484d66ab786ca79168cf564e2bfe9df11d470c006215ae8d2f9de51","signature":"9d75a5455b9f5fa4dcc000504cac912f703cf12c940f55c69519132e9baf8f12"},"e6b390d93eb9d0d5535b7b6040fc122bd7c18e4f0515b5e77d80d80143a5b84e","e4ed2392a3e095b754b065c480e1f2172d71d1bbd7b00aa39868555fd8d6e103","92831134a9e92bdc66a3aa1e6ef4352147ba4d4027324f851d2bd136a135b7f2","515da8a353fd9e2653ef40fca8da41648473a07b55c55da7cbd300fe875d6192","cf0facd9163173b2ed6692594f1b3ffbd8d39e0e3d545c1d1b3b4bfffb8c069f","17f79d5b903ea4e3636366d068a73140fb0b3370a0327a08796dc29e7cc533ca","4a97546dbc6eab8d4d90eb924e698ce2e39cc5280f6d2762cde9420332041659",{"version":"d573337b09eda4e2d791b40fb825890e71729012056ce7a8901880ccc9bbe674","signature":"f8851eb02144034e9b93cf1a7e9d3fe352b4465bd1e1b53a4bf96e63202d7481"},"7bd5ce8463a5a2f8fb77f75f3afc5a2a80374054498fe49e8d3c10d752e84519","1766476deb98980e908137bd37988867ad98b36e5b5dfe43139afb0afdc4a651","8068a8e4dbbf0b5de3c0a1d1de6d6d5bf44a2b4fb438e61da6ee8203177b04b8",{"version":"b9e216e0a7aaa7e79a299b814144b390117ad147d734c2839b68329bb5209c60","signature":"0a7033c7d06c09e262a55d574719ce932460d096c8d3cf2ed18f8893d924740b"},{"version":"0b4c32b2c725f939e780106a8d9b0a32af422ff9e5c52967fc214ac6f77d8220","signature":"7620369b0712571fe8cdadf2511297fda298f390cd1ac90cc7ef0acc9e9ba73b"},{"version":"b570dd2e8bff9572ba6f16e3da949a95d2427ab6174b00a7008b467b5ea94adb","signature":"1210b31ea75e948471a9df55f0336c7741ad2cff86180367abc9ac890591868e"},"50c0bbc39fb375b050149df1e239daeba33be75a1d0a0b6ef5a5d4c219e4286c","95dc4488ccd62a0a55dfa3fb2e8aba55ec3cebff6a79bc28e3b825fa5d698e7d","5e90839fc767a4e7709cb6a39371cf7801483d0de28c9fb584e1b1607bf94533","653b05cf55681a9c1f61d301fd312408cb98097fde8fdb4cf510fbf7e6f8beda",{"version":"701892dbe08472a24a80b0c4112cc8173d06275b7f2cffcbc5f89fc2d9ef32c0","signature":"a4da92b1604699b37eb856e395868123743d97e4a4d1f2631bc1cce179129e18"},{"version":"49e9823527c5cfaf99bcf6e77166652e1dbadfe76c67b9bc88ccc1bc76a2f964","signature":"f96d2cc7c077e70af30c1860904966c8855b310b7025e414de357b3ceadfc3e2"},"ad60977cd5e140255b6bd24ffd76f707d5b61d32e99e6ee09a7f2dcb39bb0595",{"version":"1cb5dfe451441db101b9f954d4eaccfbb72b839f45515bc1f815a74058725956","signature":"006baeb75df590a54491a578b314604832d3bd29a5f81330ff532c9c1dfd9528"},"ead9d912ec3d0a93696eeaa00182b0e1d6dc10fe85c89ae6ce1737a5f88329ed","b1da364e29b2eb6bb088b5aeb35e5377d96fa2a37951084fc27c466cd3a8a8b3","fd0ef0f8b74c9f40ec991a43a801049939fd998d8344fc6bf1b3256106de2b5c",{"version":"5a9ffc0682aeb335925a4a676d0a15130ae678f198aac62d8436bdfd9c266bf8","impliedFormat":1},"852c9263b31cf1ab8fca342afdf1462644b9f83f2adbc74895d0e39e614de5ba","d7c9e387c57878ff607baa65f6fb012e27e02574de6e553caece789e0e17610b","da6c1fc13a01668529ca50f8aedf8c0887a8f13e886a5473ea38ce2e820b3794","6a51908e0fb2a7652869b4971d4a2afbd453ef12f13e138e551ffbff50131714","c98118f979716ee2ac501bde36870b34b42ccbcc617577c930cbffa27f84c3ad",{"version":"04fa6299a6decf2ea0e378c0e6567691fb74736db4e7a333b6c5fadbf8920aef","signature":"15e6d57ad8114a739f5e04ebca6da15a51a5f37f2108b4e79eb8be17d14b796e"},"fcfa59cfc7976ec51e4a6fa70f5b5769cf5475c5b0b8a7ed987e4a7304d61dc0","c01c23bd7ec72c9686622868348e005fa7f97320381409170497455a6926d0a1","8fccc6abde9e7559450fed2c03c4614d3451b33cf7ce544945bfa24470119792","1267cd65796352a67317af77394e6bf8025c31b57d865296fd189d827a21e32f","8c1a56a06310a54b3bae781a700c0080f404179f565b5317a683beb8d0e8e094",{"version":"33cf12b514a332bd0a7296d6d58bf1acc2370c0fe0dbfe480762abb469bc8cee","signature":"0a0787ff51261dc73e6171257a81dd2e51f114820ffbc94f73eba74f2d1148f4"},"43d0463e52a488a20608a8a3e523d01dfc59b77e96a5df00e29c0083957acbc3","310cd578beced3441d9cd4922bb82a31513abc0393797f34adfd4f48a9add8ad","b0596585a0a67088472bbe557e519a098cdde2b6cf88241b5d14612c028be29f","8b069b6ea76623e7b0cd9bb0004d655242a8bf8b1799d2017971b458086a0686",{"version":"fa60fcab86175d3d12de1c887f1d476c8d2a98987a2bb693e9d1795d45cd2a4b","signature":"a22bc12f03e42e0becdf2d9c6eb1745e5bb4c6876160a14bb88f79bdd85de275"},{"version":"8f9b92199d9f77f62d142776310bccece896388dd41339e4c138db342542b5a4","signature":"577cac48d111fe696c0661030bdbe03bf49b30f15a9d6f10da4d3b877d5ac8d9"},{"version":"dc2666d88e23d8808b75cdfd5ae4465873bb377f47560d3d6b738ba6ed99dea3","signature":"900ed025f2c0a01b44096a3fa6a6934201453917a2b0f506ed118804be4f9917"},"bb53c0874215c9f12ff132f4955f578525962588d3a3388abcbbdf293d986922","fd4bc2bddc75c49c9d26b9130e057593a6b52c0f055fbce46781dcbb12b4166d","4cc1788fbb82636e72daff02b3f5105597af73a3ed98f2bd8e5dbeb82136f867","39906da7884be18dc744489c47ebd659481679b84621a20af75da51958ad3b91","31c866fcf8aeca13e9cd20391adaa4b7fe3bd06471966c033a66d4bb6ce471c7","46827f93b6059b68c47144699167806c60335b73ec3cf530f4ce836994b84f8b","a8e0f8c6b39d1f48bec98aff4eb251b88714f27ae317ac2c2c4d8a40c62aecde","5eedeb048da7da15c8acc9fea06ae6332ff979bfdddff37a549380215801aa55","1a9aaf17a1b98c0f7f226567aaf3cec998da8fd8d8ba7fe9ac64c6ffbce27187","fb2b938cd607bb45071c79536c67a13583357d9b1fecef6281ae2edd85e4dfcb","5c2994fbbbd78f5606c30f4ed069f745bd659655c85aabed7ba1528a05b9cc2e","8f9a690ba9b288a0094fecc0d1b9be389495f1242e7d1e5a8c97de8187560eaa","5f16784159b442dcafb04813fc14af884b0bcec2ff5f04bb7d63f887f58b2556","11cd430beaac33e5c86af4ee9631e17f58a8069d1ba1988ea21cb0f0ef43c43b","1e52ae40cb7e7757b60a867e819fdafdaf1df3b0f9491ac84dee25db25ea08f4","f1f3d49539e64e78b60e7ec25a9191458bdd84bfa19a11a04117b92acf9bc9ef","7ffeee96167054a777e56218bb7569a175a317fa0d37a3685e24a188a63d620a",{"version":"7a8c528d8fce758021ca35996c2dd7b6b3ed5a39a11fba83d61a0f2489fa38c3","signature":"0099d5078c12f66de5642790e0949a28e5a4f5d5a407aca63f3be9ee6e2b7c20"},"4e6d22ef7ab96bbdc8e225fc93224a55e3eb2b1f36099ab3484a9b796c233835","12ecb5de7616ba53eab0c3ec6d0d749c581e5d01d997884bf6e09e1eb6b6a7f8","fac19c7bafb8a0fee3ea0adb9495b342e81544275c14c7c92d82c901024b924b",{"version":"3297d4fb2bebbd3e018ff30cc6c14b4efe5fb26d7ebff4065d5b8374e7ff21c0","signature":"8cb7df7cf8208c8308f5e66460a326cdbec0247ab4ae7a9f6fb4840ab1712661"},{"version":"289d27c71d2644bbf5f3f7f63c96cc42fe24c3ee714aff72f35ff4532e3019b5","signature":"07efde9219a577fb6c4d1d8e1e45d3c8a71c89eff246207e723d07c6b32df4e7"},{"version":"903e9ca71dc1c773370c2e834b8f8415e4a02c30f3c798f320548b385644e0d6","signature":"51d880b5019e61fa3c41f1366ff8ca226f691616defe9d7707c0db35622f3cd6"},"bbb10722888ed684182db250412911f4f04d056d5ad6f82c70b2633f7d2217a4","f1b2862245d38b2d069fdc2c5854eb151cdfbf1d2af8c0e34c394a172c3862c0","4e1cd5c88b93b47cb6b1f152329eff566014f79933cfe40c224332d57ce14d3d","441100bc21c05b956662c51d70d17886023c3151a0f6cf0ed9863ab42c806883","14856d796118680ae5106aab281e49c987e0de7150262c916a489802389752e3","5c8c4c1e1fcf779699f95966cf5f6c3bb11a0480e4c8413692d9aa18e8287eff",{"version":"a6a50d14099b77271c7b78714f7e08371d6e9152b366f374ea70ae8bb254c85c","signature":"5aebd1efc20d8ba2b0389004eeb0f4e9e95fa3c6802b196ffd6d633dcabc5f06"},"26a29e7be774cd25e6953d4902a52d946712d70abf038058ddf67b178da6d9a9","091d0d5a604c28457a9df71c95e60b5288c28713e2127a00e3e901ab50538e32","3d40c9fc878f75aedfa6a8ca3dc1fafed9c6173d089f46d1a1ad3ba559d1c9f8","d4c4c63439d64625fd7c556fcd4ce8a5df47e6fe2b20647da2a53087163ebeef",{"version":"b6d72342a4bd20cce3c86de4b5ed16949d1b8f6ce7bf4ed28532db7093712773","signature":"0e48e133b53ae445e4a0b7fba31c46dca26311d1173e1cd080c26ceabda02568"},{"version":"539eb7a25966d1ef02d6b7df58f221a071b09fa7135b8863cccf14adbce76064","signature":"e284253b1070977714a00ac6a3943859770630f461b7e6032c9c01b753ac4be6"},{"version":"6b86a6169326c7a9735a556ce25ccbef2fecf43203f429000bd417e0dbb0a38d","signature":"aa5c4f322b63b7e4d160f202a578cd5ab16625f11a1197ff167dec0d504a5c2c"},{"version":"1667182f521b84516c412d5a3c8df5579486e2410750982674f89f4704af365d","signature":"d068f4fc6ab1d3aae1108bc2ceb0a8e810039e093387b286510199c17857d78b"},{"version":"4b0370a6e3cf73053c100c3fd69b94cf6c5b96da2d5a107f78a343b87748d372","signature":"8bd355c5ba6c6b86367751966054084ef55588d5216f3fb0820a3edda3d42202"},{"version":"cf3807a30e7f9b6507f9106b08443ecaa143a81930232ea1d927457836b67d32","signature":"fb97a0cf21c34709c2c0c7455462499c48be761c93164a09ab1463d77fe006b2"},{"version":"4e03183a4c1db60272107368fced1025e0e38a80c3c52243a2e9ffe431a47fe6","signature":"c94b51c212db09f5d2b68808c8986ceafd5c70705a353c1a5fb234b936324bf3"},{"version":"ef0b542127b581d55a978fbb6ba5089e210c4bdc400b00fc8e563aac65dc89a2","signature":"a5cb9a87536b0b18d4dfa9962197f85275cc7015aba89fa11e9f84174807060b"},{"version":"c1ddf34ebfaf75a08045fdad045c0f753b32e37945c916db80074a39b57d7d20","signature":"fcf88c1ce16aec3513e059265225cb0b4f2d90818dc3b4b561508d177afaf567"},"c77b9546aa449a9d6cf2cb8d556bdd5420dd9bfe50655d52b483e417d3fd3d69",{"version":"6e50be90b76008b5bebfcf54371df7b2014ff90247b2c8650e6d2f4aad46236f","signature":"21257a6c27a389a5a5ef19702e8640656f6ed9e5422eca03e01f6d1f8687694c"},{"version":"80d93c54dfe6a33ba77c0bf746597a01af202e02858b8a1f7950f3ed5fc5572d","signature":"90fa26b72c51b7f6b863df7b04da7f2c33f61754eab1a94c21e483845dc9fe2e"},"df99fc97c0328619ef07c2a171aaf6cdb783f9592aeda5f47ca94f5bfc73acb6","eb1815d2d2c297c291b0ea6632d13f03f66fae6f19e278f6fe4b3120e412fa9c","af6cad41822782d5117209a31ee2286dcb13a1a18958f6bde43ba0d2ca788313",{"version":"73aa8df45995da792db93ffbd0777ceafc7bfad9565e1c2506fbe42d54b990c5","signature":"7d1ecb64aa95333ca542a6af10f4b1ddbd055c619bf75b33fae445676d49aa71"},"1b5679823e0561133e21e9e09220a4309953c2a6bc6a16dc05df90366f3bf99d","7e60a5f4c9b5e230aa90a545ce776aad6e2bedb6380ab7173cc31ae56bfc1b95","e90b36f8f5cc75f39d01a88b2f005197006ef772f70ef04c3008412b4a4366e5","22aa6a602512763565c8692a98a11f98e66e4ea796f3494171e355f4fbaca818","80c2cddece81e35a64af77e04656013f8ee6736060b648153a0859010287e159",{"version":"5dfaca885fd04bbccf839888fa593c8f0420b80825bf75e9a3a6c92e60ff4c8d","signature":"8e6f698d1052ec7b2ae3e1dba2f178e55d1668712bfda12d08d171db16b26351"},{"version":"6717dad91e44ad22d68f1fc0db74e5eb5398c2c06a2943bf06d3a168e8b1ba45","impliedFormat":99},"c5a5ef998051d037b617c9584f3316bb23087bdab0816f623915d1502654d87f","c8fcf17f9008469bd9c8b28a330d9a6fb5763bcfbc775611cd1b6d473ced6456","87b0d4a8687e378d9f3bd18b24f1a53de55dcb05779eb9048a62a4a36a14fea3","0aef873d46ffe68f2697fcf8aef296f1ee0151a00d829543b3e828ab62de17c4",{"version":"1ff4483450727d6f89a5abe9e2a5f6e141e2a3ea0ce2a492790048528f6dcf5c","signature":"38804971180222194590e5574539cb7c63f491ae6667d5c7ca1b606976be18f2"},"4917073f2e4363a9a4d01b6a5813a16f66c07155fce32c2659978d971a0ffbba","f17bf91732ab2b8acc8e60b3918d07f307684a2cbc023c97a833579b01a8843e","d69837092b33474065632099d7317b7e84e76328f3251bd8cb14f934a8e0a769","d4768c1a0f2060ef4499da3a7ea966947fc19cc5462fe93f1d071a96798f8a9e",{"version":"f8574b15e236bdb214bbfe5845832c8a05bcd9b161322aff6f32b0eb9c080d0c","signature":"c85518782e09df0c5ce61c4bdc55e6b3f7863210a946c4154502a1ff6b53e2d8"},{"version":"38c057bba61b4a16c0537634db4d6a47b06c9b5160e031ffacba026c5ae22e63","signature":"9a039a515b055d3591689a67a16aa80ec73b362e5a526c2948a1c35701238e6e"},"9570ae79cf721778faaa5613d23addcf3a62f422fe201bd5ed185d8a4c4434d7","4207f513311fcc82ddc744d23df6387aadf697d4f292d1a773fa5891682e911c","9fdecabfecb0ad7d72b85a2383c53cf747ba6697a555c48ab8f90848a8cdd3d1","8bc23e8334dd868587ef9784e2fbd6a184dca17b80bc84ab64f2f3d7aaab4105","844d8d4607e3a5cc494782fd55018dca7f3eda414e892c78cbc143391df97264","9f17e2392aec5d6c9fc86b13a033c830bf5cb3b0854f4748918c4be3310a95fb","ac5988d1d1c9e1c3923f2dc7b261df4100aedbb4279894ea605df635ec3fa26b","1a2ab9b92bb13371d041772dae8658e2d4f6e04d8749d86ab410973e3884c2ab","256968600722a8b1ae3429fcfcb4c14108e6621bedeea6a80d06a35a9865b348","5e0f421223dc70f69eb83c24e825388ced16dba942be68f2901d0ae9c31ddcfc","5bf431699a1280a37a915fbf079383e4003b198073cb69211525cf1d6674c508","c2de64c11f09249b897288fea97e2caba63458d6fe319fb9ae9377dbe174c8ce","6d039412688acd398574532d63cf2275b26b6f23ff063d79df7fe9e76831026c","3aa368e80bb937e6a340f4f4cf2294905817d393e71e34fb52f9ddfb93d3d2f7","9213345e36203d7f4b048dbc58b1da499d5fe600817ad28e65c7f258d04dd294","80d67a3a7e4a71dc8e33be863a30e0dd8f82d09ef435fb31704021116456bb27","00c1c03aa4d89c3251c8dc458e211b49c8fee4165566451c0673fceec13d9076","6439281b871ac0a6f0907ae9c57bac1fbc80bc225d788550f9f30e6103929733","14547e6532719f42ff204c08cfe8adb2bc69bbc1e83c571bb7e0f9c61addd609","3478a015f812de7f238ae870450e58e63c8df5b115506aa5ef07b9ab22d7d4bb","1e8159a2f8b063e86f8b57869e3af92b8d7d225e6b39b1101a2f623485f16bf3","65eccb8f5fbb2acffb62aaae4f142af0feecb5c684cb7f17ec3e45aa807d9249",{"version":"dad54b527b7dfed20c43389aa6552e1cce91dca77802553bab7258cc84f57b30","signature":"7e1b7f145dbd4a3add7609d9eb1bd9d93869909861724a1efcd28b0586b2ceca"},"72fe24c836ec45ba62b1678d1668b6e3b97fbee43f6220206335ab911bacccb9","d947e72f500d0076c7388d86a3fee430909980fd035ca9a1a61edd05a08abeeb","c1d623dcee823a3060150dbc6d4a2f26d7effde202cb9c1e00d9d7cfdd36d5a6","3e1f0dbb4280389d12dd74b95a19f59dfa568bc0be253bfccf92f07e1a7f482b","603883229e3b13151eb7d7534e76d1617064bdc26a959a0730036c9c5a2d978b","0dc2fda8525fd98d4a795f2547065674cb3622a9f2937e20d43cffe5423e342a","967a011713540d6cf4abbd8d208e9d16ce06ba01969ab120e4cf0291b4beb369","abcc6d9a6d9114276891187bffda08af2580464148036fa24f89dc7068cf9d7c","ab700a073592da12079e6df5879afb5f2bda57077c177ca398b09813b45dc25e","fa48ab904ed12211b96da78dbd4de382fb3ffd7551b5a0b9a7c7cac8c4608375","953e758ec3d3ed774da5f01fb1045cfc134c989ebe07f509e9e1ae200519d105","ae7421678a4a684f09af5402bab675993867c2a79b55e38cbc44120757dbf403","b88f255f41c7c64d5c9bcf389a971f4e64e7a2ab683636877c8b6b7cf9424ce7","8f4e6cb8a337dcd6b573cadcb17d16428feace38b47c9049b7f0e934062626f1","5aba5fe8ea7c78725da4aa86d8db576d845330c5075805a02fda6b71d4057b37",{"version":"6837a6daf6dfbcc1628e7005aa1a21965befce194d9a165459a975c264cf116a","impliedFormat":1},"b2bbb63097f1d499af6a51284f0a4fb48986ee8b2c4bfd56554b193aeb4eb4b7","cea47278671a7c00eaa984a0aa130839db1c2a774ca282afd398120b10e7ee9d","5685ae47e43420f5b6f6a030c914a4edbea7ceda04c9a621efa4e713332befd7","3af95bd684c282a0774a6f1cc8fa9ae15c3d06c39c811956275011c430381a5c",{"version":"ad9b9d198a40c0657e7ca2f4290484d74f2d6589a5b1d98cdc62147e41ec9fee","signature":"1355b9ed7b00eb2f945f31c525e38088356bad17f7a838608c78e614a1fbda09"},"bd7b74cbc24a1ea3ed0c9172da8a2cd149ec4dd24fbb5315417f5a6d4406b4a8","e66d1c61f0e0ea09c67dc043c743eb0094c430bc4517ea81c87416a746d0697d",{"version":"72c9e192ab4386376e39ac7fd099d70ce664942807c103ff941cbb366f12b454","signature":"538143f20b6538aea0e0fbb97d6ee1e1e5243ed7bafc9396082390ec277d1413"},"e2e5af1ed46ccf3e2397c3a3368cd615e85e71fabfc5411795a2addea4c1569c","a9e82578399a625ae260c3784d470b11ef07b8f0ea5367f97293e03c71a971ba",{"version":"b34209befaf07b7cc1932e5cc137ce121cbc9f892551126962d9e908be91adb4","impliedFormat":1},{"version":"32727845ab5bd8a9ef3e4844c567c09f6d418fcf0f90d381c00652a6f23e7f6e","impliedFormat":1},{"version":"2c0b5ace721ddf7314b622bbad664a9958cfd1068422dbed5cdb760cba1c7f0c","impliedFormat":1},{"version":"7a8ec10b0834eb7183e4bfcd929838ac77583828e343211bb73676d1e47f6f01","impliedFormat":1},{"version":"707332817d714a4277d2d386d9c209cdb2137313284c65621849a12f413aaf5e","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f00324f263189b385c3a9383b1f4dae6237697bcf0801f96aa35c340512d79c","impliedFormat":1},{"version":"ec8997c2e5cea26befc76e7bf990750e96babb16977673a9ff3b5c0575d01e48","impliedFormat":1},"5ac3325eb59e2b5c2f8acd27171feffe188794cbbbae88b82332cbe520d81626",{"version":"c733e7c87a39de37685095e80190eb0eebee58b1e85e2942791b1f140ffcc12a","signature":"a1e60c7ccb4a6ca34c3b6f500a02e5667fb5277edfe46bac13ec5d3901191616"},"098ff54eccc5cff52a8cdf15a4cd1c50ef4fd2c8e7c4a157696c7fb8c411873b","3c0e6271c47ade73afbb9efd86c29c9e981426df0c61ffc42686e7077960e071",{"version":"584cdff8cfea038482a2960e07524ea17bf8bc8163c54fb7a260c9e5160ddbb9","impliedFormat":1},{"version":"ca33ba18645266bbd0561d2e41ead267c9a3c141a4904be7bb56824813745aba","signature":"9c0eeb8de8dfdfb63ebcef09564c84ae1f6b6187c8e8e274fc5b0ee0a2c8432b"},{"version":"b1a299a60a6fffce7ee270827701e0d183bee799ebbf61af906203a7bbd3664d","signature":"2fb36e344894f10b9dec28f69373cdcdb9d9d08fa6fa4441f227068bba73e2ff"},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","impliedFormat":1},{"version":"333caa2bfff7f06017f114de738050dd99a765c7eb16571c6d25a38c0d5365dc","impliedFormat":1},{"version":"e61df3640a38d535fd4bc9f4a53aef17c296b58dc4b6394fd576b808dd2fe5e6","impliedFormat":1},{"version":"459920181700cec8cbdf2a5faca127f3f17fd8dd9d9e577ed3f5f3af5d12a2e4","impliedFormat":1},{"version":"4719c209b9c00b579553859407a7e5dcfaa1c472994bd62aa5dd3cc0757eb077","impliedFormat":1},{"version":"7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","impliedFormat":1},{"version":"70790a7f0040993ca66ab8a07a059a0f8256e7bb57d968ae945f696cbff4ac7a","impliedFormat":1},{"version":"d1b9a81e99a0050ca7f2d98d7eedc6cda768f0eb9fa90b602e7107433e64c04c","impliedFormat":1},{"version":"a022503e75d6953d0e82c2c564508a5c7f8556fad5d7f971372d2d40479e4034","impliedFormat":1},{"version":"b215c4f0096f108020f666ffcc1f072c81e9f2f95464e894a5d5f34c5ea2a8b1","impliedFormat":1},{"version":"644491cde678bd462bb922c1d0cfab8f17d626b195ccb7f008612dc31f445d2d","impliedFormat":1},{"version":"dfe54dab1fa4961a6bcfba68c4ca955f8b5bbeb5f2ab3c915aa7adaa2eabc03a","impliedFormat":1},{"version":"1251d53755b03cde02466064260bb88fd83c30006a46395b7d9167340bc59b73","impliedFormat":1},{"version":"47865c5e695a382a916b1eedda1b6523145426e48a2eae4647e96b3b5e52024f","impliedFormat":1},{"version":"4cdf27e29feae6c7826cdd5c91751cc35559125e8304f9e7aed8faef97dcf572","impliedFormat":1},{"version":"331b8f71bfae1df25d564f5ea9ee65a0d847c4a94baa45925b6f38c55c7039bf","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","impliedFormat":1},{"version":"01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","impliedFormat":1},{"version":"b0dee183d4e65cf938242efaf3d833c6b645afb35039d058496965014f158141","impliedFormat":1},{"version":"c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","impliedFormat":1},{"version":"2745a59bbee61b6323e2a48a74176f809195fb9749ede3b28d254f804f8dd278","impliedFormat":1},{"version":"9de861c8c7b8c4c71f23be4fce45dbc74550b30dee68a83409d1722bde645e51","signature":"6e53b47f91563ae4754722dc59606e95ae3594be6350c7110876aaec649d95e2"},{"version":"2942d23f6b1adc486537e9f36e98a36ffe56074ac0ee93f06fc72d2f03c92013","signature":"5e5604c91041d2ed3c84386a20b691f6aaa3e93d02cc0dff55fad46ad3dd1c5a"},{"version":"3310aa99451062679be495e284742d3d22abe1e27cd9ef7359897ba94663a85f","signature":"2d4f5f9bc8579c550331cc6d210f95633ca701fd0a94a2b01a59b57cc408cd39"},{"version":"db1b85efd41f64be64d5573206e2d97d835e909048c8f9021fa49165f492a346","impliedFormat":1},{"version":"8916debeee8948d7d755190c77f46a680b13a91f73a80b9cdba0338980ecb221","impliedFormat":1},{"version":"7b86510251e2d2726fd0d7385d6d5027d45b85c5dddfcceb8fae0e7e85993655","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fedd860fe947d9ab7fda664e64f3609cd2b079ff1f34baa6098878586e78ca3","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"112dc31db3c5f45551532c2f0ddd2b55c98762c3cb5fd113f7c255825e6e04b2","impliedFormat":1},{"version":"f684f2969931de8fb9a5164f8c8f51aaea4025f4eede98406a17642a605c2842","impliedFormat":1},{"version":"9e7a538fe70d2a0d9a5a19ed7466be6982c7e0a03d56d7b6265a51d84f5bbae3","signature":"5359ed498fab5f86789789712903858757cfd45ac7fdd3afb060926510d098f0"},{"version":"10af1a075fc8bdd9ce310326d5b9c4290f719d96218902017c5b113782d53369","signature":"e9b4b1c30acf33a14d9499f62cb5faa6873d309e4d4dbd6e168eb22333138db7"},{"version":"04343fc88e10d2046e19e12e4a43edc587d6409aef248fac090d019e5b725bbe","signature":"8aa8e136e6e5f93bde7f0111f449c0b455ad13ac0cdfbff184f55458bf4e54d1"},{"version":"33b782a5ce78078e1f37d6940cbec98c6a26017897d0a63738ec9a5cf7d7cd7b","signature":"72e7b1f6977e2f0d7f2a5d49eed6e41e4ebc12e76135a30b2ca4f8a33cd1fca6"},{"version":"a74f00094fe1b4d5c879b3dfec5e181af4a69df921bd02d65621e7bccbb13867","signature":"6b472217bd1ae60de38eaa19b681ea2dc6c7bbf8ee51d9cf1a82c76fdaf32d7f"},{"version":"add7aa0bb66ff6946508aba8279bfb90bcf6ea71d980f784204015b1b52b593a","affectsGlobalScope":true,"impliedFormat":1},{"version":"5bf7d069de3d6d905cb6cda5a1cce192635d5bb0a89b21b70e0d5717647558bf","signature":"a1b33ac928b470a48b217b30da655892f12c513245948e864dad695e1b7343f4"},{"version":"653396fcec501564945a84929ea7e7a1ed5acf9491e010df18a81731c1b6bb9e","signature":"a4bc4ad0c4e625d7bd98233677c6d74e910ac2cd2cef6843553b0f9ff27aa615"},{"version":"9462cf758db111cc55893e77443b06124f8ba51cd958c4eebd814a72050e59f6","signature":"ef152c481e9764121025f8724d4c81a4932aab7340a854a188eca10b27619bd2"},{"version":"65b567c82f37a73d1be88c791343369165dfba292c265bebd29b3f3c0c15c0c0","signature":"9c8aac5026f83a488cac18cf1e096e484d63e38632497e7944527336e7463db6"},{"version":"993af99127eef08cfd018f2b33ea5e4313735fe4ec6b98a0244877eaad4a21a2","signature":"59548bdb7da7ec3191d78aff69e945d2d2ecc01795635ece49195400ce0755b3"},"6fc5fb9341ca105262c9bbf19614281039f1c9bd44d01c74639fd1355dfa427e","2ef2684d77df4284f8ddc61b0609c6c195f089ad9690914a54147980deabdb32",{"version":"43d53e4cd929b6c83a199cd47179ddf8d075862e693d5b57af070a00629af497","signature":"152007a8c7b368a1b9c16b9684bb0781a7637ad44b480813d85e55947352fd4b"},{"version":"e3937c94ab14975891b6222cb441d34cea12f2516fdabe3ca97a7f2072bb1f3a","signature":"9fd1fd1146850492fb6f40393a7722764b34cdba91f5a54e0416e99b41616cd0"},{"version":"10ea42808c6becd3fcf99ccb0e60510f572285a88d676d7e57393808989a2d36","signature":"2725ab53547570bd6fde2ac40f9c16ddc6962e4e77608cf38ceecf47458c8966"},"b4c9c9fb2b72759265ccdccfb6273558422498f1c2f68f990ad1740e91d8e834",{"version":"d367b5660830dd2734f047850b007d806a0198d96cd5ed7f2c903c4fea3d8874","signature":"f532510732a405ca598f81282988aab8d108391756a5ffe4e096625e1fc1df1d"},"3b7d6112043848d481406d792b5a1cd248db52d2ee966f0edca0b1fdaad51a35","f0b3759a5199a507d5520dc3f5059f58a755ce305efd68511ebd7fc037945a64","faddf9180424911009bcf4a1eb1726d2a5a98d86058abe9ac80e1733d7337eb0","bbd82c82b6cc9f45c2c2dd6793ad37513c9e73a6ce07fd2b105592622cafd829","09a52da917b07a55c87c600d911faf964aef7f135d65eca139cb9bdbadd50f49","016120b0d3968bb9f67eaab062385a1e4fb0f17dc7b85dbb18f6302864fff999","a6969654e75e09e796fc325437f70be18b658153cb08a612285307f3d2ed89d2","be1c6bdd377a356d36abd349d6bcae99dcd6fd83370e0441448ecec65bb1dcc9","decfd490a57eb5abc873c453130344182aef5323612b1c2aa4a499ab07910599","6cd87866650edf2748e917041e080bb238d2bc1d52d20d27a11d2cb3ec3bed56","ed123e8a9ae24fdbfda7b6c079006769f80d54325d35fdb19bd90bf6829e98dc",{"version":"6ebd007dd2241f0adb29995ea456a082a43e85599bafdccbb8e8ac92805fb979","signature":"82e700aa0ca512a0d01013d79c39a8bbf94040354c7fd380f5e9ee83c2e00d4b"},"0109ce9ae5279d371c32f3d29c25a9664616da54a46b6d9525b07eba05efa147","ad0c36da127aa475df612c04f24da9294b04f4c0abe217be48053164dd7ab2f9","777bf63f77b89cc3e4a2aded7357e6456a17972922ccd0d0c73a53a40996293c","e32498cf050b16457ebe7ff1d6726e9cfd86c4d678bbd525db447a988d7008b7","f6973b5d4d86011ed2ab717db6ea9f49829f4d2ba775783fbd4687641236da5c","2cf467926dffde18edecfb53907e54e89def5a816bf422ac4e706fed9a7255bc","6dd875102afa94ce4faf1c5d525ab111355cbfaa7a24a09c79af507f2b7c08bb","d4c319e94c7ade764ce8024a1af15fe5690a58f48d2592fec1eeb2ef2af74d6d","beece19a5e6f7f17fc9ce0cef27509ca148a34f3d5e5553a384a1514f7634ecd","704f68435aaae8c004bd59a4bd66ad983a20d79cb9f8c6e2887904586af7c1da","65409d549962d10f0b6cf546642a46c5ba7344f7fb80b04f82941b1fd55999dd","5ebc514a7d839ef7ef96a04b51aba2702a93eeba7d8087e6e409031f7ce68f74","d1a1963fd1dd110bd571a3423121424ec077d7d361645c9d54c22a780f5557e6","9b1992cf96af70512043066850ee370be41b25255e73e9c70fdaba0f70c3c3cd","36dd315863bf3d26c816db19f93126c690baadf79d601d044fd40d92c8da17ce","37caee591e96a5a94efe33b2f61e8bd57db98488011065e9f4cff6c142a1e329","a543aaeda3a61a9fc5e65396d44916c3212bf51bf4b7fc9a9e6c55bb0b7f686d","42f7ad8da50c0f6fbbe3df49426debd568ef416f139a477106cafd164e86607d","38f950effce7b0407407438806d473cab67868cfefb7e17979d6e9e7b7a75693","a18d865a47e7c2f7d4db99d37dc427d4550a2e2c8c3e3d574f0046591add119a","fc854149439b746ec389d13c82baf72832d2167e6660758f276b8780d762f6ef","54e9fb53b6e8957a6dd22128843246545abab64b64b7e14e375d0d2d64e05fe3","36bb334c53e7e489300a725272c1f5f1327113a4fadcdc4dadd75974f1e76ec8","05d1845cfb8daa37ebc3a80b9f9e42aec6cdc9a8b1fa427377dd8baebe930dd7",{"version":"14b7e257bbca25945708b1e21bd848573857888f24933429e8af114495e5e4ca","signature":"94951474461e58159341ddedf9c9af3470a4ec2b082f8edae187bb66f417e7e5"},{"version":"9255a1e7b7bd5bb562af7f8bfa4b669ce626230946fc35641dfbde7ffbc6ff64","signature":"15d11dbdb63a467381ffd2159739ca296c47212409d832055814ac9bf15817ae"},{"version":"35cd69e8415abcc14f1fb0b467de0ca9673e7f5daf52ae66a99467fdb893c0ca","impliedFormat":1},{"version":"73c1e1862fabd39e0b44bc5735edd43e3caed7d2dfe54887a7bbb260b3163dad","signature":"2bffdf0727ffa6d6cfec1abd5f6fa9245765bf09c1609073b1c5a79cd965c159"},{"version":"66cabe1e806a8c55cc4b4f81f0a010548dd242fa1bf1a7fce0c8d185ef4a5cfa","signature":"f9fd06af8cbba174f45df1e725aacc30b8fa871e73ae7b4bca8d423f55b9fa78"},{"version":"32fca0dcc09a1e3f9d8aba45e0d5ec65afd7ff51bd57730acfa74a73605c5ab3","signature":"c5670a9be9aae95d28e9f032db487872636bfcc6cbda0048dc13626a355bb36a"},{"version":"bd658de6d66300dbb2e60236c9d3afd2b9e7b6a814dd2ad04055bd6900395b1d","signature":"1d6f1f4c121b9c6662eb7b912605a93c0d75b00e0c0c08ab8df3d8e07eae3819"},{"version":"6a05f8d2b91b695befb1c3a47a0397877c0230a552fbd78e1f3669c06b0a4175","signature":"a04ba7b121e83e4f82cd082120f6b4fad01043d96746c003fab20d79b4755105"},{"version":"bc11401e15a9568111b9492bc4bd3bac949f12633dec395fc661e02afb258f5d","signature":"f2ec981a0687f99fbaf5ad4bd89080962936c4fb76f637117f55c120a83a93d5"},{"version":"53bffafa6d5167e31bf5ef1076d6f131620038bb676c561b6afd0351dbe513f3","signature":"a8ef6c62ca4d8a3497066be133c3d2fd9352bf982b8242ac276f3bc2c9a61a8e"},{"version":"2dd3edad973ed4a9994ccc6df3cf55ca5d1540dc226c33b91636caf03fbf9acd","signature":"b5a56aa8845b7fa7783379cbd8a16b8a5ffcfc96ce54aa70429e011efe17abfc"},{"version":"6932c28e47723ca40a46ca79da019202bfe32ebb57016cb98de29fd3ef307724","signature":"d1308b5910bdbc1fd9cc8908fe40ebfb4bbe6411bb4f441b564435c4d765db0f"},{"version":"9a6f302b3c42cf3ff79affc43cad7aa4eb170a2e1832cdb642bd3be011972b26","signature":"fbb976e467c582c2eb668a4ae11c0046d5b72f457585ab39adfcafe3e521f643"},{"version":"8403c53512d781ed2fbb0e8a4a3c5eba00f916ab9d25bcda659a0a9aa84e3530","signature":"16c9b5a706e6989cb327491ecbc7cfb9239137b5e386954c55141356ba5749fa"},{"version":"f60f92652a79d13c02c739b49b1a4e2977d66708f6b80f79313d6f862b132c3c","signature":"e0912678788627dfb597b02d289409c20b85ed57e5c26f293c6e0a36b09b1d2c"},{"version":"6698e95eb902c6fa5e8c7d7b8fb7059a1cdc689d6a69d4f4ab33679ef968551b","signature":"149005f00ccc734acde3c79523c416f5319f607a17a575c516ae8cb9238fba9f"},{"version":"8f152c13ada4c6aaf611b30473cde374fabf574f6613195542ebecea3a1fb154","impliedFormat":1},{"version":"a78a334d8e93cf70b3dded844963e5d0c529546b12ec3a8668afa05f707e8222","impliedFormat":1},{"version":"d8956b98811dd4f2be19a1416301e8f999107422e467af9c90179e74b026d5e4","impliedFormat":1},{"version":"f01341955a2d64706972a4fed430f1634270a95f54e80357a3635a2be05d0092","impliedFormat":1},{"version":"2cf8d31ec8627f7faefbbe2456e74cd499365f59ba6f71cba8b91529fb094653","impliedFormat":1},{"version":"c133900491138f79cecffb0dca079393b8e704899e4fcf9a9d8b399f8b91c3db","impliedFormat":1},{"version":"a6ad63fcfc4c59d6b04eb6beff0e634fd8319cdedd295fab333ba11f8aa5f9f3","impliedFormat":1},{"version":"0b43cdc862f70c9b37bca929513eab72ab764845ea5d83cef47d148a1ff3f0d5","impliedFormat":1},{"version":"4a193963d67a56bff9331232db719a9dc71ff8a7795cb9de2f047d0de214d709","impliedFormat":1},{"version":"59ce6c57619857ab7dfc367715a3dbf300880cd16e7c84c12ac4ba1e39cdee63","impliedFormat":1},{"version":"5a1c84eb2e4797d0a021fcb4033a1189941265d03d6a1930bf6132143ee4065d","impliedFormat":1},{"version":"be79b6124df1c1ebc944de4da6c8668b8a2647cabd17694e3a3016ffe412fd8d","impliedFormat":1},{"version":"764fec087122d840f12f9f24e1dc1e4cc2dcb222f3d13d2a498bf332fbe460d7","impliedFormat":1},{"version":"7a17edfdf23eaaf79058134449c7e1e92c03e2a77b09a25b333a63a14dca17ed","impliedFormat":1},{"version":"f9613793aa6b7d742e80302e65741a339b529218ae80820753a61808a9761479","impliedFormat":1},{"version":"41e0d68718bf4dc5e0984626f3af12c0a5262a35841a2c30a78242605fa7678e","impliedFormat":1},{"version":"1607892c103374a3dc1f45f277b5362d3cb3340bfe1007eec3a31b80dd0cf798","impliedFormat":1},{"version":"402da75bfdaf5b2cf388450cb56a4c5ba2ed67bc9f930eba0e7ce7fc57cddf11","impliedFormat":1},{"version":"97a06e956e3b960b61c263559e37e272bba41f942f1efe824d7264a0f68221cd","impliedFormat":1},{"version":"a71dd28388e784bf74a4bc40fd8170fa4535591057730b8e0fef4820cf4b4372","impliedFormat":1},{"version":"0e411566240d81c51c2d95e5f3fa2e8a35c3e7bbe67a43f4eb9c9a2912fdff05","impliedFormat":1},{"version":"4e4325429d6a967ef6aa72ca24890a7788a181d28599fe1b3bb6730a6026f048","impliedFormat":1},{"version":"dcbb4c3abdc5529aeda5d6b0a835d8a0883da2a76e9484a4f19e254e58faf3c6","impliedFormat":1},{"version":"0d81307f711468869759758160975dee18876615db6bf2b8f24188a712f1363b","impliedFormat":1},{"version":"7c4cf13b05d1c64ce1807d2e5c95fd657f7ef92f1eeb02c96262522c5797f862","impliedFormat":1},{"version":"eebe1715446b4f1234ce2549a8c30961256784d863172621eb08ae9bed2e67a3","impliedFormat":1},{"version":"2dee481b63c527e2674324c60e7a106591e2ea453efc546f589a838f7f73bf2c","impliedFormat":1},{"version":"ab5cd0648952333eb30e31eb5bc47256296c7fa5f36acf04fee832b2509da899","impliedFormat":1},{"version":"a8412352898dbdcb563f67788354881a0ddce59e5e6b7cf528a23bbf581e37bc","impliedFormat":1},{"version":"d80212bdff306ee2e7463f292b5f9105f08315859a3bdc359ba9daaf58bd9213","impliedFormat":1},{"version":"d64257dfffa943762898f32f42a43b4fe49707447e264b2bfc12c11383210cbc","impliedFormat":1},{"version":"e401cd30d2b8c64b58a1e3bee0d95161b0cb9b2e70903559c0159641998b56c1","impliedFormat":1},{"version":"40b414e80fbd5f80c2f5af363070fffe8e07fe83fdbab1b0fd46967098b3f0af","impliedFormat":1},{"version":"18a1902423b8e9f5089bc015ce0ee45d39ee8a12a12dc2483fac930c08bb5db0","impliedFormat":1},{"version":"e928af9186b89be4d8402a8b61d8358ec82551d565adea671a195dd4940c631c","impliedFormat":1},{"version":"67204ef14466e9a82ff1847ef6f40d4bef1dcdea2ffc9f2a1d4457118b8d5811","impliedFormat":1},{"version":"de44ea4f1ac2aa1624cd112a1f4374fc6e85095d1ca6a3e761f021b157dcaa1f","impliedFormat":1},{"version":"89009afb36fba392fa2a2c3318bff16931bd718bb12f4a35ef6795acca92098d","impliedFormat":1},{"version":"c9e11df096a2971b1061fcc13f8c8a4a0ee39e352cdad5346575c3a2a0216113","impliedFormat":1},{"version":"81042062dbed7fba8f439502a65f5e908e7d2fc83011dd3297e96f59039dc58a","impliedFormat":1},{"version":"b6fc856ae57106e18657b5a79c4344754fa815fc8830e99394ba0181cc7c0094","impliedFormat":1},{"version":"a3401c5c0dd62faa67cb15390671b782c96b80271cbe08a8d726088b67cf773c","impliedFormat":1},{"version":"039b927782c1a0c2d57520e5a3c058017ed53d79d8b8ae5d56d9fad8486c1d9b","impliedFormat":1},{"version":"36a9827e64fa8e2af7d4fd939bf29e7ae6254fa9353ccebd849c894a4fd63e1b","impliedFormat":1},{"version":"3af8cee96336dd9dc44b27d94db5443061ff8a92839f2c8bbcc165ca3060fa6c","impliedFormat":1},{"version":"85d786a0accda19ef7beb6ae5a04511560110faa9c9298d27eaa4d44778fbf9e","impliedFormat":1},{"version":"7362683317d7deaa754bbf419d0a4561ee1d9b40859001556c6575ce349d95ea","impliedFormat":1},{"version":"408b6e0edb9d02acaf1f2d9f589aa9c6e445838b45c3bfa15b4bb98dc1453dc4","impliedFormat":1},{"version":"72846ce9a8871912933151376c7d1a0d25c5163017d3a8eb1816c526361c13cb","impliedFormat":1},{"version":"fb3e39ec2448b71602503a656f2222fee6a995218bb2883bfcfbf5a8e6e3f303","impliedFormat":1},{"version":"a541b644204ebb0632a1468303ab6b607c5dafa8260f9a82a277d7fb2d996467","impliedFormat":1},{"version":"eaa0e4743d570e0b5c6663b81f3a389cb14f092628823682951166787a8f84cd","impliedFormat":1},{"version":"4c6de67e502d44a47574250c745e401ffa03cb065364f3607132d010a142355a","impliedFormat":1},{"version":"60d3e53a6fd4262e5019f49779a84784791b506446eeda21c732fd6cf4754807","impliedFormat":1},{"version":"ee03d5e4adb2eb55e205033a0ec9491c76efc212d103df5f8a821b427b5bc543","impliedFormat":1},{"version":"475dc4c3566b988a1942901c9ce1468d9f45cf46afb2cc96114fd4634a294601","impliedFormat":1},{"version":"337fbbafc33ff2db9020cdd24a6c074cff70d413342117c5ce9d702d5cd67c51","impliedFormat":1},{"version":"a82e1390d740fe2c60daeb951f6487b63a5c2c6bdbe6b54efb778ab79201ea93","impliedFormat":1},{"version":"5f1f228c2bbcb4c7a3cdf796da74b87e59daaa29407cca386ea6f0fa97a34c4b","impliedFormat":1},{"version":"e41e32c9fc04b97636e0dc89ecffe428c85d75bfc07e6b70c4a6e5e556fe1d6b","impliedFormat":1},{"version":"9d86c5cc67f234820c7b8c9e764c821b826a8d5b512936a2ad4e98d67b1c4f10","impliedFormat":1},{"version":"acf76ec7a5066133e114784386fb631b88372f988fb07d8b2a3e7975ea6f80c3","impliedFormat":1},{"version":"8f3d580847abb0b273a1c98dd291f614568297a84baee9fcf34db412907e28d3","impliedFormat":1},{"version":"957adb31ed7e8aa2f504efa4e250e908a67e51122e05c683562e97f22fb90435","impliedFormat":1},{"version":"7baf229224e93dda4789fa50e9e1f52a856041ff3d21d56bf303ecec47b4892e","impliedFormat":1},{"version":"f6ab714a171450205cc263512038fe9345d76237131f5f76405c785b62200771","impliedFormat":1},{"version":"0179e43105ebbfc61f08ddec1584b6804c2046e8d03e74a297b68217f90bd69d","impliedFormat":1},{"version":"9ebac14f8ee9329c52d672aaf369be7b783a9685e8a7ab326cd54a6390c9daa6","impliedFormat":1},{"version":"039b927782c1a0c2d57520e5a3c058017ed53d79d8b8ae5d56d9fad8486c1d9b","impliedFormat":1},{"version":"d51ea03ba155517a4dc92fbac680fcb9d815d5184e6a37cd0699c73407a81174","impliedFormat":1},{"version":"43832ac0d325484c691e8227c660f535185a37be042fbfd031126e9c2d8d8765","impliedFormat":1},{"version":"20935ed409012c2c6aaf808614ea923eb49c14332713fb306d44df4b6eb33f13","impliedFormat":1},{"version":"526b06c693b6323a8c009afd3d595973bdafa63cdcb22c4f5a1bcf388c0dc1e9","impliedFormat":1},{"version":"4b291b42b064d1d25d0e98799ca37988e67d2142bf7a6daa7eb2a6b2a5cb66fc","impliedFormat":1},{"version":"674de41d14c9f920703098bddcf85e063c8c93884b78fe38efa9cfbf8ea6925a","impliedFormat":1},{"version":"1b94bd033ac16d4f44fe4afb35e5d68ad864246362ec0f483703366b0390e6ef","impliedFormat":1},{"version":"d4b8bc69b2ea1a6c3cc98c2759e180cad1b2e95957c9e618789c92f7d5773bfc","impliedFormat":1},{"version":"94ff46b434e0cb24d3e8122c3e2a2c808550bd20001e8d496302e56a4c62fa64","impliedFormat":1},{"version":"97fb8e352fd9327dd590e43370c78b23568c66a2694a15bbe382a9359d8deaeb","impliedFormat":1},{"version":"f8eb4b35b48d847b5a7dd64c2fcebd52e17a533c8400285ae216611618e7d915","impliedFormat":1},{"version":"64f9956fcb1c1d7d57422672442c94ca060fd437336fe53c5de40bfe5f8962d0","impliedFormat":1},{"version":"d73e2e923eefead53a1cb8a61514d1ca9216d83e62d60c46297aae7e399e7b7d","impliedFormat":1},{"version":"b8109c50ea6d49ef23bbc34179a5d08ecacf193bb5b901b6be19074f3d5572a5","impliedFormat":1},{"version":"a1f78e6c4ebe4b976c316f9983687848ef0bfe343b5df43f57a5b36bf69ab972","impliedFormat":1},{"version":"20ff8c4f6fba6a4c0fd2448776d2b0113b7f2c9ead81cf760a5abc026643ecbe","impliedFormat":1},{"version":"8e99b7919298b65c998bb496f1ee2743840073d5efa8a350f828b58b6861728b","impliedFormat":1},{"version":"c0e17472b75e60b4488d82a1e05f825f02ffb6d1138317ebe11bbc250ffc789c","impliedFormat":1},{"version":"039b927782c1a0c2d57520e5a3c058017ed53d79d8b8ae5d56d9fad8486c1d9b","impliedFormat":1},{"version":"8b69fd21c029cb11c7fdbe267db034fc24f5f9570288d4dcf00b67c9e2d27f9c","impliedFormat":1},{"version":"6d32b28bd4d05043d5a1acb05169472dd04d8c8c112dec34305e2df2af733b50","impliedFormat":1},{"version":"b29c663a43955a047f943e7610369177e9e76803a312ca27216b18af15f47bb8","impliedFormat":1},{"version":"d6f4c10e5aa297d721cbc99992c91196c3117c88aabe94db45267047e8d90533","impliedFormat":1},{"version":"b26366931351903c9551ab12a0f0504be9d46ebd161b6178312268448c1bec5c","impliedFormat":1},{"version":"3a434fe0b76048dc18baf0358943b725606dbf9f51f41526c77f11daf54418d2","impliedFormat":1},{"version":"f4b5f9148e65316aee1a4f99fa7275fd0c80cb7bf991e83d7f061c6de0b1e76f","impliedFormat":1},{"version":"87ff76b82bf9e49eedfdbca6c9be2f595ebba46dd6e23e03fe4caeba5d556d7d","impliedFormat":1},{"version":"0df4d7c66accbfbb0e1609451e46c6bf8f20da7e07e151b5cbcaf54ffa43f96c","impliedFormat":1},{"version":"7adaa95ae063493e339a8f525902b6c8a521a13628a90a44cf0b5968ac48accb","impliedFormat":1},{"version":"3fc765d10fccb9bfd7aded13716acd93d75242b67bc3859e64d91cf29301efd6","impliedFormat":1},{"version":"b768f73899facc05dc15fe924ee1d96a7caa24f6ade975058c2ecf05765bea7d","impliedFormat":1},{"version":"52e17088718b5a979b8a62269ffb148fe452ade3ffcb1edc612e80ebcc4fa0c4","impliedFormat":1},{"version":"639195014963fc3e121655dae3c8d061abd75e9bc50f749aa00744b048d5a0ba","impliedFormat":1},{"version":"bf8f1e4ad17bf4fc998f863e027cfc603c81f08789b1c4688c0c89631522e014","impliedFormat":1},{"version":"d375428c9196b0b8c6d2650b77f855ae6dcc9043c0ba7115ee71f6ba9197e656","impliedFormat":1},{"version":"ed02b878ca292af5724bbb50c8695e7cb61a101ca22bb775d380e023ff1370e2","impliedFormat":1},{"version":"e312468b6b0da1c818786cc079e1fd54790d83c25cadc61f24a783a4a5ab84da","impliedFormat":1},{"version":"2700d533a3a4e9a8c45500fee3939e761be5586d7708254d5f52511af7964a85","impliedFormat":1},{"version":"51f583b45bde3ff05fbe0fc558a233a3959629b15d19237c59111ca0d28b0664","impliedFormat":1},{"version":"eaecb831cb518b87ada6a6ea738b51eac6f56fd899f255554759a112a3b5d235","impliedFormat":1},{"version":"8867adbe2feb5113532dad6b5948e8dc780fca477a64a437ebcfd98b586f8fdd","impliedFormat":1},{"version":"c1fc6928e6301a72fe969eb28bebbafe48c1b3a705af9becb9fca3fc6d4db7e6","impliedFormat":1},{"version":"5b6d83c94236cf3e9e19315cc6d62b9787253c73a53faea34ead697863f81447","impliedFormat":1},{"version":"6d448f6bfeeef15718b82fd6ac9ae8871f7843a3082c297339398167f8786b2e","impliedFormat":1},{"version":"55cdcbc0af1398c51f01b48689e3ce503aa076cc57639a9351294e23366a401d","impliedFormat":1},{"version":"621c5489846f1f3ab1c17d2ad62f057aefd46236ef7f2194a46c02cfbfc85009","impliedFormat":1},{"version":"69f60832aa9b4fc8f1a3880d7b715beb45f4791a2a784bb26ae0320cf7a1caf7","impliedFormat":1},{"version":"83d7c7c4d88ce96194791009da987934fdcf4379d83d9bc84d91a81c305775e9","impliedFormat":1},{"version":"32615eb16e819607b161e2561a2cd75ec17ac6301ba770658d5a960497895197","impliedFormat":1},{"version":"ac14cc1d1823cec0bf4abc1d233a995b91c3365451bf1859d9847279a38f16ee","impliedFormat":1},{"version":"bd216dfb98bfebe9d32458fc53f386aae95547aed85d520c5647480483d41a84","impliedFormat":1},{"version":"0324ec356d3beea069e6a2decbfb2971205c90db68c49f79421c6615caa42ef8","impliedFormat":1},{"version":"e88b42f282b55c669a8f35158449b4f7e6e2bccec31fd0d4adb4278928a57a89","impliedFormat":1},{"version":"31ce770c7f0489a23152591149d5e8c57580fe63069cd7274df5f91bef1ee926","impliedFormat":1},{"version":"339802c5f1fa4797a825b64140ec74201130381e69c7609b486491c7755cb24c","impliedFormat":1},{"version":"2a1ed52adfc72556f4846b003a7e5a92081147beef55f27f99466aa6e2a28060","impliedFormat":1},{"version":"a9a43bdeadf59289e7d181de1bcfe915bcb78c8c650801b93c5d06657ec079b1","impliedFormat":1},{"version":"944fd20dee9f6daa7bcf07b5ee641176714d689d968edf8ca4c288bd6280f886","impliedFormat":1},{"version":"ae7e53f048c05af20ba51155793802196cfb95877b6beab1b640a608b946b4c4","impliedFormat":1},{"version":"a366fb479968cb666b394082df4f50c7f398abf643c07813abeb8e4ef2ff50c1","impliedFormat":1},{"version":"af9ff6c6714cf8df0f3f9bf75ee4f4bd770e773ad01a138289ed4156ee139bc4","impliedFormat":1},{"version":"63792c817a1c2c6443a17555c7ef24f8d44ba0ff11886aa07d3f227a6bef9322","impliedFormat":1},{"version":"494c9d22a9cbdd6e7bd07bed7788e1e0c63207f29c4b824a2f06c362b5682da0","impliedFormat":1},{"version":"863d0768c15989b65bd04c8ac7ca13d3654ea76a0284936ead8d1c10c63aa5a5","impliedFormat":1},{"version":"c62c9aa233e7a0b491fe9299ae1461346098dfc3104c650d961e29bb8025022d","impliedFormat":1},{"version":"fa415cd54ad65b156d3543c46e424bdf15fc1154a0e30ba6f3cff5fdac7fc3ce","impliedFormat":1},{"version":"5ab4a0f649cb3f5af9fade73bff8ff303fb6f3e6ce1fe41acee5414f68f9199f","impliedFormat":1},{"version":"6d4926a736b1d1d57acd1b96061767a9c53d7498d1bb4e9fa0e03ed4faf7d178","impliedFormat":1},{"version":"19824225fe0ee06cf84a18e13d76f3705a874a54c2167bf5a2ad19135662ac54","impliedFormat":1},{"version":"bd39c551f5b52925fd568e5b7d6048268e155816eecd21eebe21645a12fd71ff","impliedFormat":1},{"version":"f720eb538fc2ca3c5525df840585a591a102824af8211ac28e2fd47aaf294480","impliedFormat":1},{"version":"ae9d0fa7c8ba01ea0fda724d40e7f181275c47d64951a13f8c1924ac958797bc","impliedFormat":1},{"version":"b16d9a8359255d2fdc68b44238c776192fade044e476d7fb0096eb4c42575c8a","impliedFormat":1},{"version":"e7302d399a51048991599180f960a4ccac6d251b3a4f9f98b7c7f7628a3206ce","impliedFormat":1},{"version":"de716ad71873d3d56e0d611a3d5c1eae627337c1f88790427c21f3cb47a7b6f7","impliedFormat":1},{"version":"b47ec1397a90196eff459b6cac7b63de7aa3e3db8230585ee28b63cbd7e6464f","impliedFormat":1},{"version":"467caa5d54e4c410c872f4f9c604aec017dde0143b7290425b27a6dba4d0a573","impliedFormat":1},{"version":"673b1fc746c54e7e16b562f06660ffdae5a00b0796b6b0d4d0aaf1f7507f1720","impliedFormat":1},{"version":"2b402bccf94d1707ea962fdab40b265bc700c486ced0633a302cd739d7730414","impliedFormat":1},{"version":"132d0505a23d00b89c9d909023eee469b679056dfde4deff403a21f94abdc4ec","impliedFormat":1},{"version":"f981bdf9ba63c4755b9b2b9c7819eefcf24353185c673ba25840dece1b30992c","impliedFormat":1},{"version":"7cda0538ef05c037997ce2dcadb7f7237f0f8f0f70c443aecb0087fda2ccb77b","impliedFormat":1},{"version":"81d2667fe05721551b51b40b2fd5b2b7956341340b19a321c7efc343f6fbf3eb","impliedFormat":1},{"version":"ead16b329693e880793fe14af1bbcaf2e41b7dee23a24059f01fdd3605cac344","impliedFormat":1},{"version":"ba14614494bccb80d56b14b229328db0849feb1cbfd6efdc517bc5b0cb21c02f","impliedFormat":1},{"version":"6c3760df827b88767e2a40e7f22ce564bb3e57d799b5932ec867f6f395b17c8f","impliedFormat":1},{"version":"27e753ed2f2730b7ee6248941963b0715a5adbf427d296066c5622eebee5334a","impliedFormat":1},{"version":"b94010e286141a0a657ae7487a0fba0b3f5a8b189056955c6ffd6a0717fcd4c4","impliedFormat":1},{"version":"168785e56577022d6880420a7b949244c143786f40d929942f1cf0bb442eb7fb","impliedFormat":1},{"version":"ae7fc485f1216d33ca1520545ab546f4935e659f98e912d26de2883cb3a803fa","impliedFormat":1},{"version":"75ddb104faa8f4f84b3c73e587c317d2153fc20d0d712a19f77bea0b97900502","impliedFormat":1},{"version":"d6a7dea7e1aab873acb04935c91a2cd1bca62061af62d50b150f2d9ec049eeea","impliedFormat":1},{"version":"0395c1f78e25f69eb9d3a0df988aa0627e69f60272d804385abe6793e21be1c5","impliedFormat":1},{"version":"4a650b6d5623c764ee0e5c3fdce6b98290cff1e60be2bf0c926dcb47d95d1d4b","impliedFormat":1},{"version":"8b2efbff78e96ddab0b581ecd0e44a68142124444e1ed9475a198f2340fe3ef7","impliedFormat":1},{"version":"a1ccc5ff893ddfbecb53bc2a01f72d653084cb924130ec46735f106189688359","impliedFormat":1},{"version":"9d391e35b6e03b23aee1b95d7e5a353ebf9cd12c28896cd0807ebf39f661921c","impliedFormat":1},{"version":"680db60ad1e95bbefbb302b1096b5ad3ce86600c9542179cc52adae8aee60f36","impliedFormat":1},{"version":"7559143eaae04acaf5f63dfc052b0ade201f47ffe217f4513467d60beb467c40","impliedFormat":1},{"version":"b775bfe85c7774cafc1f9b815c17f233c98908d380ae561748de52ccacc47e17","impliedFormat":1},{"version":"1ba152c0203f1c21e39005e73d31074f407378b8a4b8291a1e093eaa103aae0d","impliedFormat":1},{"version":"a0853505f50f2d6a6d87a9e30102f402caec8f6d2bf0b1e4fd702e35f92d1394","impliedFormat":1},{"version":"1763e12bc261430a12019ede875a38630526026bfa3e8a3336acece15377865b","impliedFormat":1},{"version":"1171f6bf1462a4d1ad6d4615039aa7301daeb1c752cecbef4d5b3f173c521582","impliedFormat":1},{"version":"b5c8400546dfbf1105d085f5f7b9138bb9760ec305f64934085e141c1c911e99","impliedFormat":1},{"version":"1fd1f6a2b3a4ffe3a3003a29dc0a755bd7863ed06360abee56fa883917ffa9d7","impliedFormat":1},{"version":"05d1a8f963258d75216f13cf313f27108f83a8aa2bff482da356f2bfdfb59ab2","impliedFormat":1},{"version":"1a848ab32f6114131218358c47b81a2b6fd71789d3c9cda62a6218194cba5ecb","impliedFormat":1},{"version":"1754df61456e51542219ee17301566ac439115b2a1e5da1a0ffb2197e49ccefe","impliedFormat":1},{"version":"9b817b016a57e3b39b853a1dbd8a099481d6117f2f45311fb9d174b36587544d","impliedFormat":1},{"version":"3c6d4463866f664a5f51963a2849cb844f2203693be570d0638ee609d75fe902","impliedFormat":1},{"version":"cbe94b87c6d653606576407dad9c055ee0b68e405a99d0f0f6284b1b69ae71fc","impliedFormat":1},{"version":"73b961ad365799ac9cb5032229beae65bc2437a83a93af6e377c8fc9dc1bfcd1","impliedFormat":1},{"version":"f147871e7f65d3a1d5a660f3eb83c0ca7d001e8b57b73bcd9af3bd3fe3141177","impliedFormat":1},{"version":"32f1cfe489715f1dd94e6c047a0ce57aa5cd5a3bb81743caba8cc01ed39c2e61","impliedFormat":1},{"version":"0092988408cfdb36f2757278ed874b7ee80446dcb963019c9095f7aab5b26e83","impliedFormat":1},{"version":"15ecd31cb702a53ceac46ffec3cf5882968753873b8a0e637d1fba8e0646a70d","impliedFormat":1},{"version":"356da547f3b6061940d823e85e187fc3d79bd1705cb84bd82ebea5e18ad28c9c","impliedFormat":1},{"version":"6ee8db8631030efcdb6ac806355fd321836b490898d8859f9ba882943cb197eb","impliedFormat":1},{"version":"e7afb81b739a7b97b17217ce49a44577cfd9d1de799a16a8fc9835eae8bff767","impliedFormat":1},{"version":"999a50dc35426ac43630cdf419db23ebca9f75b5dbb8ac8983b575cbee062699","impliedFormat":1},{"version":"46e3a0dfd8cf0e36d14ceaf852d8483bfccbfebe0245debffac0a3b227933c51","impliedFormat":1},{"version":"1d79e545f09c57096f7a930f1412c5068b50b4518313dd2cffb144cda4d0adbf","impliedFormat":1},{"version":"42a4525ba159dfae63e1da678f2c8f7143b3e01581cd41c58c7ec35e8fa27c21","impliedFormat":1},{"version":"9c97844099abe0ad1716f2e94ba45b3c72534e3e350bd7f364af5309e76d4716","impliedFormat":1},{"version":"48affc4385ec1e27f46eafd27a7b93c6dab332289d10e4e811c19f5840a2111a","impliedFormat":1},{"version":"f490ca21297f9aba038b8cabfd72bfb58d04a99462c91d260c93913dc85ae6c0","impliedFormat":1},{"version":"f742b6b715f01d63dc2f50d3bae9749c6126fe466fbd12cf5e1456cc8ad0fcdf","impliedFormat":1},{"version":"097d6f39fc8adcdab4d4afea9f5a1e0e9df6671ec48811f031db4cb5b3780a29","impliedFormat":1},{"version":"cf2b7c09ed17033233665c0a5f5774683a9486f5ae66aa44a14608e7c868d360","impliedFormat":1},{"version":"3756ef26b01878865a645146b5bfcfa41579b37602115c731d983953edba2fef","impliedFormat":1},{"version":"f64ede989923d49b0ae753a153acdf2b62cd015c8ebcdb239d5e1731b235a4ac","impliedFormat":1},{"version":"4cc0c28fc8d12ff997e235bb2070832d2ecd5e2b96ef176158d9a0ef85cf8252","impliedFormat":1},{"version":"a0e027058a6ae83fba027952f6df403e64f7bd72b268022dbb4f274f3c299d12","impliedFormat":1},{"version":"d062a91804b84b19ded55160701deb671db366268b12740aef680788b3ee60a9","impliedFormat":1},{"version":"83e8fd527d4d28635b7773780cc95ae462d14889ba7b2791dc842480b439ea0b","impliedFormat":1},{"version":"00121d48e941209d282cd87847c665686b77e12e2c3534f20059ece8df0cb84e","impliedFormat":1},{"version":"3f3738f89bafe97669f8ea8a3dc8b84ed49cd824a0183cfee0a4faa876801c14","impliedFormat":1},{"version":"7ba3da2ebc2c14674a038676dd882f4344e0a3fe5f67dcc5194bf99dd64e330e","impliedFormat":1},{"version":"68437fdeaa0ff164f7b99c2ebc53ce65929a5409e8f6bb21bd95934c483d255d","impliedFormat":1},{"version":"c2bd0617a24715df7b8d0ac56473442a2482628660f30cd52114dbd7bc1c27f6","impliedFormat":1},{"version":"4e47bc603a7e16fdf599ba9d09f9fd2d00b936b19085d356214671b33e502ff4","impliedFormat":1},{"version":"6ee986791456b816dc26f99e4853a55e8d46bdb3b132f0c951f55e0353b025e7","impliedFormat":1},{"version":"da5f4f30972f4046ddf1f9e4e989f8ff018dad3cdb22ad5d362812319ac5315d","impliedFormat":1},{"version":"e3a76f7384a4c2368b9856289c6930e04b58333532312643ad0c149ef564518a","impliedFormat":1},{"version":"42805267440c3e2de5d9840afee9fa7856b584910a6be7e2576057f6980914b7","impliedFormat":1},{"version":"f7b668b9e7092c7fc7ba99278626faf5639c2869571f7c061d94aad65d93f746","impliedFormat":1},{"version":"ae894c8159f27db9703d637fa2450a10e68e81b61d7dfd1643b42e906e87352d","impliedFormat":1},{"version":"ea3749e8629fe2b9c69ebd33df3e686f8c3134c12d7c6d8ebbeb00b2e7d2ab6f","impliedFormat":1},{"version":"2b3bffe47e21ff4ac9c044ee22b8eb09b545969b7ee43ec802ab7043184ff4ae","impliedFormat":1},{"version":"83fbd19bd3c5babf4b7580d08cda3f3dde243efd3897f7119efd0e69c84fd48a","impliedFormat":1},{"version":"73004367d838dc6db343d60fdc8e660dbe4031115c6017995991cc01f5861457","impliedFormat":1},{"version":"367a2dbfd74532530c5b2d6b9c87d9e84599e639991151b73d42c720aa548611","impliedFormat":1},{"version":"6c5e93fad7d8ced5a593e63a9a35037d1aec5c94c4051f3d7fb6c022267b2090","impliedFormat":1},{"version":"a78e11165f4c5e14577d236f8837b60764088764eac4309b04d33f56e3f5c0b3","impliedFormat":1},{"version":"e6d61568c240780aaf02c717f950ba4a993c65f3b34ff1bacd9aeff88fa3ac4c","impliedFormat":1},{"version":"f8ddd00e2c902f42a3cb1b7d50534a7830a64ea8c1dcda4b9af1183e4fa1b93a","impliedFormat":1},{"version":"9476f1e20728507caec3741b384a27660afbef4281b260d1cbab075917257fea","impliedFormat":1},{"version":"89da9aeab1f9e59e61889fb1a5fdb629e354a914519956dfa3221e2a43361bb2","impliedFormat":1},{"version":"edc2a35ddff16a7f782ec0469f1dcdd5d8b201edc4c87bba11328b914ba23962","impliedFormat":1},{"version":"4b31302539066a3c659827d9bfc8a8b87ced23f93bb3a2addc69de2b9755a9b3","impliedFormat":1},{"version":"fad12b8152c3e0e5d7b467975048f53b58ff68854bc07fe351de4b441dc39f19","impliedFormat":1},{"version":"5ca313aa465db321d37c36e9cb13c1ac6e5975dbb3eeb484978da578f46f87ac","impliedFormat":1},{"version":"a5e704ce23f12bfe9df4e9d564656ccaa5a9a896fa7c70537eadec4c74d2a3dc","impliedFormat":1},{"version":"e2deedea2704951d60800f9dd25e09aa9815ea747e26363af2b543f367ff1d4c","impliedFormat":1},{"version":"3ee349cda390e8f285b3d861fb5a78e9f69be0d7303607334e08a75ce925928f","impliedFormat":1},{"version":"1efcaa13b1dd8738ba7261f7be898b2d80516e3b9aa091a790b2818179f2cf78","impliedFormat":1},{"version":"111a4c948e8a448d677bfc92166f8a596de03f66045bc1bec50a2f36edb710d2","impliedFormat":1},{"version":"9d7437397cb58f2410f4d64d86a686a6281c5811b17d41b077d6ec0c45d0312e","impliedFormat":1},{"version":"b8a7a30c7d484652d2fe907159a9ee679146ab97ed6fb39b2f1c2204e72954e0","impliedFormat":1},{"version":"7ce16c51a4621ea5b3dbf35b20f21c7c7c41180b36e951cd93bc062e6b6c6c8e","impliedFormat":1},{"version":"bbffb20bab36db95b858d13591b9c09e29f76c4b7521dc9366f89eb2aeead68d","impliedFormat":1},{"version":"61b25ce464888c337df2af9c45ca93dcae014fef5a91e6ecce96ce4e309a3203","impliedFormat":1},{"version":"1ac6ead96cc738705b3cc0ba691ae2c3198a93d6a5eec209337c476646a2bce3","impliedFormat":1},{"version":"d5c89d3342b9a5094b31d5f4a283aa0200edc84b855aba6af1b044d02a9cf3b2","impliedFormat":1},{"version":"1ab489c5b06fece60ec3c23b22b6bf6834775bb6836e8c089f7c17cef357cac1","impliedFormat":1},{"version":"43dfefb6399dd7de2b8d0ce2ed34aad24957c5eb3375d042b319b6337f1f7126","impliedFormat":1},{"version":"41cf6213c047c4d02d08cdf479fdf1b16bff2734c2f8abbb8bb71e7b542c8a47","impliedFormat":1},{"version":"cb007806a535d04e11aefff0ce8cd5c8454cad1a5ed774b5fc94e5fc575a8b29","impliedFormat":1},{"version":"aa6f8f0abe029661655108bc7a0ecd93658bf070ce744b2ffaee87f4c6b51bca","impliedFormat":1},{"version":"5ef75e07b37097e602b73f82e6658b5cbb0683edf35943f811c5b7735ec4a077","impliedFormat":1},{"version":"f01a37c9882686c5bbb9953c42daf06fa882ea6777e4ec6a2426d924f96a1bea","impliedFormat":1},{"version":"7f831d8e56a758f52c20bc1885e5688f5f90ee2eca5614f8cb7c7fc64163eec8","impliedFormat":1},{"version":"756620a7876cc6c978ea41d539077e87531a6fb694714d83f7e678fcda0cf0a1","impliedFormat":1},{"version":"9410002058dc5a3bdaad93d06eb4818b979db68a76f9c55505918134c12bb922","impliedFormat":1},{"version":"dea8ff7cd4eb547a7bf444cfa22e0f9d4bb906205c0ee115f798351335bc641e","impliedFormat":1},{"version":"21af404e03064690ac6d0f91a8c573c87a431ed7b716f840c24e08ea571b7148","impliedFormat":1},{"version":"9da3dd67f93abd40ac95b7f23a3a38b4b0e498a28ef13763fa99d77a0e2397af","impliedFormat":1},{"version":"3784f188208c30c6d523d257e03c605b97bc386d3f08cabe976f0e74cd6a5ee5","impliedFormat":1},{"version":"8d9eeb27013f2106f7d3395a85cd022c709a13353f626ab4224f6f56bbddfdf7","impliedFormat":1},{"version":"921a87943b3bbe03c5f7cf7d209cc21d01f06bf0d9838eee608dfab39ae7d7f4","impliedFormat":1},{"version":"948df6a1457a0d697b50f87ecf41014a0d9e4be54c9980ccb7c6073a74969454","impliedFormat":1},{"version":"ce3382d8fdb762031e03fe6f2078d8fbb9124890665e337ad7cd1fa335b0eb4c","impliedFormat":1},{"version":"286f8d373bf0d8af313e49fc41f9f162397172d99d14561ec4b793fa06070e69","impliedFormat":1},{"version":"a214d45ba547c3894dda19f4808b266453a6df9fa26e15353b04a5754d5ab100","impliedFormat":1},{"version":"ae8d2207d209aeed4c8cab7e68d1b7d6051561d1fd17843edc31d6ee62402941","impliedFormat":1},{"version":"ae68b2ed8787f6eb357cd90dc7132767161f0e6fd995a5753a9a2aa0bc8bf9ca","impliedFormat":1},{"version":"1cb6b6e4e5e9e55ae33def006da6ac297ff6665371671e4335ab5f831dd3e2cd","impliedFormat":1},{"version":"dbd75ef6268810f309c12d247d1161808746b459bb72b96123e7274d89ea9063","impliedFormat":1},{"version":"175e129f494c207dfc1125d8863981ef0c3fb105960d6ec2ea170509663662da","impliedFormat":1},{"version":"5c65d0454be93eecee2bec78e652111766d22062889ab910cbd1cd6e8c44f725","impliedFormat":1},{"version":"320d97e9caa54f75a064db6b1175a64a6beb0a3b91d1665328458a951824590c","impliedFormat":1},{"version":"b5f70f31ef176a91e4a9f46074b763adc321cd0fdb772c16ca57b17266c32d19","impliedFormat":1},{"version":"a56b494944a68d62702eb94b8a82d6ae99383a99aebf2f569683d2350ed925b1","impliedFormat":1},{"version":"e4f33c01cf5b5a8312d6caaad22a5a511883dffceafbb2ee85a7cf105b259fda","impliedFormat":1},{"version":"ccf86f5685c2e4570c4d89779f17443feec2215b6dea92df06c1e55c226e27ec","impliedFormat":1},{"version":"58d9a00ee68ce8cee6c98c2d18efcdf5507d6bc638c56ff2cc3b6aaf40bdff82","impliedFormat":1},{"version":"193337c11f45de2f0fc9d8ec2d494965da4ae92382ba1a1d90cc0b04e5eeebde","impliedFormat":1},{"version":"4a119c3d93b46bead2e3108336d83ec0debd9f6453f55a14d7066bf430bb9dca","impliedFormat":1},{"version":"e13aa4087564314f31fc53eeea774137f2303eed725b975dc1f90bee91606c76","impliedFormat":1},{"version":"659e10ee366f27d5694b981cef7f9bcbb41f1f5c783d4afa9033cad5d880849a","impliedFormat":1},{"version":"88fe3740babbaa61402a49bd24ce9efcbe40385b0d7cceb96ac951a02d981610","impliedFormat":1},{"version":"2b44bc7e31faab2c26444975b362ece435d49066be89644885341b430e61bb7e","impliedFormat":1},{"version":"06763bb36ab0683801c1fa355731b7e65d84b012f976c2580e23ad60bccbd961","impliedFormat":1},{"version":"1c6b31147ed295280d65c40c08d281cb5933cef1ede9fb0419add06c26e5b49c","impliedFormat":1},{"version":"bd90f3a677579a8e767f0c4be7dfdf7155b650fb1293fff897ccada7a74d77ff","impliedFormat":1},{"version":"58072c98ec36c84158d6e03c3f0ceab9d97d8c75ffdb582b51ed7a76f3b700a4","impliedFormat":1},{"version":"a94ec9e601ec9a6ebc820e3e7f00efc29f7882545bf768ecbbf67fdfc2418070","impliedFormat":1},{"version":"c9ce5e3d6b2c3e44af01635ab1aa3587f704c9037cb41ccb5f19848e0c6b4509","impliedFormat":1},{"version":"5194a7fd715131a3b92668d4992a1ac18c493a81a9a2bb064bcd38affc48f22d","impliedFormat":1},{"version":"d7e8575516f0486a71a4cdadf9729a4e8d5bbf8bb93b6bc2935e725467ee01b7","impliedFormat":1},{"version":"09af2274350fb6c5c38fb540500e270fc957635ccdfdd5c88f4c795ec15b25fe","impliedFormat":1},{"version":"84f64abf3d632450222346a77fa22cb7e590803c12206ff360bad7f8c30e9ae9","impliedFormat":1},{"version":"47008c9a4f168c2490bebc92653f4227accb55fe4b75f06cd0d568bd6370c435","impliedFormat":1},{"version":"b5203823f084dcfaae1f506dfe9bd84bf8ea008a2a834fdd5c5d7d0144418e0b","impliedFormat":1},{"version":"76c2ad2b6e3ec3d09819d8e919ea3e055c9bd73a90c3c6994ba807fd0e12ab15","impliedFormat":1},{"version":"03eb569fd62a9035cac5ac9fd5d960d73de56a6704b7988c13ce6593bec015d1","impliedFormat":1},{"version":"26981490788b9feb8c7924b5e2d18e48248c491b4f4f83802ace47a76205d1b7","impliedFormat":1},{"version":"2ce435b7150596e688b03430fd8247893013ec27c565cd601bba05ea2b97e99d","impliedFormat":1},{"version":"4ea6ab7f5028bedbbc908ab3085dc33077124372734713e507d3d391744a411b","impliedFormat":1},{"version":"23b21a37535dc79ce47d09ce99a98dfd4bf761c2a8ebde5801a6b7dd8d425959","impliedFormat":1},{"version":"45e827b07119b2f563015795ac6d5f94b66af094fd7f7de09cb3482914443f6b","impliedFormat":1},{"version":"01fcd190798c31c1d66e14655988c94fc03849aa397d4881e08fd87e0ef4e112","impliedFormat":1},{"version":"0d7dcf40ed5a67b344df8f9353c5aa8a502e2bbdad53977bc391b36b358a0a1c","impliedFormat":1},{"version":"093ad5bb0746fdb36f1373459f6a8240bc4473829723300254936fc3fdaee111","impliedFormat":1},{"version":"943271effac0b08e46810c06c872c03b370bd6ded9eef91856c905ce01801c2c","impliedFormat":1},{"version":"8966bbefd08c674088a7718b0d56e6383b0f9b896747facbae622156a8474491","impliedFormat":1},{"version":"cc965b2247d9fba606e29f0a8cd7af41dcde0c65f67a6eae428e12a0dc2cf037","impliedFormat":1},{"version":"a82b2b7427deb3f87ce504644f4750b330b508d3e8d6d472eb2470e1dfc64659","impliedFormat":1},{"version":"fe26094cfa1415423b23244080c30e6f52bf470492b4f0a8a2b529f2ba0c6e44","impliedFormat":1},{"version":"3ce1188fd214883b087e7feb7bd95dd4a8ce9c1e148951edd454c17a23d54b41","impliedFormat":1},{"version":"61ba31e7f58437f34b02937ab8f23a4ce973f7aca128cb5a8874e83c9321dc38","impliedFormat":1},{"version":"584aa68ea4da61ba9b25ab4fb9e29802c1d17614bbbef79451aa860c350e9f19","impliedFormat":1},{"version":"8626ba61c97e15b2d2edbafee2fab14256df1188296ef7ea3d432266f6c86a7a","impliedFormat":1},{"version":"74532476a2d3d4eb8ac23bac785a9f88ca6ce227179e55537d01476b6d4435ea","impliedFormat":1},{"version":"bf33e792a3bc927a6b0d84f428814c35a0a9ca3c0cc8a91246f0b60230da3b6c","impliedFormat":1},{"version":"94e469b446dba074125f990994a3e5625d189adc90888e543f2251e28ac1b9c6","impliedFormat":1},{"version":"a86cfa882becef18d23f0f8e069eab57af8c9f6a2f710e6432d34c624a18cbbd","impliedFormat":1},{"version":"b787a604c98e1c9c90227ce91e670c120b6f3beb1a86a4c2fbd7fe967931952d","impliedFormat":1},{"version":"9b300f2254ee3244061ce2fc46c0f6d264151269c987d3ebad83baf6187e1807","impliedFormat":1},{"version":"522868da5e667d4b8e004be2cf17145d59af102f4751e12668a820e20f37024b","impliedFormat":1},{"version":"ee8e27680372864e5a9990d40d23e65b1de52b2b5ad0b27a9a0212640a222c22","impliedFormat":1},{"version":"3804a3a26e2fd68f99d686840715abc5034aeb8bcbf970e36ad7af8ab69b0461","impliedFormat":1},{"version":"67b395b282b2544f7d71f4a7c560a7225eac113e7f3bcd8e88e5408b8927a63e","impliedFormat":1},{"version":"fe301153d19ddb9e39549f3a5b71c5a94fec01fc8f1bd6b053c4ef42207bef2a","impliedFormat":1},{"version":"4b09036cb89566deddca4d31aead948cf5bdb872508263220582f3be85157551","impliedFormat":1},{"version":"c61d09ae1f70d3eed306dc991c060d57866127365e03de4625497de58a996ffc","impliedFormat":1},{"version":"0c5b0423e641cd4548ada1f135bbaa331e3eeec06df08407272c6aabd6195d04","impliedFormat":1},{"version":"6fd6c4c9eef86c84dd1f09cbd8c10d8feb3ed871724ba8d96a7bd138825a0c1a","impliedFormat":1},{"version":"a420fa988570675d65a6c0570b71bebf0c793f658b4ae20efc4f8e21a1259b54","impliedFormat":1},{"version":"f9b739a41acc36c4d215df65fb7150b0b4a80e479bce3ed801977db2708c454c","impliedFormat":1},{"version":"39e31b902b6b627350a41b05f9627faf6bb1919ad1d17f0871889e5e6d80663c","impliedFormat":1},{"version":"ca7c66d8c6827a8daad0677fe8e3e835b08019676586648f64852375c146dd90","impliedFormat":1},{"version":"38a9544099ad3e8521d75f6d5ea15b6bf8c8ebc9420afecde28f65e88133cf65","impliedFormat":1},{"version":"03b9959bee04c98401c8915227bbaa3181ddc98a548fb4167cd1f7f504b4a1ea","impliedFormat":1},{"version":"eb3b3a66826139a3b957f0ae19e23f91b53a4c02b0279c6c6d2424e931087241","impliedFormat":1},{"version":"d7ebeb1848cd09a262a09c011c9fa2fc167d0dd6ec57e3101a25460558b2c0e3","impliedFormat":1},{"version":"4bbaeff9c9a01a2114381295a3f906297bf1abfdfbc86f70f9150831d2aec300","impliedFormat":1},{"version":"05e9608dfef139336fb2574266412a6352d605857de2f94b2ce454d53e813cd6","impliedFormat":1},{"version":"0707364ff0112f9ede2917537ed3977736c964437daf13ece3beec7fbb47627a","impliedFormat":1},{"version":"bb1c6786ef387ac7a2964ea61adfb76bf9f967bbd802b0494944d7eec31fea2e","impliedFormat":1},{"version":"14fe75a885114ff0f1feb854724aa2b9dac1b54266907ba803c33709b7f36a7b","impliedFormat":1},{"version":"794670b87bce2db9ffe22b76cb53d2f322757a37a436024280b210e1411d9e68","impliedFormat":1},{"version":"e66d0203d2ee5cbd28fff5369f279ee616b073a06715c97941572149f7a0bc02","impliedFormat":1},{"version":"f644d56076dad584e6c2340bf948c4ac483724e0d783c7b5debfe0011e18d1bf","impliedFormat":1},{"version":"f9ec7b8b285db6b4c51aa183044c85a6e21ea2b28d5c4337c1977e9fe6a88844","impliedFormat":1},{"version":"1aabfda861786903dee14dfb992889eecb37723fc5f8a56308b6750ffb564e8f","impliedFormat":1},{"version":"9d0f5034775fb0a6f081f3690925602d01ba16292989bfcac52f6135cf79f56f","impliedFormat":1},{"version":"7dca4f01bf3cab3f9f6631457201afbdc251671ce6c532c6d7eb11735181a674","impliedFormat":1},{"version":"36c88c9c2fe30849d21032e91002b6cbb87355cb7e50be6d3b39fc86db0f904d","signature":"79183637d42b8b5dd8caec62ee344d37e6a4e5b705dcc7ad74254ba3846fedcb"},{"version":"d38d418bec4e0d7f99a58d7fbc7d03e798a7b155467fabd03f1edc624154065c","signature":"27e604b4f0311c7f35322192957a34d4aae3fe3d7e0fde26fd0c80439a885e30"},{"version":"ab62c653345c51b688d565f0c1a2a4b1daee284eb91e13596d985f4a2d54f2fc","signature":"7264b394a3f82c90fad94d5416a02c2977de650e0de674ac33ce2a9a965712b1"},{"version":"be2b07e4a01e231022cc9192c4a9f21aa27918d63427460a889568712bbf42cf","signature":"75a56ad698e586a55872acbef1e59a9d1d1441bdf4569917376da0a1215ac0e0"},{"version":"ebb3763653ff7c77f2f8af2d8c2a4518102fc6d5e8d25a65aba70f34402e5c95","signature":"7cd5aea41ce1218ec28989daafbcef598f2f55acc6c37ab93e8ff8159449fe6c"},{"version":"ee761ce87023f1bbe71bea7280c01ee7a3d9ba610e52411a487ef5447f8f8508","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},"44129f444d1271c3591ffbe8d00b97d0ed6ce57e44aa72b4f7b50ca3a57940f1",{"version":"153c69e8a53e6b8d26b9877a305bbdd057e802b7f7487845c7e77b4c08a7783e","signature":"9d099cabf3a74b20b60dc75c38ef24ec36b687d0b5de99796b251dc64bcaae03"},{"version":"cfbebe98eb85d1e212a3a980891bd72a4ccce54bd5bea428f9ffdfc8939413d5","signature":"fbcb1e6049ef1faa3bdc976ead20886385e4dc221f1b6b0f8a9e1bd38cce4540"},{"version":"be21a3a0d7b0a0aaa02f6abfb4fca201e2d2fb56eabfe0f0e96a20f5096bf41d","signature":"d863e9d8a399447538fbe90435175987b3cc0a7c71b7fdf96bc98f336e894cd5"},{"version":"82614cbd87595671b49c9e5ea097c9bbb7506833eb649200299386dfc8e1d448","signature":"03bf6739031f96c518701aa508d9e716f1a748deea7b4cf0f472bcd87287f7ad"},{"version":"2c6a455920851f93898f7c192879307b033603a30deafee53b1c54974c9209fe","signature":"d937e7892f1fdb4fec27519e1e89e309708b76dec9846c5c8b1f7260ba7503d4"},{"version":"9dbe391b1b216791bf36bbd86894b40b22bc1377d6a7c1cd756bcd821410a4db","signature":"84d326119eb7bff7a22f435536da80ed04386ef66546befe8f2002c653f67f7e"},"e3cc9de719742ffd4517e188e0cdff0a5c46a1b3660ea7079300a8d5fb03292d",{"version":"33536d36b49cd19779c17f65222a130f9bfacd7588abbdaeac2f91665fa1158a","signature":"77a78017c78d24e63cd52097943a6bf3adbdf8e3c7c0ae73b27bef24ff3502fb"},{"version":"90b699d9de7e67f350d09c4420339530cdebcf0f78334aaab1bf9a68621072be","signature":"e1d6255875bf2d4d583b9307bdb35a1fe78d4af1ac3751634ebe474011b493d8"},{"version":"59e40b0d87def5a6350fbd751a3122a0a565971c9c74d4d7f283ffeac7387a75","signature":"c9d08c7242a3d0c02f0dfb2176607b6ad5041f49e7ed371c16e887f1689a492c"},"54441e8ad19131220d87ca88099d677e48dc18770dff5d9b7fddc1dc72f14a1b","4c14e22a3d4fac4c23483ca2d592e015817fe74561ac3d9467c9c11e7412b97b",{"version":"905a522a1d3e528460aac1f0bffb1ab2a4892ca23549933485c70d0168f54005","signature":"8d822834192d4ab04cd5c5a52acf1d2ec642f03ba201f864f81454bfc9a9a744"},"1c38cbe17d7492d5de7116fe06796ccc0aa5ce7f337710f6e524725d0e41be32","3b64d60141e6c34d79063b6ec9363dfcbbe3f3b54f205948bc318797ce614df4","cc50081d391d5617d7cb370f47b60eba5fdb1907a00aa4e6d9e285c0ddc7d453","6a144deba343269f13146151cd455180156d110ee83677e8d22b99e5a716a1db","17a7011759ec3f3aa494d3d06e10540964488a8b08d9d77896b9f1b69ee8ba44","34c7de5972176e3178dcaa285f6c6adf7d995f90d41cbd0df25ccccb871affa5",{"version":"ba0b3e899dd5785d91812f43bd2f847a65c239a2d707846f8d5a3a304b2dfd27","signature":"272277ffd57b18c611a5f526e6f12150e35c496dea429b61bc79c88354c37b69"},{"version":"8bb9d6a58b210c6d24e6532bef3e38154c60e4f70094ed5aa1fe41680ed16b90","signature":"c05f32605a928b6515b00146043f14e52d5963daac3b772c0149d437e2d0f3f1"},"7d0f1a25dde6d789734aea94627ce656c54a261cfc169edadd5dee5ad6c99133",{"version":"313954a20e39b8ab8cecda420079627fd225dc82fa175d2806ab35edf1b79872","affectsGlobalScope":true,"impliedFormat":1},{"version":"bdc443f3d1ae0b6379409843b31dac8352445caf67f0616fbb74aadf641a9071","impliedFormat":1},{"version":"037404fae21d4c54ce6011309cbb52aad45a42b3b1a23a23b8d0fe95f0dcb6c3","impliedFormat":1},{"version":"829fccd40987f4bce6e62ab20db60cfe7c37aaa6d22922ef8a1657e6d3c50f83","impliedFormat":1},{"version":"ff22e079a92da7b96b8d5c41d9f560d998165bd3083340720efa03821f0bfc3e","signature":"46576084b34c0ed0135091cb137f5aae7366d24d194aa81f4bc07f9a4a42c420"},{"version":"d14d02b1eee1626a69b40b0bc3c502c37465e5cf930464f5d5320db8398e712d","signature":"4d814880af5e738c40c421ff163684a23e91ff6b0ffd4d89d71b5e38a00eb201"},{"version":"1a57d9896bab29d825f6488f6f3a9803fb2a2be643334486b9f56591bcf103d7","signature":"80e45658a2bc2b5839f7f463ea6de36e5de9ccdb0fb65e77e950f1b3e9c976a5"},{"version":"0c8feaf8a1d7eb478f72ebe019bd7580c762bfc41e2a153d7ce6829d6ba1da31","signature":"a97299959bba9012a09e0a7919e196d0a682a764aaa05d0efe769812339076cb"},{"version":"8a50c37866d1b8e5626fa877fcfc26439f7e91082f1553185811bcacf91b2a29","signature":"f0e4c6a772b20e40a944228a86617667ec6870be309393720089eba230c0db37"},{"version":"109bc43a49a952065d807041bacac92b97466035d2558671e7d1ae25ff458452","signature":"2c240ec51764c261bd89ffe4dfa2ef795dc0fe5376fcaec563e05f27917f18c4"},{"version":"24714f9d8229fa76d21ac47df2f424d6ecec00623310c4b31cd0ed1a44b1bf69","signature":"04d0dabf7a4f486be0f9aa90b24599b5b2f3eceb072c73f101d5af931cbb4781"},"142cb54c6f041848fd3672c54c704330d3cc454b1e84b8656c2126d825dc980e","d85407f36ebcbb7ceb472d7b376aba76f8e6302d7e6418c3d1b83c3d96b78a5c","4d3e7a7eed51f16770828419035e45250c06108952d2120a161a03b85a51d0a3","5045e59afa59d87c87c86663dd6267c9419cb69f391621b5714def4904759496","bc32a0efaf2b02fbaffd85a1a5174291dd01df88aa12b033992aebeaf981081f","cd122e82f44e650046cb63e2897c894f9de7b0eb7b5d7725de0a0e6e18d48bf4","41d3bfc92d6cf984ded95c093185cd7f6ee9a86bc4de0a964934ca08d23253d6","6f9bb72f4b280d26f57f742fbea7431d8af4a2f50797ae2ac26b9a1681a4204b",{"version":"f74695562084664c81800b5c1a58531fcf3351dfda9e389590f31995d8cd8da5","signature":"b844a4bf9d1657fce07e9b1f45c570b7b0aba86d4af8160b19a68f632c2ac543"},"c6752ebcbb5615b98ae0e6986c81cd12d93cb91c90b19065cdb0abc964d1f4b8",{"version":"6d97c89fc010ef577608b3d34e155a8224552e86a4d5343eb2d6af5642d709b1","signature":"5b5f49710815c034f6aa1517e6027ae2dbdcfbdb9587af8d4f7f6699f9be947d"},{"version":"725765b5181ca4cdae0e7e2bbaa04a4cc50b2c74a395aa5a8531bc7bfc0bf39b","signature":"08140d5d2a8c1c5b7a01862ff9aa077d88a0c6028bcdf772d2efc52e2b567c01"},"f1ee32a69049d3996207db217ae3c2e7c157ac7e931723b0938c46fcb364ab0e","b66b640ec44363778c088d989167c0a8af5cef783b8ba5dbf2376778613e91b6","5f37b67b193b8c211dfa8d9027fdda10b7a929a9c8072afb8f3127fa6cbcfd03",{"version":"377193f199232de5a3d253e991575f37dedfd69013db5c23b69067b65883517c","signature":"edca17e4622795d6e6099b587842be95f9789613a935cd19cfecc79b9cf5c5b5"},{"version":"0d5435ed634ce2551769442483ba83c48433be93510896111c2deb63a93459d7","signature":"2cb02fe9e204bf0d642cd14daaf1877e3a00f788d7c8cb42bae7ef66a47cf7e8"},"a4a5f7927d5a635ddf75e6fa02008175fb2adfa6888a436b176b96d9785f36bd",{"version":"e6c447440aac5ad4aa793bf3031660133176ca5f692116e86d395fa8a09f3f5b","signature":"35362d86461702ecdf53736b4a5d08f7f162fe6a0f83d55005919e8ae88145ba"},"6c2c2bfbea94315d4e56cf1a669ef1afcd215ab4adb786e6dccfd0d81cd6051b",{"version":"78a01a75a5ed7753f7001569242c100363924070941fe1c736d8d09d161b1b66","signature":"55bcb22571e280250f08adfea0f7c855dd3df7e0f7fc240afab6f83b2376f78c"},{"version":"e6a6ea753954d331a1c5925982465b0a1cea330a6677fbf6eb0499575501e4bb","signature":"69a0e875bb6a8b6570fa64a1b641cd2560b56b20a8fad6540ed1168f2608ada8"},{"version":"3b6032415227f1ecc0e50a646290a1de1c462508da4ac120b0937a0343fa515a","signature":"1c29461802e3a642a4cc0dc90810d796b854b8fe5e21c67fda3d9e03c35ce2fb"},"7a37d4dc59dbfaf6cfc387fd25eb61233f401470cf51b983578f62c140d5c31b","64e54223dcfb7ec159d3b98c3fd774b6462e91d911e6f542093810c4dc72533b",{"version":"d27467b896e16993ce7dee41388240a8d64a3942fbbd5307d8af23d3cf191579","signature":"cbac549bb8f1dfc9c72505ca0f3af5950453989e98e41b2dde2a4fec006dd8cb"},"0b6cbb23f399586a7d99d6c287863275c2e5c9778629bd01bc46888ddc4f3ac3",{"version":"e7efa16dd42cc965eaad83ee1fbd1d9d5cb48a406c91b1848c958b349de828ef","signature":"71245e94cfcf3980989845f1f5605202c1316ee6cca2ae735df7dbd1c5561b0c"},"9ea53fd27831a51f7fbec04b38609706674a0f097a7241086394af5eb7ea2096","8a94fa15b906b7b301c67503697b6c018efe316dcdbf7c8151ec711cce1928a9","173dbee95a8c04d4add43c84d91f5330779ecaed81b65688f933d2b51b848ab0","ed9b7721711413b0d071647c7e912b98c1b36b058fa26f0814a25f9428beedbc",{"version":"04dff361d12ad17ca48d8c53d3198dc74f8c8bc839125e4377685e07057381f8","signature":"9cec585d950f9a805493e38bb5cf72611d9a4acda0dd5e531a279d5a86b55567"},"b0b489bb511b8fe48226795e17010d510b5cb7d9062d9cb4f1c18a4bbcfb0f38",{"version":"e91851d62541be1847c8bae9dd090cb8b932465b841b58158adcf5592c5fb0bb","signature":"0b0143c86bd78c2abd324ea42bc3e762fca46214412c907d140b5ef03fa4f294"},"62b86b3d765f4847344edc6c5a12fd8bca27741f6dd0e78a0b2c80e37edd2b67",{"version":"ce52b0ad6f9be7e0f38dec9b7f9ad849482e56f5cf891ade963f9349f4f34651","signature":"1efcd0ec112fae3f8c3a8a30681428543b6d394b915f56166bf9bb397a5adf0a"},{"version":"e46402a5f9dd0a8b922688523427db9e1fdbd40c77e2ca1ffc28bbe081df1a2d","signature":"ae22ff105533ff34fa8a5b079146e4df62b9ea7cedfc78aedd8772950836624c"},"bc325f879cf3ae65ebc6ef187879bf70801d88953c859df173fe27351d0f321a","8b7de47b068fb231642b5bfab3f4b7639807ec5c061be442baca9f1fe58135ab","770c15f36a9af0751316af38e6233b0584da81eb7185eadc5f854b5a450ec36a","40cbc372c6a8689066dccef627fe123a8e7c0f69ec9ea165669de4cbac3e74bc",{"version":"f89f2e18bd3dd79e00d4271b8d71eabc93cda9c62624226bdca753404e910f0c","signature":"dde3c8e5e0b238e7d636fce99ea40d33b0ea6e5deb371a45fc5453909ba4b619"},{"version":"2bed741eb480ba7200084d9318f3523c0526d840f092982ee88d143800aa473b","signature":"c13c4cccc83cb0513c09e812b2d764297775abce269a800b032bc02aae466fec"},{"version":"7bcb26336a2e1986c3a23ce982c2e2ca90380485c759870eb5ff2596fac85ba7","signature":"8e460df3b92f69f86ffcfa6c4a31731df0e88e045da669b4c9444b776afd8abe"},{"version":"e86a74e80ed91ada234c9382dfefde4c6a2a822211acc5195bb06854275dd3db","signature":"65ea25d4050a784fa730a717c3148ea55c8839c060b0d5d2ab7cea444e6ac0d9"},"35c0ca9bf3143daacb1adc3c30b9587c3f4d6f3e2a51fb69497629afe6f5aa06",{"version":"23db9ce29a49112ef31f65e16f19784c3072d36584b6200ff40c5b61fdeea432","signature":"561db4455aa7110280183364fb14074a8f55e908b76b922d57cc79f90f4e3c36"},"5be258954615d0f5836fc20f821d2ffd887a8e44ad712de2e6aecd091d8a4f2f","401b955e8fdaf49e5ffbe4195d1cc6590084648eeff350030b6c3b4eed02235d",{"version":"c1424847f8905ee22d15ce094f27ac27a0b33801fec847dbaf9b1239a5c2abd9","impliedFormat":1},{"version":"222ca30f5d8caedf7c691abb6ec681b4fe9d6a6008418f0c5f27ca64ee30e536","impliedFormat":1},{"version":"21317aac25f94069dbcaa54492c014574c7e4d680b3b99423510b51c4e36035f","impliedFormat":1},{"version":"a43e9687b77e09d98cf9922bfe0910bb0ed7e5b910148c796e742764ce7dc773","impliedFormat":1},{"version":"faa03a3b555488b5ce533ce6b0cf46c75a7e1cd8f2af14211f5721ef6ea20c82","impliedFormat":1},{"version":"48972568ae250a945740539909838fed7752c19210dfa7cf6f00dc7a7c43b2c3","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"bb220eaac1677e2ad82ac4e7fd3e609a0c7b6f2d6d9c673a35068c97f9fcd5cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c60b14c297cc569c648ddaea70bc1540903b7f4da416edd46687e88a543515a1","impliedFormat":1},{"version":"f734b58ea162765ff4d4a36f671ee06da898921e985a2064510f4925ec1ed062","affectsGlobalScope":true,"impliedFormat":1},{"version":"37f96daaddc2dd96712b2e86f3901f477ac01a5c2539b1bc07fd609d62039ee1","impliedFormat":1},{"version":"9c5c84c449a3d74e417343410ba9f1bd8bfeb32abd16945a1b3d0592ded31bc8","impliedFormat":1},{"version":"c0bd5112f5e51ab7dfa8660cdd22af3b4385a682f33eefde2a1be35b60d57eb1","impliedFormat":1},{"version":"be5bb7b563c09119bd9f32b3490ab988852ffe10d4016087c094a80ddf6a0e28","impliedFormat":99},{"version":"fd616209421ab545269c9090e824f1563703349ffabe4355696a268495d10f7d","impliedFormat":1},{"version":"2bfa259336f56f58853502396c15e4bf6d874b6d0f8100e169cb0022cf1add17","impliedFormat":1},{"version":"4335f7b123c6cde871898b57ea9c92f681f7b8d974c2b2f5973e97ffd23cf2d6","impliedFormat":1},{"version":"0baa09b7506455c5ba59a9b0f7c35ec1255055b1e78d8d563ffb77f6550182b9","impliedFormat":1},{"version":"6e22046f39d943ade80060444c71d19ca86d46fb459926f694231d20ab2bb0d7","impliedFormat":1},{"version":"5746eec05ed31248906ebb6758ba94b7b9cffffc3d42acffbca78d43692a803b","impliedFormat":1},{"version":"4e62ec1e27c6dd2050cf24b195f22fbe714d5161e49a1916dd29ce592466775b","impliedFormat":1},{"version":"73a944adbebbbe7fbb95633f6dc806d09985f2a12b269261eaf2a39fc37113af","impliedFormat":1},{"version":"62dbdb815ac1a13da9e456b1005d3b9dd5c902702e345b4ed58531e8eeb67368","impliedFormat":1},{"version":"dcade74eb7d6e2d5efc5ffe3332dcca34cbc77deff39f5793e08c3257b0d1d5e","impliedFormat":1},{"version":"b684f529765d7e9c54e855806446b6342deed6fb26b2a45e1732ae795635e3f8","impliedFormat":1},{"version":"4f396ea24b6f3ab6ecef4f0ed0706fd0a9a172ae6305fe3075c3a5918fc8058a","impliedFormat":1},{"version":"9510b8d401c048793959810320907fdc1e48cd5ee9fa89ff817e6ab38f9ec0c7","impliedFormat":1},{"version":"095dcdce7d7ba06be1d3c038d45fe46028df73db09e5d8fa1c8083bdad7f69e9","impliedFormat":1},{"version":"9ff776be4b3620fb03f470d8ef8e058a6745f085e284f4a0b0e18507df8f987c","impliedFormat":1},{"version":"aec8b4f59af523795d78e81546f332d3a4b4354145ae8d62f6ca7e7c5172539e","impliedFormat":1},{"version":"1801a58e8cbd538d216fbea6af3808bd2b25fa01cf8d52dba29b6b8ac93cb70c","impliedFormat":1},{"version":"7f6f1344fb04089214d619835649dfd98846d61afda92172eb40d55ce20bf756","impliedFormat":1},{"version":"b44a6e4b68f36c47e90e5a167691f21d666691bdb34b7ac74d595494858b9be5","impliedFormat":1},{"version":"64843c2f493a1ff3ef8cf8db3cff661598f13b6cb794675fc0b2af5fdb2f3116","impliedFormat":1},{"version":"9a3c99fc44e0965fe4957109e703a0d7850773fb807a33f43ddc096e9bc157a5","impliedFormat":1},{"version":"b85727d1c0b5029836afea40951b76339e21ff22ae9029ab7506312c18a65ae1","impliedFormat":1},{"version":"a9aa522e35cf3ae8277d8fd85db7d37a15ad3e2d6568d9dac84bace8fdfd2f84","impliedFormat":1},{"version":"435bee332ca9754388a97e2dbae5e29977fe9ad617360de02865336c4153c564","impliedFormat":1},{"version":"50a620c81335293fe8ece235ee4a98ac2b57ccafa1fd5fcfa6dd643c78fcf338","impliedFormat":1},{"version":"3fddc045333ddcbcb44409fef45fa29bae3619c1b9476f73398e43e6f8b6023a","impliedFormat":1},{"version":"8887d5fd93809dea41ca8b4eae62be35d1707b1cf7c93806dc02c247e3b2e7bf","impliedFormat":1},{"version":"f69fc4b5a10f950f7de1c5503ca8c7857ec69752db96359682baf83829abeefc","impliedFormat":1},{"version":"c0b8d27014875956cee1fe067d6e2fbbd8b1681431b295ecd3b290463c4956c4","impliedFormat":1},{"version":"bebbcd939b6f10a97ae74fb3c7d87c4f3eb8204900e14d47b62db93e3788fb99","impliedFormat":1},{"version":"8c1a0843a9d238f62ca6238473b50842fde3b2ab8cb8ecb1c27e41045b4faae4","impliedFormat":1},{"version":"4895377d2cb8cb53570f70df5e4b8218af13ab72d02cdd72164e795fff88597e","impliedFormat":1},{"version":"d94b48b06f530d76f97140a7fab39398a26d06a4debb25c8cc3866b8544b826a","impliedFormat":1},{"version":"13b8d0a9b0493191f15d11a5452e7c523f811583a983852c1c8539ab2cfdae7c","impliedFormat":1},{"version":"b8eb98f6f5006ef83036e24c96481dd1f49cbca80601655e08e04710695dc661","impliedFormat":1},{"version":"04411a20d6ff041fbf98ce6c9f999a427fb37802ccba1c68e19d91280a9a8810","impliedFormat":1},{"version":"2fb09c116635d3805b46fc7e1013b0cb46e77766d7bb3dfe7f9b40b95b9a90e0","impliedFormat":1},{"version":"e1e5995390cd83fc10f9fba8b9b1abef55f0f4b3c9f0b68f3288fda025ae5a20","impliedFormat":1},{"version":"33a2af54111b3888415e1d81a7a803d37fada1ed2f419c427413742de3948ff5","impliedFormat":1},{"version":"8a9e15e98d417fd2de2b45b5d9f28562ce4fec827a88ab81765b00db4be764db","impliedFormat":1},{"version":"0d364dcd873ebebc7d9c47c14808e9e179948537e903e76178237483581bbf6c","impliedFormat":1},{"version":"c9009d3036b2536daaab837bcfef8d3a918245c6120a79c49823ce7c912f4c73","impliedFormat":1},{"version":"261e43f8c2714fb0ef81fa7e4ec284babd8eff817bcb91f34061f257fd1ef565","impliedFormat":1},{"version":"8c4224b82437321e1ba75fd34a0c1671e3ddcd8952b5c7bb84a1dead962ff953","impliedFormat":1},{"version":"948ca45b6c5c7288a17fbb7af4b6d3bd12f16d23c31f291490cd50184e12ac82","impliedFormat":1},{"version":"f77739678e73f3386001d749d54ab1fdee7f8cbbe82eeecbe7c625994e7a9798","impliedFormat":1},{"version":"2d8f3f4a4aacc1321cb976d56c57f0ec2ad018219a8fda818d3ffa1f897a522c","impliedFormat":1},{"version":"fed7372413e875dc94b50a2fa3336d8f8bff3d25cac010aa103c597e7a909e1b","impliedFormat":1},{"version":"cd069716f16b91812f3f4666edc5622007c8e8b758c99a8abd11579a74371b17","impliedFormat":1},{"version":"e4a85e3ebc8da3fc945d3bfdd479aae53c8146cc0d3928a4a80f685916fc37c2","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"eb9271b3c585ea9dc7b19b906a921bf93f30f22330408ffec6df6a22057f3296","impliedFormat":1},{"version":"81c4a0e6de3d5674ec3a721e04b3eb3244180bda86a22c4185ecac0e3f051cd8","impliedFormat":1},{"version":"a94d1236db44ab968308129483dbc95bf235bc4a3843004a3b36213e16602348","impliedFormat":1},{"version":"1ecc02aed71e4233105d1274ad42fc919c48d7e0e1f99d0a84d988bee57c126f","impliedFormat":1},{"version":"5fa7ac1819491c0fd5ba687775a9e68d5dfee30cd693c27df0a3d794a8c5b45e","impliedFormat":1},{"version":"da668f6c5ddd25dfd97e466d1594d63b3dbf7027cccf5390a4e9057232a975cd","impliedFormat":1},{"version":"53042c7d88a2044baa05a5cc09a37157bc37d0766725f12564b4336acecf9003","impliedFormat":1},{"version":"5d0f993092fa63ffe9459a6c0ad01a1519718d3d6d530e71a775b99559f37839","impliedFormat":1},{"version":"b2a76d61ec218e26357e48bcf8d7110a03500da9dc77ce561bbdc9af0acd8136","impliedFormat":1},{"version":"13590f9d236c81e57acc2ca71ea97195837c93b56bfa42443bf402bc010852cc","impliedFormat":1},{"version":"94cb247b817a0b7e3ef8e692403c43c82c5d81e988715aeb395657c513b081fe","impliedFormat":1},{"version":"4e8cec3e1789d0fe24376f6251e5cbe40fc5af278c7505d19789963570d9adee","impliedFormat":1},{"version":"7484b1e25cc822d12150f434159299ab2c8673adf5bd2434b54eb761ede22f76","impliedFormat":1},{"version":"9682bab70fa3b7027a9d30fb8ae1ee4e71ecb207b4643b913ba22e0eaf8f9b35","impliedFormat":1},{"version":"7148549c6be689e63af3e46925f64d50c969871242cfe6a339e313048399a540","impliedFormat":1},{"version":"172129f27f1a2820578392de5e81d6314f455e8cf32b1106458e0c47e3f5906f","impliedFormat":1},{"version":"b713dea10b669b9d43a425d38525fc9aa6976eff98906a9491f055b48ee4d617","impliedFormat":1},{"version":"fb0ca8459e1a3c03e7f9b3f56b66df68e191748d6726c059732e79398abb9351","impliedFormat":1},{"version":"f83a4510748339b4157417db922474b9f1f43c0dc8dda5021b5c74923ed9a811","impliedFormat":1},{"version":"3d04566611a1a38f2d2c2fc8e2574c0e1d9d7afd692b4fcd8dc7a8f69ec9cd65","impliedFormat":1},{"version":"0052687c81e533e79a3135232798d3027c5e5afff69cd4b7ccc22be202bbbf4f","impliedFormat":1},{"version":"ba4c1674365362e3a5db7dd5dcca91878e8509609bf9638d27ee318ca7986b0e","impliedFormat":1},{"version":"a49ee6249fff5005c7b7db2b481fc0d75592da0c097af6c3580b67ce85713b8f","impliedFormat":1},{"version":"e48395886907efc36779f7d7398ba0e30b6359d95d7727445c0f1e3d45e736c0","impliedFormat":1},{"version":"fd4a83bdc421c19734cd066e1411dae15348c25484db04a0a2f7029d1a256963","impliedFormat":1},{"version":"92b35e91d9f0e1a7fd4f9d7673576adb174ca7729bad8a5ac1e05ebe8a74447b","impliedFormat":1},{"version":"40683566071340b03c74d0a4ffa84d49fedb181a691ce04c97e11b231a7deee4","impliedFormat":1},{"version":"f63e411a3f75b16462e9995b845d2ba9239f0146b7462cbac8de9d4cc20c0935","impliedFormat":1},{"version":"e885933b92f26fa3204403999eddc61651cd3109faf8bffa4f6b6e558b0ab2fa","impliedFormat":1},{"version":"5ab9d4e2d38a642300f066dc77ca8e249fc7c9fdfdb8fad9c7a382e1c7fa79f9","impliedFormat":1},{"version":"7f8e7dac21c201ca16b339e02a83bfedd78f61dfdbb68e4e8f490afe2196ccf7","impliedFormat":1},{"version":"01ce8da57666b631cb0a931c747c4211d0412d868465619a329399a18aea490e","impliedFormat":1},{"version":"5a4ede8d09c7d03508ef2286e473ed972c932b4a5c9b978d680a837ef6225964","signature":"f7b250cc49a81dab9a263a74c7d493f36a28ece7a9e6c2defb7363ad2586452d"},{"version":"8d624dec3b30000b75f5eb11985ab191f78a2318c8b35a2ba5e43cc5e9acfbb7","signature":"94fe576f001429aea694c842a490cfcd40fe6e3ffcb8effba47bc838e0143f1e"},{"version":"6f11cd242380d09b9b89558b28829dee6d913cb0714d511db116e42d089e9fc7","signature":"df0f9a8f5a93d6989608ced9b8345738d9e8a27cc1131e8d4d51935552d1ab12"},"5da77f489378ab3bc778884a2dad3c09cfe2b0786b88caf9f84cfb7ff574fd9e","65bd44c11a99c483b5b2502982af06c578db872e619c7f77afcf4c4ef6c375c4",{"version":"3d7c88c9d4cb080fd66f081e6bb0f1073b538b7b76da2c1b1566261019ccc236","signature":"b4037d250720165b68cf244807c74a15db0af7c8d671fe7dcbedc08796540aa1"},{"version":"036b11ab04ca796ed9ce035b0d10ee6510e9817f7dc7bf38dec487102b2c3005","signature":"2e406796338006efe1d9a6e721e9354265b846d5e170791db5ff0cba82845ce7"},{"version":"05410d9d2e76f2120144464d1d4de920b9fd06502168ac436f64cd060dc1292d","signature":"8492c9e599f592a3c365e2d52306b560112b772dab40f50f6c35b7e76ff36c31"},"4b98e561869e0a879d13c735ad12d5d52e37119a02b2e1ed8728336d0fee52fe",{"version":"942857d8ca18dc57dcd0f7e17ead77bce2f360ce927ca42b148afb007e559574","signature":"0f6cb8743a2c208e860bb88de02bcee9293ee2c738fcda1f5deb1f5f8c149655"},"eee1c2cf2a9af8bffa8d9be773588c6ad6ce366b68be97a9fd851a285e930a8f","fa0630b857a90ccd7f0e7a0a7efa0b23ac131fc47b9ed04f7952a7f0aa144d60","4488fa6f1125077ddbe89962c9f2acfa0bc806953d5497977e7126f55213220b",{"version":"da4b0fbc44653d1fe394e7d7e9c7cc7be8c4d0575ea0a80ee060860e1a20f7fd","signature":"7cb54a1ba883ef85dd80ff74a9259fc9deea5b606e517e81e3a0bb14feebc5c8"},"460d1095078a1f5831aa6939f85e6e94268932d33504e64654ed85652dfd7443","290b76e11362f9a799568e644448904460b9b19ba63de131817ecc255f81fa39",{"version":"28d776ee99a919dd55a769adf05547e87a9db1cc8324bf2da347c0829eac17a7","signature":"5d6f4f3c090190bb132e050c071827ef3e722bd42cb2650da0a7aa9ce946a595"},"2f72f46f2e4bd7caa7f854810cdf6e51ba50fad1bd19395e12dd7c945a8fe492","eb5c9d371b2d868bea27440634d5b1f43869dfa0d4d1b16d6e50330f28af5b17","8a0328b0b90a7af078b1b7a12183eb381dc033231f97299190881cdde65200ef",{"version":"0040aaa104c11a92298b9a65f180f69cf79a7a48fdd5ec4d9214825df7e25f15","signature":"7acb7d14650ffc81168cb5d138df59657236cb3a224e44ae2e5ec7348b660605"},"3e323f5903f7d67722a71c61ccb8763e39f4a4cdf2398a86fd77dc28ef79e7b4","f2966a99a01b45e71dd831951a812b3992a40ee105cf93cb38e4aa7df3aec915","6f00555bda6ad5197acf468d12ec32c82cd5ada8187a41966167a28ef722ebe3","4596ee0e8fe9cde84f22f8f3c43db9ff79441e621677cccf30a5bc203040fe19",{"version":"2b2c7711974c5bd3924bba0b5dfd44a9158ad1f66fecebabf59a577d27ca6cb2","signature":"cc6686955e93df9bd45a3dafc2a57235e81d9a3ebfc46b86f483a9cc08d74afb"},"fcfe80125b231ca4173bf6b31512f87533c761a6e3c41afa025b570d25997756","8a906f16b5ed0301de1310790498811bf49448ae808316c52ec48b26cdc066f2",{"version":"521a7ffa1e7c52156c14f0ecb1a199f96590d2a69dfd6af20737ca0da2ac5d87","signature":"70fac61f2c3a95d662f95b066757343b4ecca2bfd51061b87b676813d9b50eec"},{"version":"b876d3889ead2817f4dce55f0a9c4f405ba8008843f7f028e01b5d559a9ac5bd","signature":"1b816bf0da323778714709feb0364e494ad916ba0411be6f9bdaa1e7fd3360e5"},"f8878adb5163894f240a2918429351e2afff0d784b8cab0ae2e6ccb17f075850",{"version":"ff208aada3fe191801b93185659397e85a8286c8b90181774f533e9ed0e6f40e","signature":"ff42d7baf72830a45b4af4ece7b7c4ddc6d04fe64b3589624e73a8c79a679ef0"},{"version":"b8f85848a960963a17a399fb6d3caec20cb0e1537abcf91112b757fe230bd8ff","signature":"59b9d192b1dc8933d23dcf9075d31eccb85551925f40d214951a32e7230eccf3"},{"version":"4f543e8a836fb5c08970e68d3093214aac12c508f78c165bc7928a8816997f62","signature":"412d7f3071ef0113008762b8db5df6d5324c6ac9b98bf2886750e4de213d89e3"},{"version":"702083fe627a274ffec8a5892b4f78310b04f75e2f3763ed7308f9e77e423a12","signature":"191b54edf92fa626e02c5b3b2369a1ec956290c8489886b3e3eb55e2d737624d"},{"version":"78ea477ba77439009f017117f10ed5d9d4d96376cd177d4768c17da9d863d3dd","signature":"1a3996b659323d8c76f12bafdabdaab81e16653ac3e877b48842355fe66cf185"},{"version":"f58831fcbd7896a05dca82ff9dfbefa4453bc4fca7f74dafd40b6f10803a2159","signature":"8548e332b33c10c62de0d297af88b7f39b9b158af9714c9d9ad9473800dc55d5"},{"version":"daeba63e993adcee5dde89a045ad19197c5d0b765bb3daf8988b3e1aced12c6d","signature":"e5ffb4c3e1bd458320914ad7b6e5c2a4ac5ada229c72e9970f3b24de013340b7"},{"version":"ca5cd20264e3e83740bc7d5430d3d2602d2646384fcafe318ca16f7bf6503018","signature":"8efd1c4cc3c72549ba587307af7493be26ade8b0dde2ef8c76e3384bc98e8ecf"},{"version":"3ed1fc91b399869d1160df531cdce54a958d31d6e2bbfbcd043d9e9e6364a1f5","signature":"d99f05b5326df4d923d3f5a7fce4a6116c5cbe0b1277d627188e471cf144b9ee"},{"version":"7206280dc00977f052b705cb2218d54972d20196e8edadac2601c83bf710e3f4","signature":"529b06ca7b3729db04c6ca52029f97d3099a83d727d8365a412c7c168705c9d9"},{"version":"b27e022466f2acf8c1432851319b57cb0e47bf1fd7d4bf325fdad2f3818df5e5","signature":"c7b220cccc08015f34e4bfcef6bd2cfce53d8da422b283bf19380ce445d36af7"},{"version":"0ddb74d87b9f09ef84e322857c86a9a055b6e8819cd60ecb44b0d784c61e2d4d","signature":"c5c3194e406f03293e2f366a74a9145f9cc5a29f39a55365052d66a1886862ed"},{"version":"e7c8ee9aa2768c001a0b7906409d3e4950497ade16e9cdb399c84fedf579a091","signature":"5c451405057254a7a964b81fd16a85ed8087d11d76cdbb07c5e82316a3475512"},{"version":"64586d1ac491e9dda58932935b28652d400baec18d7d522003342599d52fe891","signature":"7a1f4480072b634cb641c469c6d05049b4763b38930aa51ae879b0a0d3749f35"},"662845ede2b314e8e27cd89dd476e4d8a324b220498b0680e25e2037a726c0c0",{"version":"40f89179a6030fd8d41d267224f546401ec001b9c3ac03ed097d1ec32eab0504","signature":"727601a8000832b14d7896a0eb74b52631c4a2115de5f03522cba28a7ea50b48"},{"version":"78b48c12b88e8701fa895aa56bf80fda55693f3d1db106b79eb28b5a0aac8cee","signature":"6509dfe9c876717156d39fcd60595adf056db29e589a0c2912a4bd7a75fe04c9"},{"version":"b000e4ab24a01d1c988c3a12801bf752e4db8dba58949b0d45e7ff8be9e9d462","signature":"e2f4230a4d2f9b6db022fd10ba54674fe9e6c86f349666725907c8a76db10d62"},{"version":"89b7c5ef6fbc3f35d0dc80af998ca6fbeb9e2c4fbbb65b1f502a8f820bd07db0","signature":"62ccd24f52fd37b972a2a99110a3cc6498d393b04a900c9e5fdcac8cb20d9275"},{"version":"d7ce3608ba92f54dc6ae9902d6bbb6693cf557e0929bd0c674711302447fc0b7","signature":"8c0f1f147e48c48462cfdda79231aa741a3a83d3975266ed812450e42bccb05a"},{"version":"aa35905c9d3f0e5f9c13d14c6bf760c025eb8a0866337a4250a6b3a39a71e736","signature":"9069d6a6d19656e2b2d53d23ed06c5a41a40b99130d3546eba2a0d7f1d9d7797"},{"version":"db3a3e5313df73dc1f286b545c669900e162fb08f51ae54f9a9c3516d7b741ba","signature":"94fd4e69bcd410932cc9496754b5ea8e2a36e3434de31b259017d5fc88042150"},{"version":"201e7029dbd85996169d9f2f61a723332d9cf1e39a5869c674c398aa9ba2dc48","signature":"41173fc54076fca74cdeac9720c94684ef44836b323c81a51a0e1e4face53bb6"},{"version":"60aef043741cdb322fcfd537a476a0ad55119c7367ea5fd7ae8b48e971568d35","signature":"d7045ad1ead68b8847043fa89a1d392ae8cca905c578d6fde1e963f2a5bfde4d"},{"version":"1308f137f214c6baee9fc44219bb404b7393b908031df29130e679281a42caeb","signature":"e0360d4bb4efb95926f7703f1bb20536b116da6f913aa6039bb6607d4b241060"},{"version":"1f9bf300c8f23188f53a550341e1c1157e4fa35dff93be33b8f03901e2f6526a","signature":"5831a17c4725aa0112880a09511fa5b05819f5589e9a22e8fcf432b86265c634"},{"version":"65ab41f878708cc50c804833b25576bbcb0d1664799529ef337543ffad6bf0a1","signature":"1e6308a1663bfc36ae75d7646233c7666bb7842f6f7dc2e07e73d39f50f87363"},{"version":"970984813fde686ef03d94723039de362ee80b88871a175a1a5d930558d728e0","signature":"aeb7ec4d8e0236f930796c7c620dd6bf70122e547ab90e2497b418a2a811fa61"},{"version":"e28ebd290b837cdba6e197a4ef7e497f5f1e8e78806a2d51fa8c2ee3e145e27f","signature":"cec8d1fadc388384b34cc39abb65ea27062f5e3a8a027116648c479cb183097d"},{"version":"3254e3cd5395a72e699f4877dea9758faecaaa29b99faf15bfc43d6e8582d33b","signature":"96608e96952a5b476fa57d1770fb60b81418480528cdbabef150dd8d34f46cef"},{"version":"88adced23aabdb904c06c2e97001815964ec3d2a847ab418f9008714f228a267","signature":"032c8e3e2dacde9cd74215a0ef67e75fcaec494f7fc2c70c98d0224e90d977f9"},"a7ea54316df1a8dc768ce8994bc5bcd1c7b5d108777f5d7712a06686b20af859","f0a4d9b6293a3d7952d4813145478f9fa31ac7f2cafba0ecac9167e774fdbe58","0cbffd7a297d0035253f997e9f0ce8999f976113bf49f19d3289ec106d23ff27",{"version":"463e40e77b7c43a93127da6d7b7061fab2d037345bde288b72997997aca16ddf","signature":"1a5e311aa2f68eae4e5ae7da01b445453b8270c9f4612eeb3c89131530951c9b"},{"version":"bc153c6df5346c4e1d1095c230f2d6b8c304c7ec4845c6d48dd076d85141e60b","signature":"37ea63980bf4eb4e792b99422efd253942d0d890ad7cbaafec947fe0a45c28ba"},{"version":"b5e9e3ea12ff92a94a9f7128bff5982cc0e822201259c6ed49ca85d47f380a88","signature":"09c9cb8d6595b69e5875a04c08543f94b97ca651a0c3d243bb22c0e58a824f37"},{"version":"d3dfa4e15a22388846048c4e87377edbf70be49a78bd072c95e6f91e9cac6b88","signature":"147ce883b722a9786473e4c2dff8f638f95fb5bd8782ccd1126e94e3d04679d8"},"fceb6a9894fa62b29153a205df6b9e887a784ecdeae7aea7a8c2dd579f5ad228",{"version":"5b88752a0af069144e8f8b6fcedbae4fa8b35ceb78f43d0dfb20282b767672bd","signature":"37fe039fe8cbcd51f7b46277771588f2986099c8f2256ccda9426e93c353b7d2"},"26f08e548b663a1ba9b7ce5733b91ebb0748cc717f4e202db439ea23e16b7fe1","9d7311868c0de8a5af302a6f6b4192777c63adea6af1c491afb6a4b886b76f5a",{"version":"97dfee6669c4a47c6c8c8c282de11b6311da9ec06906646f64fd186017081b27","signature":"16f0a692455beb773fe92ac68d1989f1450ac33e19eb9aa7569b76f2eae57a41"},{"version":"4f139f058bd8082b633c7e48f1d64471ac7dc7525d1f6d95fbe2219ea5169f51","signature":"62e261a8ac4a0dc11eca516f076a3de8f73fa8c538e754b2536caa0ab20347b2"},{"version":"f87718b7063fc51e6c60b63c63a994887f7f0bdec803b401fdd96d95715db8dd","signature":"fa84a63a3acb4cd827391fe9b5f7c0cee1cd8a62964d62ae77272d4e43f2da77"},"0b16f3b7622002a138f9c6b3741fed1e1d08c0f29f3a4dafc250472286ac2601","39094a67542b6a56cb4a951b9661843a238eb4d696073fcee31e30b73e042ca8",{"version":"ee3dc209d13be3e36864e0dff71a6bd063e07cb84994e0886dfc59ee8c67903e","signature":"aa9220635f0e2a43990f4234f003317aa4b67b0de849eceb427484b43fcf172c"},{"version":"1968011a715558815fd5d57b61c0a5d36c141d95d097f13f4275b0c6b27c19f5","signature":"25c9845669b48e78da43c6355d0bc1d73b7d840ce26efeeac4ea926f82326815"},{"version":"2f8f71500d75816f296af32f9655e01de956555223a4641b62e329cf0137d577","signature":"6bd26f99815b0104e3e21208c3da7e773fcd92ff452089134615daa9fa2d830b"},{"version":"f0a404d5e4284d0d149df4537b5328fc5b0f08d4a0279fdbf147b1ec39be4879","signature":"a5b78d97e6914b3572aa227c6d25a858e3498b2d7256cc9537d8623d6641806c"},"78650cc528e0881255c9676e5af29e831ee9db805c30127a854b3a4f256535d6",{"version":"69370551ee3a89dfa0d010201d3326cc21b97243828836cca20513762871b1c1","signature":"b0fa3457d99f1f94d11d7b72a620555ebba95673184c6a3f5cb9d76fdbf0f31f"},{"version":"7f5297c8403a8019593e691f1452a78ce38f4ffecd2a21eb7656f796c8b44a2f","signature":"03f84b882e72250590a0b389890fdbcb0b6d78f700983dbf2b7fe7c570dc7b1b"},"5f03121e36e8d26366bb085726551dc4b2977e1d38fbf74e9b838e0bbf233660","666b853ccfdd3559646fa5d59c2f221861a3a8da1d2cc479c6b12f10275129b6","9cfe83bac227a98b00f009a3cfbc4957a62ad6da17828df20a4a0a56c105ed94","2ff8d67d7c203c6479128110d4bc51de7bbbc81e6dfa864efa23cca893ce7de3",{"version":"44d62f934779e56c59ffd055777c65c443468ec566f2ecf3134e18f2a8948c66","signature":"48bfb6645aeff548f08d4dbb9c7c657bf73571adbf954b350febc59a25ef7513"},{"version":"0aa8200d4a89cd441e9db30ed216f39ebecac3366eee4e851fba38c00bc30204","signature":"bb1753fb4209c12e359de78122039578e12a250bb207e170b84b30acf449e566"},{"version":"0b0f7b596ba5cc8f5e6010459c258a584990dc33dcd1ca20c0b14c1ea95b9bda","signature":"ac1b73bbd8b240e5db436eaea67436e9c8ac5a1add6e3ae53807a12956b8a6a4"},{"version":"4b274728b5d2b682d9ed98f0e7c227bc65ce2b58c6fe3e5437dc09ee5676e995","affectsGlobalScope":true,"impliedFormat":99},{"version":"71ba95ac6bc7ce9ebe57b2591113bafed188b339942bef7c791a4e7fdcab6b37","signature":"909d2aa629a8bfa7d943059bfb324aac286ae756ad9aeaa0ea8162dd68bbf373"},{"version":"7bd6c259b0fe43d6bbd3379c0d24b20e810c3a6e2f55647d6fc09a51fecae72f","signature":"ad007b1f823147a8134af7dda42cd9127ce6c7a6460304a00e3d2e7065a2afcc"},{"version":"10a01893f79011ae39afe9bdea5f1b5a5ed8c35ae17aa1746ed597564f465f5a","signature":"af27b936fb60b3a273c7f48b3704dcff319b0d995a9c1ddd87b188299afea0fd"},{"version":"0e1042f4a4f59e012585a914b999f104faab100a09c3623a1d468fb5d16ee705","signature":"451b8ab7782b1a9a99824c4e8accf35cf67b66e5d6044376080c3cb6de659142"},{"version":"90f88527c72717b3a0bbd557f0c456501e3ef08c5493a89279f33f02676c19f7","signature":"66a8b2e5aaa92133e12aa23c60dfc1639641dab0cd0817aeedbef97ec52e3d10"},{"version":"d8d8bfa3988e06c4260173910b46c01d48baf0877e60f52cf232fed88cfa5495","signature":"77ec64d760619861becbbc37cd4c5641cddad09e5f4bcdab1005f8f87b676870"},{"version":"6f31fd1cf0da7bf6e82e6d94b24a97e40360432685cc08dbc9de78ec0169293c","signature":"be55b7c92cb7d9290d8521f3be40aee1a901929203d797fb542562900a0d7157"},{"version":"331721d6ae64f939e5517ac409d97962fc004982e100071060613b6f104cf6ab","signature":"a80dd2b2cdee608aaf917673e748ea7238e0698e49397bb67b71ef069216bcbc"},"7e5848c76558cae17d50a7bb4c9b1c6068f519c33eadf3c1f52d2dc17c3b198d",{"version":"6917b88eab80aeeeef7c68523e0d88b021eb2d14ada780b104414d148e6bab3f","signature":"5086c1372c2b32ea677f31ea5b046c831e122e4b269fe01791266436f7148f5e"},"e800a73082cc38ca6a30ceeb9d36a57763fba1149849a8db19f7f2bb5abac5c7","b78e0fea16ca7b6c5f322c31bec1d700fa7ff84cf02c06e024e64ec4b1845a9b",{"version":"92f72a3a1abc71ac6b049fad0bd2f36a4d4fda7269bea71667eb9c539484c32e","signature":"4c7ecc45fceb9d33afa4cdffc5f5ab8a8010e03e475bf187f85486b77cf421ee"},"fb905ce0943f2f01f018da454929aedc4e5bb9fd5197269e9df0b50d561c3fac",{"version":"6ebef9e5c6fc3684f8a6d4deee675f956441779e249eefcf44a6e80ae6979793","signature":"6a46429326e3641b5bcda9b0e4046f2a355a5dba2b11580e019b4a990a967bb9"},{"version":"36b030b26f9b0a5671631a91a2c7fbea700f1682f47fc9ae8ef08e8e5cc09e91","signature":"554fd50c9ef721cd9892a995c28cd1fc354eacfff6e5aa4b47cf4e1b9a8290bf"},{"version":"2d14bf7e5f7ce8997223c92521270c38a5e379b25f227efcff34c1199f0f2071","signature":"bf08667f799a55bc1d952848a7f4c870d14b25a443bd5136db217fa5b735c2d4"},"170992556aaf03238801c7b402784c830b076c99fff96f9909dd62ff295754de",{"version":"5254bfcc28382bbbf9e5dc10201359299d501a72d2b200c3611c189090cb90b2","signature":"483fffb31aa4a59e5706b775f084acf79b7375f8e5640009d5e99611b3c627c1"},"ed885d6adae51ff531bf758f0e6fb1207be93f50f2fcc3736e73a535af11267e",{"version":"d094f12a0bdae4dbf9c2cbd43054b16c357486c205086b8f9c47963f4998b4ff","signature":"a9fb1a00fbbd99ce316a9fc453f47d9e16c7007ae26e8eca336809beff03817a"},{"version":"6bec1c79151b6fab1fa976870befef9efe61ec3c3b02039775dd93df01b69788","signature":"305cc938d26eefabaaee3861e8d53351100f31c174b92ca858ad603923cc7e79"},{"version":"778915fa652152380c99623328fd0bd7b04eb58a1c1046d021671df0eb214582","signature":"1468d06e870d65ecc68cd7d194606324b53a64c75c1be7f51df70dc32594d6aa"},"d5450a70c670b7e4a97e46f5fbecb8cc9d51a3f962770bc9df8f207b291da323",{"version":"4d104b157631c52eee37d61aa91a641ccbd415d9e6a74c812024cffa40cb486f","signature":"d7f4b00a68e29684b82ac5621020878f88a0cdd0a6b311417da6c4187033306e"},{"version":"daf69ce58ecd913582ee1a665575530f1c9746d4b6969231b58b1a1705c36929","signature":"364f8aeb1164ca5773982a3a7b46bb77b04a1a880741ea2c3f366f673ba142f8"},{"version":"88fa4510819f7513e7d2a2b88d177eb7d68e97df133bc03c5d27642ae444c52f","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"d213b64c42a29d4ffebe861ae16d1c1397bcf1de656dac9166bd8f695086d642","signature":"0baa985968ee750a9812ea7565e9b78b5e661aeeb9b0569c8bc7436102293fe6"},{"version":"7060439ef38b6766ce77999e316a148fb20434cbe24e889907b102162ec39dcb","signature":"12cd7692b02e83d3d69db46a01449001b67e5d2d587f03c6655d47b8b9481d8b"},{"version":"bfa51353976f44b372542974db63b0eb2fe8b8c37480f25cd1ec23069b2894e4","signature":"8bab9c3cbd48dfab7f277642ca0459eccfcdbc6cdec6a847f8469848b3ced1f0"},{"version":"8e490dfee3cbc7702b0b548428b636fc15042e53a9e9519ea38a9c75a959f746","signature":"87f0b958fe4093bc0d7458a46aa244a558b165576677c7aa296776ffd5ea7d7a"},{"version":"76d578762269a9ebf1f01944ee37df62c6aaf72be6cf8c595193e43200667597","signature":"b311f12f5c7c252ae46f6880abd1c4637ebab0bb0cb3f840545ac0eb633ef77b"},{"version":"84e7a8df0f618afd532884f5ad1cf1413ca58b41362a3029f8228fdcd730d6dc","signature":"052536fe9d6ec2ade290c3108fb7dbb18575a12edf89c534a72bb9cb0102dde0"},{"version":"08923383f19a68a27c4b027bdc4ad613a94395ce00adf026f2b76f6a6d94634f","signature":"bdead48f2b4d6b689ad6af0cfcb82568f0909dcd8f86a03e30e36efbc346aec9"},{"version":"ca7ff687c6b7110fed983de3f952e0fe183762b70120d0777e51766c8efdf7ec","signature":"e2a6342f7b1ba42560ed1f8149c25c72656f80aee2fd2fffc49c2dfb744cc766"},{"version":"7e2cc287aa06c03af25d7f2aa021b8b04948cd66bd7fbe034f6d4821389e2df1","signature":"3e927d972f488b1062388ae054f0ad66b7cefa42544764600fa3d81820a7a737"},{"version":"e865db01f6b296ce17909e459f19905dacdf02cab98231f5c80ed5d730673759","signature":"fb3f059c08593f1b2fd653c52e67bf842ce1c3e9bb3a88d0126d5abbf93d4adf"},{"version":"23d0186e555aaf09b7ca678d171693160d63f7a0d144da0cf3ff13c409a748eb","signature":"5ed2229b0bdbdfc44f977d6843b0f4fb5035197cad541182262bb57e683d4fa7"},{"version":"dfec310eef1ee4c712f477997f6c324c4bc53cff18abe981ac02f33be7c33e1e","signature":"2fb63c41522fbe8e10f630c96ab098f9a5345766c0de3b5b24030925b7dc1f59"},{"version":"52c75c4eb3da72c33447da2be6d92f47aa8afbbd7599425f0165f1d95a0f8aeb","signature":"7c3168046fc36e009680104dc32095e1e5fec551718bbab122c7ac4cefde86d7"},{"version":"126ff8d107ed1b4d33efc513e252b6e0ea2a8f4ed2e47cfbc80ab84a3dc75a7f","signature":"0b391abfd0edc435989b86048939645a6580a85d8ec956130c09d255dcf27615"},{"version":"d412a10b78dc524a44f448e7dd4da9df18bb08bc60d59e21922bc151020fabc8","signature":"32ff1739eb33b4a5becb70601eb20b69f41120e3ce5acc6daf2d59e6363f4b63"},{"version":"e13549b88fc61ac56bc130bfe61d4b6a6534c1f7bca7dfe56db1f318444fd1b5","signature":"0b4b4c2fb1e897e1dbba196b4190e38e8ce869f2c3c1bf1fd19a9256730059b2"},{"version":"6f03efcc02e984ebc513acfb165515b057ca69553e0d212027000876be7c6293","signature":"5ce699f9f177cd96e6618c0047f2fdf6372c150c736263d0e7fb0e24690c4607"},{"version":"5212a60216433a9b19c335ea88904c1a03e664b744dbc1949e5aa6eeed36b755","signature":"02173651543fd9b9933cb4002bad80cd2c5c048311d3c78fabc009674a6d58fb"},{"version":"676205fb3a1f4e869237a62487484e0c833fe24050937253e291ed07a8d74dd8","signature":"7ed4b3886b568a2ed982c7754923358821639116da5ef04dac995cd7dd694ba5"},{"version":"8eb068cc1ffa4672d151604e9e415621b8f043da14b4dd0b250e470801d018d8","signature":"2928057abe12e608410b19b514d8f0ade6432c76ff5e75c61cdbabc4539c95c9"},{"version":"9c43e951ab1103566abc968d4b2574e58703c0eb1a94aa3f4f0894a76e5df58d","signature":"d9834f514e986bf3ed0fda99122805aeb8917a59b8070b01feb86655e0d3a362"},{"version":"f81dcca07223f7b326d3ba02eebe3f4a3eca2ad2fbbae3ea6c984d34b5ecc0e7","signature":"c2372a7eac31d480a3ebdea485a1fca02a1a587104adfd9ea823997cb91d4b18"},{"version":"94880ae28006e81f86f4400772028f285cc1b9d2c0c790fdeb8f0c890e5e646f","signature":"0d74ccee8feadbbca16ee178075843e2f2956c4a2e9ba215100ab57531bc48db"},{"version":"48261931be8502cfc071efebb0e9437fae055634c0aefbe7be0bb7bed28147c0","signature":"fa2b949bea4bd7510a5d2958a352d99bdd46e619ccef96f9de32494d64c20c26"},{"version":"8d159ed291192d9529345fdde8dad6e5a5ffebc673620fb71d91873e1261f1b0","signature":"1f15289b8cd8d2acd7beced3116476c86e9b70b4c5819d7ec972704ab87e07df"},{"version":"17ad7c01f4fe05e6d39126474badc7c0f8f7041a0829f70685a7fc1eee3a9c49","signature":"663b1f1bdfbad9136acdece371742fbdad7e98f73b2a71d61d009bb60353b883"},{"version":"fe1ecbfd23290ddd77ba4709e8be145eebd096e309c921f3280b53d85ef84b3d","signature":"af813bccd4bca62cce3c2fbce59f3ce7a2095f2d4d317690d594fdfc75b1410c"},{"version":"8442cd7825d593bac573b5e5068bfa1850d16017445aa13a69fe854c7caeceee","signature":"a178d315f8a722a0ba15555635f65c21191805004a10ecbb6b2a9d6dbb858ea5"},{"version":"0091c1ebc3ef776b3e1fc1d158d5dc5d409530a421de8dbf6646d5959da748a2","signature":"1c5fab5d26703950cd1434597d6e3b31db0bcd0d71118c9ec40ba36d4c0e66fc"},{"version":"309786a17d99aa24e7efd6fe97448118531c57ae2c18b0a0a578fbc6bb896349","signature":"c6b1c68a3444e84096d6991f97d242bd59c8b236b32c5480b632677b8e709e54"},{"version":"5f1c6346180d45dddf17d3fb9f5d19eb63d4033553e756aa56a3dc01a3a84421","signature":"87bf05b34600c0963c84c57c0e4943e07e2e5edcf6fa46126157255046035f41"},{"version":"d59dc823902ba2e45f7dda6ebe120a7ad9e610340a5b9d9407dd7c3f822a8730","signature":"b37634453bdae659f58a3d086599cfa800e399ecf7ce94deb78907528b265e43"},{"version":"2a5a53f8d27e05700c7411b8fd7b62af91b41d9ee2f9e1e712eed56246a2cc42","signature":"f6497665a193e7b96c8e98b1985caa978159caa3e15e29cccc0d6dab70506fee"},{"version":"3e31f02578e3fd39e52470a70ff8aac29172a20fab7a9cca45a028f7930e474c","signature":"99feb33707b1b6a8a90486cba553698cc46869dd399efe081b0a059f33f26267"},{"version":"57131df4baa7543eea93ca16987f0ced4d69fbaa168042c43544659767333f85","signature":"def1b763a8d8e1135540fb0098f9d1c9eaa04e07024250bc82696130a383038a"},{"version":"d3810bab8410f0107790d271450f0b795fa2292bf4a447a6e83a6732984b1a4a","signature":"81a6d1ddaae8b9ee7e586913a040d9b2ba59cc30f6bed92aed34b103deaf78dd"},{"version":"0cd4d2c420a5a9d6e9707db2a78c944b84004ae17eae25181753e408ae0520c9","signature":"89d0540388169b1483903f0dbebbe2ef9725e5366bb6caf7833e465dd74dec27"},{"version":"ef7a94287ac16174a8ba37c73cfefde817669a6f94e354edf47ddaee2dd4b5fe","signature":"a41d59a61aca1787254ddcf3184389b0c44567958d013659d155e51a0e51c2c1"},{"version":"b4aaf1431f4329a63ebe39d73be9d2e521b8e7aa6689960622d4da30abb782b2","signature":"fea996cf9454df7e12a49d81cf0d8ca836fa058e898e10c1d2e4fa25c1764fb6"},{"version":"44a7bfe3e44fafb05cd39529a87f1fa72c7e5829c9a0c7827dc646416d0d8161","signature":"2f8254d0733c11b094abd873b81eb1baba667664f7d08dd223be6ecb70c7b52c"},{"version":"8d89c5a179d650f68fcb0f1e3565d0d7d4aed4304d8c714371ea82a0cb046c41","signature":"ae3131335f2027885032c1bf7239dc261915f383c7348c6347d612de88a94c07"},{"version":"5337b8f6f3013f543f0d03135e83e830d850dfbb0f185ee2fdd65bb8b830fe19","signature":"bd7dfad38d7b0bc15db21f0f554246059a9980949bbddaa49fa03c6a6cc78d48"},{"version":"89a8e9f3725c6aa0d1eda15a3adc15c48762b77c366c83844dabeb15b309ee70","signature":"fd496d914c66d23772d0e7396686ac8d4e2f43f1b4d68fdd6d6d1652e321e19f"},{"version":"32c09bbdabef539e745672d42e30e4e967df9eac7a338abd6643b3dcc28b3f83","signature":"7f89891d2b8597f3a1e14fc0521d869e334e63c2a595374c47bc95cdb026547e"},{"version":"6058dcf5cbcc65ead6f2768dbe90dcb9a07563b1c31b38ba3a4b9e6a1eb8448d","signature":"ff0bd7b7808155dc22fbe077e31a21c798f691b34624d7139f601d54b8d91aa0"},{"version":"c1f1c65bc5942a6e608dd381f760529235f3f947c5567406c1aebaed7bf3c25b","signature":"60af298eadc19a20ea72e722c8c7c62388a2d0410f6a9225348c32c7b470c9de"},{"version":"009991d902f66c607d473d1b5a78946d7111aea9af76217f9109ae1eae4c94a2","signature":"3d0868c72a50405bcddb06a94a8384e8bd0f7af9a2eb5e3264b226abe9522b2c"},{"version":"c9901b03aca2654cc15b04235e5c6bd40d2a1c399bb9d8e3e5fea84138f48455","signature":"e4377e2117fad27fd6671835a8d58ecf4fdbbdc3a2688693795dbc57b8e66554"},{"version":"90591ce9e98dc4a7f001765f3497367737ecf20a7bdb3584b3efebc925aef8e8","signature":"3285704bb5f41f76af204375c5411af38fed14ab901354a7735274ea16d0e7d9"},{"version":"e9207a6a321858b7a377a6e0ecf088c000e69a442caaaca9d9cde0f88fb5647d","signature":"c58b0885d9721e72c0f6cd4157969b277b34065995433141e2679764b9fd72aa"},{"version":"a27f57edcb10cbec974a06fb16ce3c651d6af2311c739d13d24620f75945928b","signature":"32f661c381409750bec149f4e7dc351d1346935f250f803f5266aac9c83af593"},{"version":"d0ae8cc3194f9df7add47fdf3d95f3edf7a02c26ca85b66c9cc4cdd5f7e41f1a","signature":"99fe1e0c160faa69fc8bb5178dc1d5b59eb90973be0ddcfa0f55cf2edd758885"},{"version":"f46bc7eb6a1a19b73790df53e5e4f0d91c524d689df88785034acf3a915efa3d","signature":"90b0afaaf312acabd3df950c570a447d42cbf53c9a11caebf8164b0a2f14f2bd"},{"version":"80273e7a7dec7cd4edf66b5cabf27e73afa7e2dd5e5204aa3b562bd6ae1e95a8","signature":"4c5b8b91bd085cd03539aee16ba424512982e3496accb4cdc0c99700a953babc"},{"version":"3c65ccf641996dfe51e9dc4c67ddc2a9c5b98b2a3be748660c40283877e508fe","signature":"33033cf1e04db29a5c30aa8d44d3dc0a796b4e3d13ee518b2f9b791bbd673dbb"},{"version":"fc51e210277d2b85fa603d8bced656699e763deb88605991a9e62b2c0e39ac9e","signature":"f984f733fbd145bbfe88fcbc56d8e9da37689f17d30047fab8eaf90708a44eca"},{"version":"5b23d783c90f1247c8a46240ab6cf73fc838916b2fecbf48eed56f0c5699eb6b","signature":"e36c741e10622b04138b1d7dde61a37d1ea10846e7425aa9eb0d7f708595d607"},{"version":"86506f74fea1622decd920d6e32aaa744b96ed1889d8ae98527abec6cadb7050","signature":"cec82c0f8645cfc39845ac45e70120f31f6e55d977cc0b6d401c8da329a1a220"},{"version":"ea85ccf40cc1e52ea35249b0795d60e918c401e0d70eedaf19754f0877b9a00a","signature":"187a53e224bc30248883eb58550cfea1457fb929c74d4bdac68d124d20727e7c"},{"version":"12ab168fd11e6f77ddc0252a23f9cbb85cf47fbde46e1d494299a65bd2ef23bb","signature":"b1140033965f8dc19bad5eca760ee1d9d0e85e52bf1c2270347a01fe7b367d1a"},{"version":"8e07d4b4e7e066de9b5cda433d7a14d4effcec78fe529eb9c4716ebce330167f","signature":"dd520a88e2870b8dc59746b95222bb9288d7af1f51b20d3eb2bd197404f3c510"},{"version":"6e8547f63c827643135213a31031f6d6fc01c274ea5fc4a8356d3fae85397ace","signature":"1ba27d8dbbc95e92eed31a0a5852eabbdf04a0b408275ff5a7e4edb6b5d2317a"},{"version":"37c7961117708394f64361ade31a41f96cef7f2a6606300821c72438dd4abda3","impliedFormat":1},{"version":"5f38aeb6dea42ad0e3cc7f8feafadad51e0d8a51a743e88cd6f3380caf921779","affectsGlobalScope":true,"impliedFormat":1},{"version":"5dc81b4351526189849a351b59ac36d91e43d95dc56fb5d6e95d62802c0342e5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a271253336f6b441bce353d268892ee5e4774fcf64d5e8eab827f0cd716c7a56","impliedFormat":1},{"version":"39875f62f78dfcd829f2d38f7b06e8a8d5e39bbb9487abe63b81b41fe3b58c04","impliedFormat":1},{"version":"6d587557e4acc4c02e8967f54e5be3497acca6e380709156efbfb35334675fad","impliedFormat":1},{"version":"5c5ea1da5fe909a19d50467d11b5110a44e61c35a4a1249157d513579a4afba1","impliedFormat":1},{"version":"d5fbe09bcb6fa1d4c9a7fabc11527f0487aae73e30a610700faad6320ac64110","impliedFormat":1},{"version":"3708429df62dfa583b34c8bbbb45867c5d9b21c3937243747492be54aa26e322","impliedFormat":1},{"version":"9f32b1a0122c72b34186bb971b2f1b13cc7f0a709f0b179bda819aefccac44a8","impliedFormat":1},{"version":"e318b4f6bd227f7bde5ce5001ba298b9e8c31163ca8f5a375259efda378e9cdf","impliedFormat":1},{"version":"eefb6fa6298429d8746ff9132540445b7d6d5431abe77d668a63dbfbd2fb8a05","impliedFormat":1},{"version":"b7f2e396e91886a9aaeb73709d70abc5796121a3b344e3a524565afa18657f28","signature":"2c0dfc1bcf60503d80f544b3d30fe8461de4eb311a42d15fcf0bf1f3996094fe"},{"version":"768a97763252fcab1c6e56dfbe37daaf02ca0e05c2591bc36faff1cac5727a23","signature":"9916a508cbe85cc25e12407896b56d3b27ab6df238767dd7016983670ddda0f2"},{"version":"c4f045593a15788f68944ee40e2f0a3e9373e9a6777ab2879e54b2df5e4da54a","signature":"0cb225b46ffc12c163d8222915ecac4bec21cd5880604748a6719fc71df56e82"},{"version":"b28db4cd8061e6e4d1b81f929bb1a48ceaba79b399feb3e1257ea0eb8716d830","signature":"f1dfc1c870b38a5cbf8cca77359cafe442431f0173567da667620a909ff3fe7b"},{"version":"5dd321efb2a2f7eb423f67f135cda181777ffc73d396dabba6dc7e6e67f4ee43","signature":"1d549b0373de20221accc3c87700dc406ef4f590814ad9f0fcc97537a5ddd13e"},{"version":"8913258661287763dfd85a0930bf6aee4e326a3102eb6713ddb8109361072431","signature":"98a2edb9e69803d6a761c3c0d5d5508cb07cbf2fa25b0ec36c3314a4bfd8d4d4"},{"version":"f092ae0ebf2b4eadf987de551ec117cbfdd9f27cd7bd809e486f17e4ae32320d","signature":"9200e673c716c4a5ce54bf73d6d71621ed70c99a9c9cefe22193980783b5a1ba"},{"version":"0a5d424eab4fd704e255ee3aa6ce28daf5bbe0e67a5ae530e01a8d021c48de39","signature":"6cc838dcdfd1f90a32e1de9830e3fe977618431de3cbf0191fc16d1337bf8693"},{"version":"2e2564119f13bb987022cd70ec070a7550ae039ba64fa71f9ef1cb87b3084bb5","signature":"162429d63744bda025ee9284934752520eba02a0289dfd0ca0c700d482c0bcc9"},{"version":"3c633047f390e2aee193624cba1941749be4667996f74528fa451c71ff16e9c1","signature":"9f885d92c0bcfdf1f92d1bab2697ee463e6da11f8b3d02ebb4e2b40429c1834c"},{"version":"999ae1894db520662a0582213da889944da88bf4977840a41ee47fd8c4b0da85","signature":"65f8a10959b7dbbde03792908307b900a16a9c8b83fdf4afb94e217d707b84ba"},{"version":"44e1f9728af7717dfffcc289a4b644153dc32f2bd36e489a5d520fbeaaa49c7f","signature":"0829826c7c2e7ca4d92223c99f0f770d95adeb6d2fb9ae26b0a195717d4f73de"},{"version":"6188236eaf6455aae598315050627eecef9b7e1c2aa7468558ab9e0da8ac5d5a","signature":"a5999f128247e9806615efcf85a4c754043c4e7f0aa95a29b8ab70e593954c13"},{"version":"79fd4b7b45425c945f3043645b0ab4d9013e7bd6aa803f42d3504723f7d613db","signature":"72e27fc027c39c64d59ba0c22ed386d5b1c9794e6451ad822fceaffcf558a1fa"},{"version":"19cbe7bb43e5bffaa6f31adc9bba4ae9dfff34ba59c321350cfd2a39f4e9befd","signature":"7c75050830473e89a1f6e7552f312083c9c1091774c0a527486b5286d8c15507"},{"version":"5f0e90778ad421dab76442f56fff941bb4fcca6263e900c0941d8c542eba3850","signature":"06c05d9c8393dce982f37131c2ef0fe98a4e18a86cb053a36c40bfbad50fa400"},{"version":"4777b9cb848b843f8edd8556b1d84a72615b01172dda92a936cf1a24736b0934","signature":"1ece8efedf9821826580c45c8dbb7febb79602aa8ad0ecb7e03cf3dbe55fba9f"},{"version":"e7d738215fc54c51db13c0c01ca98b93c9c35f19d56b424f3bfd35ab2bd295db","signature":"3f1a0c6eb82ba44366db3f8b0fcc4beb6c1a1803d01ef3cbac226ceaff41f315"},{"version":"076b26905d7445216ba0e423d17632dd52300809c54322ce0b8f59a132a55192","signature":"33457b03133ab1165840f702c3f665264cce83b8266383b737c0048aea7134ac"},{"version":"80f8f7010c0306350951b49a0185521b7ca403ea65aedf10f2a3dfdaf7372a2f","signature":"af0e15d01ed070e12b28289deaea05d6cdd111c67a09e010d1641e29644cbc6f"},{"version":"1ad85942d74b2b2e7326d9115fc1df3db2d0b0970c67567fe527edb293be2286","signature":"b1785b04622be984e723a68f658ee23998fd93bdc4afe62884143c0121ff5a52"},{"version":"82a5df9c6a03001c7181636d7754b00324fd3111ac35632d416dc1afd13cad1e","signature":"f3b70638efdd6ca8d790f269be90f80d74d3062ded25dd9b623bbe9aa80a1b73"},"161507f647605610caf30782b92d6bf382cc88c2c01a8133694d43dcc9e9777c",{"version":"6eb06c81a13a1c076890896dc687905a035002b88b862dcde95e599371a9cce7","signature":"7c6caaed029a0389ef1e58971b227fac5d3154a6f4947657fb836392120226f9"},{"version":"bb3953df5aa001c36c3de7b06d45ae1bbaa40e79b750cbe2b4a574368705e270","signature":"d8852b5892e951ba5915301c023142b978e7d5aa92bf3d3b09d8985609c4652c"},"6c2ca7b0168f187f5d7376f41d8982c463a41345ad43dfa6c4d669a5f0ebb2ac",{"version":"f306b824ef8ea0e557913c293d4c439ca514906d0bc70a0136eee209956b49cc","signature":"30fb4b2e47df0db0c1c98acfaac5c90f6436408b2a1b82a9cf42fc33e73b3aaf"},{"version":"f95785be20dac58ef355b09d90bdac95bf1ecb6e797e5aa5f3edb3b92e193243","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"b968858c285a32dad21d043dbc2bbea8329b175f012b2a573c926bbd0784ec44","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"13811ae199a4803f1beb3a1564c48e00dfcc37c03bee213f8a68e804effd5527","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"95bc4250523c207a9ba96df4954935310d8ff3c0b948d91eea7778e256e58446","signature":"64f2241a1796fb051e7f05ba24352eb1d061fa832beec20ecf2872d779e9c0a8"},{"version":"a4f777271697f043fe9f593483b74a21f7b7f040f681679a57d2113045245255","signature":"ca9ee5242455d2585238273bb48648c8a2723a0a05eab1ef8a01ed78000ce217"},"c41c6ac55392e416b351667a6a56254f2fb0512ad6c22c46bca9f1580bd2262d","8e146a454baeb1803ceeb1a5ab2e37652a63006a73cfb0e350353c5be27e21d8","e546e42efca32af51e044e9e9199ebc81a1323f08baee52951f42d8d25dc8666","0c61cb2df2ca366f89cf99abe6d07f9af18aa52f543d304c94c2d13ad71e19fe",{"version":"5c11627b32caa4c8e89471060e4017a63b4df2110f7ab2b3e39146ca297c7f4a","signature":"712f168829bec05b47e1e5f2f4dcd2a18dbc5a8066154aae459a5e1119366752"},"33cd1b7bc4d3628295b5861cb5514a189c1d8321c84f1656849db7164a3a6464","fd93b4a1b029de017c3c25f1c5a2e72ba7059ee1a1bdcd272e68b408065e2538","109a3f5ac6f5b839a83ab088cae5a43fcb4a91863da9e43ff8aafbd0010cd266",{"version":"8c90636f71e9f3af9a4958d693ea12238decfc6d2fff119509aadb2479e5c9af","signature":"7bd7ac5b713663a3854c9364252e67409168c8859e21db4ca1a7ab56bf1acfde"},"7462343b5ce4f5750d8978fa98f039b9240f9c1f9e3f2eff3c8712230eaef860","23e4865f3c664ba9c8b48f7f198b9d2ce297b2800b55fee794620059e90c8ec1","9455c9d6fab14db41c178516f21d2bf2213c36cce17cc275b270684efe8c2056","7322808573ad8187e364c1aee35e01e40edd7de942004755d3feadeb2e36d304","4e55b5e26821e5481c1a75457b2a4f3ed6f31731969f35a1433c78e657af69ac","9efb4fad0e4cdd9e6401a58764b79159658ea5fadc98c6b9f133aeb6e3a3da6e","e83a6c401698fb8c5316b8557c6b72fc9cae1e808dac277594d510c4f0478328","3ee0cdca380ace76c2a502c794430ce961fb220fafeec29f2026206c45fd664c","e2406f231cfb4de3cfcd8f328814923dc776203a6f6a338e4a6f3aae30956dde","60b623134e0b8c974fa5c25a58e794f782710b0a72ea095c51ac057f2270b41e","d12781833f7c75de06c0d5738333baa4c10b723649778f7e350401a772529902","f2c99d7ae5a180b7b65629f5370c747181fc2feef65fadc0bd03f2b661e68a65","6684cb2dd606fd3f8e855915cc9591a1d8d0e640e58cfe1db67381fe498b84e7","12f45ccb42cf48876593cb4c5ddb3add2c256cc9f0a7e7473f7848271e9d0446","1fabf94adc6225163273f86cd259624a11099b0b5b6a47b9d49bc2fe6b932627",{"version":"bbfddea187cb6d95655879b673871351cdf3a93d6f4a8527bd5ce8de6c61f35e","signature":"67dea4481f6cb5e6458cc6fa38a29920376600bc1a8e885297e4878f91ae2ad5"},"93f0fd384b5758e6ecce27fea97792505d268912c7c11109bc10330a59618b9b","905491875bc4e2dda278cfc5447355570d367886281b55f35b7ed58d9db71f74","4c5030bf79e9b9358b8b23a5ee2accf842230be5041ce9ba9d5fcf16971589a4","330f796e7bd838b193426a59828b33f246dc892b62003046f47f5fe8aa809718","ca865d7117ca413b49c3663c7f655a5182d055c0311856ab245d22bd46366fd0","31bbb5ade901dc71fd11ce8ffe52651cf85d61384a493bdbe5f3bd51ec79c04d",{"version":"162fe960f2a835fff7b4fa6512c76f17bc72f56994cfe224fb5a88a43c1b548a","signature":"dff3db08c1519b3c7ac2cc238ce68599aa363268041b3045ffc74da764665f29"},{"version":"bc7df1787f7b86104c0514f93912a261c6d4760b2a35f4d40e600a9c3a6a908b","signature":"be013719990b5dfd0175c2ed8a42086d0d6c6b012d583bd38b8b8923e990b783"},{"version":"ca7a8a5fec0b53fe9a798fdb9bb4affa5be416049bb835f7c763ffa5cab87b36","signature":"5a41f7863793d3d39947c78bdbb5cf522fbf7459faedc73abb7cf86f5c2d4a00"},"6b4b1a4d51c3cff1e103ccd3bff0d641b2b5f52a91dbb07b79c540bd62e709ae","b210820681d8736536f96f303e3f928b7f0a55f52ddf80be197bc81c24a81264","c9a4d7f9989b3b00f9dabcbe95963451d8ff1cff791ec0ce1e435eb93aac57e8","0f35e12e5c49b5bb8df878b0b807da504730121ca5e51d293309ae3f6e67000c","c81b44fc95ad060d44c0a991ca2ad3487c920d4048ad196a6251254032d668b0","f7ea44350f7f1fa53b1108e308c4368088d6668a1c39a5a480c343dea9b052a2","c9edef9e6a88b15e0776c7a147c5768aa7caaa0b6faf1b7f5d16f8998f873295","4e5e0a25dc4beae7ace500642cf88aee24d955b4c2a1d9b0c70c4ae085835c2a","7054f5fcdabfe6402d7fcf45ae6ed4a7725fde960ea8e07615333d6e7a5ff1c0",{"version":"a10cca281cc4828f17c67328bec22684e2df780ea91268f5c7ae12ca362907f1","signature":"fa2a553bfb313f2ca6793911518dbcbbff5154ba64b733b55f3d61fe6a074157"},{"version":"f6112ba6f9ed25f70f2b8258a6c657ae5af48a5eadea25fa5b40d95abb7ea4e6","signature":"4d4341cfcbb6a572893cf2cdff2db9d13c28fc67f11dcc40e15beb9f1f501b24"},{"version":"41ac138cbadd01fa267e8ce9c9fd90166d400a9205e6cad7d6a4a7ac846e8065","signature":"c4a9cb400b3fd6bf7259b508e8a441db422bc3aeb56d6c9de1e84094c407f6e0"},{"version":"2e8d57599075a163c2c0d65eacf95bb1a0a8ae6c361c27afbf70293db2309ae1","signature":"78c2e4cc79cfd0d0a3953de3e2771c4d80672dfcd30dd72889702c5dcf4d2821"},{"version":"ac26b033cef5a4e08c0364af0446645d38741e37420fb4f1891ed68b48dcc1f2","signature":"de49b97aadabce96c62f106776f03988f083ab0883f70f1de26bb39d4e1cd5c5"},{"version":"b2ffb49ee172d83a303efc79fa3b0686fb73cfcada71b577687387c16b8db31e","signature":"cc64aeb93bc0ccc553160f901adb0a4622a1bbdedff5598cb47e79ba030747ea"},{"version":"840566954798eb29a463fd26a83b5e737961084bf17b2a0aa9cb8010cc66682d","signature":"25daf89edb52b345119b3d99d99597712fb7337b8c49fb5fef1d8e3719fb9243"},"d7ff5c5710ae89aee4a557b00eaba71934af2c7b2f08b4e64d74dc575ff50e38","99b71b336675c05cdbc7893881b122c5ff193d1e71f6aef3256f865a8ac8c72c",{"version":"cbf223a0ac6fa5679818a6681aed02ce2affe8b0d23a5ff1cf6f81aa3e98f122","signature":"b730f5af9dbc3e0285f60593c59d30e78eb3610e02593f559bedbd877798e3cd"},"ae9b9143c353689c065f79770029e72c8c2ae15f90816b7546657eef2bd15b00",{"version":"93b406233b5d5f5a1e3d5ab30a6798ba56cbcfdfc24dd8c20a41de29c1dbcfc2","signature":"987ce388e3156c1042eb42fe6eea1ea2579574032c696e099bf59b04ae60d341"},"381d88c52cb2cc97bda80bd34140995e9ad6a5c0928afe6660f1b56ad9d8041e",{"version":"eb748b2d523918797d04f0afeff2a9210fd10fbb9b9ff7ae1c5a9bbe95a2f649","signature":"4ba13260362cacad3c13789ed630789ed5eb596787fc332273a5c830d5778188"},{"version":"6e8101e1f9c562bb6b965ed82727b9617f2b3f8533f64f8dd6d9c20a90b56922","signature":"6b3af569b07cf80448089b66fff7e9355f5dc3e051d1cd6907085a3b42e070b1"},{"version":"dbbd754bef3abe548af29762d280669a4f7769f8de2d0e3442ebf06d18378425","signature":"eded33780752f9b0c9694d57150674166b9d696de523a1831700d3d39cd7fe12"},{"version":"8835912a6561a7b5e2318c72bea7cd37c116e512130808c4020b6953a2c6851e","signature":"11b21cd00b36295dee1e1c50071ba59697eb20ab8c91ab0cf0ed036339740738"},"d047cfa6770c2f1763d519c90dde888e6e5fac1929422ba9a81de190e8c82d6d","d52eeaac2906a8292ba5bb5643d3696265100dea29a0fe530e1b47e8f35a2430","04739e1ac46f17ec490169d58b6c93cf1b1572dbaae0123cb6cc08c484142285","61658d1f872c32a033bb8a68bea1eac7d0579f7272ff824e9836ec0b89d2280b","404002b547d1cf8d1e539d597c1656e7e6501c8029993fb633e4a2c5f532deb8","7948fa52d0aa1ebe28b54da263d354fc4ffc15c93d188ff6597ca7400be14c66","59c58ef1b48a714a6a5e2a89d585a5eb1e588c92ccb03f7c57901c16a0fa04b7","c8bf1966e7e95ce75ad6085c57dce77ba62199e9614b490d1cb6a72ef63dad20","ee73bf578fda4272750a27ac614af6fef181dee1526eebdeb97f029e253441b8","dbc00c615f355e9e5c12a5d099a3a3cef79c9c38254887c92ec984508328a21e","4d764e7d298d315e71a102cc3543f6240e15ef4c07ea3a1fded0cc489cb3415c",{"version":"3cc70deed2352497648bfab1b581ce4540a17043c81bcb5071eab9f01f554bc9","signature":"f9659cc6c5c97590d2b11721c3b4fcaebccfdb13f99ea95564aead2414b4576b"},"8145559fbd3e05e642e051fb226dfac9ea6f861120922199985d06fb9156e6d0","4ffffbb7c64c4fd72966a5f2690ca5ca32ce9f2be302632f3f720aa42d5097ff","0c0cc261652230c939678b3aee60338fe285162c3f440d205479e85b52b2361e","e9a978f60310ee3bce2dbfd6d126cdca83a167218b31583eff375ed8cb2f0ca2","f516cfe2383f6d93cba2cbd4d263b64c0766009a7984d629175159b90ff672f0","d88e15900243af6c0972da43c9d7dd30cdfa2df1f80ea84cf4f0504473564cd4",{"version":"8a3793d929bf2595578879bed61d018a82da5d7841322fff532a382a1a823100","signature":"ab5097fabad44cf47f9a0cd42b5e903bb6a86db85d7262231b3d473492e62f7d"},{"version":"6720269cd253af9bba47fc7c986506a3e91f4769250dd4cd679ee02807f9ab22","signature":"82cca2a1cf740370a9e398481117c1cf726e3d50166669506bb757ab92c6b244"},{"version":"d0d7599af0b3b512ef31ca4006974f62c65900888246b25b821f43296b8a19e0","signature":"5222e8a4d7a3eadaed53608558caa3f7eb9fd36a63051f3bdbc8943ab2882c67"},{"version":"ed6b790abc35541346d639226651e809ff7a9c642fce1ade94593c199b2fa8db","signature":"853801e5e7ad2ea42f45ae6894c18a4e7993c3bf78251501f3b0fca8f8f7afeb"},{"version":"3b033e17f26097829b715cdbb1c3a18d362d149c2954fa32306acf010d8b6b6b","signature":"a5a754460c1abd3eb1a2fec8cbb482e9e38c2c176ba1957a1068b9ed11702bef"},{"version":"087829116e5fd518dbbde4e14485c39d6d5b9199f1019f076bc10aa627571948","signature":"788c0226d86648a10f68f70f23d2d838b6f349418007ddbbbc37a8653370db39"},{"version":"135ae5dbfeb3a0dfca0711afdbeeffcd11c1ad45c12acbd7b2f4f13152f23410","signature":"d4b943f086f50aa8cb619cc609ca1fbc211d4b3ad5bbabe856b90df520ab8c7f"},{"version":"d41c26a397d6d742a0071de195ccca78960dbf499a11f98a3f4b57d41a9e17cb","signature":"63eedf248808a9fa745466f168be9b6ae627f7e6391c070676548383052570b3"},{"version":"4ddaf02cd7bbb1dbddbc195b69dc62dfbabfa1406cf50b2f214b1d514a56a8ae","signature":"63f49f5bee902a0d801b4e5eda0e28cf564100627a30e6666927496d34ad74c7"},{"version":"46f2b1956900f317fbcee22641a3fdb605082ad30b4d3e7aa2310df857d1a5bb","signature":"c094d92df291b114e8ae334a5f36e4eba31eb99577fd116f38c11ed74bb14642"},{"version":"0e06907a32264f5dd2420b83bfdfaf8771cbac2ff61ace55e365bae041fdc340","signature":"2533e77301eda08c5d3a9fe52be5480af0b3db1694c4d425cba08c213f666bc2"},{"version":"cec9a09d5bef239ae321f1c045405dcafe9120b6ded95874424e9b5b21b7ac9b","signature":"35116f4acd88b9a6d87b0338dd0293e3fdc9c983b9f7e52b091b0d239e10edaf"},{"version":"acb0441ad8f9e85365ffa8dda2c3732bf3e4f1b3e882e0072434d914224c7480","signature":"87eccaf03aa93fe2202a5233d6090273fe467c235539d08096eb703f6588602c"},{"version":"218cac23d8d2954eb551dbbfa30df1cace33b538fd160b6632a2d45940a99965","signature":"2a51081648f2853473cacf837c91bf0f41b1d85ef6bd50a706abf21f574b09a0"},"40fcaf9b44db58fd8c9551b84268386e914f17f8ac3fda5d5ddc0af1137e070b","45aaa72761b28c52fb3dea3969c0904c3dc64bde75f238824b95dbe636620b51","9d8da1e726b625847370c1974472b76075d7e02063fe6d9c696195ff8f292259","10a6651c2ee0a26d42f9926c16ef2026d719cce040bd74836050fa36a8bde1fe",{"version":"82ec341f5dba04c458a7a6c28eee78c0117a1ba5671dacc82573c073ab3dec59","signature":"98c6e893ac2815aade4c02ffe3caba48f1e514f1b17b4b194a76ac00ad7f2b96"},{"version":"c3ae3822f0adf72cbceb6d425a29f8900e35a5792184aae974a081a0c75cadff","signature":"fb8f264d00df797c0c6eba15258a5ede44391c6ab0dd14f5d6a2715a1e325b8e"},{"version":"e99927d722e386eae6f992efc4576c97ec0d4f9825cdb1400816f9cc3a7064bc","signature":"46890244ddfdd9db3767af8038e69570becfa6960033a613f9e91be03c4e9664"},{"version":"11ebff180e39196e05388fc0decb1b7e2e1193531ee3049967080c37ab2285de","signature":"477dae6d81deeb6ab3b17e1dbce4fd726e5865106c07377c486a22100cc797d8"},{"version":"e9e6ec5d3d93bd081718e1ebb7b3914792731062e578ef5fb50a6608b2d56798","signature":"f08f8f22d6859340a2c626c7d6517551a38b8975087c675365ee1664ef72f458"},{"version":"a89b4edc11697a395e89a0bf2f1bff8259f66a120af00bc4894f436db7bb3460","signature":"39cde86f5519fb5016509657a8abf69bf9bd232cb9bfa7bb81ef9fd2284a581c"},{"version":"8f2a1c63d31af768e690b51d70fe35f79a0b0bf80fa3fc033bcf97843c4f5563","signature":"2ad4f4c6b1f0e600512eda07ba9b18014debaa6fd832fd8d5ad5d0b13e2a513f"},{"version":"1e5244991ba2a5efbf5cac9f200285c4cf85dbde2d6cd74c0a4fdf3cae835b7b","signature":"fd12172dc5ac9c8ca2838ae8263578dcf04b6dd119bb717b1fda6f1c1ee5190b"},{"version":"008f989d4974f6606e2977243df3f1aa2054987480d5ce57c78d81d6b5dfec47","signature":"c319cacb72464c4d0c335beef00522e227ceaf3d3f817b79b088fab95cfbc070"},{"version":"2f3edfaf838cb0fd2a842013260ff8cc289165464c37f43901e2a4d6a8de8929","signature":"f2c67f24960bea43e4dc7e426c3b8b0fa0e803a381f89555fe5a0a9e76c0f75f"},{"version":"dc7a226f89d33cbf20fbacafc8af91074f45f9b90355235e4f28bcddde7f21e7","signature":"836133fd13995c8fe0efd0ae6965893140d1d1d5c7a05505102cd8fdd6f9e81e"},"be150a52d822e1ff7afad1aa4eeab1c704dd08512e4bd18f7bdc96b54ebf50e2","d19a5aed89bb8c2da3626107d754d3735ca186f2d3b63a69c135ee5e45d0bacc","0dbcc9f0cb70d02de4c91d88d2dc16b854e27a9992104adf80d592c78b8aa608","420b192930042122fd52b14829cdf5f23a62bc0e19ba9df65802e1c94c4252a0",{"version":"c897977655d246fb41fa4b46faa41017f0a1a4c7e2b44e27b3ff0ed32a15c661","signature":"bd7bd7f9d11380a96423fd75f7c631f0eca17db62b558f683a5823ca4717b894"},{"version":"42597a1ea239ad3be1f0550e2c7ef7e3678742402ce0720688b3e040e3a16219","signature":"9e8f2b60a4272000a7d04b74fb4b47e5ef88d51d617ae730cb73a46239496c28"},{"version":"e836fe6c73bf11162fd3b29016b9d97ed41dd2a704a7b2926b22145d6c49196b","signature":"78eef8eb3734e1deff272eaca2d60914f47c529cab81d45a31e33a2e62d87a9d"},{"version":"a8cecd7ee981db2ed2e1b3997342fc38e26e6f7538fe0d4ce0268afdfd673c9c","signature":"d28af5f8cbd2ae7c4befda1cd1c519cac08cc39ec84e90859f4a7f0e84a0a1f4"},"7e14eee5ccbf6a38f8497a7c3b35211651e2aa5fa86d56733251d6782a69a26d","6cebed58035bf1331b5a005f8a0b47bb8576712fb4e61459d31cf0cc8f80ecac",{"version":"d07ec74600fa620763cd3c9c60d3c4a15760ddf0b8705fc5148231ac4656e27e","signature":"029c2f44d3bfa9d293325879d4a45bdb6535b6d950ab88d694879664572b7810"},{"version":"dbd709fc93ca3339fe37120a26f8218bff761bd3c4c03efcc0b203eea2c3e8c0","signature":"ca3ea50d39bed5d7f2aa7a085961a6f3b3a44a71f968225109388b56e607b56d"},{"version":"7a0b94de8013ad4222c12eb4fd5dc621a99a5693cc0c9cdc0bb1ed161f162af4","signature":"6e2ce5d15a446d1a26ab689b251d0e240178b2c22128f7fc916c6695d9d31341"},{"version":"a3e67840c69f869355d5aa467044e3fd25193c0f99b5f88fbd9c3a75a49ad010","signature":"14bdb8046788a58cdc2ae781c73cccb9c209f44d4fdab83a1c21184b29237247"},{"version":"0e614df8e8988f71f85feaf9a4aa6808e6e969d2be88e544fecf14eed7c639ff","signature":"15751aa391f72e3ac39b5ed2c1a9fc354eede6aa4e43d0a8f62dedaecaeeab74"},{"version":"6edda1dd15739a33027117cb0d78f66ff387dd965886bd60b0c0b078ad869faf","signature":"b9bda89ad6b44f4f78cf4932ddf48f161e38b7d2e5c3672e38ea6f003e39053c"},"c29a90ccf0ed8eb6629c96149542c4557d5371337aa6c5eca36c7e69192efb39",{"version":"d26593aa73c782bcd41669d7bf72e2f7812b06249dbc57f631aecbedc93bc6e3","signature":"b0a43f81f8e26d55f91b2b088efa8640b3dfbed04f63466c3327ffce8a396df1"},{"version":"1f7fbe422a0d3d61cb9b1cce829af90cf558781f23baca93984dcd6a739a54c1","signature":"e1c898daa8b92073f457f81b637d14b6221a4bf5caa2417a4254d140cec9baf9"},{"version":"8ce9bd282ac9672109a8e042a84145d7e23f928ffaa07befbd9987ae87b15080","signature":"909574d6e9797772d1b51cd6d9d3dc892a17dd680f7fc08447f0bc5377d007c7"},{"version":"830b3e8427f25762ea1b4f1e60c7870987045c814502d3ffdafee9799c565e14","signature":"1a6cfc27e0849a43c909e84ce8138d6c2695072a480df6b071f59a20a5d5a898"},{"version":"bcfa0f9c8399b01d1789127a82298eb6bbb718cb58d126668ab0021fbd8a0e70","signature":"899741265532a9bad5fb5881d3a1bed81527244bdb7f0c743020f0602cfd6635"},{"version":"60ed084b2c8495e69c245a46cb542341cc43e777cf6afc9527ca2c2d7d147d16","signature":"572ea2985ce2d402758d01fe28e8dc2104a8dde91e6f48ec3bf6096ddf79d188"},{"version":"6bbc636d8443fae4147233162eb55cf759df20c1016b4e5ecdafe49c2fb6f6fc","signature":"b3526ac65a7a41348b24415266cbc14c4061a8fdc4feaa36ead0e4713282857e"},{"version":"796535105dae2d6e2b9cd527fa65b339247cbb5bb62c5d95738c9db9e184846c","signature":"5fdd416e657ab60b64e96e466573ccce0cc7efbea559fcee5c60a3285c84e0e3"},{"version":"acd1fb4be8833a157c5fc1510cc77925e327a6fd9305cfaf7fccb04a28faf538","signature":"168cb89d026f779d075d111e01a42244b454d2b3a1baac9da0bd8470d3cf1769"},{"version":"cff2fa1e4435693314d7ca9ce3db613b64187339af170c65d2f38cd8935319f9","signature":"4c47f9958f24d69f7b5aeb30e030ecca9b68e4c1edf470b8e0ff3532a8e86c94"},{"version":"de65e4c6cecc7bb3aafef23b5c7713b514321fce267f0433a7567cd04a1a11ed","signature":"843ef66139a097fed638354804e313222ff036140f3c14967f0495f191be7a83"},{"version":"77eab7db6004ec4936f1a02f7416ff269b739b109141d43048236e6b6831f702","signature":"248e5c9148961c65faf692a6991ea4c7937956e4a474b3bb35c031265ebaeacb"},{"version":"7fbf9a6629d39a754960f2e7ef9df5e669611f4eae9320d1a0f73e9beae8faba","signature":"a3772db9b7548c44cd796f3821bc132849d9f5eea6a882342b8862fe41e46802"},{"version":"ad01ff9f84d39a398301961caaad405377d91e78e8aba43529f5caa5e8e7e326","signature":"a94844733004f961c5b4f8c7412fe0248794e463c9be6069b38b2f1fcfd08d7c"},"c2f57c433117a6da45e73457b15eed9e8b807cf1f675648b6b72eba9b6a426f1",{"version":"79c7249fa418f0fc4f3e835f7b36401b03d042ac6547fcdb0061f22badda871b","signature":"43586c3ee9308d0c65e82c427fc0993e23c4cf202118a23c285dc0a6484dbded"},{"version":"b2d1181201cd1a052e33e1908a341a808f41f3806e5beb4f64b8036433523d32","signature":"b99445a49e9d74467404a510349d1bf89ae69983d1edb5a7629128d83c06979a"},{"version":"959c416e902fce499528f3dcf92857e34171b7a3f233f7f45739113735853267","signature":"b7ccfe968d89f6bede0f2bbc06d67d65bc40efe174699a971e1d44720345be61"},{"version":"5b5aa13a849d87703a3e4a4bd5b87bb184b04f7991c4abe5d81d1ad471cf044d","signature":"def8fa35cf27bb0cf82833090c605b788499f278b46a91344aad57a76197d5d7"},"d86258071baa98a2f54859e261a0a461590aabc9e7c13da336767231e10a18c9","aa50553e6c82f02293ce6f44212d36e86da7784a5641e3fffd63e521aab11197","d08d27bfb7e080a75062e8d975980e8bee64f2127de411bfd3d44d4d337946df","6711a62dc5aa69d3cbf8d54e5318cfd8a94ed938b8e6e7a52d87e961f604e82c","4426331ce2a3b98315e71d09e6f7f0bd15833f527c2937b6e8c81c984e41ff27","8bfd7fdf5be088db451fe2fb1712d47273dc52621ac0ac5f9d51bafabc1d43d3","c19edf4821dc35470906d5a596ffb950d3127eb0e5310830100cfa2b5195c238",{"version":"1dd22973a766c128e656dfb190346b09f368683e4dad531f62a3de4447bd9ed3","signature":"04551018cc6fbcc3e30949d1899d447a1208fa7f0407f4ce10ded4cbc1794620"},{"version":"0f8a8daa7dcd0e90c4dc15bb8fea91ded1f40cc364ea6ed592ac9941f360a4e3","signature":"44704bac1c7049f264f987813512b5aed58d0c469c479c68d0fca7b1bea1fe3d"},{"version":"a4ea5ffb28ed1ae3afbf18cae8e8ea5d81e8562100ceb0907c4de51ad41b6662","signature":"9d9b55d78eab9f6e327f8cf2e1de7aa299fdf72e34d4f7aa8c29feb83d750055"},"59ef7b001d9aa5bd09cabd4797804310ff9225cc0ee0e4e0fa660fcc55bc25b9","25cf4c9bc60f3d925da7e541e2bf1f4e69e358c6050527203678757e1bbca01e",{"version":"ffd26a7cf0fcd526bd8fd409aa252902e1853ca03827550f65ccc40418ab4c1a","signature":"2910446410a9368cc6cad38b197fb7818546eca58eb4dce7e4c5e3a5f624f9a2"},"de54e5e4ad52bc59d29d6b881f7b4969e2a797035cfb56db14cb282ae2b8b6d2","b68b0f6d9297f652d21b2462ec17bc9414f00e610bd7175e44fa60bf0785dd6c","6053e289b2c08c40819083feb9b804c2acdb6353da7df1e26af388773da2ebf5",{"version":"3ce89abcf4e0d4fdbe3c25a616de594fa169715621f7b918fe77cf5157dbdb98","signature":"03a6088480544011f96792a5c239895fcf56b99e8d5a5774a054d378f078dcf8"},{"version":"588a6a56b8c7285981e9027fb4fcc152d10675ddb17645816e3deedffbae7c10","signature":"e86c7498e3b7f59857cf56b278a595643ce0bec02acf43c6dbf40c04f9016918"},"20899c658ab0e09df6f52ce92f9add18c2ea20e278af5811143aa1a5ca6dbe76",{"version":"867812e52d6ac876a18e4392eba867dae67b7c825c6e071a59292edc014debb4","signature":"9bcaff1bb45c24f7c6fc161385b6912929fa65a6e7fc80b11706b41179a72266"},"3625141a3a5c7e08a70d73fa5909371e6861202fc11fb6437093cf66965503a0",{"version":"22033e001eba6c6e54198b6d4f5a29ed05efea007865799f3c22e341862a82df","signature":"ce6e8c784f232564e743aaa7cefe9fc405e5d1ff2ffeec05f37ddb6bd5920c95"},{"version":"b1e65aa9b7cfac954f120fc9c49b164edfc9b06dbcd0694ca2b70e07ebed6d5f","signature":"f1307cba4297fee1af81d55df8702f2af0d5e42b7a4d18a97cbd9a5c1205d8b4"},"3d81e6b56b9d0ea64f83794e485d258907c93db34280fe9b2878042f80578104","2f7777e5800dd95726e524672d184cf3c89fb96b67d193b82ef2a9d94ab701dd","7f96b81b7c3fbea2599f570494797a76488839674a830520f643804334c1b091","c99119c8a27acc42b9ceeadfb56aced37f603a0fd80874f2464507f5967c9d7e","86d1586c0194bbb4fb29b3f740649d5cf9ce78c528da15ff0da5025aefb18581","abac588296317806fc9e5aa044fbf42332b26c2b0e164316357758a8b8b83ac1","41288cb62c276e3a29103be44bdfcb205ffe4e553665f11931ecfc9e62b2e673","fb1d515cc58c135b385710010cc652594b881d07198f1c6844792a6d9b5bbdcf","823a02468014a2eaf8a3ca9a28075c2204a775995ecb56b56d5a23cb92fae45a","72d5b3171a656bc245628b30ccbabbfda27992b484b100d16ebdf50028067abb","3bc94706fff0c2a849c9b7930f56a01bb785f48a9f5c0cf7f6ca2d2f712ae615",{"version":"a5b401b1d2bcd0a38072f22d7513ea9c8d8dc76d92a0ea8e4a875730f00adc3a","signature":"cf2bf59ed96f30d36c47f60405db925706187d01b7a14ce58f210036b9ecc501"},"89e15b95beafa9b9caf54be9b2581203e72d5d886f892bff5668d2bb45d6b939","83b2890891443c80de12ccf568657ffac1da8a12d378a04e8c9fe831bc33008a","477344a414fd06737fd0264ea58b9f1ec6fbc44d8200a49fb83e2763c6901023","3a2e0dd7b1d2fdd84afd40fb979dd935675de0ccabe66ec94f151172c9f74553","255d6638648a53cfa0ff51fe16d529a8342277cfcabe68e1404325779fdc10ca","d6efd44aac015b82fb3e7012096a76b90c39f9b1399bf1125ad9ab4f037a33ac","918a62a485e30dda3b767e6712a20fc1be58b9603cdbe6dd03924f4896d47853","def24233d3d17934e36c0818b3a16f8ea0b8fcfa60fe9fca7697b32d8f7901a4",{"version":"4880d011f2ddaf169314912eef0d83f73fd1188909bb152b119fc5776fe47b81","signature":"da71222becd9ec262dae4730b94b7eb48a2e86a16e83b0f2529fc7970ff0e591"},"a4de52f0e17c07c00d6a1c291b23334b2e59829a789dc999f2d8f685ca42c025","1b11634e541503a28b569f0b217f95ac102a60ab338e7c2bb89ed3ab48344154","5000f164415eaaec6df7b89f1305bf4df2440cc080163eec56ab99d6ff4f79eb","a5533d114202998166686d8a6d591413bd19b810a05afd3380f7cc14a076c9cd","47329c170bcb06d8ff9de4bf661f9764f309cfa3f23d028c543b35aad0e0a150",{"version":"e1c818da9162d0b8cb18681b83d8fd075a125d32a702aa41d131c6f732c3220f","signature":"7864cbb72f5c34098f6bd27f9d5a7e491ad33638b76b0e9dcacc40ccd2448d66"},"12af64140108e14ef1a0759e0841f5c74bb1dd7d5047e3d3cd9a92f1d0697584","1490a410e9012478ec9cf6df2203b8156ab2c6fbdedc2dcb43d13b9c9043bde1",{"version":"1e164d5bbd237b896f529e0d7e7305aa85b1a5355e956d34e76a88b9267d4962","signature":"a0d3c4ba42811f592d566879a56aebf28982195278e089f234fbdb9a32559977"},"735e7a49b1ab2ce60a8f30a3dab1aab9de38fb470ae7fa948352042c5e0ac90f",{"version":"9149784c2be82e498f5b1a2e6941c63f7cfa12232cadeee6aa1a02c7494a21a1","signature":"9c7d71761f52adf166fa674f2c4c6a8e1da2533db7733bdb416bb5d55e0f77b3"},{"version":"ea20bf91367ee816bd891044c59b8a29123f4d18a1aa2bbe7aae8911e81af675","signature":"0f70a8f76967c86d6238ab143e733955f6e75e720bf7716dea3621220c65e47e"},"458f2b6af16eb20112ff3be7f6f5161773ec95bb5cec2b09b8bda56de14ebccd","f8a39f8d62f56527099bd8a469099c5a7ea1e6db883f4cbd13062eaf482f433c","027801594c3d8b33383cc27f8e8dd3cd667b6bdd88fdd14db375c3094c400170","5aae2786a605ba6dee8936d6606dd43e0e6b948d573b9fd0d12e7509069be664","225d34930839e9223e15685c0f53f46f8722fab5dbf67bdc7febf77395dfa777",{"version":"e86bac8e7defe085f78d90133a25e9589437925dffb1791f600102403c6bfd9f","signature":"49adc1be73507312c992bffa42e51e15972182c6fcfedaea5663bc56d0c8b998"},"4ca4c32c9e689be58888111cbfb2951e683f7aab39eb2f4843037415315e735c","62889b658cdd771b801b753c8f34a2e8605e6d1d09cf4cf0080541f94300f94f","11b84d2cfa831a3004e66360c1665a04760519297314064cd70219c38f1ac605","037dbca1281b8d67ae24d189852c175898f74b37defa534d683fb1fbb7d0b99e","89e2d45110529626a787cdee5adbcfb249aaa1f0c20e4cf9994ed1ad616cc148",{"version":"fe075fb0c9505cb2e8e6b6603977efe8fe8e7c57c626a76642227fe8022bbf21","signature":"e14fc4324af5e615565f6e64bd20a32968f5f9af097e83f4c6ccd5a32204b136"},{"version":"b487c046ccef96e9d82f165b7eccfa10bb60d17cfd9619d5280db53003ece0fa","signature":"c2c62e783e29bc68823dfdcfdcc64fb45407325e7401705127bda01f20724e0d"},{"version":"33fbecc1a39343423c75ec53b749480f9c5ef74d0a8f7bf1c9b84b2151687965","signature":"d64eba7d36957cd3ef47bef7598999836f4f20d355a63fefe2e49f18ed71db4e"},{"version":"39872e919662af7786a4c773c6e03c30208917373b99db3e14b8a87ea4c8452c","signature":"cdb8a6e199347182f0e97985b6d24e5abbd42e85fb038d3cb186cc0216bab2c0"},{"version":"d8ef71d5f48c37f2c9df58315ebd536a6e09c09ce9f28f5140348fd58066fb17","signature":"7c8f8789e284ce3e355cd37dd9d4b85378fe4e32b8433f933a35a5ebc2470e19"},{"version":"7503f8bbc9c2433bc61d76a7d9e32d25fa50d3d162aa815943b281dee3d8de69","impliedFormat":99},{"version":"1bb7123f8afcc4c9d09dd9e51b50f6264e2474956e9e6934b30c749e1e91e881","signature":"07c53bb4760c232da43e73ce319cf0fd3b505ecf886fb08730d1d231873831d9"},{"version":"94a80e2c8e3c166086807d10244f080397b10c15dc24ee6cca9c3888a285998d","signature":"fcf7962f92fae144fe201217ab82e3acdb29f8fc387d4513cfb05e901ba4ff73"},{"version":"66543e7092a88f64f18c6f8695d8317afe86ece30c324e2e4fd652f5baca6c9b","signature":"6851ba6196d6bcc281dc1210ca57036e09caedb3390e976e075fbace056428fb"},{"version":"870fa621ad7be65e3fd25f80d53d312ea41856ce6a7335513a53a7170e8a0881","signature":"d9ab91ba0b41799df7071bf9f84019e0f0bc63046f88496621511c0c5ab9de92","affectsGlobalScope":true},{"version":"f4cd9458a9ced694dc9d5b22725bacc900dc41dac32f6e5c50b5a0d1738fec23","signature":"2717ac49e3dac7cc05b83c0e6a3b37ca88b46d4488a70ac221c3736c17d4a4b3"},{"version":"8a4c4fb40ccaf8a06e4cd7ae6dfaf07714b1d1fc88f84ea845ec5c175689f05c","signature":"1d7767c93da0932365d927b79d72df1f6450623e0f7a7d41b2e2fe8d39cd49c3"},"c78b8281f7ebe125854fc8feae51462dc5c974b12497555df713368889b80050","a014b4a4d7958cb4e2fe2d66f0aa0a3711e8d401b8e401f0a4e6808a0b537d8f","aa1c4b3761bb7b013a0f8ad35b65730cecb17ecb12cfc1fb3340309832039cf9","42057cb772ade033eb32cf5bb2f41e8737397435b99e12098349155d283e4daa","cdf8bc0a860f48fc9c425ca403cf720d1ae74d046b8c9b18ff2ad30f4ac14f4a",{"version":"58c65d97a3b5661ab2cdc98cf580f656d3abaafa3b9d944b3ec6de2f5dadfacd","signature":"f5fb690af6759a97da206bc5e9008f5b7121d6db63e46b2951e0fd056311d0c0"},{"version":"3c56731e7dae242682938d7ddb12433cb4c8220db0dbb38919cc9ecfbdb16de3","signature":"9b9f803748b7919d69f1acddc59035954ff70988800a1493778a67201648fb86"},{"version":"a039b67645c84ca18f7212fbe8839a9d52fc8766ed0f20836add8eb91c1ebc13","signature":"2030e619eb18ba6290462a80e0f8528fb0bf293efdd0e7c77fa81f0f89a3c86a"},"91e334430e4810021f096ce413703edb166813177f3321371081d35f92ead08d","f15e263f3ecfd929888d14daebdda0713a73d0b7548faaf6e10101d339904063",{"version":"ba822b5e422f6e7dbfabfc8cabc6b34bdccab639ec4adeaeac1742b3cdd75a29","signature":"2e26efc2770126cdac64be9f06c02dc6eec87fd98fa33aebffbf5e78c8520092"},"6e43829b8c99fd5941052cb0d3ea44e3508f6a67d12a838b75d71028b37484dd",{"version":"9302efd052b33d77154f6db3d420356256251256823c592e643540a58a8e9873","signature":"2c168f48f0506963a8be99aac821aa5d18fd5a6971614a2a481af419a8547263"},{"version":"048c4a1759dc9a5a00eb852033b233c0ead8dba74086383a2526def4efa78859","signature":"17fb5db633331c1aa9e4a8e5aa11c83ccd11fc2b6adc1e8296970a2eb339134b"},{"version":"b9da93db6b5e5f2f0a4972d9c51846aec12a0f148f334872de1843b12619f6a9","signature":"bd847cc564abef83609a66c573687ef9c9fa3d17e25e37f62e48b046b13af6f1"},{"version":"b1b590a263e800f96415646d86c5d5866ca83186083cc654e377c4cfc9c1dc19","signature":"43fb594921d3f0a6ab2969ce3f587b1668d9ce977ce135c82633472d13525ba2"},{"version":"f69bb597d8f0856ad191512117e04743e1c2b2385ddd1213325f125a9b48ba6a","signature":"84bc9c087cd6d2258ff81fb9097cc9b0e2865495df28e43d3b19831a8e0ee0ea"},{"version":"8992f808a195058f8e380832bd47cb383e363041a37514ba4aae212778b7fa02","signature":"e67f0daf4fa08c6edebc1bb6164f449eedf072acd9a47890631b3c29f5586536"},{"version":"d408081dfe9fad95b42167e2d6d679529e8db4979e53ebe551b97302b75e19c7","signature":"8c524a596f27d01ee4975566b25c463f3a351fd103dd6938375e70c8d0ccd780"},{"version":"889121b448de1917750f9bfedcd77b2eacd8f1b6e0d700b419695714b3e86353","signature":"56eaf216a364a86f6bb10071681496d0f23d206bd6af54fa5c5980a6294c7186"},"219e110c4158f3df3dc99559940c12b749870b44060cc38d214fc5ce3b49b5e6","3f6f303677e9160023a840bed7b544a9f44743786e5eb7f370f1adaebb56e559","4b8b03d35d305c34572c3ef7b6ef79954e67fb19437295cf1d914932d49c7b90","52756e1c87c27bb2f69ee0fa28c17ad1afeca508b4aec1f89121e0eae65bcc13","b0893e01d6b9ab72ddca75993df80c5c105ecb2b34822cdb063b36b48a503fa2",{"version":"5c5983bc8613e75b01cfcd22d44c2b94d16efd880618c683b5f1063ccf79bb41","signature":"ff24ee610937e264321956b94048e26b9770a8eb4353b5e5b70a6c83e8c3009c"},"13aa5295e8b2bcc555a998be7dbd38e95b32b683dbc42c906bbb95e148f5284f",{"version":"f78cefb42944e8453b19de4ae6dd7fbbfdddeee439d0e597b245a34acb2f4ead","signature":"7df841a7558a330302ec6a5c648117715d82fab19958de6e6aad06aee3468319"},{"version":"a80a52df5b155c89f7add65e42a4c82b77fdb1b200aa83d2d27970b6d4eb6840","signature":"d068992f8f0b92074f58c8454bb43a893d3686320d78a422b5b1acfbcc86c55f"},{"version":"14d91b79201a5af4ceb647713c58ac3606f6000da16ba9c20fa1c15fd02a6fe6","signature":"30c1f418fcd61a0e62677f210a883f1bf7620d01ce22adffcbd3c91b365b7ec2"},"b8c59183ace324e630d3ab8007365634ec9aa5fbe611e2147aaad9dc25193bc9",{"version":"0b937323cb07227b244b407708d79bc0c35a6cadc63bd58d94467b6d268f5f05","signature":"073c87222bb905be3f20d1c2868a45c1ced1016ada3c4b63d66c4e7b88336369"},"147c5c59ae1bc1aac2527bbfa8f50e14185c02873164a3349ef3e4f1fe9ddaa8","001ccdf04870279238b828d13ea3f86a14bbe67745f806f5d017f73782fda62e","b9141db34f2dbe804b3d9d560c4481e7b6827d6bf933798f7e71b5a2f744501e","85b6aae7a274c1989a179efa2cfbe63b7da234ccd8675db7821bb400833c38de","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"ea9d11f30eb624d8918dd4c8c6e2af4235ac72725f25b11d677978e5ad7c1389","signature":"caf959cf0eab94c607ba0c9b96af48e774058caad6b3bf12e405253bb5582b0d"},{"version":"7bcf0439780bfe6713f4a2bbf375c84734f7c274883a01222deb7703cec32b48","signature":"41248d350559915fd851bd489b5f53fab65f8a3ed54ade836b00388bf882abb1"},{"version":"19865188956f14e104fe8e56fbc477adc380a805ac3340894c63cf9c1e98f382","signature":"c803eb07b64d5a9dbd79dc9439581d6f4087c122fd0913683c0a00490958e91d"},{"version":"387ba5ee4f99c053e062961ab8e1f29273b85395aafaf7e2194c43712cbe31a6","signature":"92c190c8102a44f1fa4dee7d490ab6df522edceb915aabcf8b1f7f755e9bea4c"},{"version":"cf7050af2aaadff85d15b065c19ab110fcee35ca80dcc64de9180ff45f5c5c65","signature":"7eb907d4842b3ada3cfca2642ad0496e48878533154550fcc59aa6e8466c11ef"},"7898ddd7156026dfa260f4a22e8af222d32ca982b0aee3ecbb965cc79463773b",{"version":"449b1fa5fddcc5b5ed0359db70ff649c45a24dc3302bf9fbd11ed1d871f5b619","signature":"c452454ad68ff173bf3066a31ad1aee0af6cb3775de25802929e8889cc0f76c6"},{"version":"dd06f6e245502813b2d447fd9c181b3139014b4cea11b4ddf4243dac27bed7b5","signature":"06b422f3f4befe748159eec0a9f02dacfc1bbab178fb321d061cf0ba861f6651"},{"version":"8eb7dfbcbe22ba0968a490e6f6e3c4dbcb461d876d4322791435bee196a2bbd7","signature":"a458af55aecbe83a172817309bc7a19ce2db38b8c7255253cdb88db4a889edb7"},{"version":"8d724cef126c9729dc01b48d0492add0526a8423232c456158e3d71d2c04ba3d","signature":"a39df613d753317dc19db603821a84d55ecf7c34bad6f6ae3aed18c81fd70f3a"},{"version":"7fa2fca68e7b052d41868b7f10ff94f0ce9bf67b7a4e4d7c8efae8eb05db6cf1","signature":"479e59dc02bc904bd4c12ac6defff5ec909a13d69554058efebf3937edc5baf6"},"0f942e77bc9ce29956421f5196bb8c0fc741c7508bbb72386a606af5d0fffc59","07e018ee4ccb7458425befffb9d297e0c279d8f4662697d8bbb3038fcecd7f09","82b8fe2bb69f11956dfbad39c0121d0b00234852dfbf8d7ddc944e61623a1d6a",{"version":"52a44b9e1f63a8a97d42c4714bfbab15bdd134689c10620d145ab2de32d938c3","signature":"a5350cc4ebde1d0573c561db052c2f55d2ede84e8ac1cd03aee1b2c295b6397b"},{"version":"36a77a10ed644474c7e16cc867c19bf337760c11f8fdbb5c59b35d941883385a","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"610692e15bd1e0b0fc7daf98a3ae25055c88689e5e7788cbfe49bb5e9ea9c98a","signature":"62defd4c4b13a986da3df0de881cdddd13cacb0b13325f94e212fad84fb36581"},{"version":"a6cf1240e92edce488b39d3a47d2b7d7da9583d0d0f74b17d4337e707ae54055","signature":"f1d0d6e5e4bd5dfcfcadaaa4f896af0bb74c17d6d642ccd17c7806d1ca479136"},{"version":"921d0afa8cd0b238738cff521517c15c1cb70f1d775efb49d00fa81c17da8288","signature":"e9c8f7f3deba2f14e10e9245834701c1075ba6af7e53f11c21d9a04c80a825fa"},{"version":"8eb7dfbcbe22ba0968a490e6f6e3c4dbcb461d876d4322791435bee196a2bbd7","signature":"a458af55aecbe83a172817309bc7a19ce2db38b8c7255253cdb88db4a889edb7"},{"version":"44d9341ab9678c1a2a9f49d2c8a56cbf357f34465cc3e4b16be909328440951d","signature":"0a995a57abaa36144e406a0b2c984f0defc651b36c464c7facdd24ace6c358a3"},{"version":"2204ff02e32f79fa78b095466d2b2eb23d2e65325eeb2ca39f2f011615d8a38b","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"5a8190fec8bcc9e2bb9d1c957283958f0b8ffa43007b2a4708272051d310c646","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"059e3839803caa6d2bb5d05e382fd1ceaa24047e6ba54ff0c4fba2e44d90c0ea","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"5bdb66d13c39adf76da6ee7fb5a37d23606085c7006d66fec557b414e3117c1a","signature":"8b91896a072714ab82582b84f5f6e067c539a14e7c0f7c9a67bd1cbb0b571111"},{"version":"cab0466c71f8d9d85182a86571fe17d4285a0156393916fd870a35121a151bcd","signature":"ff7e1a85ae7c3b1650b90176e2eadb6629ed7c9af74cb2f79f56e3d3acda2d32"},{"version":"b30c5e39af9a24755c1ac6f482f1c9f552a57ab54d5a9fb7e1dbb19be8387868","signature":"54ff6c6967554f69697f2639743bd4ce877ecbc328b386e3b90e1dd6cbce0f6e"},{"version":"ec79d6cc45276e01fd8a97b724a1bfe35578d45d9c74b9852a68d7f81c22ab21","signature":"70f2db59459cfb43aa8113dd72b8e86e393fb9dd40633c514141651daf5db9e4"},"30f068be1ccdbf5e4740bccb003fe38e86ade9a1e6a0a38178b5d55aea6d28c0","08cf7be99c19a67d9ca19a2f69e0bfd289a3697c12e195f5e5288b7b4e23a80b","8fd61620717e9f0b9c7b0133921a34d80a95612e70cf452a43d35963e964c2c2",{"version":"2d3fea2772d3c866486300e553b015777e57b2582771f71ff42e6453cf22a3b3","signature":"984180e49640f95645a4f401d84676d252502b0e4c94106611107dbbf4d100e8"},{"version":"36c0db02b6ad3b5d90c35746a737a77a4706ec8c0c8c26daac7fd63a1af68392","signature":"6429c7e269a3e042077d25f87f71f9a5257956c320ecca9dac2ed0e763adad5e"},{"version":"3af0db41946aa2598f4bdf8dbc1a1ec635bf5ef13efa8844201a72f8886cb6a3","signature":"c70a50aef86bbc0fb02899fd77fd7de5869d552d81185a584c2ef04de66321f1"},{"version":"c8dac827cb76d6ba70600cb9d3fbeaa601aa49c5baf87982e42607aa740cc72c","signature":"369408fa66178de1ecd724e210c1141fe14e2bcbacf047bf12947e5210497b6a"},{"version":"1bb5dc3a76b3924b83321a001beeabc63ae126593e2912e56e2b6346959181cd","signature":"27f087b3b085c15269fb5200d87c08452370d92e90c80d5d546cf1ca3655d4d0"},{"version":"9fa910a7c6bcb710b4e05342be8713cd31215626068ebbb907c40109345467f2","signature":"5d0053f30cd91a3a1aea45eaf88fdeafa7abb12b40379e6bf0c7035c711aecbf"},{"version":"aeac972a9800d565481a2919ff8a306918ab9ebce88b562191ce5c9d7b8c7978","signature":"c09de65be416b0bf6e3554a87cda379041ed5c14116241496b25b5349449ef61"},{"version":"45b1930a5f410eeb26d61e1d0845755dd1b585483e76cefe48c6f34a1896ac81","signature":"3d26072a52c9448628704dece460528b7f7e7e75ddcf0e1f5b66fb982df4fe04"},{"version":"86790329c402bbc1f5c7fc284673ea536be6897e6e51c2a8c65c863c3d95aadc","signature":"4e889b091b5301dea6b1ca5a70cb2b1bac907dd9822b9b5e060401334034ace9"},{"version":"3a0a79786025bfa0ca63c250e202dc9ccb740c069a0f70789f047292bcd5ca29","signature":"d4b8791b969211d18b088d66eaec52e696a4ed36000dc5f9a54e3ba3246fc1c1"},{"version":"c723e854166fb66e7b54c029bc77a34d2c54e8fde29cd51cc1d4ad86711e42e9","signature":"41e36f48ba36b9e20e98349301850736e6dd01c163c0c4964d1bfcf6ed77cc48"},{"version":"e3ad3bcad79e23decb84086ec0df2ee66e3a6161a3dc11143d7ad45cf5620dd9","signature":"f3d982245b75c76380f10fa6bedc7926b5d8f11673185b68003d0d134dc4d508"},{"version":"bc460b98961742492f4adfc740b4084a4aeafa1fb7124f5f61be9fc3062b9adc","signature":"8b2125207d19dc14ffef541f56090de90fc9b905f4c21decb29ab3e2d6504552"},{"version":"9ceeea3f927d4e05a1798015b39f962e805085c06d5875bac7ae5f259249b145","signature":"5875498adc9703200a837bca811a1fe549867d223931f55278614566df3e8421"},{"version":"89f86bbd7207cd68c44e9de716946926d7d2c687a9b28d74a4130998806bb7f8","signature":"1c38733deece7117b4948af137ee5e06cda46726ad0e3eb61a8e4ca1e25a8265"},{"version":"befe94f09ced2ab9d91930c406f58525771a757f557b2e6e921479cab60796ea","signature":"dfea421316c09e6a0a41c8ca91dae13f8dd4dc92859f31c1fc4bdbf34d3ccbe0"},{"version":"b8214a5efe482f1da3112ecfc0b035bdc08baac0c6ef7e9be4ff8426e5b42333","signature":"fbb00b6d498a8db0ddd171a74ce32da32a0022983589978f66b464a766fc731c"},{"version":"a09224c1abce83048ec6a9c7f89af8de13181cc523ea2bda0c8e99bf52a24512","signature":"39e22ed01b58bae6c388923b3295878dcda70d53a033c6cb2badb3b70fed93b1"},{"version":"34fd8eb1f33b7fb9aa303c59cea3cb6a891a842b939b9dda1eb6c3a64f8ddb87","signature":"3af628d00837395d30372ea4daeec86945f54fbde1bc0151434a3f95d533faee"},{"version":"8043b7eccfb04cdc31b095cfae63ff5cca723ff0543e92b4e5ee38e831217bfa","signature":"a08abc0f00f308851dd49d3e16b923522de45ea7c6ff044c4cbdebb4cb201c15"},{"version":"23eb5fc524bee4038c6d09ae5d890675af67cea341efe77fed56bc6f690580a1","signature":"54d5e8c855bc97912bba7087654698c527e711c218085bd2d781ed0034f5dedf"},{"version":"1e9743110312edb600ea37575f5044312de84f78abc7cbe2f5869ddfe0a39438","signature":"df03fcc3f8f708fa993c882e7ac1d34c8567fea2c9aa8800be97df82e17e7deb"},{"version":"c8de3e06a06f5844650747813193a5728d13d67c09f240a682851cb733b4e3f8","signature":"17fb5db633331c1aa9e4a8e5aa11c83ccd11fc2b6adc1e8296970a2eb339134b"},"7d976726c1975d88b6726d647a1c532204a6812551aa1d4c5bab17482dcb51f9",{"version":"3af4db7e9f0a853b4f1d86a8e3bdcf939f310a371c7897f28ba96af0b967b9a8","signature":"b504e835fe49fb38cdb36848730f42a6150bf4b3678335cda583698d7ca09aaa"},{"version":"9d03fc4c8e7a5131dc1c905f26c953c5b6dbd63a93594d591e84a239eb788930","signature":"da5b3aae822f2d13fea03ce491087d3fbea3acb1204555e6c72bd58cae0b03c0"},"19ef4f30c78c23d6b5d41233ac4b93552dc69e1eb8ca4c2f77acf0346e729ebf",{"version":"24628014363dd64d45caabf6e20946ce847794bbdff9bdcd7f5b54b13e3d3d52","signature":"e7401be614233d09856bf24e4eb0291cc8a77c791a3032813fae5075b66a25b9"},"66a23e39bdaeaadf8ac1a1683069784263d6561f85846dd9489e0275466a6e2d","979fc455eae8ecc1749fa14d43d263aa45eaaf5de17c8baa8be626eba0eb49e5",{"version":"03e37749e47a109a4390b793286e4d0d5df0d4fcd4c74cdd326317ba04295e9b","signature":"0fe359f6cded975b1e319a13f3849e91e68e900bc557f2ab92c4ca8e49d3c7de"},{"version":"f71b7e42c78e4d4e5046c7d6c432513477b95ca452b99771bfe4c29f70105984","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"d38aae8e6de1f2ee29e2d2b44086c9994ff99872fca3b367704083d1ee08c6c4","signature":"555340b2244f084ec743210f09a7f5d155a5dd4722158b4435819b33ba61e164"},{"version":"8f1b4a78ad371d1a4d7f82996bef8969d434f8c7d5813eaa4bd9624081381971","signature":"17fb5db633331c1aa9e4a8e5aa11c83ccd11fc2b6adc1e8296970a2eb339134b"},{"version":"6a00ebb3795ddfdde294444f2ad3d408d3bb7d8995e947b6220ea7aa5119cb98","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"006d788ae547e54781cb50fd57d58864d04a949b4ee7c6c0fa2e48430dd044ea","signature":"3b5c8205d554dc4c8e32238f699554693887f8842ed444691288a18a65963d1f"},{"version":"dba378e28ac15ddaa0d979ea317b142362bb7d7b99dc5a7ec24737405e17f855","signature":"1d0142cfc73f6b6c1520546cf6c306c7e6704fb9367a7ffe7ed914c332abef05"},{"version":"0720301c1677191e642fc37badd9eaea42be1cdd4b33c159da010e70a0a78f2a","signature":"fa0f67c5465fc2c21be0f8537da9c6026ad9a90fbed781b126b8c0f3989316f2"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"476e83e2c9e398265eed2c38773ae9081932b08ea5597b579a7d2e0c690ead56","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"e70ca0b7b1ddf16d57942a53f160db7460f887e924c98429061ab55cdb0184ef","signature":"17272f198f9e4f048d0738c959ca1c2474409639c4b1ab4b49176603a91db8d5"},{"version":"9e97a706abdb86fe2d259f9fac727301c9cc143efd3f6a758a50ed76186c15e3","signature":"addee6be903d0794abe97aedaaabb757cae4c439075a536dc39e423b39ecba55"},"8ff660cc73376ebdf1522167a82dd82aa9ae7722722ab987b8083decc48ac32c","a28351e1e90d16344dc40826d46606019abe7056dabcc39fe85300c845149527",{"version":"9964ffe4fe27e10dd1a5989062f36ca3d40d24af686a23931e120d9c8f8216d3","signature":"02ff8b4de1f974d32c5508ed8a79274ac945a7bdda155913ec6b7d28062fc542"},{"version":"15b8011f4ae19b8c6229499f178613b4c31422bab3d93f69996cbf2f95ff87af","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"14aade589588466ac823d199319eb304e50410c19e876f53295e0f3901d562bb","signature":"ebcb5d3a5af621ba61f81b380f9c4f94894c7818ce28404684d60cad7043d510"},"5069739c2c4a185f3bb915f14a37f3d7e5df94a7bbf5a417c879518d4785b44a","d375b22640a91a96479b874bc105ec53ef991b0a42f75fffa36549fe918e2dd7",{"version":"b7168fcda6f6d807b1394a696d0a4a67e042a62f2c9a97c1d4ac624c8e68bab4","signature":"87a175375065aab5f9b2d009be15f28bbab3e7959a3790245a6fca9aedf88c1a"},{"version":"a78faf164459d4e3b3757985f21cf34b2210e712f508b46b9f4a76baa6d16c01","signature":"daf1a88438b16b81a7b6a4de73e22033d511217b1c0d3dad164dfe309759e76f"},{"version":"b1402152d1a6f840d78fb80636bd7e09b690e82c4f2b9886acc54269f6c7a3a9","signature":"8907c25a6bc871de001c7edc209d31f2f951fa1229333643b7f2c781f15056fb"},{"version":"2660d3ea32ac55630b75ca4e460d8a3037a456179a6a59809f1b6e211713076f","signature":"90a33ef7dd8bb292ef96c212e87a191bf05cded1ddbb181ed4845ef9654d855d"},{"version":"139438c04c070a1764d6816d0726b181c590f699b2e4ed96b9f81626c9e4d4db","signature":"406723a698e4bf60df22253452fa6580f92730a664c5858d21eca478d5583642"},{"version":"039e02f8356bfcb28ac961073252af2cce5d8a959d24dfd68b4067138292f0cf","signature":"e003da661469505718e34ad7cb23934e4a3868862b7e54c2bb18f60e8e13cbdd"},{"version":"f8ec4c011e63fee76887eb75c0cc81e937c010b32b9b0bddbc5799437e7a371d","signature":"3fceacf9f95b654fabed0c05973205490973317d621b3b963cfcd6d5cbf0cbb7"},{"version":"c8fc38c09710fce8ed183dba8a3b9960ab295e51c99fe726b5115e51f94b3cc4","signature":"657bd4cef2a795f2003e9e034289e6bb8010e1d77cfac029386162ecaeaef652"},{"version":"81f0582f86dd77e7b28c4baae38dbbcb79035d8352356c8b903e4095df012a24","signature":"16c985523a82ef3ab461f2aae7906e02a95aa060eb7067339bd3fc96a2062a85"},{"version":"9e6dbde37a0a547e09b6c0a49840fd564306d077cdcbce6bd104673fc0ad7396","signature":"9d270361bff9c2eed80c0db8107d0b158c518e3fe719ec47498142683417e1c0"},{"version":"c0301ef2db0e428bf1abf7184e4e3d9c8c5e80e595708b70f7d63a8910465cb7","signature":"98f5fc0b6d410fb13524205d2c30b37e5ddb784297666b2870f81a5fe59efdd6"},{"version":"8b50ab89771fb7da7df38d02c4d0491a1dbdbcc53896f2292343fc7de65f2c69","signature":"04805234487723724997685ac418aa0d8d8bcf6a30c3567fdeedc336fdee639f"},{"version":"5b7e01b9f4620329aed5956fc8beb8ded2b8ecfd49798bcd3a6b9eb7b03982f6","signature":"cb0dba65ade6f7e15b7ec75ad51b3364f4292086167eb5182f79820e0172f659"},{"version":"7269d15fbf276385ca0c58570edeee4c76ff647dec1b070e141767fea21a3b38","signature":"43498151b91f4e8bb238219691691b6fede5f3f1c30b0bfa4c242bdbb2115c2c"},{"version":"51f922d56fa7aec4a8abbbf200ee5084c73ef0806c237760a9c0ef635a5d6934","signature":"005dc4cd26267008bec3087d2aea91fa50a840a32a773737220b8f95920452df"},{"version":"12155bb89d2e8a799601489e6d06a760ac2c2cae07cc428349b7d9063f7af3dc","signature":"05fe56b90b79f4ecff950eaf7e1e3218743b91a59a03d028cefeb8e7ed891631"},{"version":"07e1b213d58281028366e8eb89afe32a0f7e47dca4487395f565d36085937181","signature":"bca7c3ff2c9d248aa45eab617a4727160f754ffb0a76ffa3bfbeb0594fc3b074"},{"version":"69baf9fd511b907705c1e57a3f2c71f1618a32d187c80e42e813ab0797321493","signature":"f9283b04004791f34eacc070a58186c7899d4ef27b9537022ada92c64c7be630"},{"version":"aff0af68e5936cf9895edf341bc227e888d93079d314edce7afa40051669d42a","signature":"4759975965ab34b5c7a6b1a741db79c218d6bb017e26a039ed140ee10a768518"},"07734c9f59dbacf6089759f303e0b58047f13faed29873ba3a5318b090633546","b6ebd5a52ea15c9434940aecc8d07db12be692a54e55e79ffb613ab5e44c8317","19a1682f755c91abdf539b3e6659dfcfbf89e51579034645be2dc75100537c0d",{"version":"1286d39397da70be2dd3c0d03892f3e294abce712140b30b0e754d7cfce2de37","signature":"a0897ec302b905f62ca2e62759c4b5e93a9e61834043bcaad4b104eee2cbba29"},{"version":"38577a7dd0c39ab39f90c6dd2520e8efc81ec0bbd510df8b5b1bc10beac499a7","signature":"3379f0ed18acf08317876d4841b182cafe5735a5828c78049b24447f4f972793"},{"version":"88aca8aa6810812259922330ee97409e81e209936a221b5be1c7686d46426b71","signature":"8c6b40e9e989ec55bd605da1f5a398ab3ba9c65b0a5b06664c327f6788f8f8ad"},{"version":"40348a59ac8560d1bb59dbf7d1a68b749139457fc002767bda09aaae402501a0","signature":"cc40e8a896c16fefc125e76d7a1178b09aa18c1019c8a7c0028f78cb0ba5fee2"},{"version":"806ccbd7637730890eaea0e6d1d174c63005b2759cefd9ff3a3c30b4c6a12dba","signature":"dceaa37f742254e464024477a9ee3242ac9a780d729fe1462ee2801452651c47"},{"version":"2de4f672a36ecbd4cad757b8cbefbf8e7cb570054df9b0ca3ac6831460e7183e","signature":"5f0febfdc2000db0c174b503ad4a58c9a8748c1597036f45a9506f615300e6ef"},{"version":"44e4afdb17b707f4997ff3c881952d97482b4c32363cd22c7098d7d45eaad7f8","signature":"3fe1717dddbe83fba7590f58f752e6933ca48777df0ad6db6da09df23ce2c0aa"},{"version":"7e25cce842a289fbe617f7e4901bd4fdd303a2dbcdf79629dad77299729acdc6","signature":"2d837580aa2f950f5ea2dee7a00567a392a71ff929e83d7159491529a0bb6064"},{"version":"8b994b2e070f3bb5173173bb1649e52d33de6de3b6ab6d8302397fcb76e120d8","signature":"54f84da2e650c11480c6ce54a28ffd2e41ef645aaf411098ebf773fb9c34ed2e"},{"version":"a0a304757191e56fda498afef9737a59703e0db5af48aaabac4d54f64b156d88","signature":"7396a6fe6934c81b7003ced5e7d6cc28649bc167eee7c5e13e043a42d4e0328c"},{"version":"5038bc9337749f1a3c05147a3c2a9c06262bd3cb9bc5af35e8bff1081d59229c","signature":"83f83f0f0f223f59e3de3c6ba5dd0bb80e68dfb2a3795cf68cedde447b0c2637"},{"version":"508c48e55e7a60309657a8137e28334657b929d6a8627f0eeb14b07a30475555","signature":"d6386e4b3a0ef8c763fb2c26fc079d60abaf3defbbed9c66abd800a352a494ec"},{"version":"2a79a0b79a4a4fb5c4473a06865f8fc4213a8c98cdd3430777ff49e8e2eb8a6f","signature":"dc93fb35f564db231da5ee3a6e1499da0f57b93202fafd3dc561bc80129af917"},{"version":"5da5c86c5984c104d53158644d5ea6cd16bed080b9b7e28845b735674b5c0519","signature":"c41201c23898cd776a3d81558493b1147efedaeab830b22cfff5b0c974de69fc"},{"version":"46ad3cc9f36e57f60548ddd79ec4df496e165dda7ec71f1d5f462701081928bb","signature":"ef7d2e9e4de760df3ba523f59da49a30665f41ef2156b010891cdffff54985d0"},{"version":"c5da1096edaa2d058752978b6dba644c11c81eaa33a45a2ad52347f55ed52842","signature":"9cd8f1abbc2ed2b11c4735d050a0cb7619f47620cbc45fcc323370ee4b59b3a3"},{"version":"c9ebc2cfa880e643737821894b71cf23f569af97773eb78c12213ed6d5f0c042","signature":"23fc44cb589b110d0bb71e38b7e7eedaee116cd12982f659f9fb97149be46203"},{"version":"e04ac70af60a5fd28ef53030f45a79634155d4695a18ef0b2614a91d07e56383","signature":"bf88a84c9dfe7ef5f1d253447a6f815b66ce04624e7fc9eb784ff0044e9ee9a9"},{"version":"ea51dd9d73f2d819175973c2cc595d47330111728d2daaf2f334430523a67030","signature":"ccbed7c80ce991d9a35406978022d7f090d811f53b1e690a1fb923a5a188793e"},{"version":"425f1c989c7d48b227c857fe575982e0c93edab6cc06171e1a68050a393eecb5","signature":"460b33729f4eae5ffc49584da5277b753767ca3bb3db5bb644f345e6c7bc6a63"},{"version":"cc97f9173594658d6916ea4d2e67398e22f44f7ae2afefbff049d31dc516e515","signature":"d9f9af498b84af669bac9e46f7ff09d8432be5e21b94bd6866f0bc8bbbd8fb0e"},{"version":"b86b39edb560843411039d76ec00ad808518d2b7ec2bc60f7ecfb62b183250df","signature":"3f9ffa8b8807efa060021acece74bc52ce0958a306c01abc0298f47427a11f85"},{"version":"9941806ea88633026c59804fd56bf2068094ba95ef1be7aaf770f8cd7d2ef4bd","signature":"a3400242bf4686db85eef0d67ab5d72a84febce1da9c9b28a513bf73a57d27a8"},{"version":"f3dc575f7c6fa0de15644b0e99aa6ee0980dc6e2bde10c1aa5e3d2e9e5f87703","signature":"f6a00240efca79b7ff19367d19bd0753885cba15a11ab0a9efbc1f456a0dbfb0"},{"version":"b0dddf5ef354ba23bee9d4b33ec76c49672d6c5416dddb1df0cf7f5ce9a3fbc9","signature":"296ac57c316ccda298f419777465fa8aaac967b3083949c54e772a6a35669194"},"5fa4861cb5dd57bada5eba409facb063c742c904e6fe5af022523e88391c2f15","1db85151d171902573526e9656390bec47f70004fad73db997d3f155967207db","2e39610d3b182a6ee485f7cdcda0ed1f3693fb980842eeabee618c061803efda","1e9e710ca8cabded13316a0f9c1121294f40e7a30e88482190afaed75dfd325c",{"version":"6534203d0e46b1330dd0df05da1564456bd45c1fb121bb404df7c60f70c35279","signature":"aca17d441d99f1de5739d397e963f52a085bb0297bbe5840e2a9c1061548b317"},{"version":"f78e7ffbad271c931109aea5506d24fc9775ed1a9eebc215e37019527bc3ef16","signature":"18c4547f5875143d22736006a5906ed136e0cb1bc55a50267f4099e0b9edb26f"},{"version":"62befe73e445b9e08194d5cbc523501e9796baa64b12a0096e6bebf28ee28891","signature":"4616b888ff9a5d94befd2a83c116cd1b94fc7390187094f1b64e53fbb6169477"},{"version":"969240fbbfe950af2519e107f5849f9b061d553acf6435b725ab79ae887f4a0b","signature":"2d12d51100fa880d8cc5424c1ad049690d35fefb39f9b04ae87c9e2025894bf1"},{"version":"38c1d9f661aa1cb1c98423673f749a643ad366e16c093f16e85239ef17d20b94","signature":"a48b6e4e5946d41503d10bae08194ba23f81095d51ffbc4c6e17308f56cd6db3"},{"version":"e0d6b7faeea7f80e0399b78b3889e15aec7a55536fed8728453312c61e95c1c3","signature":"8c2f7e13e15f5956a421e2eaacd37da6cf9d1194e4f79df2c26e793192a8d952"},{"version":"e4f8a07ca0cae516ee45182056e52fd286c0a3d13e20af31d8564f7f68ace148","impliedFormat":1},{"version":"9a7a13cad265ed5b51c262501e5adbd493973153773636d528854689a84605d5","impliedFormat":1},{"version":"71aa84ccb1561b26dcea5febb1668bbd7a9d679cd01920cadae15aa817bfdcb8","impliedFormat":1},{"version":"d0a50368d8e7b0ae838c145ea712616303eb15aac2ff26723e78ab7e2a632345","impliedFormat":1},{"version":"4691e1c45d67c43379be624d92b4499cda705e6821046792c1e01630f438018f","impliedFormat":1},{"version":"d82b5224daf2c7663934b5952b744ed3d2c0e47b2fff05c4197ddc6eabe48706","impliedFormat":1},{"version":"7acc80859700f3589fa0cd5a9fbd00d7b8e2d578bc4289821faf2c17cd916b8e","impliedFormat":1},{"version":"73649b44705ca99c0ce09e0069c1f901396d7d632860d8a365871383ba926dfb","impliedFormat":1},{"version":"ed34c34d61402f9e731458b19bb6ac11970d58691acfe892540a55d7e740c2e4","impliedFormat":1},{"version":"1f4095c4069eb7fa90a04c946e5f59c042d4e4e84999a98cad0e8703c318fecf","impliedFormat":1},{"version":"4d73428de2c856624de2fa8b908cf3494895e17c994d0d93648b27db829a6179","impliedFormat":1},{"version":"fd8c47936212567ecdbae551490946a0bd5a1a2288d50c5849788b6724f85098","impliedFormat":1},{"version":"2ea8fcb74664e74f4e9f285a3e0e213fd3f48062a5a708678278bd70e49dc1f6","impliedFormat":1},{"version":"b4f793b0ae6bbda36c02fd85cf4bc796df236ab47ab410e76047b3c436577302","impliedFormat":1},{"version":"27f21c10654423223b33e930755f0a19260f45b59808350c5adcc9f5f5ce5247","impliedFormat":1},{"version":"747fa107a4191c311d1aaf3b1b708aee4ac71345e16cb40c306cd108140efb78","impliedFormat":1},{"version":"ddb57e7a54d3094ab8bfebadee5e1811ca78381c1a4823961948ce296d1339a9","impliedFormat":1},{"version":"946caa76a947e9c5ad1f6c3a90ee00a91c5bf7e821e75259b515318204b56dd2","impliedFormat":1},{"version":"4d2c153ca69ffcc20e5fb1398a460a2f732815f3bba4f9f5ac1397a61788c7ef","impliedFormat":1},{"version":"70e658b997327805edad10d0659e4348e9ca845ab31c5b7af22dde07f9de9cf9","impliedFormat":1},{"version":"11933fa2b74492624b45946f0ba42014fa3f6e2ddda614c546d939f0c643c649","impliedFormat":1},{"version":"bb37028deafb14ddc698590901e25a8cd93928b6f0d24551e001b8baa7d0c028","impliedFormat":1},{"version":"ae5c8581e762c51115516ea32b92ea81128343f84a09d0da01c3359cd7c43b51","impliedFormat":1},{"version":"8cea0fc84770d5f540e33199f371cc510c3d1861ade7729c2df2fccc08193c5c","impliedFormat":1},{"version":"f9011c33073d8d545a11fadb0055f505a625d6bf6264b6af823102735f68db4f","impliedFormat":1},{"version":"6e3751733ee112f7323d5e06eab5fe633def2fbf6d314cb9d5c82eea717e09fb","impliedFormat":1},{"version":"bfeda303e0176b0d10e0e3b96f13ce02f8dd9538f33635a28d5a78efb1140eb2","impliedFormat":1},{"version":"af8550d931d3696ae1f364cd1da4607345be0d3bb49aea7fcc22b11c4696f811","impliedFormat":1},{"version":"e21694662423ec75756bd396b23cf65f227e088e2106dbe7f79ee93ca386cc5c","impliedFormat":1},{"version":"0f8c6cb63be8775aca5f6e0fcf1814d5637c4bf2f8f48170817d5e5fd67313ae","impliedFormat":1},{"version":"221f5c9d51ec7b278527ce5267174ea8b2d22ad072883bbbbdabc680956055dc","impliedFormat":1},{"version":"75a60ced6c5ed94c1d4f793b47acc73e77f821de57069dc9937e04cf6cf9710c","impliedFormat":1},{"version":"cc15a79629e122609c2a92e5d12bf2aa6ffec023e111e05a623dd36e5ec5174a","impliedFormat":1},{"version":"7e0ccd91433031d82b342dc1b4671629cfd2a6adc0a95f8c09d89c73ff2310d9","impliedFormat":1},{"version":"bfcb51291d02c2824b6e9bf305718f741078fda6d8acff6778d09fb07408f2d8","impliedFormat":1},{"version":"53be0f983ba16e0fa7503af63fe5020be196b4aaa48e3a57496fca80525067d3","impliedFormat":1},{"version":"ff283c39aa26e773a9be89f62dd92d3825cd2f9acd2741ceba092a48ac07da78","impliedFormat":1},{"version":"308f816a39ed9cf80578837ae02d7c40e28f5df27c9c99eee7dc42c23d53735f","impliedFormat":1},{"version":"205ad2bdcefa8c2338e3a924e3d1fc8b75579bee6950fa31c5f4a12bcc48b68d","impliedFormat":1},{"version":"bf0417239296a11383a61200870c123f6c9e5b5caf85cf2157b4a6e5c7a95fcb","impliedFormat":99},{"version":"f2aea0e6fbad26c1cbd6c51fad9d45efff5497f8b7cb571492eb08d84ed87927","impliedFormat":99},{"version":"921f399a6557f008bd36b4bc8dd6e8ac18575029d3271f5515ad82ee5b7f172e","impliedFormat":99},{"version":"21d0c1a87611b1e7fe1a7763e5e5c494dfa0b3cf1307ce829145c397e971969b","impliedFormat":99},{"version":"8c468d84a4116a378a6c6050a86f5441efa036faa235834ef204fdbfe8c17943","impliedFormat":99},{"version":"0a1c65731eb1680e494e0b485ff3a4106e29323b9f5931da23d9a612cbe84e45","impliedFormat":99},{"version":"a331abe7151957a7266888db8a11eb72da8bed8ceee46cc187dd280ebd89c619","impliedFormat":99},{"version":"1f1d06065bf428cbc1cc9e9a0ea0d32a4cf10bcfd3e87dfcd1a5422262d41d55","impliedFormat":99},{"version":"6ea653d5c31c1bb800010ef040494a1fc5e4ce0cda8b9786124f0e7018993cb3","impliedFormat":99},{"version":"80d2736093ff441d579360306b062e2441fc8100b3fb3a90691bc0f533fa6382","impliedFormat":99},{"version":"cde0d6a59761c6dd05836af4f8684e420e6df695fa22f94cc09cc9ddcec7cef7","impliedFormat":99},{"version":"686660ddef40e8aacc8ee90a1fb5e1969c640177657a5e068a7e2dd2fb9a6e76","impliedFormat":99},{"version":"5e93feb4cf789551a0ed25ec1abfbc51db2dcc01f307cf72f3623feb10f7ad10","impliedFormat":1},{"version":"83eead80fb3ac4527c466c67ddf3d2eecaae5538c8f37e5b27f3a49832b7777e","impliedFormat":1},{"version":"003dd733890e569eee2543aef9e0a655c2fdc13fda24c4267467fd9f313c8d26","impliedFormat":1},{"version":"349b2fbf0de90ee4e7194dedb0b69e2dc87854f19d657725bfca8ab74f940e13","impliedFormat":1},{"version":"b55c235a99449e5e9010143ddf6ed0d635352de49b3bfcb8b3280ed5632d1baa","impliedFormat":1},{"version":"9ff2c1493af0acd8f8d01acda102b02829e87d91a04ee3dd326a8f28b5a2340c","impliedFormat":1},{"version":"5bb985cc469e74cd0525d167a81d67dd8542bd81b6bc617d3058444edaa166a2","impliedFormat":1},{"version":"3e4b9d56630ad3fe9117c060f2a814e6efae8dd9ed0ed514846ad6807ef1b204","impliedFormat":1},{"version":"ecf88d193d3cc41b7c353e32b44c20553048da1c6de99e2b18a392d21c2b6d55","impliedFormat":1},{"version":"8e25377dad048b496995f021dbe502a26d033db83efd677a1ecea37454f514f3","impliedFormat":1},{"version":"8da15cd5dac4f4a3db42d1eac2d10f5af07292ec4267330ab74166776350b005","impliedFormat":1},{"version":"1ffd62d9bd60c37e531e4330723b89db3c8a657407683840511bead92945ec9c","affectsGlobalScope":true,"impliedFormat":1},{"version":"427ba67dd02ba03ffabac68a10ce82a2a5d0f8ae36ede62b7b4037aa4c6368a6","impliedFormat":1},{"version":"25b52cdedf8326d454926b8a7ac4be47364954f61c72b45f1c92f574b40d0e31","impliedFormat":1},{"version":"dd714007b95dc75387a88f8e5b9a86c61047025001f5274dab2821c21d33e962","impliedFormat":1},{"version":"39f8ce0f2a7945337ba3ca9f244d41fdcc1e192d530f028f0f57004f55936117","impliedFormat":1},{"version":"6d691f820a7615745e950c3e3288f25efb41f4c3716d013913ae56dbbbbd9c62","impliedFormat":1},{"version":"ff16e742d048c50d0623ca70cbdf3c7bea818fc0fdd73057fc830484d8e9af98","impliedFormat":1},{"version":"3fb8b52ff2fc641723b919ee02b044db32182c62b4840f06ad2935c6b213205c","impliedFormat":1},{"version":"417cc4e0516f8833a68140b827c9c8b8ea36072a4238eb7c28278122e2ef7ceb","impliedFormat":1},{"version":"0999b096b870a3120848304dd05d37d259bb015c8da0d37705e5fe0274ead870","impliedFormat":1},{"version":"d6634ce1b57a7505205385db3fccc9cd68ef01cbceffbbee0d59862a638c069d","impliedFormat":1},{"version":"990e22e574d08f3a68354318b2e45dfe10432525f99a3695d0c22544697be725","impliedFormat":1},{"version":"83547e464fe561d8981c361758ec2bb7ae332a859aaae6c2619a69256b36c5d2","impliedFormat":1},{"version":"b7483865b9dcf3493d660f0d57cebf7338aec81c4aed75ee30cc59c37e6c0088","impliedFormat":1},{"version":"facedabd22b4874d567ba3725c4590366709661f3398f517d376fdf514450a5b","impliedFormat":1},{"version":"6d771809eefc69471cf1d4babc8cf0403e74ca2b5a3dd9e3303f937ff1624d95","impliedFormat":1},{"version":"522b8a59013205ffb73cb3b7f9baf7ef395b1c2d000396740a3f92dcaf34ede8","impliedFormat":1},{"version":"9a105739a085cf79a105cab59d0e4264ed5779397e6df8f28830a4b5da4d5157","impliedFormat":1},{"version":"b34c7c09ac5f6e914b802a6e872dc73e204cd4b2ffaa63cc50906c0c98f4a064","impliedFormat":1},{"version":"ea3fbbd63a607a0247a07fee0affb7ee83ee17f14e5f04a5cc72eabe298b009e","impliedFormat":1},{"version":"b9f5b567684a6d9583e3631ab42effa785d4c9af65692fc31b3b7b1ee87e3579","impliedFormat":1},{"version":"2ab9a1ec90a4c172fc7737df3a22de84e4d4da3ff347d4ed6c326d42ed2b3b1b","impliedFormat":1},{"version":"766a166633ef3c76c51980527f3ab95859509fc940c8ce27d598a0ad443e3700","impliedFormat":1},{"version":"c33884d9f1c08904bbaf525cfc646101209eae179737641743c3c7ef0f6d2d81","impliedFormat":1},{"version":"b4e6351aac6432b3c454028328b35c5d7e20ea1e2edbfae6452a34600b3c18d7","impliedFormat":1},{"version":"fa5ec729ba4ff820419258941ddde1c468b5c51bb32c58c42fa266d5335c27f7","impliedFormat":1},{"version":"dc8134578458f83a5d1c7e298d9c734e3e3472c5a586dbb7832b5833b1485684","impliedFormat":1},{"version":"129e7a2bcdd8630dcbf779526ca849033f09ed1f2e17f8eabb0ae1eac794e31c","impliedFormat":1},{"version":"12dd9bc8c35c89f27a53d9781cc3d8aa06d52bcc678fefda07b9fb2ddaef5ec8","impliedFormat":1},{"version":"ee25a75ad2cbacc0188900f3216a60506b48f24bab8bcd2d3e3cc040b3b05f8e","impliedFormat":1},{"version":"931ce1b79f01c47a42765a2e178c991d920d5713566e9ad593d0c9989bb7453a","impliedFormat":1},{"version":"0c77b391418bda87ac5910642db363f9a29396eb1031f0a0870795d820265360","impliedFormat":1},{"version":"b68b7a6dbc11a291ca17238803b470002b3c8d8db489ec37bded30b28a108b3b","impliedFormat":1},{"version":"c3eea5f57b39cafa3792a0282a558703c48ba8b8f9e3d34c79bee7c93280c59f","impliedFormat":1},{"version":"63b06b7ab652ea618b753e3b9a881302ea84a90c944abc0af0eff4bc7d56f44c","impliedFormat":1},{"version":"dc9748cbe99d4fdf3ab290c3bf210cc5e536a8b7639a9247cf88714dad0f67a1","impliedFormat":1},{"version":"5a110b4d68cbd0d8991526c2f57e8cf56cc075111e919fb56b41cce11655e661","impliedFormat":1},{"version":"1fb10ebf3c839ea466d78f4fd5a7f5fe01ccef71ee61e3c14e4b84da9e708bb0","impliedFormat":1},{"version":"e0ed7c0c89294141789a84b1d4d2f91b0127b2d28729c48784ebdc4537f88a6f","impliedFormat":1},{"version":"a2bd3555de4c2da3f2b15ad04a7a625a3f9c305eac2692ae832134d5b37e7e0b","impliedFormat":1},{"version":"70653359fe240ff5d164cc5ddb621bd72ec63e6de01848b3df345ecd7e60854f","impliedFormat":1},{"version":"2db3ae4d6fed677542d711219daecafd4c22af31cedca621ce6561d491b3a25e","impliedFormat":1},{"version":"289e7a8da4ab201907353e9294208931cbf418ffe8c442f8050f03f1ab92019a","impliedFormat":1},{"version":"573cef73c2a17538719d22a8742c1a544419e185eaacdf099cc14b97189ad7c4","impliedFormat":1},{"version":"1db1a00766f7f7e26ce675e8a8933389c21399854f29c52cbabc3302f8b7879a","impliedFormat":1},{"version":"e45a6828bf49baaf06b0beed34da35db330226d123dfb96868fefcc19554157d","impliedFormat":1},{"version":"f4751755b0c010a983305d1fc0680c7ac3127335ddf3a78c429fbf2b4cc90c41","impliedFormat":1},{"version":"f831a9274d0d8b6533087203dc71c09c9dabe59b269f4da20e5390545b024955","impliedFormat":1},{"version":"5a156b674da30bc111a4a681cbda0af0a5ca2a01b54a02265d747f6ae1eea4c6","impliedFormat":1},{"version":"4e2b37c78a94da80d4c5346638ea31492b73965e645ff7302bf469cb378b9d88","impliedFormat":1},{"version":"261ae6b67a1bd671fbb9e255d5df809ccb38d0dfa0f95427f2e91c2503f9f326","impliedFormat":1},{"version":"3d5f1be41e53e7da146726bfa4303d504ee8be0d2a654175061e41b2e769da70","impliedFormat":1},{"version":"620ca6bfd12bd65f3337a6d4ffcfb79fda6a4f3d7663907e0de25b853c7379ed","impliedFormat":1},{"version":"30ff23abdf968c258968a05d63e0958190aa5d4e4f0ccdc13c5d110912bd5294","impliedFormat":1},{"version":"c8f656d5e2f77a7980b3a35a2d9aba73920b565cc8ba361d51af3b147e969b03","impliedFormat":1},{"version":"1f8eb622771f0372ea6872b9c65dfc274761be19a681a496ac8b2608948330b4","impliedFormat":1},{"version":"a451dd45f36deed45fa49a8bcac6a03765b39dff5d9f8a8b894a2f43a92f71c1","impliedFormat":1},{"version":"dc8134578458f83a5d1c7e298d9c734e3e3472c5a586dbb7832b5833b1485684","impliedFormat":1},{"version":"332efb43b476c90e7b8c55ae00c09d1f5f6914ba21677b54c0460ac112c978fb","impliedFormat":1},{"version":"cc6e650e3a36d4eaa15cb231d05fe8f6753af140d2622b9965aceb41384722dc","impliedFormat":1},{"version":"e06f40d5d695a1b59a6bbfb42c091d734043b2686519bc0530aa1d3222f95c6f","impliedFormat":1},{"version":"5fa3a4d076ed297af8f139b22ab4b279b525cdd2d2e7c3b192e69def862433ea","impliedFormat":1},{"version":"2b32e48bcec56ae14bcd8ce6b23a3684a79111c875b715fdba55a818781b3c82","impliedFormat":1},{"version":"12db79a1804229457b9d2adadcbafc4767362cc646c137b9ac639fffc7de3ea9","impliedFormat":1},{"version":"e7ef698a73bba508c6e4da79f9139d067df608832b8be59861de6f43caea1129","impliedFormat":1},{"version":"2446fe3c4e72c33582b4f371d033dc577c245a9cf3efc3d7d107db0b8812d394","impliedFormat":1},{"version":"721ff59bdcec6c60783f7bc26f19b115ebc9f33c9f5954d995c78dee4e684d24","impliedFormat":1},{"version":"cb55e89933eb133f6a281be653ae0cf0ba9e070bff2ca1e76856b192af920115","impliedFormat":1},{"version":"e3156afe03d75a5dd1e325d34ef8c599c8673fef68c5fa4614761f44637e7198","impliedFormat":1},{"version":"c58f577514386b633c26658965fbc0bd6cbaa610620740ad695d946bddbb792d","impliedFormat":1},{"version":"3d53f58e967e7e23030a672cb7cb15e4bfcf66befcae16ae59ce3d9b9692946b","impliedFormat":1},{"version":"f3a15ca117872c00d72701ceabe11e4947746ee5474a1e6c43f32662b4eacd35","impliedFormat":1},{"version":"3af9ba74a83f8830660b931940565fff64c102b344cd47648566ca48f53d012c","impliedFormat":1},{"version":"67c63b1fbb851f26c86fb4cf46b677a0a3f5376bb9ecd674a71c59aec2cdf2c0","impliedFormat":1},{"version":"5a0a080141b24a824c9df41a18dc9db4a1db0ecd2e9226ab0e95707ca126245f","impliedFormat":1},{"version":"2a6bd1c4457ec600b0a9b7fcd256cb90cf4ce34112f230814b03085ae0523188","impliedFormat":1},{"version":"197ab199814b65ebc71a8239adbf4ea8012fa90aa9bd2e441d149f2cee1d4395","impliedFormat":1},{"version":"875dcd8be0e92692ef3e7165fb2434934a2d717707d634d3725861e3594c65cc","impliedFormat":1},{"version":"36847c79120a70bf449e5cb342d7170eba8b027c37b7b5009e0da501179da341","impliedFormat":1},{"version":"929ac868ac91f31e9e8531be277ffa06385de74346a8053453305266a2d4c2d4","impliedFormat":1},{"version":"99ba1e34daea98ccf4dbc760d2ca22c72370c16d83cb89d28bd8418da5d25a55","impliedFormat":1},{"version":"776c41efae40d340835279a910473663fdb9a9ae6d526977d7e8820c1eada03a","impliedFormat":1},{"version":"5a0873ce04f8c18dce75ee09b3d9e96e864ae0f0c85d8d2166c289a4f6b77d7b","impliedFormat":1},{"version":"b09bf038a3378d88de7bcfb92f583d0bde896f1b06ce7a2335d6818c92cc5a58","impliedFormat":1},{"version":"8479d9cc524526f2e6259e55e286e07af1d8a27f0af800e75a6ecb509a9551a6","impliedFormat":1},{"version":"ef2c3666799f6e7af659597620074385a4824afb1fd1a850d519934931f6ae5a","impliedFormat":1},{"version":"004727090457383d3bf684b2d536c6b9c7c94be68e86dad15d426266dae1b4d2","impliedFormat":1},{"version":"32cccb67e6fbaaa4fe81ec0d6cd0c7c103ef6b8ed9b39d97d24df7039e276226","impliedFormat":1},{"version":"9e20901a445cb5b44ecb405b7380b501f3d5c8351b8c0134e7426a825568e771","impliedFormat":1},{"version":"4116fe61d8df508b91b5658a39ee1ea7edb55749982bb59f45a0b21fd7dc8871","impliedFormat":1},{"version":"131d1c5b9bbb611e2db2b9bb51c0a1cea57d698c66e5415536fdc010d6ec2933","impliedFormat":1},{"version":"2b693a7b1b3a66f2d2d80eb14a2556f36c826a59e0e033c502e3254679b552bf","impliedFormat":1},{"version":"93e81c8dae72eec076078e4ff8942da02004a04ffbb23027f1061c03d15da43c","impliedFormat":1},{"version":"8e06e9db90c9c7414e8e40929c10a93f40e797c0a4f18a83b57c885ffc04a90b","impliedFormat":1},{"version":"94a139d06f9d702c41060b50f64af53704020ff9989a539a871bf3ad1391f824","impliedFormat":1},{"version":"bb8fdf5e9c8eb02a7e7f0b18546a5ed7ba5022c933dd87fec66257b68d232d97","impliedFormat":1},{"version":"f4b04b332206dc06c64239bd6aa78ce8c24b4d229ce7f7aad4e129185d6c1afe","impliedFormat":1},{"version":"25ac73a4ca7d33315012c96cd2335b398c6421263e5a2313377fb7605baf9f24","impliedFormat":1},{"version":"9aea4f46092dae8caf7cb1c4abad04acfb45be9f193d388083a475d9304a3e58","impliedFormat":1},{"version":"60cb56bec96dcf794ea725cef44c4a9cd0d07316adf47f14d93c7fead489bf13","impliedFormat":1},{"version":"0490663d16d9958d06464ded02bef9ba85926d3285058a6aa8fe822947a3931e","impliedFormat":1},{"version":"c3ca4b1c1ab4250b9aeb789d086a5764c513910ddae72c578cafba23ef0da439","impliedFormat":1},{"version":"6ac1780dc3ae984e1e46d4444e6e98d849ded0536a7d6229c57a207fe2668ac9","impliedFormat":1},{"version":"1c5c1695f6568cc55e8b6541a4bf35e1179230c6810179d30234f29d7aa8adce","impliedFormat":1},{"version":"9b3d2af1e30920ff646fdb06759bbdcd3da39cffc7b44a8683203061641c053f","impliedFormat":1},{"version":"cffe5e84ad85f2991c9f5073ab4295254f37f079110d70a6b47393e00a1e5e9b","impliedFormat":1},{"version":"a9818cdabccd6ff7f079866c735f5ab7ffe6b74f01fe57dc3c6abbb4dbb3ca64","impliedFormat":1},{"version":"3eba6a736ed2eb2fa05569729f2ec0bc3575888790303687d6d33fe274249402","impliedFormat":1},{"version":"959369ae146b751ec7fcd8d691e6a113b155bd6ec88494e1f6f933e4f5493b07","impliedFormat":1},{"version":"ff8ad72ba2e4be466a0caf50bc5661970a15e51c73e92fcbff92a2262c63decc","impliedFormat":1},{"version":"edb341959c189bcd4963ab575addd66ebd2e4849fa4f6591e7320cde294a76d0","impliedFormat":1},{"version":"e1047ef9bc2c1b6975fd953b03a354ea9b8a9aba09f25bc7dddbcfe03ba0de64","impliedFormat":1},{"version":"2b5fa5f68e7406c5be937246de5ce5195cfe4fdbcc6e8f77b01b7ba4ade4b30b","impliedFormat":1},{"version":"2496f9bbf32a139a181502a76351d379db6cade347a278ed8b76c72cb64d60a4","impliedFormat":1},{"version":"ebc8f5a439221b34ea3baeda0e5fe699e14469da53b96b53878ecd5782341aad","impliedFormat":1},{"version":"bcf87658f2653068209a37441b88dc1940c00b587d4a111c8c579c959b4528a6","impliedFormat":1},{"version":"31d52027e920520e67bffbc27f4f60a2458f8995f71b000ed9021ee608c18071","impliedFormat":1},{"version":"9798c76c201f3a3f4aa25997fff8088a342ffede208525179c126d31b4932dd0","impliedFormat":1},{"version":"d9a6840042be645a323097cce648c8f274a8643b4cf08a9dc71cb1bd2f912334","impliedFormat":1},{"version":"f726b30e83818b79ad1ce4536cd55ae2dcba292d1c9ec2b4ac9cce08961ed98b","impliedFormat":1},{"version":"62aa3b35048c2290eb7a9c6537c816edf22a570abcca51eca7197c30fceba497","impliedFormat":1},{"version":"49c597e8ffadc90f81d4242e367091b14aae5b22050059d8c830af9067dbe997","signature":"36205f0b89ac9a5bb7c2ca7c8df6862858ac6756bfe7ba3422272ead4899f7ec"},{"version":"6a0592e7da00b5a011e588217513a2614e981233172a977d9b60b49b2a2955f7","signature":"c618d00919fb5b659bc3ce80dd546ec0f520aded63c967439524222bcca5d6b7"},{"version":"953471b72bf7b4fd8fcd6e84b88db028a2ca03692814e96719e84cec9c6fcfd4","signature":"91066697cda3c0e950994216f409b14f1cbafa9a7c08fc09c70a31e2dd2339a2"},{"version":"d671ddccef311f2d2c38670ff78db77fb5d96e14b421fd8398cf7c3754031806","signature":"ee4fff689c66a9e569e3d2091a12a91a932fdf82dbefe93f2a5e08efc340b709"},{"version":"2ca63c0f0b157d3484a58eff53b0e5e557b205baf286ae3d87ba0c3d5d8f65d3","signature":"dfc4100f08aad2b556eb0f5d577adc152275cb978b102eb05f75307fef25d85c"},{"version":"7519948c0b3625f618babc1adc73fde6f8b4a06ba7483cbfc67a3f10c036e766","signature":"de309ea103173b2d57f9689103321021d06e8bb30c9238b7654e678df333caf5"},{"version":"2bf53680e8c3822831671f239c4a63adc6bb2b70a6adff589140cc609991f90b","signature":"8b9c0cfd20b4df9b92e53c1e91351c4d7dce34914c007108dd13af77e18e3502"},{"version":"041bd44172e1bb8906c821075b8698cf8be9e40119d248fefc3f32578816f27f","signature":"65ebbce05fd2ab7bc8eb32ddccb6e3dafb35223b2709d63e59e34205108e4184"},{"version":"5102be80a140fcc64580d08911e7c309f07890a343aa8e658418911eb30f43e1","signature":"08e89d0b46a667a7019fa565950d34c6f8b2db11b8d4b88be6206086d6ac7c52"},{"version":"78ab82b70ef46aecf250b5612f1327f8325d17f980f0e97cf5d6cc239cd59a89","signature":"f49d7c269bc730f2cc17a38b4a0263e507020bc4720cb7405e56dfa7b8d555c0"},"3fe9ea0b33a2853f67a22976da632fae15697678c9d12e991cfe4e3b8cbe08fd","adc47b811376080443070f3724d64acfdbe0962b458c0c068bdf86256d8b2d3f",{"version":"568b5baf96d43168f3ffd3682dc6fb6306e4bd1c6a5095bbdf1541d9e3edb5ef","signature":"d59ea0dc770918742dbf27b2738f5638790edb0d755255e852a850a8ff6ffaf8"},{"version":"99494a3169de71413a7adf350f51ec56a3d71117d443783e4246e95deb957a01","signature":"97f9c538efd75c7a4e6cfbb3d7857952338c662125ca36b3512492296badfdfc"},{"version":"7e6da60d7ef622b9e304cd7b4ae1f402291894e733c325a23ede46aca930bf14","signature":"964a4443deebca58b3d370d00c40e5b1bc8b667be10bdb128e545b58cdcbdcd9"},{"version":"c42d30610ed2777079b26f0a404edda2e01b81faf674a077ca160ef555d2de9c","signature":"c5db0d80bbadce11943b519705d443121daab61e9e9beb0b080323c1f071ed6a"},{"version":"8e871bd0aab5b63ddee23136a5f8be414a9245d74cc3a59980056f659b25327a","signature":"f9f38e4591ba8cdb32d56de220795188003d97c6c29e37521c62b8cc43f171f0"},"08ef398c52f5892343bf3790abf1c882cbc45c193cf76f973dad0a5b69a9af8e",{"version":"c3f5beb6934422b390ab7493bb08d40241c9c8dddd0b22e80470a2ca995ff20e","signature":"aed6f1f90fa7de78a1da4aea299bf07008fbac86642b35cddaf8f59b695b1f99"},"f6e1cdc0a5231f67a26380615c20a51b8b6b22aff74f6cd1e0e37904df18edc0",{"version":"6c3032972c77ecb470cd5850ccaef48e55a95c343a1e1c338407d0b6c1129f95","signature":"9221fde90edf8c30abc954b085cc5ea7cce58c3d187b1207c79ac29a813db653"},{"version":"519b5e95eb5478af08e01c30c54fe0e2270eca382b6fe722169fb5151408d057","signature":"bfee9c6b052cb19f65d465512c446e55213e94920917d30751cf748aecaeaca0"},{"version":"d4a28f16d678d6c322aca54f86f8cf18c60192095505c6e2c312396f9e942e77","signature":"f38d9f5bfd67a7f622442b755d80dffe8e3704bb1ab71ebbe07608d796f88509"},{"version":"a2111f3761f324c84f7150166efcc0bfc1bf407ba2f4785dd3dc5279f908bd35","signature":"718b9df242a5551fac51a3984cd515356c74bfae072fbac21e80976429005dac"},{"version":"4bd5bd9d548c6a0b265ed803bd43f55008ae08837cd0667a8b1586b5660a2959","signature":"8a7615785b2f89bd64622f0984b93ceef01999b25687e3da29e0233e297e8aa7"},{"version":"f78f980390a45f1c446396dd5afca52cfe705d174db065f19ee2db391ac29e4c","signature":"044800d28629468d6b237acc468162e63c205a3060a882bfce0c5aba2dc90486"},{"version":"884660cb3881bc3d32955cd452f4db753bf3fcc4d64e43ea563110fcff45caa4","signature":"fb650c4a02a3cd38356a1702a85307c92264e5d751d5399edcd9d07a8408676f"},{"version":"2bb7636e2e587b44e8b0c2e76eb71ec20f82269a5bef7dede4016ed15a07467d","signature":"307909894996bb963a114edf09ed95b0f407692a98ed43b50c223bc4d98a8c27"},{"version":"49ac3d915273f5fc5ce80484f1a8218afaddd5867c3013d20090a5e09e954671","signature":"32eda605ad89e0a58b088496ec8830219961d013f54b249f26173a00550042c9"},{"version":"6264f0f5728d517743af2fa8e08e10e1609e00cf7810485f1d21f26de5a6ec92","signature":"e89c4503106fc75b03bbc470b9ea4f66b60edbd517b5a165cef4e11355d23c49"},{"version":"24f44d0a03d02e49f2168291cf5eef47b97b0cf04434bb5c3eb3e820402747c8","impliedFormat":99},"bb957a97a43e1c7d6580a43ea506149938f81dfce45ed60379242125b848b5c3","7679d24f0da4a6295b6204bef1d6d5bf27e064226cce70cafbbeca8633b709ad","b8616e62d84d76850f00a8beafe3221f296370d4853264c2ac872b861594f845",{"version":"eaa534af1bb4bbd45468bbf3a75ad239a996bdc771df45c1c5185361eec94f48","signature":"8c6277b0f5833e5450ef971e1ea388449683dab7a032b979f56cd2410f0056b3"},{"version":"d834335ea217f323e6f5ba58b37ba3e4b607b653a1d70f35bde5111b0b2f43b5","signature":"ee70bfba6a1c688299a0afe821aab1cd8f9651b4aa2d50e7e4bc0f4b5969d9d9"},{"version":"326ebe79ce222b142c67120ac8d1a91ca9632475e6e1f315bcbf4342b13546b2","signature":"92437a74738c83988e9672bb47e5f9f0e244766ecca1dd256a730cabc3ff4975"},{"version":"2e03ca5671de2139754830819dcae5a04d2e5275901f664bff9b126bcab020e7","signature":"6075670a0cf4e0711e33cb3adc4b85e094f478e39ff3a0f5e93d26c2590b59db"},{"version":"8f963f3f2d00c58d7b09be0bec0da605943bb73a4d44a3454386ee556a96aabe","signature":"efd837d074ea264b4b431c1d172601c795259027b290359cce559f7c3e0449e1"},{"version":"fa4550fca13afa36844bf2a03e66c15d82744b8eb0bc3b1cc7ac60811f5e8f17","signature":"ce660a893c2c94302b07d900c602e8ebeca260eb21960799a1d31182b221fac8"},"86728bea9c64329bb3415a120adbebf59853724fd076b3f2babb6475ad0ba476","c32d552b7b274b2eba243edc5917a19b77752c78425b1c0783e3c386eb832a04",{"version":"1b9571136cdc05dcfa6c9517c09d79c55ce21aa5769e942ec936c91176395774","signature":"0083f59adc240f28a625263c4fa895ab9d012f423efbf2087309bff06e004283"},{"version":"a68d3adfda7f8ff2fe874890a8675b4064f8c9012b559ad0e2afcde7ff9cca0a","signature":"30f2fb2e6b06130cef102458626521a02a2c561776b6ec5cbd5a2d2acea5dbbd"},{"version":"99b3b8a213934ebcd932bc27751361d69777c90d1d11e6db8ed55a751e0796cb","signature":"75b5a7a8fa2d2682848a6485a8dcd3b4b27f6b4652b3888f1fea3dba9d77c1b1"},{"version":"e60f078c2c7d6102cce4165d897ccb531db11e155ff631240ae10a3396da644c","signature":"8e44d21443fe0bd917f3c19b32cc7e3de28c7e500e5a74d3de6b057d3459bae7"},{"version":"2255beabf0d4d979d4dc48a2284caff79571d1e3d11213f9f9ffa3909d97dcd9","signature":"1f27cb5b2237cf40849c14c9dc47d855b726cd8020da26660de29d0aab3e1e07"},{"version":"69d3168937239d7a6c93c22727ca69cfd557a0ea1991d4abd66219056455dcb6","signature":"1f6ab4f2159d7465b48e05865842bb08c00563c119b400dafb50b3e2f49a1735"},{"version":"fe166108a9e233a2ae2d8296f841de45f6a54974470593b8a1f2f453a112c97c","signature":"832fb0129c3271c477e5f25f69ef640803a1670652e0303acbc9fdb34a98652e"},{"version":"bfe38b0597a0831c4496448cb4d85638530518afb01241be076a958cd51cb997","signature":"cd7aa4dd6139b449cd86d028cb95ed729bfe9fc622299b2dc45646f0eb773fae"},{"version":"b12dc6e8a9d9ade37555e80d3d8d3a800607fcb1ee507ed0e60872565c573c49","signature":"191ad905ba08991baaf4d3d5348e0aadb563514978ea48ebc832fa2e65365e3c"},{"version":"f5db16f82ca135ca621321b160fdef165d2175b9a66d623705d178524ffcd4f5","signature":"a99d53d6e963193b03a973d8374a197509918d33b4ebf71b4dde0536bd8b91f8"},{"version":"6015db0a033bd83ae39f39152ae678b49d2106ce69fed46ee7dae2af0057695b","signature":"0001d6193745128c06fa6eb95e6c08e667e42413a99e7de830369e6f457c2f5b"},{"version":"76f337a51f3927f53494e7d110ee176e57f417aeb01e69bdc480b60d509078d5","signature":"0390ed7f87d572f36315c67face013f9f9db234052fb5e8de7929f5f6c00fe07"},{"version":"b13c84c6f4cfdf04487949d9384bf621239887d4b62267a4c08fe52a841a18b7","signature":"5543f377220845a91c23990536ca4b123ca3092a3e9fbd9952e76e34e254c7fc"},{"version":"d4da0484a1eb9b3d4c6d496f45855de52ba3f1242ddfd0acb026f1fb712df03b","signature":"e6ea9066fcacf15242c6bc660dd6c4aa0affcb23d80a21104513aa1a8651b6b4"},{"version":"86dad527fe4723f2e1d30fae021f41855279fbfff7a7eea7084e7f90c1dd3068","signature":"45993610e6bcaa87663d0b43692b3eb6362f0fabcea90ed8a0b491abee367c6a"},{"version":"a72808eccad4f1cc6cf43f4055d6a55735ff4d2feef5db4a59211323aac1f4e3","signature":"847d80476838a766c0ec18f723c8ce70faaf0a8bf3784347bcc6724549e51e2d"},{"version":"47b5d08d35385748cd34d8a1aed53e7e93cd28ff57f6e513465a96f4762b4641","signature":"6f724d0549ef567d07dbbdaa30505f8ef8353ae44485dbcdae89b4a86681e061"},{"version":"8276bb3e2dd8f5203662ddce191cc87914ec37cf6069bec262b309c09f75640d","signature":"1c19f3254881ffd6e97102ea816271999fd61939229bb6fad3dd0c6c009f2b23"},{"version":"3c11ab191ed79ad1c8e38970a58703c7d63d85c4ac75ef49b8cfb306613f0d8e","signature":"449ff6dacb9664ce3c98819b0859322ee34cf454c68e847f1ff0227194e6a047"},{"version":"36aa19da7d1b3094d10ab6684eeba2f58b004a3849e04390615d9759ee2d8f73","signature":"d522f64468aa457c3b48cf6118ab2a7669e36d7c249e60b01a879a6d7dfefa2c"},{"version":"f7f84e01b14202339900fb3fdd81de39379045d7dd1f8ae30dbb5e515f25db0d","signature":"37a36a262687f2b447d7170fb3b368c5e64305f63906a42d9b110f0d8a23148e"},{"version":"113fd73117cfd486d3469c4a985af83ca99d4c11f5d1e2c3fd00b6a36a540c6e","signature":"c4243b12074c6c30fe4b4b52f42f7769c0fa0e7edbc1f923ea932d4b9ad202cc"},{"version":"980efcadc8f1b66d1f1eeec15a722bae8292c056a3762a8e88f32d957606d47d","signature":"18cb95755f7dffc222bc2a81c27fad52c7768c503620d5db97aa858d2dff202d"},{"version":"6571be0d88f0d052e8d528f9f6e409dadf6ef5104e08ba8935efacc2998dbe80","signature":"87c79b9d4ca0a4152301f0efb11222846c3a7e98dc267b2df21a76bd67c7b300"},{"version":"9ae5974c2dd8fdeb5c46ff51ba5635d6713d6e6ac6bbcada5414a9d765eaeeae","signature":"9d6f4a3c7b11905bfce8d4bf9e7ab21f48b9a0878ce96fe918ddeb3b984db919"},{"version":"44fae99faec8d9caa75b190bcfdc22f37a1ab1f96e3cd2ad10b1b831eb4c4902","signature":"437a51a9033039357f31dcc4fb02ff3d68ee0e0086af17491bc46d0a1c5c7e27"},{"version":"02b3b77a8d29c9ac409edc1c7a4efa339e2a07e3c5b5e6ea16f108c6eef9e20e","impliedFormat":99},{"version":"15027fb59928687a2eb144393237aed9ea5c503f417b877f2792801d644456e3","impliedFormat":99},{"version":"d5602055e69da5aaf7dafa987dbf645f608f8c66536c7965680fe65420fed2fe","impliedFormat":99},{"version":"41a5ae482e864a6128e6054e88f1c0e06884793f92aff5c67144fb02d2373079","impliedFormat":1},{"version":"54fbe89e29d77e1a7fedadbd85dd1a5831dcd91ead31714e390f45b066efa587","impliedFormat":99},{"version":"8b011aff1804959d75f824fb7e49808554d8cb8e9fe84c80dc581e44a5b4f85c","impliedFormat":99},{"version":"5755ca412c9d23cc5f14f9bb28b99a3f207b7cdce62fe6df24db28169abff721","signature":"ead29d64802a2595125e8ef65a87925db537c82314117535afef465cd025e5ab"},{"version":"08906ca4df290e78211120ae722953b460e978096c01ab2d42a682088fd1203e","impliedFormat":1},{"version":"438b8499ad4b1989fd1e125baea1e88681f307104dd37d8e5860ff1f5b1dbe40","signature":"c456d7ef416fa3a5d75a8cd909700841e4e87498aef6f3c61c302feddab1b423"},{"version":"c8e3bbc4400ab4d13164e4cce7d098c87614e1ae7adc93b7d2d3c11ab74b09b3","signature":"aa01012c112806a4ce274d1500bb0189aa335963baf2015cfade10da4e81cad1"},{"version":"1b07d7cc8a9072549d78a184c49a1f3fc9439636fbe63623c58f7640b6638446","signature":"b05df9e5307f33e6f2dc26ccea91c861747241a54be861606a54c231fcd82250"},{"version":"7530e628ba63073a53a62197d0c6069abe119bfc14701cb61659dfc39ebeb7b7","signature":"31c072e11ecd698f7b6b65670da90581b4669d60a2ab9ddcc548b1d6182fa2da"},{"version":"9cf82669ed6c5efbed50ec22da982f43f400babb18f7d6eadef07ee43049b137","signature":"01d6b6e433bc7aff0943789d56fcb5fc31906ed3ed634492c93798d1b834e3d4"},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"197e2a11354184850d31b55fe4488dd215b1f05e64b3d4dd60de3a49a21171fd","signature":"17c1422881393b31998480890a7106c7fa65c74fc2110fd80f5e3f6556ebbfe2"},{"version":"3cee01f3bbcd2be80687a9b1b4fd7d1aa38e1dbfa1fc0ca8f58bd48875bd58b8","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"46bce59ed760d9439ea6e12b14fb55f88da00f01af96e49143e3c1e5c853d2d1","signature":"35cbc279652560bee56b7c57619629288cdcefa6dc18263384aebd7004e00017"},{"version":"540c5aee6d028c1a28ab493343b3360f47cd266e670fff419277091b10c3e346","signature":"3bc5fe58c43b1dd7091f09d28a41c7d061f66ddc50639b1f835faf4e0de21790"},{"version":"33b21c95fbdf0034c7244085c6cb3a63ef68f1dc7b9197857041372231be9675","signature":"b0803fa9ee0f10ac3277c80c2fc88bafd2b1f891225df9fcf9cc0bf25b0f5086"},"b0962a58749b2bef5edb9aab2552372113075f2c15c726ea406ae5867b06fa9b",{"version":"af2c31608b65ba5eb654a818b4dc57b33c186f81e5e20ee15bc0bb2af588f8ce","signature":"ef4904cef0bcee23bf22b1dfc9a0c3c7955399135fa5e6aa096f61fe5e48c5aa"},"93b869c60130885c55f9ae30aa9377efcb829f7bc55ae0fd13113a3b5f59c671",{"version":"5ae1add01976c729c00c73dac42f3bd508deb63f7418f2de5d256db54fc8101f","signature":"f4a5b1c8b5d33a38238d7e4bbc483079b5eeb7d62fad67f3f2165f5a5b36f25a"},{"version":"bc89c1a36a1a54467a3f2c7c07d824d5a7a2838b5d33facba12c60328868814a","signature":"1039a6a150ee668c20ba080de49e3a1146e82b5f1b26e69ea7899e1992fb6a53"},{"version":"1b33240773ec8258eb5fa79192517604fe273f9492408df65000b612690191c6","signature":"745167cc1ca107e97045355bfaf6f2452ce82dec033831a8a97ef12017debbf7"},{"version":"21c10e12123571059bbdabd8307ed5b4a82a56358a80d08374b778d0c46274fc","signature":"c761a21705e044fea4ebc9f129ce8019b5577bb8dc47990b0fda6275b22bad90"},{"version":"1dc7ce4c8debd1d61afb202f353f9a319ca4798bfabe2f86d336a3095138bb72","signature":"ccfc8e420d456844cde4364d8fcb90eaeaf8743451790dcf0b6b853f391da85d"},{"version":"901f60f74395a0a217bfcbe3195f793ad5e0f586b73792fa968a20162c4cb17b","impliedFormat":1},{"version":"f097e178e62a9adf34b33a8cac0be12412b83b8c97b74e1fda401f33936af4d0","impliedFormat":1},{"version":"aac139b74b97134e3b7deecc778d4355703e749ddb37736fd6186d4bdac1b9a6","signature":"784027f03987a66a17e59c449f05062d381460d323298cab4a81e617bd62538c"},{"version":"83dbe0d9de15cde6bfa18d3d5ec5236e9cc06b28a93d325617c959fd54316118","signature":"58304afdcc8d19e68a2c3a00f423ea9507ad67f29bc7485efa09f73ba5badd64"},{"version":"a9055189190ba093e72eb06e272a34298c4590f5adfbd4d7b3b5097ce9c85756","signature":"77e447c50b1769f7dbd48561a4cdbd9bd6813bc1053e8a8a34aaad2334aab66c"},"692343e43a503f181483986156b1d618931e407b0a51006e2a3fc7c53afb738e",{"version":"ac7f475cca579a5323f46d788f0c5b031d0e3557f2cdbe79065f9a3c9c16dcc3","signature":"347bbd9abcdf599240afc109a897650de7db5b84d2c8b861e5cbbc00101bc1d9"},{"version":"0adf84300dcc1b3e66c580a6486a8e12aa6ad721191e2c1a3129110810284dbc","signature":"64a7430e9d9aae65da5f2436a32d74cbe8a1a5078964cb948e2ed5084f67aa6b"},{"version":"a1849dba671be38627522efc092efbcc80891fc3bb6ce424a1198b4b160684af","signature":"06396fb7ae37cb05f4692c6a1e873970063c8945ebf56b625692b53f222bb368"},{"version":"289cd7d9d2b18b21709d59e7f92bea82792939734f968cf833829079c6aefc49","signature":"b70f9f504e70c387a2b1005e9c580b7c22d733b6cd6f878f89ede140138f5a1e"},{"version":"e12f9649d921f0e5acb1712b0e7943cf4a2d8e708730bf4c4ee800f5a8404b87","signature":"8242cba1c36f784393c1b930a1ff5b868cceb2f16738cedfb4e2f3effa605580"},{"version":"4dbe95a799cb614583b6c5cf4e98aa879ee1a32fae2d29aafbf71562469cc5c1","signature":"1d8fd0137c7fab946592b78e320f6ce40c1e3084abe141e567306604c3d5618c"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"49a5a44f2e68241a1d2bd9ec894535797998841c09729e506a7cbfcaa40f2180","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"1ca84b44ad1d8e4576f24904d8b95dd23b94ea67e1575f89614ac90062fc67f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d586db0a09a9495ebb5dece28f54df9684bfbd6e1f568426ca153126dac4a40","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"823f9c08700a30e2920a063891df4e357c64333fdba6889522acc5b7ae13fc08","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"b5895e6353a5d708f55d8685c38a235c3a6d8138e374dee8ceb8ffde5aa8002a","impliedFormat":1},{"version":"54c4f21f578864961efc94e8f42bc893a53509e886370ec7dd602e0151b9266c","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"461e54289e6287e8494a0178ba18182acce51a02bca8dea219149bf2cf96f105","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"e56eb632f0281c9f8210eb8c86cc4839a427a4ffffcfd2a5e40b956050b3e042","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"bd15a9604f3a4d4064818eca97d5b0211068e11328731106a0a60068c3bbbcd9","impliedFormat":1},{"version":"60a81351feec704564fd86e9d4bff211c2321a4710b0824d8e0f0f3df60f8919","signature":"766fa073028b7feb1612a56c70da8cb404dcc24aa832c8d256f06b054287b989"},{"version":"4a120c3f8cba8bd83ef38eff2cdf1b16ee11f74b10983c63459808d8f8d6eb92","signature":"05d8bb421028899281b19bb8fc9c819688538b421c86f5102620c672d1e5cff1"},{"version":"9c2dc8a349267bab199ba2de430636cf87d23e38ef6fd712d207c4c7b85fea56","signature":"93814f89d1b9bcdef1bea1a67d7e780c289209388215f28c4f7f2fec3334bdf8"},{"version":"50adf3afecc965caf3f65d786a59d23fc6ee6482b274851d8a7446c5187b6e7c","signature":"217a2f4ab232f89e96297ea2a3fb1d415754af58d8a9d9ed8872e90969b44636"},{"version":"9f8ff62d86d87c4f7fd3be0857ddf14d5b337e66e1ef2ff73649b0b6f77dac5e","signature":"4ac0655f4b9c07b5a77507bed589fa40e4f8269c1e92d40c21715b9cf333737d"},{"version":"05ba26b97c188e4bf1f8974b4f183adcb1b4602aec3909e2080fc14fb9206d18","signature":"38aa92819ee76804fd735eae6d8e53ddcaf1b43edf6edac54b8d35ec8281c95a"},{"version":"217783ca9a0187e8e48f4ec3d1f109674756bdf11bb824205cc441b33c995860","signature":"92693edd128acd2b8933680d23cf57842beddce08019361bfe8b9560fc28eb9b"},{"version":"748cb44cbc55be8214bc9a34fedf90f4475ba05a29be1dbdc5b23646559e4ce3","signature":"536e1f5d659d06e9a59ff9e996bdd71b96a4b11761ad1b832d2d6bd8e2b5554a"},{"version":"9ac7e4ae4798c742e54dbb77a6258323486789827457f030845edec7e1e7fe84","signature":"3dcd3af16baed0f94249e2d7097cb38e9fa575e610d37af99dac27671384985f"},{"version":"af0a7aee8c329157a9979e7f41b987dea86e64284abad4ec35a957f5da24762a","signature":"b36a4737b0e56ab516f803b7418a61db9ab4962aee662542a891a1e018808258"},{"version":"00580e9c9ffba76afa114c7ba671317bee51cf197871cd9c77a55fba82c6de76","signature":"b338b06dbfe42a84451282375276c1b4c7a8f6d776e46e5fb20a8832584c15c2"},{"version":"27873f2ba06f01c366aff6a0ece187b199a67c093b1233da03681454099746e8","signature":"159e3c7a237ecbde537428d83cfc58aa9c75e5a57dfe4096d407a4d44a0c8e5e"},{"version":"c271c4a798364b25295a96fbc1d5c998e7a9f01a3ca967a6c0adb5413b83b3d6","signature":"298ba7df7b00e4b0b5fd6b7cdc08ce9747b687cfe4bcacedc19b959c8874aa16"},{"version":"2c2744014210b1df45b7d5e4994856f221a4ebbb771dd76eed975605e8d85ad6","signature":"8a69d025e1c804fd0f5a40843889fc0865ac7650e708cb0ab96c7671fe5f8c74"},{"version":"1e7d0d01877c91b56a02bd050d35e7e9eb2fa4f6e884623e60c66b91d010398d","signature":"31bec8da218bdfda1921d8722e0ab7bd2ecbd85d0cc581b46e0205b5bcb01764"},{"version":"15e229b8e49fa88c0fdcf0fc8465f9cdd72473fdfec1ed5474ca91324ce6a3c6","signature":"c18fc41dbdf4560db9586518ab54548b0099d026bae58955870fc8a9c89d2728"},{"version":"81865bf1b8d448994fa01965f1b98497e17cf4a7d594bbcd39efa7ca17a5eef8","signature":"74ef238d6ee7fa8db1f644b6af75c00833c6b7244e83aadd7166b6fa8b415d48"},{"version":"22aae50f986ea13193b4c7741ff500054220aa11b0edf554d9db39e841c47b82","signature":"15101444f0cdd9c337259ff315fbf4221c9a2c2630068ed8ca8b4afc5217ab28"},{"version":"919f6c352425a0d95e6af8c3721062b1b1c3a0e1a995600513851ae4028fa717","signature":"75d5bc66250f17ea675903972b6e881173b0587757b262aef70fb2c696b63bea"},{"version":"35c04dfa8b52f10e5c3545bec98519a53044b83071b3ac9502be9cc9f60aa886","signature":"9d31e9ecdfe4313b66bb5fc3078d467359845be7e1949e764f7c3c221d12e1f2"},{"version":"e5b34020dda0e3908e4cd7de6ecb327ee3c2cd1eedb325ed31a03d11ca6cf184","signature":"bd8f343603da772002c3aa7e254bf6f275d50110eaef11c3ef4995ca865307f6"},{"version":"ff489e6412f7d29856e0bf6c240198640e5a2eb11888b2ef1a7980d8aa1aa313","signature":"5ec61cfa3a35b00c9ac006fbac23cb8fee7bce7dad0f1717be735e38d073bb89"},{"version":"8777d2a449c38cc336580f72ecfc03e411eec95908e11b856cadfd5d6556d30f","signature":"4228be33af6a3caa770e7296482a97547a92251adec785f2da5aff3928b7aa96"},{"version":"f98bae337b7d0d893da71bd3ae961a7be2f40507a678ae7b06ea08d329d70474","signature":"42ffa50d91d677eb9f2dca8d5ef1b85589c9c50287be99914ac0779aae00c873"},{"version":"c1b431dcb7aea7f1c448b08d029fb7a76650c63c1b2bffe506d2b8b67d5ce935","signature":"e627a93dca5467ae72dd570e533521ec2b3cdc023fc919c896d2828ad7ec91df"},{"version":"8c6e5e2029760bb766f18f41399fd4ceb3c7e0f88a315db027bfcdeb4c794877","signature":"09ea8aabe8752240436cb587c1a52106ca6160218ebf9c3205099a416b182d0a"},{"version":"298d30c1a5f7a0ab67d484442f8a5b24027787fad9010735f0c72d314c5f5f4d","signature":"7cbc6e0a2b7400aebe92551b67f62acca169b917c8c0556a43ac8a7b9760f7c7"},{"version":"5edcb409b9d95d32a5fafe7e0ff0b6c580637a7a8ee6770ef94c42b60a327148","signature":"0ea2ecd7e6a48359951d705f4512091cee97c4e825d3e5f013347fe60cc4c172"},"d2b57988136d234748e51041fed704efc0c3739e2ba00423f9704b338e7f16c8",{"version":"c5933910e35bc606ae026f8bfcf5ed06515e5f5d7bfb148017fe17de016bdee7","signature":"ae56ed68720b4ee223aab93d6b18b6094332717c8defab33abea870adf37c062"},{"version":"6458243ebd203aa62c6b9583740ae0db89586a99cde9020e1769861ba0583dbc","signature":"ee4d8bcabd1ee92311c7ae2f73f3f507537c7e5651b7c5f9cd6d8c73913c3abb"},{"version":"7ff56afb7812449f61f0ba35787ad4af263375b225ff138dfa1d7ae58c3048d3","signature":"bdc18ba1c6194646151ca4bf3f0ae3df7cb68e5a4e98d19934503befb1c6b8a5"},{"version":"e2542f875da5f3f60d0ed9c6246f4a6b540c436b915ca95fbabc80516d2770bc","signature":"f9889be41475a9e62f4dd6c7b3631d49302222d3dfdfde1e74e0d8d6ef029786"},{"version":"bf2ee17f2a7e1fd4ce77389b4d8dbfce4b0e1c2baa3ecf89e914fe3f010931fd","signature":"fdd645822701d50bf028f7a4983ce84a7d3572a2e9293fb56ede928f1ef1c7a1"},{"version":"d0ddf91e57615a535312f2d7ed44c770ef801ff4fff2fe586615743b9bc93d7d","signature":"6d035ea8ead538baff4c6712884ca13a86c6519493c62c66f460e17e5144d1f7"},{"version":"6f3796462cd7ef6813b094ecf1139df85f91abe7634f83af7947ce14ca10b98e","signature":"ded40ed780ef13836f682abef4aad289f127204035b6009990731e8deef97eaa"},{"version":"afd3041ed1bab8776e87e54fba530643cfacd6641428e18e6fee3ccaf977d3b7","signature":"34fe696ffb49285e4bc6c29a8eb5496dadbc2876de7b30b2882cb80ab7830672"},{"version":"72d13617278e20befc360615edaeaa6273fa174c8b4c35501c6d8b6e0831932d","signature":"af400e2aa7ec2745de4ac0128d0f825fa228bf27172cba659f480155d04eb1f6"},"45ee1520c283f707cda60de5c62ff4b6f87fa64b7ccd96b09146879a2d2fcfea",{"version":"41a78604bb28ba4ded7267f2e93222af7d0cdcdaeb62047e20669bcc7a7c89b0","signature":"20c86244e38bf2ce9df09314faf5207a8c97575bd26b4fe06c230be8394f511f"},{"version":"e08d49c2c84ed1ed64f603a6bd20fb38bc9d1bfe76aaf69564efdf654eb07e25","signature":"f440086579fbd05b7115175f00c2f75a5b100197e3a9840a02893bbcad747a4b"},"6f6c9e48be2ba4416d756763151fdc429d0d6048339f85f65c1848a0be0bc20e",{"version":"04d87f1078514fbf1924a58458e2046dc337d5c13760707e15e1a0996fa52f07","signature":"d82ba82bac13f92107f841f18668411d331e7e4f370ff4b3f9cd0825b701d7c7"},{"version":"6ace9279664d626d6eb4f76be7f61b59b28b301ec1c27b6ca50ea0612638f436","signature":"d2780136ed38d40bd52a9722b8c2adee93ca12fe3e4e9b4652c992744aa52081"},{"version":"fbb06f0adf965e46bde5c2331c4304faf18b1741744384c5f8d175478648f90c","signature":"95777cd76505b537b0677691bebb777ce6379c6e279c5b2016a3082b79a09a98"},{"version":"3c4e348e9c0c44ef553de4964d030cfc04bdd700508e3891961c45a73686c64e","signature":"6027357c5349bde82ad687484b8761d67127b9ccfe20846a4e739c84177b5b5e"},"4a95d6e8882a59dd49fea9bd2a142ca2f4194e28b73d78f8cc4a338ab82ace09",{"version":"37a42f854f1fe3bf484a5b83b5d4d8024369a6350c04326ad268ab2edbf314fb","signature":"55b31efc885cc3d00fc833cd573449bddfb1f59eae57a0aeff927f92ab6c605c"},{"version":"92f4ff996ece1a55b71cc5dad744ab05685c034ff9ad4e6655ca7062e4b2b3c3","signature":"02617a62bf8f3cb7ac12195b86e20b59e89d19abb5304664987120b8bede2c0d"},{"version":"d0485d0307e326cf7333d9b539973533e5fa2eed4e310da92fcb6f8d6caf8209","signature":"0146f2c34ca8c7ef52fca1c55187b01340d8996b01e68ae7c1ca727d7d7aba5d"},{"version":"d15d73d8758cdee44561744e469dbbeec538e8622a63fd4820928a0ee8203902","signature":"322c86858796cff7db86bf5b739412961861b9f0726a4683b0fb399aaf92c67b"},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","9992e93f73edcfb19a728c60ed244e680283d9cd045df3c0be9ef83e2df27797","829d19803d466d079dbb8cd94056bcec4de94cca60c7cf34b67c0dff088441e3",{"version":"9cd38fe975d31ae61e4dde98ef4fa2450f59c3f05e727a18bd77362e6b741743","signature":"da3e02a453de2e0e24140a6b116156c3880a6696edaed289fad96f0e59f1845d"},{"version":"a1d508f076bb1baea5d2b44654cfce2c73c3526b2011c18249e57f089e395e82","signature":"1a5c9845daa46b846cabf860e17eaddc31ac240d329e85987f0582673f2fc8d8"},{"version":"db551212f5cddedcafd864590c534358b7e25b0cbbe7a298ff2950f634619c11","signature":"b88d42d095bf553248436b551d9db9ea1f6ba50b04a0b40adbf53cbc0ef08297"},{"version":"c2027743b0fe04368730d0037204659040031b55530cd669e6a17c4edd88a704","signature":"0c9706d5c8c235e702b60a0554f2c7bec141cfb1772af86d9a72a24d79f0df99"},{"version":"c79656bfa554aa52571fbccd348be14417c5654448b2df76a9bdda1f5dffd165","signature":"44bed17a70e4907cd66bcf0b1a0d5dcc47b8f99b04b99f9acc44e4f71bd59792"},{"version":"d5c1b816616d478a870ea3341e18156bdc9f887394c0e19b3bc443760355b657","signature":"b6996f35543ac4e4a42fa9fec5d9abe4234a259c83366d7ede4f406ef7566c3d"},{"version":"9ddfcc6cc2b455a4c5b3b6b7d615ee573ae4a0dd369c104f10a5917624043919","signature":"c44d0aa09fd5aa46c72205da4c165c5d7181df31afc9568fe1d96c32089102f3"},{"version":"19a1f7a62d5e762a70d59739ea2eb8b0eca8bc99c89d65fa6ed821342e999c30","signature":"cb40c34138e3035dc69f6b4d012e3e43e6406632be6b57aab70f69402927373b"},{"version":"640a4db0cb72fbf02248be191dae64ab2ea1fa31604e36ff15cbc1addc1d8f1e","signature":"20c9517f7eeef33d3580e4dd8fcfbd2c4814a55dcb9a50108a2463da9468b0f5"},{"version":"0cb6a5ff462e2c5ee74cdc1360d467062d35c781778d3d8e45c5a949ee8de461","signature":"6e64b034829d10d98c277cf7157e6c6365c1909682c2a7c9f323ca5d948f379c"},{"version":"6734df11aa404633bd77749476fa46a901145c21fc00898c9b8c20b283d9c5a5","signature":"0e9c21cec853c914b8f321fe8b08913cd16191e6c9949069024679cef1a41116"},{"version":"8d3b89d3282c96d53ddde0414e4edeeb703b753f3bb54d02df8475efe5d8319a","signature":"23356d3a82eebfbad7b063025d0fc7b588d301c1e8897c79c108cd074974480b"},{"version":"dbd5d302f4b9ce6cca2837f6f0d7abb562cf1416c04bd3ff1ecbae45e1b919a7","signature":"ce5e3dba99ada6d5fed5da344364e5c98fac2a49f50ca582a83b4ecd22610eae"},{"version":"b8dc4bba7ede866996677e671d4bc396cf5692c7f224816c44b1ffb0afd826e3","signature":"20e8121ce27890767641d2d554ca2c0e3c7f0ebf6ed436ce56628a7a1e69f89c"},{"version":"cc9adac2f5150f2996df7be3f3e14ca7c0661e24f2fbe94924973c23d000eedc","signature":"aee493b0ffe3a3b60b8b3ad44c35e81af1f5a4035e35a3ec616d3bf364ebc601"},{"version":"4a536bc7fe1a53a1885b432f75f7edbf59b8cb538112f14256139b29c964aa47","signature":"224a5fa72f05c5453aeebafd4a0a5e85b04caeedaa6e61a3d682ed5273bb140d"},{"version":"f1e0aeb3cb6530cf031c4c5e09a38f7a2d05d7c6e13fc940c14b6e4ae63e973a","signature":"996e8770f851abf49b0f3b276943fef9e881cc7f2b19d0f5c27184fbc25cea73"},{"version":"3691c5d94b0af27e16948dbfa5496b3563622cbcf3e9f24ad11300eaac70127f","signature":"d75c938b3243fcbefbeacb14cf7ad6eaf4c130b3c73cb412265ee00487fea1ff"},{"version":"e410065a5c8639c67f22bc51babb71da96e39e3551d6245f627d023267b7c630","signature":"748a7fa6b5c13e480b0b438f629b1ca42b2e5b799483d3a75eb52b33ebb0230e"},{"version":"ead51e4194d1acfcdc542c51847ac3d247f3f9c212d395a6f09b9cd2bfe2a80e","signature":"763edf49fd6eae4740e3ce29c9a0dede3ad634cb59bb7492091a400596fd8f76"},{"version":"f3fa7e04703fbb00df4873fab634391d42b48a189b9770e73cf0c5b8f541d3de","signature":"118614b315658b8b0bcff5c85efc6a91abcc18b26d812201fecbf93c20e742ed"},"e4795b4fc4f13c0e365fc67e05417c0142a2aa359a12937962d32db0445d605d","3d8ff038b3f0c5377705d4d4374ef1031b926b080dbcee93145556957522cdae",{"version":"1003e54341b0c231cce9ef8c32afb6517de0faa06c951c851c6002c701dbbe44","signature":"4dde6a47bdbcdf10d3336f78baa2630349f1c528dedd5b7866b14d564b45a21f"},{"version":"44838fd8461bc987136da2d5f5e32b10808f6cd47037d755fa083996cb19acf6","signature":"55c4c11db4866231002947e8ad9e3767f3cf1041b2a0712be6c912b8adffc7a5"},{"version":"b0290280e89859d951f7bc4e71f095536c5cb1bd85f2fd05ecf78f6da0477520","signature":"f77a062ab6a77eb09d5aa89de8bf84df56c0f66240d959c1f64e8a96647ad98e"},{"version":"5e0e5ef17347bc264e84cce7afd1ef2808ee4fd5b703d065b54fd50dbd6b8147","signature":"560fc0246c89d6ffa0187731d6a368c926339741a5334ce9dfa93346407549a4"},{"version":"2ac08c69c2ea4d55f1bd4b6f8bf295fb52efe89eb0746af07875294226a24d62","signature":"6d02a0453c8a476d538ec70cee21d0ab7ea1b0657cc4a3239b0e304ce2ed4bc9"},{"version":"ea17c4778c4ea244dfdc12dd5b05d1254be95cfb0904e4eb50e45c2965e4ef5f","signature":"878a4833463c86faf16a159d1ca8146445dae49ba23bd6d17f3a519626af81cf"},{"version":"ebc948263b097713e4b5fe8be8b28b4631dc94fa51ae265878a3f15e6d97b3ab","signature":"fd2c47ae2ec46367ac9de3a1f5163c2b5c65d07e1fccb5f31642675b9be41f6b"},{"version":"e76056d3c0695f8a90e012c08d7ac08ad1830cb4b7ea5e3e485d1d3110b6f682","signature":"fce8ef6b4982dd503f7acc0dc7f60ed34eb5f22ec55cc77bc8e26228c9396239"},"99699ec2e8537d5e6bf7d5cc9fd74b37e1abfad357144c4ff10a30b6b205f3f9",{"version":"e3ccbf00ec749cab681f709ed964721fc0db6981a80afbad48e270d7c4208686","signature":"b8bc32e1f66209c87543545ee526b35a6d1ebc875265c6389afd4056417dba87"},{"version":"ec29606d0ca43c08585251162707af28821076a462b624eadd5c96fcb5f04120","signature":"ea17988f35703e92df04b4abc1ffa878987d43a213bf982b5898dcda723b83f2"},{"version":"0c346676a4d439b4ae602affc5f6b892567d64c38fd5038109edf92d5a3896a3","signature":"de723f54d1f7b9d22e619b1854efdf10505812962a39213cb2874b29461384fb"},{"version":"994c68f6986808449a4837a7911ddcb1d18f6cb77f5495b564460484e63d572c","signature":"6e5846057b4aa6651269719e7670feb78f0cf160a910f8370cfeca6df31be7b7"},{"version":"151adbec1316616f42e8128619d3457a85299943274e2d66e0706ba708a97e3d","signature":"0c3119a1e6caa2b598cdcfd1c8757bc5d89cc9117f9c4e3375902ae098d88fdd"},{"version":"1204df2825651d5e0a8103aa99974a213983c44a2570d7a571bc4fe891263d4c","signature":"a54e6ceae6064ee6b5435bda44f06da1b05f87c479712afa722ef5e42a470427"},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"82919acbb38870fcf5786ec1292f0f5afe490f9b3060123e48675831bd947192","impliedFormat":1},{"version":"e222701788ec77bd57c28facbbd142eadf5c749a74d586bc2f317db7e33544b1","impliedFormat":1},{"version":"09154713fae0ed7befacdad783e5bd1970c06fc41a5f866f7f933b96312ce764","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"a91c8d28d10fee7fe717ddf3743f287b68770c813c98f796b6e38d5d164bd459","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"a270a1a893d1aee5a3c1c8c276cd2778aa970a2741ee2ccf29cc3210d7da80f5","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8926594ee895917e90701d8cbb5fdf77fc238b266ac540f929c7253f8ad6233d","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"ed8763205f02fb65e84eff7432155258df7f93b7d938f01785cb447d043d53f3","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"d4a5b1d2ff02c37643e18db302488cd64c342b00e2786e65caac4e12bda9219b","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},"f71109bd8232dd4c803987c2496fa3feeb229cce4b5a01924ce1d93c56c4685a","f3beecd73a50e58f8ff2db2f80308d23f52b7c1f950843d479b9fbe331646f9b",{"version":"b3db5811e7e3166a761b5d2ab9f922c52fe167527b1be71891943e6eaa4ed67b","signature":"31ee0920b28730ae6ee7d460d5eb33a17cedbe3ff63ce7dc47a01b1932975cba"},{"version":"b1a73f361b2af98054b7b5ef20704905338ff4894861870af005289bfd968ce0","signature":"0c7a393ff884cb82d1576a1a800483e209eb17b59220784cc1203e23dc69a4be"},{"version":"c6f608f0ebba00ef4a56f85eed846da1c32722868b476bddcaf7443f7f9b5bc1","signature":"c0b71ce4d6182b4f8c012e9dd91f1ef450a3d38bcba2a8a09778c0619297c623"},"8beaa9775c6d0ea8f430f8b71cb7b6c99c7fac6f0923c9f491733a595a31b6af","a1977603b6a630e92a5b0b6ba966c70a67b2fae2e79761ffde9885478e0de8cb","d00a14fae10ad5670b31cf9d5f2e5fb6aedd8ccdd57ad46802dacf11066ac347","84c1fa07eb50b0ea82c4966cbef450f025a832ecd6be7f0feb902f116244e91b","82d91bc253f2e6e96574093e1b61b59290a092395f417effbee683ab7768cf99","a967b141486c79c8c0ff3d1844fe37f169e6357727ed7112dfda93cd282bc583",{"version":"7fcc0cbab54e452d28523bbaff56dc83feb70cd603086fb3a6925d8d098ff2c8","signature":"97ec414e7ef93d5d96a0f9a1e6ab5c76c05f7053a90e1d52dfffcb2d1fad34f5"},{"version":"abd5b1bc7f23caff922af7b17842006f529c98753c6b148c9c1dbedef29d223b","signature":"04deb307b1a216c0bfc7b9c528489b62647f8055bc184fd41f201915ff5b7780"},"e65ed9b8998ffe1e6430cf2c9d6b9eeb89390c65d8a7cd40b0b8de28ab566487","005a1c4dff54f8e8da4d2c4cb44e0a8325a9d1084e4801dafc18c79026541853","2422ffbb281f3eff518693636bdd7c60aabe83d4a24f42880074347160ac5afd","ee8b501ef05a6a17574c57d18a741e4afb4037fa737a659d8d8358af2f6bd735","34772e1b8af210a23eb9e9d9ce71f7b5a7c1ee14292ddd35ad7fa322a4fcdc3b","c67a0f8f0e811f5529059da34670609f945f29a9510973670a244ecf581cc4a4","081ec69de1c342dcb9d87364292c2078b321b37aab5ed0ffe1c25693c60c713a","521389eea3b9e14a153c1ef23e99945a0c06efa4af16b34c4228e5dd4f7718e9","c3d392881223bb09a95744faf4ba0286ea4ec937df542de1c6177ef16bc537e4","89370c09f04a9d42263511b53a228f4483b4b4e137d16e03658e749770b283ed","8b2fb81bfebd4f8f3b274b1cf2fbf6f68001fb45811cb9d64c8a14e985413625","a390efdf986480cee426aaa1cc592209b2be2eed0a93bcf0c8b2ceb2ac24e419","202ee475640df8531c934ebc9267ebebf74fbaeea628d2dae73fe1c0bca5e718","8af814855473f87fbb1c56ece7de3585257ae3e49f9730178cbe14d23ddf245f",{"version":"a69fa09f0b7199a1ec96e2ae39e0e398bad1f8f2fc01d3055d6cdb14ed0d5fe2","signature":"e9462e9eef35b08de1eb100470efb075dbc71853426eb8a172f01bb3a7306c1d"},"c11bbbb454935b50f1f92cc4a455dca8751ca6135bf32668b5006040e1674038",{"version":"fc97bfa8aabdc735f5aecbe5a7444413c26b57d74445a291e2bbc8e97cc5be89","signature":"cbb057d52a02f7f69e6559f2543787f1b10ea30f2aed4d431c5c5a1275f74fda"},"bbbb5e99b1ee8d49ad54b9a6ec0ab8d5d56276587d61eb275b6d8a4fc9de3006","19403d4b24486daffe7f2b81e6ed9da2d4c33ed725db1261b018d2a125a05e11",{"version":"c4340b8c31266d9536b0c994f7b44de4aa9e771a08d8aa69735683cd6b7fd0a5","signature":"b1ef803e978b9b8517eb57a1801e7e349998e8f6d4f6ca4dab0e35766156a129"},"58684200c7000b2b53288352dd5e50dcf3cc56766ebc1f48b78044c77533c3b5",{"version":"4c8593821e68f4f53145a797c689a5538cbed45f501ca6dda8737588eebeffe3","signature":"95ac6ed2649525cf1bb7059afc90b764ff9f32281ea0e541a8ffafa9543793c2"},"24beec4ac7772c3b279e06ef77f39dd2e20851a988fc7e822610bfca10017236",{"version":"edb2cb243cdc9665f57484e5242aba123862680a425d79a574646ead91996e13","signature":"703507778216659643cc980f24815f86a268b2884cbfe4b34b60ca18f55859a6"},{"version":"675f0723cc2622ea6b43420a735c16c64bc6e2154e408344519fa4364b211fc9","signature":"c8daabe2f93b52a3ddb615c756d434e374cebc9c3b78ac611e7ef4ed947c5790"},{"version":"de0170a48900d7ceb6ea4755193703c37cb61973929478032a7229535137cf7c","signature":"b9115bb40dc3f3c876d692635fe159f2dd8ae4aef83783824636eb6318904623"},{"version":"8deb93029ecc9ea5507c611024b171a6fc437826e0fd45311c32643d95c56b37","signature":"4393de5757ee5c964a43109f2415b4ee73deb0552f5856fa5a55144a59f35551"},{"version":"960a6a4c69c83102ffff2c1397e61f58b5b075c291ca85c738e266fa93b50cfc","signature":"37cdeda6a42524e2ca3a891b80b0d9a187ac4a1c99c58d1285b65578866fe7d7"},{"version":"ad015cb7267bba2f6b604fe7eb6ea16a3f7e3291540f3e4218b7a9f9b1791370","signature":"0f549f63dcb99ee622f59c6d20ab466a8c4fcbcb04982e094c733c018d706968"},{"version":"946166b68389d8997b55bb6c6069f8aeed2e8ebffb2349c44458e47da641a3fb","signature":"9831106c41c567177fd0d0c19e5d80e7ccf180516c63027e6cf09281e22328b7"},{"version":"bd802c64d58da7369044db6a87a83922ba218c812ca0a5796a85905491dddb05","signature":"274a846e33e71601cf07139fb61645688244ccb46ebbaae65b1465908abf9f36"},{"version":"da1bf802da0f211481063d677aaba16c58292b730dfe3d3c30ee31c658e87494","signature":"c01608368f1cfcc3799cd27486790c1755ebad74dab71ba76208052c72992cb8"},{"version":"a23de73d9cf99239ac871f6d1d695e7304438911470f72a43e87cd39c74518f2","signature":"8d78d27406382240a4665482d32d2489e2b0138ebdcc5229df7b1673777fd64d"},{"version":"2bb126658445ef251fee70c320701a323555230fbeebc7bf47fc95bbe7be592c","signature":"e5eb435fbded33d3b72584d1fc2a70e691cce7835d52d1f5319f826b76c364ac"},{"version":"87b907781c96e38917a666805e6cd7ef05704e0f26f1648910da75cd8de8bc66","signature":"7e2b0e3b7c2d131bbf288dce817bfee29b4eb61e947c64f7066f8a8caaf53926"},{"version":"4f17651f10386c6de650edde7a09f50325c95b757107642170683b74aa24cfbf","signature":"f5806bfb6d3c89a460771e1518b0466a5589e57c565b64e27536a8570788fd94"},{"version":"e22834a9ea470b1da1f285892d362cf824cd595c304a651ec6c139d4c9d95fd8","signature":"a405fb6d18f0a9a9c5f433a6697d5c8334de8aa11707ed4820930b70cb751670"},{"version":"b1130deb7984dbfd99a37dc15bae3ddc0f81a9e61d057b7c24b8ac2ace139d22","signature":"97207e2b9c7faa9eb53ef75887b0c85ec527be29349d9a68b0feef2e2d279049"},{"version":"2076b6f9e9696c1475ba988f94f210b2abb9db0a452c0824204f05c9de4ff592","signature":"3a92ec4a18196c2b39cea74691f6800af729675ebced8554e4a7259bd2fa8574"},"138eb727c17046575b00ad57c8ab2d83c4cf4f72835b6bcf67a657b40d2adb50","27bb3b4b37580275f1b05321dd745c05417c60c1f29ee560b6a6e94c1edc049d",{"version":"34b2a35b26533bfbfee3b0e0306400499c88ba71a6fca1182f111fe7bf2975ad","signature":"5fc5b69603f8f8df1de280e7826c87bee7269587a5de68f10960bdce4839f176"},"4c2ca603240366682d6da97282ac8349d934de09a7670baa436278df82207a85","8d0e718f3dba6359796eb55237fdac22330c7718ad609c076144eadb433a9c2c",{"version":"9d2cb05089d76c794392a4c5fc72c195d8e0a6499115023a172edee10bd0575e","signature":"c63122e34f424430b4895db767e0c71e2b0d425f4b86bbe021655928db5ca336"},{"version":"182270213b43ca7f735ce4315c70f225a55b84c8fd6d4d765368a1d7832ae7c8","signature":"0d7cff2f5bfd17139c5c33dc4af061a80586779558f359873fb59c9a20f338dd"},{"version":"cf79d185fd3e81c815e32ec1b0ef04dcb1d2795bc850390e4037ab8f0d09eac9","signature":"b07f38b0b4886a0c898115ebfe4185a17c76b9faf785894987e4edb4ce1ec5c5"},{"version":"19cba1e43076415355a43acb6d0c1743c6850391acf97e49925987844dbe73f5","signature":"81ea9505a3db4d7e12fdbb34884ffdf7d9609f63dafac9f99873e5783e159223"},{"version":"50001410d1bd6e4aa37a8936264e60443f4bd6615b063f10fde90bb0a0fcb366","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"4a7a935f3fe9bb57c50e617bed1af012988b2a8eddeafdbcb79c86842b4490a1","signature":"8acf14e265572818350d520314df877e1c22aa59c06319eee281105523826c31"},{"version":"96e0c1bd3f179de50408ec01abcb70375d5423ca61f30968604c04c7492ba91a","signature":"95b84cb585fca8e037a4e4d199dd034bf7852996ace45c939e6960a0fb5e7d52"},{"version":"91a537bd2bc2aec60a345e6110d08c039f07d6ca100512ff03136cb5e888a54e","signature":"d42fff3660d7fae260c55162ba30ab10298ede33fb96a6e8fdb057ef8184a7c5"},{"version":"5c64a9700be429e2446678f7390fc949853dc92b18a63af87a644207c8b8afc2","signature":"c6cb6a5f9caa41b4929650ab3c77e48c8808804b10b720ef20dbcf6f3b4d5de5"},{"version":"c3a3d972c3b6c31002ed50a704378e09a0fc19fbe60cffe1380c3cf6e37d3a65","signature":"be26c05d06c1cafa778988c7821223a8182890ed85cd42b5bba797c3162d900e"},{"version":"eddd0d61a4721faac12fa938a8963e3715a16acead720b6ed33a0012f1c0faf4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"6df4eb003f579a65ff5ef10f1706a43b0fb46b3c41539ba3cc77a7fce660e761","953547814c6b3905a89fca5bd39b2657c4c27d8de9742967d157546ecf752faa","4098d19501e19efc4361b226f60fd78885ff1aafaabb3a6c15069a1c5a925cc6","c3dd98d3c74d61ff6cbd7774abc5c39ddf5e09e77d25b1986b6b9ff2e4d0f98c","a2828144ef04d74eaaf5476d0d4a18abd80ff51bb15a95279c3707cefe919d16","fa3802ac2da70bb4e1f4d5c2e87d74d2a73fd3a88adf7abe18768e859a4e93b5","f9611b99dabca47370447c5bd0dab7d80080cf13f6727c4c84e0617f15382391","a3678370d897e0a4327655193a086021d0d0253a422cde486f0b4f1b285bf2f5","b60a920ceec666e7126d50e53ee8987faf6fc9aec160623aa4f0a2c991999fa8","a2c63b4c43f9d1e98908d2f832ed1f087e75932d8cad78fa2dca38a1ee52db00","d2b75a7ec81da50555d7da928888b82fac70e3681f4be30d84647786f8f815b7","00e6c474a177b398da0333973f23712e7cc7cb640def20b5e7f0748b2d4fda68","a54cea6c1656e1c56db79df04c44740cf10e8aaecda556d810c2052c222f03ab","a960c2ae4177031a680f99e1e563a8cea369f94132f7b2db6867103869de8e3b","be3badec793d7ff23975b4b797b6293bdb513f1a4c025de2219d8e873f42f832",{"version":"00dc6497cf96a70236ffe507561372803f6bec4f56b10629e9b8dfd1acb976b8","signature":"2844c187800e70d820a67f46f5cc57cc3bc02a8fe7c6abdd5174b0275cb05028"},{"version":"ba62b3f50c97841b6472d3ac7bbdfabb12e988568812db7775f3ea9ff91ad65c","signature":"e3beea14e20aaa1bbe8a82136895ba3914834058b437f5d3e759becd02bb1d81"},"0f753861c57020d093c2bef2b7160727d35d2e456dc61a048be26c4917d83ced","fcc06e0a096c447c565e87977b6bc9de805c12322bb5948bf546130355755e22","fda7d8954d1bafe46640d093921a95cdc0788a9c06be62a30587c7b01289fd05","c5487455a15b54f16c6fb5ad5232ce6beceb28b258da4d77440be440cd5f278c","983539e38f69f998922d940865f42b65c8826ffc1f3c6116c0a680ac164e563a","21bce7e63eefc8165598ee60559b1d1b8ce20d5a3f14a902b3a25c269fa261fe","913352277fc0950eb1f1eecdf97282dadfd3a9756edb5b543a5e4f29d56aa6bc","6eb51fceebb3c3f181473c7ec9770305de1d05b529bdc063a8368d035d594fb4","d4bab18bfef0a791f386516d4dec1fac9b9e17cec3ccced05963e5b71df9776b","dac191e41167c841b45bed9368c722bdcc82cda63ee71a56d3d832df1f028540","3e1da941c207fabaa637d753fa638cfe701db3dd0f5eb0b53adf69462278d03b","8f948f65d623f47a476ac99f840abc51460fd9e7fda732da93d34feeb1ce5096","7805f8854e5d25541474d9133faa134498b6cc9fe3d00b60bde683f3ba9c48bd",{"version":"a0cb4a59ef9f405b580fa13a18782fad002e139223fd973bd86ff83f53afb52e","signature":"494110a03075c3562f7f6760c53b118d29d6596def1cfde0d40cab8493dfc978"},"65886a5f840881462209ace2a0e57c9ef50e03dae13e18d57c9ecbc4f1e5a4bb","38053baa5fa44b579dbec6c7906445336b4c0cf23a7fea21d3a690a601920d43","0ef9c8d04474746517af222498d04591010fc0c27b4acf91e125553ed5118aeb","022eff823a95507c7d9fbd53c32e31df426fe41f08b08910b94eaa9d5080a87a","21e11fb978ef94ea4e519658abf54e30f439b9b744833db368958387824ae5a1","3fcd12d88c66999deb973f92aef3eebf2cca83ac0cc08ed935b58505f4097eba","562fd3ade9818aa74ee2db7e4bf85fdfeb5b39703c7a0495498e32689dd93cad","4b315faf14e94891ea98704d740735dc7217d916e96d9037f14a1c1e7ccd74ad",{"version":"6e9edb50670a2f38639c6441207c742b86d4f628a5a5bf27a5259edfdf3996c2","signature":"266e9339fd3a841381189d82b082dafff4caeabf7c32d6ff498c654e6cf21876"},"0f57b82dc734569c881afeb7a1979c0738de100160ed8a6a797abf27b51b8f78","3a2a7aae94b3231bfd2356a6749c67f1ca5f0e3dd67bae019fd93a9b0b6d2697","f6c5c756e6ebf4f88ee3ca86cd52a7c44179492560c8b3981efc269889fd9214","922106413f4b05a56fdb20d83a5b7811d50e4bc6252a7de8ce37a123ebd0d6b6",{"version":"45ebeb54a12c12eb6abc72f0fe06242eec269b8c6bdb2efa210b0e832c79e8b3","signature":"03865327a9cea613b6e5971ecbc8e1ade2051d064cef4330108265b1b6bd0647"},"22589fe8b8332082527bc5e2dd56b61e71b36c167b2160284862069bafdf8b1b","1a603ee510ce4d4d30f548160f17205daccfb0d8a11d07210c69ac50d0fb8f2c","8be6065c434915e2c638c8c8299188a001a02e1091f7fb88433d16c39c782046",{"version":"eeefecca676b2d2c7453971fedeef289e80cbcd949bc5b49f5587dc56363e2fa","signature":"9ce4d2e305188fdcfec51dc6584bc728a183065125760de1366561afe08c6a7d"},{"version":"4408783b3f27aa737c8aaf75487b2bb3bd6d9f339d1c68edd2e66f8c96d159e5","signature":"7aaf94fb8c323c1e3360a7258d730ef85effea9e5e713d1d071c5b0333836d44"},{"version":"b73be007cea59f5b9b6c912345dd8ed746e968347b2a30ced75c09c6b6667751","signature":"036e327ad2fe42026bb979db7695fc10367462984bd2e86569d814bc6eda216f"},{"version":"ea43f07fb8e93406221b03ea50cd4bc8c319ab1133570b98a5630641d3d300a4","signature":"d3dda2aab128615496f218cd702b5b579f285c8f5a63b46992556323f9e1a052"},{"version":"26f2136b87e61f6251b96fa86bdb0eda424a7973a88d33377e3bf09b15939dd3","signature":"43e14bff096c081f9f8463fc18b8fb9cf5675de023008f2ad539c83a9b84a180"},{"version":"3c65ccf641996dfe51e9dc4c67ddc2a9c5b98b2a3be748660c40283877e508fe","signature":"33033cf1e04db29a5c30aa8d44d3dc0a796b4e3d13ee518b2f9b791bbd673dbb"},{"version":"fc51e210277d2b85fa603d8bced656699e763deb88605991a9e62b2c0e39ac9e","signature":"f984f733fbd145bbfe88fcbc56d8e9da37689f17d30047fab8eaf90708a44eca"},{"version":"ac0af8bcb63a739de972306bde46cd511aeaa8f916866dbb30173c29b1bc0295","signature":"6f3db4fcc0ef538a93a6e85c9af91b240103b019326fdeb5aeb4444abee41a59"},{"version":"86506f74fea1622decd920d6e32aaa744b96ed1889d8ae98527abec6cadb7050","signature":"cec82c0f8645cfc39845ac45e70120f31f6e55d977cc0b6d401c8da329a1a220"},{"version":"ea85ccf40cc1e52ea35249b0795d60e918c401e0d70eedaf19754f0877b9a00a","signature":"187a53e224bc30248883eb58550cfea1457fb929c74d4bdac68d124d20727e7c"},{"version":"f634e4c7d5cdba8e092d98098033b311c8ef304038d815c63ffdb9f78f3f7bb7","impliedFormat":1},{"version":"86c75f983f5238a391339370aaec86f8bd385861d5e77b7be5314d45bb088835","signature":"8bd0473b15b2d3c4fc0029ad210d9ca885aba26ab2e2247d600cc159b765aaab"},{"version":"faeeb55137a689c511a5c810e4c2108c3304f8893ddda833590cb5740fe132f1","signature":"8f9824f9e1bde246c71e807114b3e13431d83859d56f7ba9a7292b3d0dc7c264"},"6389361c2f85e07270a69f04e616189eded752e40cfdeaea7cd3c9b13383fb8a",{"version":"332127a3359297990a363e1dfd31e5ee2adeac30691c99a99110d666f776d26d","signature":"f8219917137c47caf331311e0205b071040e232e0e766311b68d924af2f74b40"},{"version":"05ef8af0a14d5318d188ba37caa2838d4993be06384663d726841f0978ede475","signature":"047c08e5895f3f0870af13b033271759cd6577aa17d768809e392af4e7a6c115"},"36a07c317d0f521c813109a289f4cf3752a80a311102c79d8c334378c3cea119",{"version":"52b94b332290ff7d86df945558e4d637a55eafac2f256f75bfc6f04f61bcd55b","signature":"df7c48300df7f157d1e1e47b7ae8877af019c13b417d662225725455c92edac6"},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"a1724e8561b1f1cc013a15085623bda8cc7c99e01bf770cb2e116d4197f4e125","signature":"2743aa3c7552f89583d68aa086926d5aa2960f6088d4cee824ddc67b2c764063"},"e44ffc5dc4a7bcde6f667cf5152981b5f117ae53d1e926d3ea1ad6aab87184c1",{"version":"d926642feee1a4c145e3d72ac6668a08220c5fa890bc8df50df73278b7c1da54","signature":"dd4a4b08278cb1df81a91088fa0fa2c4b25e8f5cc8b145f0483c8efec7edec50"},{"version":"07a257b5e4b9301539cb36bfb2c20c58dc20e16980e72b718cde2cadc443867d","signature":"b69f0b7140d96a11afa7f134b8804ee716d5327a1221ace8c47876149883e555"},{"version":"25a23ce2f844bfd3d90cec41549a3356e22997e8a9b1bd3ae9c50c434531f96a","signature":"6a6b42c045652b44b81af07d55048d21068200dff584f16bbdffcb510c28fd99"},{"version":"a5f9563c1315cffbc1e73072d96dcd42332f4eebbdffd7c3e904f545c9e9fe24","impliedFormat":1},"c2f5ece9d3c7197106cdc8aa3bbf95dac409ea6e7a34f747dc5c80853af36afe",{"version":"f4e5b27e6754e6259652e1929f027b019048405b4babba625017a3a8d8ec3191","signature":"cb468e70ecbc5be6fa36c32af0b677a84ffeebbeda7eb54bfa014bd225eb71ca"},{"version":"8ef5d51f9bdfbf96ef03c3da38116364417c5d30ba405a455b06cea356e4b9c0","signature":"58ada619632b37d7cd2d8b25d20424a6ea2cb85522c2c30e0e8f20318cf4ba1b"},{"version":"86dba7613f45ca1d42501482654771aad1189c6b7c0be39e20a85142da17ad26","signature":"5b1234a06efe9feb761af05174a2414faa2e7b40c137be305a5d7343f557dba9"},{"version":"6b7834d9be5d46b5efad329c42243449c553e69bcdd192fee64c3bba9dc305d8","signature":"3adcb439210c0c2e27a338a592925dbe886d10bd24d02f9791e158bac83daece"},{"version":"1421aaf0eef383cd4517bb7890150e8ca4b6c1ccf502d321f46391f96ca51b60","signature":"b3af66803c35e13ee9e23687ee7cb88cf17e77753f4d4c3f2c7c0444f8f52ad8"},{"version":"6cb4008ffcedc5791cc35f60bbea6982507529de2657dffac380ee12036fd88c","signature":"1880bd08c3a6c6bdb8fb67f8d285f5bb3a5c13218ff396c5498c7fa0830c0036"},{"version":"70d58093fcdb25162c1727697bcbce56c5bb2b7e4f924c187116a99b04c65586","signature":"6688ab89eeb44744e19abbce57a209ff048b992ce8a5b45801380982eddb21e7"},{"version":"af2782ff14fef746cb2675b662be6e98cbef76288e9ff17d1905a6c079546d63","signature":"665f19a6ba658ce269be7de3b582ac1d3044acb3f33abdc71a674afeba929614"},{"version":"eeb6273e9c91305927ab4877f460ad49789c0b79f994f88e56e5befafe020ca7","signature":"396e6e2a8f276c1c2045cf9db1e920c3315c522d15582226d902e7e282d10bb3"},{"version":"54e3fd45c9d36e94c63dc30e4b1ee2e59060c2becefce9a78df0f94dee80aaa7","signature":"411b3bb189997c2163e2341ffcf8b0bae33562f4012cd36d652514cb9f9c89cf"},{"version":"5443fe074ba3df829026b79618499ecea006d1855f16f2eccbb8292c57a162b4","signature":"b3b766fd1c13e5aeef3fa0d8cbd6168f5596bba8e5a829775a9af6c9cd53774e"},{"version":"cf50104f1b2c5d1e0fda2b04d3a2d02418a2c3aa43635e6ed5a7f6a654589ee7","signature":"e85b0b605151f903114967ba81371ab47c492e003b04f9eb2a081e896644c8e1"},{"version":"f5379187f5e59b65c245f95a6c1f922f77bac9b5a5b2b5be90791476dfc7ccfe","signature":"d07d5b9f72033e89511e6e948aa7380a341a2314a9bd392e0366effa0bb14f3b"},{"version":"35e8e650398ad97e2bd1e9283206f474ea08590e49d36b5849fc0de8bf544795","signature":"eed6eca7d242a34fa410d9280435f54fde18c35aa6b1d751f2cab877269a2ee3"},"137652af6f2f2308d7c169750c9a3e458b9e86bd7b44c467bb5bc04e4428ab24","905417347f8e6ee65bd0dd06598b2f879fcdd38a3b95bb95c81c54c08f1e8d20",{"version":"4f0b8d596974c5eade80e09bef128fe8967cb70a5eacb6c7e5e453482e95d730","signature":"f4667b64522e07c2a451fff0250fdd7f3b6f61eda6d24bd9fc3fe9f66c33ce2a"},{"version":"aadd53ace2984027bac1f95bc0095560154da2e8fc5a2b5a607afa07b3137ece","signature":"da135339f7226556b160ce5d3bc07b290c2c5e97c389dabc4763204384bf86f4"},{"version":"56abb9f55a5a27d1563936a0766857cec1addb81046276c6367f29b2e2e852e2","signature":"f3f1469185b4e48f2b0e16c27452987a351898890c45cea7cfa38eb67f1a1b52"},{"version":"cdeec36c80126e319ee3378075c0a7f40bc1070cf61fa3f07170a38ab85e8e6c","signature":"6688ab89eeb44744e19abbce57a209ff048b992ce8a5b45801380982eddb21e7"},{"version":"95b9a2ee2bf2648d800abe41493d0b6b6ecbe1b2c514594715f6a2dee560c1d6","signature":"b3af270cae473ec96ec37c949159bfaa781875cfa4730eca64467eb4d51674c1"},{"version":"602ac3514d21d121d2de050f5317c7687562e218cbc020a0db185b59c860da3f","signature":"81e44d9fc9bf302ef04fa8c81cf3dfcf77a99b1727536c1165e91a027dc42732"},{"version":"f2c8b87ba429da546c68b143abf782056977ecb11fd9e94ef375729a985fd1d5","signature":"8d20d9f031c111c8e6414281f8980c4159c565507f5b0405596e7178b7e8adb1"},{"version":"c3b87aed1c093b3fa01bf922f3c54f3c0310a930886b9f85994d222ec78854d7","signature":"dd03ad8d11e99fec367fbda2fef6658067c40c45436d6bc6b0e071e18b39fdef"},{"version":"aadbec390dacd5ef830055b5833a7a322bc50dba4ffd480efced85e9c00078ad","signature":"7b741f1e8a3f79e1350c2196afddf25c5e5e68819ed8b25f55dc0b9046243e62"},{"version":"4106f71ebeb76b36ae780880993c7494e8a1feba8143fc62a95ce03037245661","signature":"7c41af3316f2392c6ea3e8a66ab3951331ee1bbe6a8f922ab13073d08d5ccbf0"},{"version":"ece5eb2ee68c2e083681d8108d4121cc176fd220a9f73e09403d06514b72855c","signature":"01ac449a6f2d322c0d36dc1a47b96c25ea0549b5167dcc3af1cc879a31ad4f15"},{"version":"ceea80c486b1ac12b0ef0ca557fb48e92a96ceab015f359d5c1b3be41c10fa10","signature":"3a784cbfbc646d5aa1d88c3fbfce404bb803a006db71a4630d53f73e4b114309"},{"version":"b9f5a9005e7da673147957a806f9fb97c33f48b8295c08e3b4ca346b6f67cb50","signature":"8bc2269731496b664a7d385fbd99f6c3d02834f6c897ce357615a72332aba293"},{"version":"04bc843f1d29c5fdb5e75833010d4eef3e6bb8c0c8a567dff01aa4004759911c","signature":"51e745df5694d25bf790caaf47e707135afd411c73b9fb5be631a406a32aa9de"},{"version":"2a15c12b614950bfe57ffa876da9c105008078a283888e6609c6162fe6603e93","signature":"6ea9efa91f9975db2e0b8df3df978f822ad900d5427ece69fc4c0a824d114a72"},{"version":"7068a447f03ee9761ff68001cff5af5f6827c906bfdee3167090734c84f7009a","signature":"5dd88729b7f449beff55e33b32a25e0d4933e9aac8cb7bb2968a2e51932c4835"},{"version":"4c8f06c09647144b3486f416f48fdcb20a3cb320f5c41ad5f05fff7625eab4c1","signature":"08bc12b2064ce1377fc10729fa9b5fd72c9f9dfdf395c5702af74c5796d55b65"},{"version":"ac4dfb51bc6f23fb670216557b56dc69560ff27db03ac94ad502eabfa2d3f708","signature":"dc495c79e72bb39604c5dba9663a0a64b21526fa199c5a9c03a9d2d4e156c06e"},{"version":"59d8744e9fe4fb8c33b7a4aeeb33fe68108d57522bb41e4f0011fbba5fc97316","signature":"87aece4f907da0c825f32e07424c5a79ebaa33dfb636f1356be3b2d4e10f4f38"},{"version":"2f08eeeb297d5d67c2ab4f3668e3bc591efee996b5570e509e002ec13b92472a","signature":"bbda306a9d0b9f257c9c52694048c1b165df2e11ecaaa713ce6af88984a08e9b"},{"version":"bc7cbc21d212cb531e7a91f164cf2225b28974d6a0f868f0de430309915ba91e","signature":"0875f2d50da2a0d072341ca6f19c4f17711fa0ef67ed68d58af1ff877c05c20a"},{"version":"6bb2f1338af99c0cd7636bab03e4159e90776f2890653988bf06c053a64ae326","signature":"ce40f68ead25c7726d6f01d6b2e3a4fb9ba19528e2481021631557641f6f18d7"},"85db17dfba8ec41685d390e6050a7c56b54cd64cd405bb6b05d18244b853c382","be511500a292c8d14cfbc07e547fe70479cb29b0ced72694dd45f221168fa2f7","09404bdb88408f3c404b9c1ae74de6c713a08648054fcb60b726019af098120d","bd42f11a105f2b64178bfbe770d5c28841f8eaec9f2b1cff7f606da384a1198f",{"version":"522d55d5b97a5d1b80ec59deb76d5d598cfda3835f060461b8086b4fe073b98e","signature":"87aece4f907da0c825f32e07424c5a79ebaa33dfb636f1356be3b2d4e10f4f38"},{"version":"03e1ae8ceb203e389da7f33dc615e716230831ebca8c70f1842de03f9ab3da5f","signature":"49c126c3bfd8736993fe911ce0453ee57c5c3b938550b6dd513e524d4b67093f"},{"version":"86e69adb0fdba6b3e2d603adb21ab396deb7afb6ebb122ca812f5292c7dab83c","signature":"81b232ac69016318984a1fa3fdc3f42e0bd43b6cd7fd14e0bcbe292da32a328a"},{"version":"e01bd67f208c5c743988b9f46f5a89d691d7bec97d75b923f0519e039258d436","signature":"8c903ed180a5736b07ff4c63f373bf0c6c3bbe43332cbcc3c72bd9016f5b09cc"},{"version":"84b5901ce3771bd85f316bba6fbbe2c82775316cb70006f40a137391aa31decc","signature":"bacd9895ebbe12ce6e984f63d1395c409294fbf53b6b713c3568f2b401be8e2a"},{"version":"63c8026d23c7291ab1b35ed7bdf8d885a6cbd06a560f496900433944ddf7f8cc","signature":"de548e9864173707bc677b3df2dbea074b5e58a0aa657d0d9245b1fbe8c4f537"},"718a42983f1fb75b9026ccbc9fed601845c3dbc38a48f2e3d889643830925777","eb55abec16ec92f76d8ebb55685b555ab4ef91650079caf860ff0049cbfd71f7",{"version":"a292129d96f68e627f38cd4ca4e012fb76b08f2ce0b6e9d86e7db792e526c093","signature":"6688ab89eeb44744e19abbce57a209ff048b992ce8a5b45801380982eddb21e7"},{"version":"e5f510da10d532486ec87b4b67c1e29baaefbbff3ee236cbe4bb51961e597a12","signature":"436bcadb42d782fc9a1f8681c1007dd7df963d57fc2b35343dc74ad4721f4f28"},"eba248c0e3664626793ae645c3bfee8ddf1b256adf6e3c77293140cf0af9dba8","db92080eaedf1ace7f080412e739e0590e471e2c151ac115d1c7f936242a0736",{"version":"dd332252bb45677533cd5553e0c35340cee4c485c90c63360f8e653901286a4f","impliedFormat":1},{"version":"dddde95f3dea44dc49c9095a861298e829122a54a3f56b3b815e615501e2ed16","impliedFormat":1},{"version":"794a88237c94d74302df12ebb02f521cf5389a5bf046a3fdbdd3afb21dc02511","impliedFormat":1},{"version":"66a08d30c55a7aefa847c1f5958924a3ef9bea6cd1c962a8ff1b2548f66a6ce0","impliedFormat":1},{"version":"0790ae78f92ab08c9d7e66b59733a185a9681be5d0dc90bd20ab5d84e54dcb86","impliedFormat":1},{"version":"1046cd42ec19e4fd038c803b4fc1aff31e51e6e48a6b8237a0240a11c1c27792","impliedFormat":1},{"version":"8f93c7e1084de38a142085c7f664b0eb463428601308fb51c68b25cb687e0887","impliedFormat":1},{"version":"83f69c968d32101f8690845f47bcae016cbea049e222a5946889eb3ae37e7582","impliedFormat":1},{"version":"59c3f3ed18de1c7f5927e0eafcdc0e545db88bfae4168695a89e38a85943a86d","impliedFormat":1},{"version":"32e6c27fd3ef2b1ddbf2bf833b2962d282eb07d9d9d3831ca7f4ff63937268e1","impliedFormat":1},{"version":"406ebb72aa8fdd9227bfce7a1b3e390e2c15b27f5da37ea9e3ed19c7fb78d298","impliedFormat":1},{"version":"197109f63a34b5f9379b2d7ba82fc091659d6878db859bd428ea64740cb06669","impliedFormat":1},{"version":"059871a743c0ca4ae511cbd1e356548b4f12e82bc805ab2e1197e15b5588d1c4","impliedFormat":1},{"version":"8ccefe3940a2fcb6fef502cdbc7417bb92a19620a848f81abc6caa146ab963e9","impliedFormat":1},{"version":"44d8ec73d503ae1cb1fd7c64252ffa700243b1b2cc0afe0674cd52fe37104d60","impliedFormat":1},{"version":"67ea5a827a2de267847bb6f1071a56431aa58a4c28f8af9b60d27d5dc87b7289","impliedFormat":1},{"version":"e33bb784508856827448a22947f2cac69e19bc6e9d6ef1c4f42295f7bd4ce293","impliedFormat":1},{"version":"383bb09bfeb8c6ef424c7fbce69ec7dc59b904446f8cfec838b045f0143ce917","impliedFormat":1},{"version":"83508492e3fc5977bc73e63541e92c5a137db076aafc59dcf63e9c6ad34061c7","impliedFormat":1},{"version":"ef064b9a331b7fc9fe0b368499c52623fb85d37d8972d5758edc26064189d14d","impliedFormat":1},{"version":"d64457d06ab06ad5e5f693123ee2f17594f00e6d5481517058569deac326fea0","impliedFormat":1},{"version":"e92ea29d716c5fe1977a34e447866d5cfbd94b3f648e3b9c550603fdae0e94fb","impliedFormat":1},{"version":"3d10f47c6b1e9225c68c140235657a0cdd4fc590c18faf87dcd003fd4e22c67f","impliedFormat":1},{"version":"13989f79ff8749a8756cac50f762f87f153e3fb1c35768cc6df15968ec1adb1a","impliedFormat":1},{"version":"e014c2f91e94855a52dd9fc88867ee641a7d795cfe37e6045840ecf93dab2e6b","impliedFormat":1},{"version":"74b9f867d1cc9f4e6122f81b59c77cbd6ff39f482fb16cffdc96e4cda1b5fdb1","impliedFormat":1},{"version":"7c8574cfc7cb15a86db9bf71a7dc7669593d7f62a68470adc01b05f246bd20ff","impliedFormat":1},{"version":"c8f49d91b2669bf9414dfc47089722168602e5f64e9488dbc2b6fe1a0f6688da","impliedFormat":1},{"version":"3abee758d3d415b3b7b03551f200766c3e5dd98bb1e4ff2c696dc6f0c5f93191","impliedFormat":1},{"version":"79bd7f60a080e7565186cfdfd84eac7781fc4e7b212ab4cd315b9288c93b7dc7","impliedFormat":1},{"version":"4a2f281330a7b5ed71ebc4624111a832cd6835f3f92ad619037d06b944398cf4","impliedFormat":1},{"version":"ea8130014cb8ee30621bf521f58d036bff3b9753b2f6bd090cc88ac15836d33c","impliedFormat":1},{"version":"c740d49c5a0ecc553ddfc14b7c550e6f5a2971be9ed6e4f2280b1f1fa441551d","impliedFormat":1},{"version":"886a56c6252e130f3e4386a6d3340cf543495b54c67522d21384ed6fb80b7241","impliedFormat":1},{"version":"4b7424620432be60792ede80e0763d4b7aab9fe857efc7bbdb374e8180f4092a","impliedFormat":1},{"version":"e407db365f801ee8a693eca5c21b50fefd40acafda5a1fa67f223800319f98a8","impliedFormat":1},{"version":"529660b3de2b5246c257e288557b2cfa5d5b3c8d2240fa55a4f36ba272b57d18","impliedFormat":1},{"version":"0f6646f9aba018d0a48b8df906cb05fa4881dc7f026f27ab21d26118e5aa15de","impliedFormat":1},{"version":"b3620fcf3dd90a0e6a07268553196b65df59a258fe0ec860dfac0169e0f77c52","impliedFormat":1},{"version":"08135e83e8d9e34bab71d0cf35b015c21d0fd930091b09706c6c9c0e766aca28","impliedFormat":1},{"version":"96e14f2fdc1e3a558462ada79368ed49b004efce399f76f084059d50121bb9a9","impliedFormat":1},{"version":"56f2ade178345811f0c6c4e63584696071b1bd207536dc12384494254bc1c386","impliedFormat":1},{"version":"e484786ef14e10d044e4b16b6214179c95741e89122ba80a7c93a7e00bf624b1","impliedFormat":1},{"version":"4763ce202300b838eb045923eaeb32d9cf86092eee956ca2d4e223cef6669b13","impliedFormat":1},{"version":"7cff5fff5d1a92ae954bf587e5c35987f88cacaa006e45331b3164c4e26369de","impliedFormat":1},{"version":"c276acedaadc846336bb51dd6f2031fdf7f299d0fae1ee5936ccba222e1470ef","impliedFormat":1},{"version":"426c3234f768c89ba4810896c1ee4f97708692727cfecba85712c25982e7232b","impliedFormat":1},{"version":"ee12dd75feac91bb075e2cb0760279992a7a8f5cf513b1cffaa935825e3c58be","impliedFormat":1},{"version":"3e51868ea728ceb899bbfd7a4c7b7ad6dd24896b66812ea35893e2301fd3b23f","impliedFormat":1},{"version":"781e8669b80a9de58083ca1f1c6245ef9fb04d98add79667e3ed70bde034dfd5","impliedFormat":1},{"version":"cfd35b460a1e77a73f218ebf7c4cd1e2eeeaf3fa8d0d78a0a314c6514292e626","impliedFormat":1},{"version":"452d635c0302a0e1c5108edebcca06fc704b2f8132123b1e98a5220afa61a965","impliedFormat":1},{"version":"bbe64c26d806764999b94fcd47c69729ba7b8cb0ca839796b9bb4d887f89b367","impliedFormat":1},{"version":"b87d65da85871e6d8c27038146044cffe40defd53e5113dbd198b8bce62c32db","impliedFormat":1},{"version":"c37712451f6a80cbf8abec586510e5ac5911cb168427b08bc276f10480667338","impliedFormat":1},{"version":"ecf02c182eec24a9a449997ccc30b5f1b65da55fd48cbfc2283bcfa8edc19091","impliedFormat":1},{"version":"0b2c6075fc8139b54e8de7bcb0bed655f1f6b4bf552c94c3ee0c1771a78dea73","impliedFormat":1},{"version":"49707726c5b9248c9bac86943fc48326f6ec44fe7895993a82c3e58fb6798751","impliedFormat":1},{"version":"a9679a2147c073267943d90a0a736f271e9171de8fbc9c378803dd4b921f5ed3","impliedFormat":1},{"version":"a8a2529eec61b7639cce291bfaa2dd751cac87a106050c3c599fccb86cc8cf7f","impliedFormat":1},{"version":"bfc46b597ca6b1f6ece27df3004985c84807254753aaebf8afabd6a1a28ed506","impliedFormat":1},{"version":"7fdee9e89b5a38958c6da5a5e03f912ac25b9451dc95d9c5e87a7e1752937f14","impliedFormat":1},{"version":"b8f3eafeaf04ba3057f574a568af391ca808bdcb7b031e35505dd857db13e951","impliedFormat":1},{"version":"30b38ae72b1169c4b0d6d84c91016a7f4c8b817bfe77539817eac099081ce05c","impliedFormat":1},{"version":"c9f17e24cb01635d6969577113be7d5307f7944209205cb7e5ffc000d27a8362","impliedFormat":1},{"version":"685ead6d773e6c63db1df41239c29971a8d053f2524bfabdef49b829ae014b9a","impliedFormat":1},{"version":"b7bdabcd93148ae1aecdc239b6459dfbe35beb86d96c4bd0aca3e63a10680991","impliedFormat":1},{"version":"e83cfc51d3a6d3f4367101bfdb81283222a2a1913b3521108dbaf33e0baf764a","impliedFormat":1},{"version":"95f397d5a1d9946ca89598e67d44a214408e8d88e76cf9e5aecbbd4956802070","impliedFormat":1},{"version":"74042eac50bc369a2ed46afdd7665baf48379cf1a659c080baec52cc4e7c3f13","impliedFormat":1},{"version":"1541765ce91d2d80d16146ca7c7b3978bd696dc790300a4c2a5d48e8f72e4a64","impliedFormat":1},{"version":"ec6acc4492c770e1245ade5d4b6822b3df3ba70cf36263770230eac5927cf479","impliedFormat":1},{"version":"4c39ee6ae1d2aeda104826dd4ce1707d3d54ac34549d6257bea5d55ace844c29","impliedFormat":1},{"version":"deb099454aabad024656e1fc033696d49a9e0994fc3210b56be64c81b59c2b20","impliedFormat":1},{"version":"80eec3c0a549b541de29d3e46f50a3857b0b90552efeeed90c7179aba7215e2f","impliedFormat":1},{"version":"a4153fbd5c9c2f03925575887c4ce96fc2b3d2366a2d80fad5efdb75056e5076","impliedFormat":1},{"version":"6f7c70ca6fa1a224e3407eb308ec7b894cfc58042159168675ccbe8c8d4b3c80","impliedFormat":1},{"version":"4b56181b844219895f36cfb19100c202e4c7322569dcda9d52f5c8e0490583c9","impliedFormat":1},{"version":"5609530206981af90de95236ce25ddb81f10c5a6a346bf347a86e2f5c40ae29b","impliedFormat":1},{"version":"632ce3ee4a6b320a61076aeca3da8432fb2771280719fde0936e077296c988a9","impliedFormat":1},{"version":"8b293d772aff6db4985bd6b33b364d971399993abb7dc3f19ceed0f331262f04","impliedFormat":1},{"version":"4eb7bad32782df05db4ba1c38c6097d029bed58f0cb9cda791b8c104ccfdaa1f","impliedFormat":1},{"version":"c6a8aa80d3dde8461b2d8d03711dbdf40426382923608aac52f1818a3cead189","impliedFormat":1},{"version":"bf5e79170aa7fc005b5bf87f2fe3c28ca8b22a1f7ff970aa2b1103d690593c92","impliedFormat":1},{"version":"ba3c92c785543eba69fbd333642f5f7da0e8bce146dec55f06cfe93b41e7e12f","impliedFormat":1},{"version":"c6d72ececae6067e65c78076a5d4a508f16c806577a3d206259a0d0bfeedc8d1","impliedFormat":1},{"version":"b6429631df099addfcd4a5f33a046cbbde1087e3fc31f75bfbbd7254ef98ea3c","impliedFormat":1},{"version":"4e9cf1b70c0faf6d02f1849c4044368dc734ad005c875fe7957b7df5afe867c9","impliedFormat":1},{"version":"7498b7d83674a020bd6be46aeed3f0717610cb2ae76d8323e560e964eb122d0c","impliedFormat":1},{"version":"b80405e0473b879d933703a335575858b047e38286771609721c6ab1ea242741","impliedFormat":1},{"version":"7193dfd01986cd2da9950af33229f3b7c5f7b1bee0be9743ad2f38ec3042305e","impliedFormat":1},{"version":"1ccb40a5b22a6fb32e28ffb3003dea3656a106dd3ed42f955881858563776d2c","impliedFormat":1},{"version":"8d97d5527f858ae794548d30d7fc78b8b9f6574892717cc7bc06307cc3f19c83","impliedFormat":1},{"version":"ccb4ecdc8f28a4f6644aa4b5ab7337f9d93ff99c120b82b1c109df12915292ac","impliedFormat":1},{"version":"8bbcf9cecabe7a70dcb4555164970cb48ba814945cb186493d38c496f864058f","impliedFormat":1},{"version":"7d57bdfb9d227f8a388524a749f5735910b3f42adfe01bfccca9999dc8cf594c","impliedFormat":1},{"version":"3508810388ea7c6585496ee8d8af3479880aba4f19c6bbd61297b17eb30428f4","impliedFormat":1},{"version":"56931daef761e6bdd586358664ccd37389baabeb5d20fe39025b9af90ea169a5","impliedFormat":1},{"version":"abb48247ab33e8b8f188ef2754dfa578129338c0f2e277bfc5250b14ef1ab7c5","impliedFormat":1},{"version":"beaba1487671ed029cf169a03e6d680540ea9fa8b810050bc94cb95d5e462db2","impliedFormat":1},{"version":"1418ef0ba0a978a148042bc460cf70930cd015f7e6d41e4eb9348c4909f0e16d","impliedFormat":1},{"version":"56be4f89812518a2e4f0551f6ef403ffdeb8158a7c271b681096a946a25227e9","impliedFormat":1},{"version":"bbb0937150b7ab2963a8bc260e86a8f7d2f10dc5ee7ddb1b4976095a678fdaa4","impliedFormat":1},{"version":"862301d178172dc3c6f294a9a04276b30b6a44d5f44302a6e9d7dc1b4145b20b","impliedFormat":1},{"version":"cbf20c7e913c08cb08c4c3f60dae4f190abbabaa3a84506e75e89363459952f0","impliedFormat":1},{"version":"0f3333443f1fea36c7815601af61cb3184842c06116e0426d81436fc23479cb8","impliedFormat":1},{"version":"421d3e78ed21efcbfa86a18e08d5b6b9df5db65340ef618a9948c1f240859cc1","impliedFormat":1},{"version":"b1225bc77c7d2bc3bad15174c4fd1268896a90b9ab3b306c99b1ade2f88cddcc","impliedFormat":1},{"version":"ca46e113e95e7c8d2c659d538b25423eac6348c96e94af3b39382330b3929f2a","impliedFormat":1},{"version":"03ca07dbb8387537b242b3add5deed42c5143b90b5a10a3c51f7135ca645bd63","impliedFormat":1},{"version":"ca936efd902039fda8a9fc3c7e7287801e7e3d5f58dd16bf11523dc848a247d7","impliedFormat":1},{"version":"2c7b3bfa8b39ed4d712a31e24a8f4526b82eeca82abb3828f0e191541f17004c","impliedFormat":1},{"version":"5ffaae8742b1abbe41361441aa9b55a4e42aee109f374f9c710a66835f14a198","impliedFormat":1},{"version":"ecab0f43679211efc9284507075e0b109c5ad024e49b190bb28da4adfe791e49","impliedFormat":1},{"version":"967109d5bc55face1aaa67278fc762ac69c02f57277ab12e5d16b65b9023b04f","impliedFormat":1},{"version":"36d25571c5c35f4ce81c9dcae2bdd6bbaf12e8348d57f75b3ef4e0a92175cd41","impliedFormat":1},{"version":"fde94639a29e3d16b84ea50d5956ee76263f838fa70fe793c04d9fce2e7c85b9","impliedFormat":1},{"version":"5f4c286fea005e44653b760ebfc81162f64aabc3d1712fd4a8b70a982b8a5458","impliedFormat":1},{"version":"e02dabe428d1ffd638eccf04a6b5fba7b2e8fccee984e4ef2437afc4e26f91c2","impliedFormat":1},{"version":"60dc0180bd223aa476f2e6329dca42fb0acaa71b744a39eb3f487ab0f3472e1c","impliedFormat":1},{"version":"b6fdbecf77dcbf1b010e890d1a8d8bfa472aa9396e6c559e0fceee05a3ef572f","impliedFormat":1},{"version":"e1bf9d73576e77e3ae62695273909089dbbb9c44fb52a1471df39262fe518344","impliedFormat":1},{"version":"d2d57df33a7a5ea6db5f393df864e3f8f8b8ee1dfdfe58180fb5d534d617470f","impliedFormat":1},{"version":"fdcd692f0ac95e72a0c6d1e454e13d42349086649828386fe7368ac08c989288","impliedFormat":1},{"version":"5583eef89a59daa4f62dd00179a3aeff4e024db82e1deff2c7ec3014162ea9a2","impliedFormat":1},{"version":"b0641d9de5eaa90bff6645d754517260c3536c925b71c15cb0f189b68c5386b4","impliedFormat":1},{"version":"9899a0434bd02881d19cb08b98ddd0432eb0dafbfe5566fa4226bdd15624b56f","impliedFormat":1},{"version":"4496c81ce10a0a9a2b9cb1dd0e0ddf63169404a3fb116eb65c52b4892a2c91b9","impliedFormat":1},{"version":"ecdb4312822f5595349ec7696136e92ecc7de4c42f1ea61da947807e3f11ebfc","impliedFormat":1},{"version":"42edbfb7198317dd7359ce3e52598815b5dc5ca38af5678be15a4086cccd7744","impliedFormat":1},{"version":"8105321e64143a22ed5411258894fb0ba3ec53816dad6be213571d974542feeb","impliedFormat":1},{"version":"d1b34c4f74d3da4bdf5b29bb930850f79fd5a871f498adafb19691e001c4ea42","impliedFormat":1},{"version":"9a1caf586e868bf47784176a62bf71d4c469ca24734365629d3198ebc80858d7","impliedFormat":1},{"version":"35a443f013255b33d6b5004d6d7e500548536697d3b6ba1937fd788ca4d5d37b","impliedFormat":1},{"version":"b591c69f31d30e46bc0a2b383b713f4b10e63e833ec42ee352531bbad2aadfaa","impliedFormat":1},{"version":"31e686a96831365667cbd0d56e771b19707bad21247d6759f931e43e8d2c797d","impliedFormat":1},{"version":"dfc3b8616bece248bf6cd991987f723f19c0b9484416835a67a8c5055c5960e0","impliedFormat":1},{"version":"03b64b13ecf5eb4e015a48a01bc1e70858565ec105a5639cfb2a9b63db59b8b1","impliedFormat":1},{"version":"c56cc01d91799d39a8c2d61422f4d5df44fab62c584d86c8a4469a5c0675f7c6","impliedFormat":1},{"version":"5205951312e055bc551ed816cbb07e869793e97498ef0f2277f83f1b13e50e03","impliedFormat":1},{"version":"50b1aeef3e7863719038560b323119f9a21f5bd075bb97efe03ee7dec23e9f1b","impliedFormat":1},{"version":"0cc13970d688626da6dce92ae5d32edd7f9eabb926bb336668e5095031833b7c","impliedFormat":1},{"version":"3be9c1368c34165ba541027585f438ed3e12ddc51cdc49af018e4646d175e6a1","impliedFormat":1},{"version":"7d617141eb3f89973b1e58202cdc4ba746ea086ef35cdedf78fb04a8bb9b8236","impliedFormat":1},{"version":"ea6d9d94247fd6d72d146467070fe7fc45e4af6e0f6e046b54438fd20d3bd6a2","impliedFormat":1},{"version":"d584e4046091cdef5df0cb4de600d46ba83ff3a683c64c4d30f5c5a91edc6c6c","impliedFormat":1},{"version":"ce68902c1612e8662a8edde462dff6ee32877ed035f89c2d5e79f8072f96aed0","impliedFormat":1},{"version":"0fdcf43fd0f1d8cacc83da11ba56bda5697fd2be7d3f282141903212169dad34","impliedFormat":1},{"version":"015ba7d990cac24d4ff045d75e5b1e74edd306223bae571e3862c92cec7e6515","impliedFormat":1},{"version":"59cd834d4204f5467061c56e16cd3c68eb2d5ce15e27d2b4c0a30a68a9bbb870","impliedFormat":1},{"version":"a8761b5c12f6b4fdfb6bb5698935397e81df493e15c067752f1193b28ca1aa01","impliedFormat":1},{"version":"760a3050427dc1e3d3228fbcfb17f5e9f9c62b7a21af098da05e5d7f1c110fd6","impliedFormat":1},{"version":"cac3a87600ffc325e1e2bff3830e3e9977de05b66e4384f3625e1378222575bb","impliedFormat":1},{"version":"14826ddd521dfed918eead9e6f65fd33f1d37a1f5723a647c0fcebde5fb2680b","impliedFormat":1},{"version":"5da3fd402befb210af1893188bd9199d8193bbf24cceeb7bb0c5262eae410ab4","impliedFormat":1},{"version":"d48ac7569126b1bc3cd899c3930ef9cf22a72d51cf45b60fc129380ae840c2f2","impliedFormat":1},{"version":"e4f0d7556fda4b2288e19465aa787a57174b93659542e3516fd355d965259712","impliedFormat":1},{"version":"756b471ce6ec8250f0682e4ad9e79c2fddbe40618ba42e84931dbb65d7ac9ab0","impliedFormat":1},{"version":"ce9635a3551490c9acdbcb9a0491991c3d9cd472e04d4847c94099252def0c94","impliedFormat":1},{"version":"b70ee10430cc9081d60eb2dc3bee49c1db48619d1269680e05843fdaba4b2f7a","impliedFormat":1},{"version":"9b78500996870179ab99cbbc02dffbb35e973d90ab22c1fb343ed8958598a36c","impliedFormat":1},{"version":"c6ee8f32bb16015c07b17b397e1054d6906bc916ab6f9cd53a1f9026b7080dbf","impliedFormat":1},{"version":"67e913fa79af629ee2805237c335ea5768ea09b0b541403e8a7eaef253e014d9","impliedFormat":1},{"version":"0b8a688a89097bd4487a78c33e45ca2776f5aedaa855a5ba9bc234612303c40e","impliedFormat":1},{"version":"188e5381ed8c466256937791eab2cc2b08ddcc5e4aaf6b4b43b8786ed1ab5edd","impliedFormat":1},{"version":"8559f8d381f1e801133c61d329df80f7fdab1cbad5c69ebe448b6d3c104a65bd","impliedFormat":1},{"version":"00a271352b854c5d07123587d0bb1e18b54bf2b45918ab0e777d95167fd0cb0b","impliedFormat":1},{"version":"10c4be0feeac95619c52d82e31a24f102b593b4a9eba92088c6d40606f95b85d","impliedFormat":1},{"version":"e1385f59b1421fceba87398c3eb16064544a0ce7a01b3a3f21fa06601dc415dc","impliedFormat":1},{"version":"bacf2c0f8cbfc5537b3c64fc79d3636a228ccbb00d769fb1426b542efe273585","impliedFormat":1},{"version":"3103c479ff634c3fbd7f97a1ccbfb645a82742838cb949fdbcf30dd941aa7c85","impliedFormat":1},{"version":"4b37b3fab0318aaa1d73a6fde1e3d886398345cff4604fe3c49e19e7edd8a50d","impliedFormat":1},{"version":"bf429e19e155685bda115cc7ea394868f02dec99ee51cfad8340521a37a5867a","impliedFormat":1},{"version":"72116c0e0042fd5aa020c2c121e6decfa5414cf35d979f7db939f15bb50d2943","impliedFormat":1},{"version":"20510f581b0ee148a80809122f9bcaa38e4691d3183a4ed585d6d02ffe95a606","impliedFormat":1},{"version":"71f4b56ed57bbdea38e1b12ad6455653a1fbf5b1f1f961d75d182bff544a9723","impliedFormat":1},{"version":"b3e1c5db2737b0b8357981082b7c72fe340edf147b68f949413fee503a5e2408","impliedFormat":1},{"version":"396e64a647f4442a770b08ed23df3c559a3fa7e35ffe2ae0bbb1f000791bda51","impliedFormat":1},{"version":"698551f7709eb21c3ddec78b4b7592531c3e72e22e0312a128c40bb68692a03f","impliedFormat":1},{"version":"662b28f09a4f60e802023b3a00bdd52d09571bc90bf2e5bfbdbc04564731a25e","impliedFormat":1},{"version":"e6b8fb8773eda2c898e414658884c25ff9807d2fce8f3bdb637ab09415c08c3c","impliedFormat":1},{"version":"528288d7682e2383242090f09afe55f1a558e2798ceb34dc92ae8d6381e3504a","impliedFormat":1},{"version":"730d21f6e7c1dfa3953fad19932f9bf5688c83c7bbe3d23d5b521c93f8fe7f10","signature":"d62af07bd515021ac4a4e5bf8bc5c18ce276dcd6a52b8aadc6a5dd43d0442521"},"d51423ffb750f49550391550baede29de14f203f1ca0bb93a91d744db41be23c","8992a721c4feb6e297226e2ca15e553e2647c4755167500cf835ebfb85f239d7",{"version":"560883cb288d583ba3a93e67c5875c8f379b704c007b1ba0e63db2ea35510212","signature":"189018090e9f23175441ad9bb33490b59f30f9ba9c0f9c785ec7141569471bbb"},"b07c71c5fba3c74644dd86718c1ade11398db2d42bdfbacb8e04eedb6fb660fd","b1c4c0319e6ecb6a76915d0a3099f0b0494d6a36718be2ecb5516c58ede14104",{"version":"751920cfff72dede0b3cbaf7d934eefc8e2480d311a854c5f1ee5630d3def595","signature":"f83b13efd8d50c91212c1c74b017511ac76289b1d4f9a2b781c468d18c1699f4"},"2d7ca794aecca564bd4fd9a13c44254ba9fe1d3bb7334b3ea9b09f3f0c862c13",{"version":"8812d3763af9e7805ce2ed45b691f592c10c171ac106191e94ac646a4b04f120","signature":"b9fe7176db67aa732a75a928ffd3575f227e1d50814c1ab682970c30a8c8deb5"},"3c2d48168fd2bc94edf2b2f04edecf571f399b7b86c14eef983191b4b0147784","c2bef28c06291905d2a025477f2a448b2b9b7d7190db72afdad899fca2d78432",{"version":"cdf028dcfde632ee43399d97b48cc5e011a2cbacb8cdbaf913be8e1a8ef1fe0d","signature":"6d94203bc5494db3c84b18283375c670a7998f4f785930b0a7179919dd3de4d0"},"1bcc9be4323600b5f99792c6ede548a5115707e80c77a7d791526bc57e9c3a73","ac0f429aef7635226c12c1b6372faa319e8f0a8deeacc1acfbace5548a3b8790",{"version":"ad291c999ac060db57be827b88ac76603927af1f78e68f4b1366bc707fe03681","impliedFormat":1},{"version":"fe4891539e285f3cd3ea5038df11a0b49bf799210f7b748a732f1cd106a4b4ed","impliedFormat":1},{"version":"a4028c99d8d6152d13f2aa0a88292c8013b33bbd4bcc1c08c5b02dfaae76f591","impliedFormat":1},{"version":"7be8788557e18b95fb55f948e2eef5f346c9c38b4c0814667eb392ce5f22f2a9","impliedFormat":1},{"version":"1d6c82d8af47b2e0c7f2995a12a6d8318fecc83674eb1892046ab3b9125e59f9","impliedFormat":1},{"version":"190bfc26a8325ce1e7bb89837a6a1cd815f7a8a1e98c8f6939ed80cb7b091020","impliedFormat":1},{"version":"ad01ecf05aa1db985dcc5b302b1ef0eec564498166f9c8b4ee5b067855366944","impliedFormat":1},{"version":"d2673463eaf1b0076a4afb65fb9b4d21222a8476b5149e4ec9af5e6f2a189121","impliedFormat":1},{"version":"94404a175aac853f2964d18681dff5c55faeaaa4661923b5abef08e5bbb62143","impliedFormat":1},{"version":"67b9f4d85e6a2b342c09fe35707e0b2adbb0fe7c37735577364007340ff5c8b7","impliedFormat":1},{"version":"3673f4c3a981a3145594e35d08cd4e3d4723314b61bc309272e972fb57e1f055","impliedFormat":1},{"version":"e31dd8482cbf3a80014dbed42352303ff87e4c9b80489c7a3c30ab56b27afb74","impliedFormat":1},{"version":"1b30b75dcd3c9a5541eef3a6fcdb57a54c2e42037e1af84f3c290285353fa3d9","impliedFormat":1},{"version":"b8962d3221606148834bcaa14cc1d5fed08c1f7cf17a65058f8089cfe0133a55","impliedFormat":1},{"version":"7d0ad5dd4bfa7e6ffe0ecf6ec3f3f419d5eabaebf05222969c247229fb20cdfb","impliedFormat":1},{"version":"80ad5aed02e33d58c99a4e3176ff71c329e0c8db359c13c370ced3b91d4f2e00","impliedFormat":1},{"version":"26176e729ab06da686b38fab1ed31f57ca07ee6941841831b85c0b07189fb56f","impliedFormat":1},{"version":"bd7d0c4f89494fc8e2220aa39f220332cddbff8688788a3534ec7295acc88fe4","impliedFormat":1},{"version":"85e93507cc532d8e32f3266d621e39e12f2765aec145ed60690305a61efab36c","impliedFormat":1},{"version":"3cef134032da5e1bfabba59a03a58d91ed59f302235034279bb25a5a5b65ca62","affectsGlobalScope":true,"impliedFormat":1},{"version":"94e0df058b533a29ad3e197ba9c8423e76b3409c924a14ebaa8481a553da6c91","impliedFormat":1},{"version":"785ecae91c71addb2e013040352ba4d4db1be3c35a8189e4c80bb618591b0fc9","impliedFormat":1},{"version":"d707bb4e7d2d7fe0afccb5d163adc4cd5d010a5cd3b9e81132f49530753e6821","impliedFormat":1},{"version":"1b529fe297f98b0d6f7c99be582b968b8dde854ebedd9b8b66f55e523376b16a","impliedFormat":1},{"version":"07ec595b7452e7431d091fd4310fbc9b87b7b997ec994292c2bc4131dc4b4a49","impliedFormat":1},{"version":"12baec7a4e2c3acddd09ab665e0ae262395044396e41ecde616fefdd33dc75ff","impliedFormat":99},{"version":"a5b88a3dd2d88189df04e242aa103b7d380d6f3226cb709e6231b1714ab32367","impliedFormat":99},{"version":"e0ae30ef821c679555662ef3b2fe7876550bb882351e7763658e574af8b46c70","impliedFormat":99},{"version":"7078c77d332326a372c1a2bf1a82aa5d1a75f2ef0aee6ace01c0caf509d682e6","impliedFormat":99},{"version":"3c655c148cc91a10ac5cd7e037a043225da3df41be908f5ff4970c27f5019e41","impliedFormat":99},{"version":"1c2895fbfa6cd25406f29fcdd75c2e2105e8c8df1a4944fbba9ccace6211c893","impliedFormat":99},{"version":"81e8f8a08f31dd6766ef203bfe8d9e1f2fdd42e22ddebba6607c569ee750f611","impliedFormat":99},{"version":"8cab328fafd8141b097260fa1bb4478477ccb4215b83fe710bb863d639eeaad7","impliedFormat":99},{"version":"b71c133a200ec0f58e2fed163ffd7195727fa60ad82e2f04b23f3d0358d11c69","impliedFormat":99},{"version":"2a6056297dcd95be218af4da343508fb6f669b1847a0bd0a61ab565555e9bff4","impliedFormat":99},{"version":"4f8d052e63e35abab5461f3d2243ffbfcbd5746c82d915f2eec6a56a92f2de2f","impliedFormat":99},{"version":"ea80607028bdbddc6cedd31518df127b1c1d8d36e61602c1ab087a143f6cf35e","impliedFormat":99},{"version":"0807e49c4834ee58f77dfd4c3b383f578e0a2734b33a0b3eba685595b3942c81","impliedFormat":99},{"version":"32f8862973a256b9f0b87978e1a8999456dd86d70b0dcc0b56cb1cf416ee5c27","impliedFormat":99},{"version":"b71d05a8d89c62d2e9110b16a413ccbf72a6c6c745a46b1c98684a3f5a11d9af","impliedFormat":99},{"version":"6295f18d7bb4eb63ba14059092e89b7b7af51fbe4308c9605af84d5770b63aa0","impliedFormat":99},{"version":"dcea451fd572ddd0ed46c322042eaa0bfcf9ec27eb3c6253d60903a58463c78c","impliedFormat":99},{"version":"d2bc6aceb7e558385033d069e9b6263df719a54d17f2a9672c9c675e106c4ff2","impliedFormat":99},{"version":"3e9f400911379b8eba9a2a1346fa1cce3cc21ee2587cedb14c0636d2956ec3a5","impliedFormat":99},{"version":"2cab545dabda94fe5419bd6bdfae4d9aabd6f40b46bb0040c417ef570b32b13f","impliedFormat":99},{"version":"9014f6ae62567a1a2edf9be5278d1c192c69df50dfa0bb2e2b130f4fab6eb2a3","impliedFormat":99},{"version":"d6b3c97a7d31d1ea76c8680ff11b0b07185e1f6222d3e6f29d7a13b6911127ab","impliedFormat":99},{"version":"0ddd9ab937cef821a908be8581c73874105b34a61b6debaaa89c5c5cf25594a1","impliedFormat":99},{"version":"f8f112dfc0427d63a94413a12bca3cc858b4359e70e1e30d3f3709bef76f1c52","impliedFormat":99},{"version":"26c42de693907fa56842e6ebf39007334e1c6dbae30388a71d715179a527edb2","impliedFormat":99},{"version":"cceba3e6626d0d5a6b743b5f7f150f92323173a42d25269e731080a3ff36d31a","impliedFormat":99},{"version":"698f3f181d2eb5a09ba7cbd78e9ffd6bd21b48873972f64764ff774c86e411c1","impliedFormat":99},{"version":"81d272285c96d6be6287c6217a6f7fd9daaa86bdb9b0592f3831bbcf149ec6c2","impliedFormat":99},{"version":"3fbed1bc84290ae6bad246a668e41aa6308cb9f54c499b29297ff639a9833b7e","impliedFormat":99},{"version":"67c4642b72f0769f2900ed67a9b004165a0821359f79dab12c9f686df9c4319c","impliedFormat":99},{"version":"02933889d4b0d3b26342b240f71c10f0ffb75fa66742b7e4c3884e6e3e134908","impliedFormat":99},{"version":"55555ba42cc8a2104c5bfe9fa1f86d2db480f7db20648eaca3d24aed203af504","impliedFormat":99},{"version":"a6b1ed3b5c123319781d5ea0e22ff29ccb13620226b6ca95c3358eeef802f57d","impliedFormat":99},{"version":"458365eb8f4451650cd49e7bf4506f5aec20c0ea00828249b7392c5cc1be244b","impliedFormat":99},{"version":"7aeb46eb0a4c9cdcdec142780cb9adf1726f9a321ae7e648b6b164a9438beaf5","impliedFormat":99},{"version":"0745b484b1fc809a9e1ca8970298126bdb653f17232beb096dfedcc0d880d494","impliedFormat":99},{"version":"b7e920dd47009291e1e0d4875d78f403aa5b67bcc9553e6efce0ffd77aeb6712","impliedFormat":99},{"version":"40efa8b89da5f84d101a2e11d3bde07ceba84d2151a46362d51af9fcac38a300","impliedFormat":99},{"version":"7584bebefa39b6befd2f53b682a7f78837c2bb156cdfdf45967e8849e0d55dd8","impliedFormat":99},{"version":"86f06b955ff10b08571f46f3ced5cbb8b13c1ad049d5532f7ee2956ac3f2beb1","impliedFormat":99},{"version":"85b303f253aa1ace057cb95c4877ab0284733266b2659721776c8bce3123ee52","impliedFormat":99},{"version":"d986ec1523a115dee85f6b0887b6f2fd9c442963f80bbb4ee0fc4283668c370f","impliedFormat":99},{"version":"94599e64d23ffdf775213a6d58dc5c168fdccc183b99a25638fad6cac404aed9","impliedFormat":99},{"version":"51fe1fa188fcd12d95d6bb8585f562e402ecf1cfe20468bf26b16705f601a5d3","impliedFormat":99},{"version":"b73eb11c71dafdf51786a0130eec118a10fb5745f53b3ce6d2e91c7b57350cbc","impliedFormat":99},{"version":"623cfc15d5f796ad146ff31ab9f2c6b0f9a87546df41ad899ca250a49602cb73","impliedFormat":99},{"version":"153638de5f15083b920bc363ce6466625d28507e2c6ca321404d10ad394a8c68","impliedFormat":99},{"version":"aa8e3b222985e2dff4f056802cb68ef6e798f60761758a0ce2aa9be8ba964a08","impliedFormat":99},{"version":"f2f1da2c3c170f8f88b158926c9c36f3cdb9e178dfb82c76ccfcc4ce49607f7d","impliedFormat":99},{"version":"79926764aeff0993b4c5572388a26a0c8840b7019e95d0c413f8bfa28faa9a11","impliedFormat":99},{"version":"f0e4415f13da8dbcb3ca10e18aa243d97bf3448a75f14fe2ade07a3462684539","impliedFormat":99},{"version":"407894b66b2b266e4ac9f85f9d561132461b22e912a9391f86a0f5e49929d468","impliedFormat":99},{"version":"5c26337066b61988acd1cde0a41da915efa0cbd4059ca78098e356b52a61451f","impliedFormat":99},{"version":"a9a23e467d5bfa83c2bdc7afa4df834555254e6ab14cb237b4b6bfc81a9a9e89","impliedFormat":99},{"version":"055c746ee8ef710a2b3c66e2c93d65c1c32e68607c97d4a63acebd0af35ac82d","impliedFormat":99},{"version":"a853fefc5b7f2491746cf1c612a1eaaa00d459c3196e7ab19c851785264e8795","impliedFormat":99},{"version":"48a465f5c5355b19f0c392918c93f8b7e49aaaedb95b3834d9b4c81e0d1cd344","impliedFormat":99},{"version":"ae02342d343890e389173008232602886260a423bf0ce4050dc4f069a865387d","impliedFormat":99},{"version":"3a9add1125746158416c8fe8b07798bfe63dcf27c9fb81b07e110a80357a2f3b","impliedFormat":99},{"version":"4dc4c65d064c762de00721f3e475c72875d010a12eb00991adca4951003cae1f","impliedFormat":99},{"version":"cca32394edecf4a3e67183b41246fbfddbc5697d71acf3e838cc89deb69fea1d","impliedFormat":99},{"version":"701ec0d71462ea20989852e37555e9061ad6b6b66d0c1e26137108929605f0ca","impliedFormat":99},{"version":"b689b467912ca0ff089a178fc46d28080324dbef440da3994d5b58c79207fa0e","impliedFormat":99},{"version":"2b94ec83e3d4d0d58244f719b8d582307a9093c0d9993f3df4e815f441f60137","impliedFormat":99},{"version":"9d8d29eb1604f8f81839170f35609b3c8deaf84a1261e1f5c293bdb574f36297","impliedFormat":99},{"version":"e0c868a08451c879984ccf4d4e3c1240b3be15af8988d230214977a3a3dad4ce","impliedFormat":1},{"version":"469532350a366536390c6eb3bde6839ec5c81fe1227a6b7b6a70202954d70c40","impliedFormat":1},{"version":"17c9f569be89b4c3c17dc17a9fb7909b6bab34f73da5a9a02d160f502624e2e8","impliedFormat":1},{"version":"003df7b9a77eaeb7a524b795caeeb0576e624e78dea5e362b053cb96ae89132a","impliedFormat":1},{"version":"7ba17571f91993b87c12b5e4ecafe66b1a1e2467ac26fcb5b8cee900f6cf8ff4","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"8b219399c6a743b7c526d4267800bd7c84cf8e27f51884c86ad032d662218a9d","impliedFormat":1},{"version":"bad6d83a581dbd97677b96ee3270a5e7d91b692d220b87aab53d63649e47b9ad","impliedFormat":1},{"version":"324726a1827e34c0c45c43c32ecf73d235b01e76ef6d0f44c2c0270628df746a","impliedFormat":1},{"version":"54e79224429e911b5d6aeb3cf9097ec9fd0f140d5a1461bbdece3066b17c232c","impliedFormat":1},{"version":"e1b666b145865bc8d0d843134b21cf589c13beba05d333c7568e7c30309d933a","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"c836b5d8d84d990419548574fc037c923284df05803b098fe5ddaa49f88b898a","impliedFormat":1},{"version":"3a2b8ed9d6b687ab3e1eac3350c40b1624632f9e837afe8a4b5da295acf491cb","impliedFormat":1},{"version":"189266dd5f90a981910c70d7dfa05e2bca901a4f8a2680d7030c3abbfb5b1e23","impliedFormat":1},{"version":"5ec8dcf94c99d8f1ed7bb042cdfa4ef6a9810ca2f61d959be33bcaf3f309debe","impliedFormat":1},{"version":"a80e02af710bdac31f2d8308890ac4de4b6a221aafcbce808123bfc2903c5dc2","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"0f345151cece7be8d10df068b58983ea8bcbfead1b216f0734037a6c63d8af87","impliedFormat":1},{"version":"37fd7bde9c88aa142756d15aeba872498f45ad149e0d1e56f3bccc1af405c520","impliedFormat":1},{"version":"2a920fd01157f819cf0213edfb801c3fb970549228c316ce0a4b1885020bad35","impliedFormat":1},{"version":"a67774ceb500c681e1129b50a631fa210872bd4438fae55e5e8698bac7036b19","impliedFormat":1},{"version":"dd8936160e41420264a9d5fade0ff95cc92cab56032a84c74a46b4c38e43121e","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"421c3f008f6ef4a5db2194d58a7b960ef6f33e94b033415649cd557be09ef619","impliedFormat":1},{"version":"57568ff84b8ba1a4f8c817141644b49252cc39ec7b899e4bfba0ec0557c910a0","impliedFormat":1},{"version":"e6f10f9a770dedf552ca0946eef3a3386b9bfb41509233a30fc8ca47c49db71c","impliedFormat":1},{"version":"f20c9c09c8a0fea4784952305a937bdb092417908bad669dc789d3e54d8a5386","affectsGlobalScope":true,"impliedFormat":1},{"version":"c58be3e560989a877531d3ff7c9e5db41c5dd9282480ccf197abfcc708a95b8d","impliedFormat":1},{"version":"91f23ddc3971b1c8938c638fb55601a339483953e1eb800675fa5b5e8113db72","impliedFormat":1},{"version":"50d22844db90a0dcd359afeb59dd1e9a384d977b4b363c880b4e65047237a29e","impliedFormat":1},{"version":"d33782b82eea0ee17b99ca563bd19b38259a3aaf096d306ceaf59cd4422629be","impliedFormat":1},{"version":"55a84db1ca921c86709117fabae152ab802511dd395c26d6049e6d4fb1e78112","impliedFormat":1},{"version":"2d14198b25428b7b8010a895085add8edfaae476ab863c0c15fe2867fc214fe4","impliedFormat":1},{"version":"61046f12c3cfafd353d2d03febc96b441c1a0e3bb82a5a88de78cc1be9e10520","impliedFormat":1},{"version":"f4e7f5824ac7b35539efc3bef36b3e6be89603b88224cb5c0ad3526a454fc895","impliedFormat":1},{"version":"b29ef0a32e75e0d2a08762d6af502c0ffcd7a83fec07ed7a153e95329b89d761","impliedFormat":1},{"version":"537aff717746703d2157ec563b5de4f6393ce9f69a84ae62b49e9b6c80b6e587","impliedFormat":1},{"version":"d4220a16027ddf0cc7d105d80cbb01f5070ca7ddd8b2d007cfb024b27e22b912","impliedFormat":1},{"version":"fb3aa3fb5f4fcd0d57d389a566c962e92dbfdaea3c38e3eaf27d466e168871c6","impliedFormat":1},{"version":"0af1485d84516c1a080c1f4569fea672caac8051e29f33733bf8d01df718d213","impliedFormat":1},{"version":"69630ad0e50189fb7a6b8f138c5492450394cb45424a903c8b53b2d5dd1dbce2","impliedFormat":1},{"version":"c585e44fdf120eba5f6b12c874966f152792af727115570b21cb23574f465ce1","impliedFormat":1},{"version":"8e067d3c170e56dfe3502fc8ebd092ae76a5235baad6f825726f3bbcc8a3836a","impliedFormat":1},{"version":"ae7f57067310d6c4acbc4862b91b5799e88831f4ab77f865443a9bc5057b540a","impliedFormat":1},{"version":"955d0c60502897e9735fcd08d2c1ad484b6166786328b89386074aebcd735776","impliedFormat":1},{"version":"2fa69d202a513f2a6553f263d473cba85d598ce250261715d78e8aab42df6b93","impliedFormat":1},{"version":"55480aa69f3984607fa60b3862b5cd24c2ee7bdd4edaed1eef6a8b46554e947f","impliedFormat":1},{"version":"3c19e77a05c092cab5f4fd57f6864aa2657f3ad524882f917a05fdb025905199","impliedFormat":1},{"version":"708350608d7483a4c585233b95d2dc86d992d36e7da312d5802e9a8837b5829d","impliedFormat":1},{"version":"41ceb13974711a87f182145196a641ad804125baf1fca181595f1be8cb0a2cc1","impliedFormat":1},{"version":"13897f9cb8ddf535e2cc6448942410f18298c1540338c1276a17880362b1eb45","impliedFormat":1},{"version":"4d2f7644abb97ec0d681d89b455170cf2bd0e72ee2a3e52d396074d0def264c4","impliedFormat":1},{"version":"671da85fc40086ce6f7309c428511bd77aebc0405b88700a26590a75cf37ff10","impliedFormat":1},{"version":"6e95aab5b3ba30cdbc9d4ad350ae7cbeb519a1eda30a214d2b1ec1f53eecdf9c","impliedFormat":1},{"version":"e11ff96a6e720e91e52ac54c53ee5bea99929bf096ae6b34bca2276e2b277ef8","impliedFormat":1},{"version":"08ce78e8c4c047bb08ccadc6587f6b45f025d85829854199db891cf1de7b209e","impliedFormat":1},{"version":"3afed5176dbb8e33d3366dff69f6fb0948b6849e0d2b53f6d61f41357cd617a3","impliedFormat":1},{"version":"51f8343ee830b7003a644ac90122bd092413344f957f9f9bec64d5945f179927","impliedFormat":1},{"version":"15eb363cdbe0004d3db00bce07892a5f5eb55d281761f768ee0545df54b04a0c","impliedFormat":1},{"version":"9b83354a819146569dfe74a2468b7c11e287286d58b5654555ed1fec10688649","impliedFormat":1},{"version":"e90e58ad52b0d25a238f6a794be594bf647280a6e8478b2337ff729dce62a63c","impliedFormat":1},{"version":"ea1393c82a0cd229de6915d3682db9571c9b65803b971a04f6042bd3b3826b60","impliedFormat":1},{"version":"d4978c3f743921aefd2609c001cf4a6baf74dd5e67337b5088bb29cb6d832ebb","impliedFormat":1},{"version":"973aa2a5bc9b967d9c2ada4edc050ffe2832b09860bfa0ba0cb79b8253e81dd6","impliedFormat":1},{"version":"4ba724e66bdfc294cc8e87499b42f63cdc3b354122705d8d2c7e1371fecc3e93","impliedFormat":99},{"version":"b79e98f1f013fe611b0076d6628e0766c3fd7ceff79fff061b100563486b2feb","impliedFormat":99},{"version":"5aa8b50a334af93ff1bb3da686178871a7e27e03791d07fd6107980076ddb90e","impliedFormat":99},{"version":"62423031f8a01e15a8a7141b5786fd450d57b6a921032366c09c81d11e167306","impliedFormat":99},{"version":"7879aa1a06fd399f58482958af0b7c4eb6410131d20d07d3699258013d8ff45e","impliedFormat":99},{"version":"25c1448dafc60e4ee55022d86c9deb322b669b93743a01f415c7f3974e5eb265","impliedFormat":99},{"version":"43ac78f8e0c5defecc2e501f77d1e61d078c79975af401702c16b9828ab12ca8","impliedFormat":99},{"version":"ce7fb4fdf24dcaebb1fdcf2f36cf954da3b53d8f06fca67b89ef50898eeca489","impliedFormat":99},{"version":"fb83d38e7427dd1c7b1e63e2445d99af8f4544bc2d933ba2ecd6ddc87960e3a0","impliedFormat":99},{"version":"dcab5635cd67fbabb85fff25d7cebbe7f5ab4aaecba0d076376a467a628a892d","impliedFormat":99},{"version":"c8698ce13a61d68036ac8eb97141c168b619d80f3c1a5c6c435fe5b7700a7ece","impliedFormat":99},{"version":"7b90746131607190763112f9edb5f3319b6b2a695c2fa7a8d0227d9486e934c7","impliedFormat":99},{"version":"269b06e0b7605316080b5e34602dee2f228400076950bd58c56ffad1300a1ff1","impliedFormat":99},{"version":"2000d0ab5e4203f1909f85426212757fbcd94a0e91cfb4a47d44c297a8545379","impliedFormat":99},{"version":"73e7fad963b6273a64a9db125286890871f8cf11c8e8a0c6ace94f2fa476c260","impliedFormat":99},{"version":"8496476b1f719d9f197069fe18932133870a73e3aacf7e234c460e886e33a04d","impliedFormat":99},{"version":"3cb5ccb27576538fb71adba1fa647da73fae5d80c6cf6a76e1a229a0a8580ede","impliedFormat":99},{"version":"e66490a581bea6aeaa5779a10f3b59e2d021a46c1920713ae063baaba89e9a57","impliedFormat":99},{"version":"aea830b89cbed15feb1a4f82e944a18e4de8cecc8e1fbfaf480946265714e94e","impliedFormat":99},{"version":"1600536cd61f84efed3bb5e803df52c3fc13b3e1727d3230738476bcb179f176","impliedFormat":99},{"version":"b350b567766483689603b5df1b91ccaab40bb0b1089835265c21e1c290370e7e","impliedFormat":99},{"version":"d5a3e982d9d5610f7711be40d0c5da0f06bbb6bd50c154012ac1e6ce534561da","impliedFormat":99},{"version":"ddbe1301fdf5670f0319b7fb1d2567dc08da0343cb16bf95dc63108922c781dc","impliedFormat":99},{"version":"ff5321e692b2310e1eb714e2bc787d30c45f7b47b96665549953ccfd5b0b6d55","impliedFormat":99},{"version":"8a0e4db16deae4e4d8c91ee6e5027b85899b6431ace9f2d5cec7d590170d83cd","impliedFormat":99},{"version":"c6d6182d16bf45a4875bf8e64a755eb3997faeb1dfc7ef6c5ead3096f4922cb6","impliedFormat":99},{"version":"d5585e9bae6909f69918ea370d6003887ea379663001afccca14c0f1f9e3243f","impliedFormat":99},{"version":"2103118e29cf7d25535bde1bae30667a27891aae1e6898df5f42fd84775ae852","impliedFormat":99},{"version":"58c28d9cb640cac0b9a3e46449e134b137ec132c315f8cb8041a1132202c6ff1","impliedFormat":99},{"version":"d7efb2609ff11f5b746238d42a621afcfb489a9f26ac31da9dff1ab3c55fc8f3","impliedFormat":99},{"version":"556b4615c5bf4e83a73cbf5b8670cb9b8fd46ee2439e2da75e869f29e79c4145","impliedFormat":99},{"version":"51fc38fbb3e2793ec77ef8ffa886530b1fed9118df02943679f1c4a7479f565d","impliedFormat":99},{"version":"03a4f9132fe1ffa58f1889e3a2f8ae047dcb6d0a1a52aa2454de84edc705e918","impliedFormat":99},{"version":"437dd98ff7257140b495b4ff5911da0363a26f2d59df1042d6849ecb42c1ee84","impliedFormat":99},{"version":"8345eadc4cceddc707e9e386c4ad19df40ed6a1e47f07e3f44d8ecf4fe06d37f","impliedFormat":99},{"version":"2df69f11080a8916d3d570f75ddf5c51e701fc408fd1f07629c2f9a20f37f1ea","impliedFormat":99},{"version":"2c19fb4e886b618b989d1f28d4ee4bee16296f0521d800b93fd20e7c013344fe","impliedFormat":99},{"version":"61085fe7d6889b5fc65c30c49506a240f5fbb1d51024f4b79eef12254e374e76","impliedFormat":99},{"version":"aad42bbf26fe21915c6a0f90ef5c8f1e9972771a22f0ea0e0f3658e696d01717","impliedFormat":99},{"version":"7a504df16e0b4b65f4c1f20f584df45bc75301e8e35c8a800bcdec83fc59e340","impliedFormat":99},{"version":"37077b8bf4928dcc3effd21898b9b54fa7b4b55ff40d2e0df844c11aed58197b","impliedFormat":99},{"version":"a508144cd34322c6ad98f75b909ba18fa764db86c32e7098f6a786a5dcca7e03","impliedFormat":99},{"version":"021bf96e46520559d2d9cc3d6d12fb03ca82598e910876fdb7ee2f708add4ce9","impliedFormat":99},{"version":"44cbc604b6e5c96d23704a6b3228bd7ca970b8b982f7b240b1c6d975b2753e4c","impliedFormat":99},{"version":"7bfb0450c4de8f1d62b11e05bbfdc3b25ccb9d0c39ae730233b6c93d1d47aea2","impliedFormat":99},{"version":"51696f7c8c3794dcf5f0250f43eda013d588f0db74b102def76d3055e039afff","impliedFormat":99},{"version":"1101402feff3c606f37fe36028b998e0da1b00eef9d039275d01390f462d1d69","impliedFormat":99},{"version":"39d8d14a745c2a567b8c25d24bb06d76dbffc5409ab1f348fde5bc1290abd690","impliedFormat":99},{"version":"6d9aeea6853ed156d226f2411d82cb1951c8bb81c7a882eeb92083f974f15197","impliedFormat":99},{"version":"1fed41ee4ba0fb55df2fbf9c26ec1b560179ea6227709742ec83f415cebef33e","impliedFormat":99},{"version":"d5982015553b9672974a08f12fc21dcee67d812eeb626fcaf19930bc25c2a709","impliedFormat":99},{"version":"6ad9d297c0feca586c7b55e52dbd5015f0e92001a80105059b092a1d3ecfc105","impliedFormat":99},{"version":"13fa4f4ee721c2740a26fe7058501c9ba10c34398cdf47ad73431b3951eea4e2","impliedFormat":99},{"version":"3a9b807bd0e0b0cd0e4b6028bec2301838a8d172bcc7f18f2205b9974c5d1ecc","impliedFormat":99},{"version":"8c5b994a640ef2a5f6c551d1b53b00fbbd893a1743cbae010e922ac32e207737","impliedFormat":99},{"version":"688424fbbef17ee891e1066c3fb04d61d0d0f68be31a70123415f824b633720a","impliedFormat":99},{"version":"25eafa9f24b7d938a895ab15ed5d295bc000187d4a6aa5bfd310f32ba2d4eea5","impliedFormat":99},{"version":"d9df062c57b3795e2cae045c72a881fb24c4137cea283557669d3e393aa10031","impliedFormat":99},{"version":"72f4b1dc4c34418935d4d87a90486b86d5450286139e4c25eeee8b905d2886b2","impliedFormat":99},{"version":"92efd5d38691eece63952e89297adcc9cb4c9b8878d635c76d5473c20489fd4d","impliedFormat":99},{"version":"a4b4d0ac8882e2d857f76f75ca33694d315715cdc19d275ac37e9ef2a8d8693b","impliedFormat":99},{"version":"e185a44b6e46dc9621704f471ed0a39b56ce5b5027dbc81949b67cbcb59da7d0","impliedFormat":99},{"version":"5102e449a65c1f816d6ac1199b683f9ddf21b107f4eec5ce8316e957350d1b8d","impliedFormat":99},{"version":"73397fcaa8afa955ae1ac27c8ff5473418195ecacc90b275abbac0b8099b7e91","impliedFormat":99},{"version":"3a8b3e4e8ee1784e46e8151b4b0717b8a22e045b20257ad4491815f7cdb3ab22","impliedFormat":99},{"version":"823a190056fa78cfe888a24a0679624cfc36cab0ce9cfc875b1856e8a535bc9f","impliedFormat":99},{"version":"28b5d252374af23b8db3d80154078d76ab4af7635d6f20ec892cf86651bb5f52","impliedFormat":99},{"version":"d6d72de42c0a81f3d22b71fca1ff348f4bc3a50deb9382ebdfd71214794ec58e","impliedFormat":99},{"version":"1a4fae85bd066e1f57250ecd3be398f45c0ee35fd639d1a91f2b816ad37cf4db","impliedFormat":99},{"version":"e8065cc0b1c821d3dcd8b045a03412ab03e6002bbbfd5b379e0a8e3624c1a2f7","impliedFormat":99},{"version":"8fd5a1b91763e73f5d30ecdfe66da4400b6b6c18af619e7f7230d72e49959935","impliedFormat":99},{"version":"be02a1d8cdd4905919e1a26ce668a51e726f381ed12e8f4236f000b9f8ec126b","impliedFormat":99},{"version":"8dd4181760665479df5a7b45c09142c96296fe9dee0f7df9013408b909c508bf","impliedFormat":99},{"version":"3ea52decded1435d9b57b183b74618922bfc8ef0ac6717280e5657e2a134cd50","impliedFormat":99},{"version":"3828353b7c352649166506cefb1bc4de2d98591796e4b7afda4650eadefb3c2b","impliedFormat":99},{"version":"c6fb620f7d3160662e9bae07262b192fd257259220c46b090c84b7e7f02e2da3","impliedFormat":99},{"version":"2a7bd12de58b9b8cb10dabf6c1eb933b4d4efe1d1b57dcc541f43061d0e0f70b","impliedFormat":99},{"version":"0e8e5b2568b6b1bebacc2b4a10d84badf973554f069ded173c88c59d74ce7524","impliedFormat":99},{"version":"f3159181773938d1ecd732e44ce25abe7e5c08dd1d90770e2fd9f8b92fab6c22","impliedFormat":99},{"version":"a574154c958cdaaee26294e338024932d9cc403bae2d85ff1de76363aad04bbe","impliedFormat":99},{"version":"5fa60c104a981a5430b937b09b5b9a06ceb392f6bb724d4a2f527c60f6f768b8","impliedFormat":99},{"version":"006dabdcdcc1f1fa70b71da50791f380603dd2fe2ef3da9dec4f70c8c7a72fd9","impliedFormat":99},{"version":"bcd511f2a2c83fc41059e90ed7305e7210cbd071752968fd0ca6a591b165ff97","impliedFormat":99},{"version":"e351fc610efbbdbe1d92a7df4b75e0bc4b7678ee3585f416df1e0cc8894d2b20","impliedFormat":99},{"version":"33c06a102df241666a34e69fe5f9a6808e575d684fcfcf95886d470517a456cd","impliedFormat":99},{"version":"404818f4f7cfc01054eeb0a3568da67a02b67b9ed375e745fdc20c2c22ad9f9b","impliedFormat":99},{"version":"40d820544765762c7770eba3b12c326f01d787fc3584b53cb20ce5dd813d9946","impliedFormat":99},{"version":"586f4a88fffdfa6f4d2e2fae23d55c946d4aad8c81573aa851b18884b185b67e","impliedFormat":99},{"version":"ad4b3aa66c7d3c3e7a5fb2126ca0aedafcded91b2d175fca89f50fcb6d3a1258","impliedFormat":99},{"version":"8e012265839f6acdd4a3321d7fe476c258f49a85ffe15645c5352434b68b6dac","impliedFormat":99},{"version":"cfe930126fe4bf9282d86b5c3ef5525440879e668576d6c44d8d3e1f57cbf019","impliedFormat":1},{"version":"593b52204837bfb74f06ffdac2fd08f67067fd172aaedd10c485c0a5fe8efbcc","impliedFormat":1},{"version":"42f628448fe9b01c760e826f63fb8f66f3d501067ca3e0f18e80565412ab7ddc","impliedFormat":1},{"version":"b314a723c92d6fe8392c3a373f825550c48e1725957c4223e215a71150c733f0","impliedFormat":1},{"version":"319974e0bc162156b8b9f3a293a379b1ba836f0390d4ac7431bace004fb92e6e","impliedFormat":1},{"version":"a791c25562a84af2edb0eb46e33b15ce73e96503b5e241a85dfd03ffdaead32e","impliedFormat":1},{"version":"526705b623c35ca80157f75d2aee3e2d5f37a29b6d74c517b5eb267ffb03ea90","impliedFormat":1},{"version":"1a2f885b57105cdb4b0be1e5bea330b5de8e5bd68443871bd9cf24b87c280196","impliedFormat":1},{"version":"550c1d68ae3f80650279bbe0571cb6930603ebc34ca193736adad91b6134c186","impliedFormat":1},{"version":"36b4abbfdf1e52ca845e093c0612fc156973617b116af8fcbf74b83d8ed4fb12","impliedFormat":1},{"version":"07f570b2f227dc8299b9567b437713e0590aebf93348ae972e75227f1ac0a59a","impliedFormat":1},{"version":"b95a77d1594b45b36314266519034f065ffe293ed5a3dcb3b3ca18492e4af5d5","impliedFormat":1},{"version":"03748019fc5af9c8824e42b050ac8cc018897706bff60fa06d03e0f3631b58b3","impliedFormat":1},{"version":"9d4a7cef9b1557a1e6b5fb95efc04a45b297c416858a9f28f2f9969aadb3f3f7","impliedFormat":1},{"version":"9083821de8d11f7e44086ed5c19bf29e0586f10edd6ed4cf049f658b61da5d61","impliedFormat":1},{"version":"1607892c103374a3dc1f45f277b5362d3cb3340bfe1007eec3a31b80dd0cf798","impliedFormat":1},{"version":"33efc51f2ec51ff93531626fcd8858a6d229ee4a3bbcf96c42e7ffdfed898657","impliedFormat":1},{"version":"4fd90e435a4ebb3d786fe346cc538e0d94fe547b1672df914a74c218fe40536c","impliedFormat":1},{"version":"a71dd28388e784bf74a4bc40fd8170fa4535591057730b8e0fef4820cf4b4372","impliedFormat":1},{"version":"6ba4e948766fc8362480965e82d6a5b30ccc4fda4467f1389aba0dcff4137432","impliedFormat":1},{"version":"4e4325429d6a967ef6aa72ca24890a7788a181d28599fe1b3bb6730a6026f048","impliedFormat":1},{"version":"dcbb4c3abdc5529aeda5d6b0a835d8a0883da2a76e9484a4f19e254e58faf3c6","impliedFormat":1},{"version":"0d81307f711468869759758160975dee18876615db6bf2b8f24188a712f1363b","impliedFormat":1},{"version":"498ebfc0060a35f33efbdfa06650c8e370adeec206d84a116a2af75396238f9b","impliedFormat":1},{"version":"ac9357d604b20c1eca58c1123a37153a53a2c8573c0a897b8fc34006a8e5ed77","impliedFormat":1},{"version":"52780588f07442c67a0d2bc192d73c06cdde9cfde15fdf02689fed5307d3155d","impliedFormat":1},{"version":"2afb3f450051139a7e44748fcf15b4e873d0591ffedd03527df3870497cdd88c","impliedFormat":1},{"version":"55f6e31690a76238ad605fbe76a6f0fc9b22f26066e66c615f7796eebf15bfb7","impliedFormat":1},{"version":"b8b1da4bd8cfc579be8aa55d6e1891f6bf302b127e4cf87cecd0063aa287ac56","impliedFormat":1},{"version":"0bcb3da80828168d45c662336e37ea23cea7e7d9e75e0219b9ea5c08b424d237","impliedFormat":1},{"version":"029f799c91635138ef808952bbfdf51435ceaad9a079d5cf2847407e0f2630e2","impliedFormat":1},{"version":"ba454ffdf029100ecc44e2ebac292d7ee54f1e5766f27030b7dc94a59ec78b6b","impliedFormat":1},{"version":"73d0ecb21f52111d17aac114117ba87b8a532e5b8ba49b6ba51ebbb021d52e62","impliedFormat":1},{"version":"a1a57e18af9f8e9ce6ea9576bd377439ae7a6de5239ac5590b1d311d9a0a7625","impliedFormat":1},{"version":"f3393b5b7e6bbcb701863e0ddbb1934026adf1e7e935452ced9fbc6deeae2b67","impliedFormat":1},{"version":"84db027344d3802d255afbe90801b5fadbad626c9e688bac51d80105878423d5","impliedFormat":1},{"version":"35a1d8efcb4b6c1c0623aad8f12c6ccfd6376f7a1f4c34ee7516836f20aa591f","impliedFormat":1},{"version":"88605c47fdecc20dcf367be6b2e2c0aab7e0157db63e3e141a5cd0cea45a7a79","impliedFormat":1},{"version":"93c817d99e4c5765bb0548920305d0b2031766f64214abc612d58f246dd37139","impliedFormat":1},{"version":"7ec4555425e07df6e8e0d20517c18bfa2db1904c8b77b1c04b3314ead524c19c","impliedFormat":1},{"version":"5d4825b64c14852959a4ff32c2225c5a0049c3ec51cc079b76e3694d91de991f","impliedFormat":1},{"version":"5557e5c0a311bdf3a472aaf2c84da931e7efb81b85d37d01a3a6835d71aebf84","impliedFormat":1},{"version":"2c7e2d087a1f8a2bb4daf3eabbe20bc7f8a9dcae21f4b0a0df8b34178d044deb","impliedFormat":1},{"version":"3cff03aa41b1ba69ffa5863c7d708a9096ece6ad31f48c6344bb82b97a76a5c0","impliedFormat":1},{"version":"758c7c7010d45bbd169208254aa4c62cbcfbe686e02dd855d1d994abfdcff8bb","impliedFormat":1},{"version":"5fbc6b2a330586ecb3070d967306d5141890824368c3b6da237a6949689ec5e0","impliedFormat":1},{"version":"87a5143b17639870f3eee691bf164c4c2a87362ae01f7cba42f6d0f631c67a8d","impliedFormat":1},{"version":"66b98dd46e567259cad42ce10a5475cc9ebf201be497559ca85650b30c97a806","impliedFormat":1},{"version":"a12673a0f06b9d09c20080de690a5e37664cbf6ac21d567812290ef19c2cc187","impliedFormat":1},{"version":"1d398ebf361cfacdb3addf13ac81f1baa5b911f993e7994ee0faa3024967cec0","impliedFormat":1},{"version":"8ada635768a5af875c7b8681a06fc5d17d0edd96ecb7b16e5393a24e779e8595","impliedFormat":1},{"version":"a74e1400751a4f636f6500460884b5145299d574112681e056470d4f2b6d3951","impliedFormat":1},{"version":"e38578ec16cb8440e6bd36665f87e3ec199a95241bf577947c88f072b89b712b","impliedFormat":1},{"version":"fbd6a7e5caa50b576accd1210f3099325f0a6efb7ea6dbf2e55379e17579d4bb","impliedFormat":1},{"version":"32a160eac05a01cd00d6b96ff20ad068247616187067dcae13f2a15405069d30","impliedFormat":1},{"version":"05bc694c10795ae9934c2ad541b2e349e19ca15fa562d4a33441455336e4d34b","impliedFormat":1},{"version":"254573e56b9ed36a83095064a49b87df43d107a9e309074d931e4d717e97fea9","impliedFormat":1},{"version":"150f3c04665140a5634e6f00ac34877e270705036f5bdc83297a4b5570f9b267","impliedFormat":1},{"version":"78a61704c01d2d72334457cdefd90841d56349009650106c7828cdae6da86972","impliedFormat":1},{"version":"39e31b902b6b627350a41b05f9627faf6bb1919ad1d17f0871889e5e6d80663c","impliedFormat":1},{"version":"2cc1ee576b99f6b89110620c78510a5c96467fcc79fc65feef40a727ed5a322c","impliedFormat":1},{"version":"ba34fb6a9b1b84e31e192fa71d5e01b3d225eb180094fa4a91f1b27b51af9fe0","impliedFormat":1},{"version":"19cb817cf6ecc2aaa78610ade687b803b1fa0b5e135778c0f4300083cdafd6f7","impliedFormat":1},"37f4ec90cfabde25d132e67073bbf77c1c6953bba099a656be5a5c1523794ead",{"version":"af1818a5869583665a637d59c35ece4f89e87815e918b3e0fd43a6f26e8bd5d7","signature":"7ba6d8eddf78e0f854aa4a75b3e2c93ab268672cc6fa03d964204fac05201a19"},"8083ee7107267bc43741fefd9a74bc891f0b0455314a73a68f91ab1b8b63cc05","2c182d044be903ad995d19b5ad242e50cd28a58d48ed6c7378cde08b750c3e14",{"version":"01477c7eea0be2b02002ff5e22b29584cd2cd765dd68aef82b55bc9feebf35e2","signature":"eaa272fb82ae1d48e216f1218c76968c8eb140021e3bfb09ebb5aeee92b934ad"},{"version":"f2f56c4fc3a1db30367b9cc4d1d68661fbf9ac2f61b6965643c90a5e784b432f","signature":"d7c4a05d5c75e918636bcf2ad0383f889cf9f259fd94ae149ec945957ae6869a"},"4daaeb291cf98c3edf4577a99907411cbf8216ae7f16022ef225975a8104591d","647c69e555220e17f30b3f21a59bbc2f5f4dd6e80601785e8848ddc26c1a9e74","f7c35cf5709acbb069a468ad2b4792ec5a9cac0ddd52d4916605817cc3282f91","eb2abeba7f7ddb802cf8d04e464b8cfeaf96491ff2b994cffd18583430c0e4b5","1af5febb507be857acdc7a38af8b45d2240800e60a47f4ffd83511942b6129ea","87133866ab75c602fd7a4fd11454b157024a7700a1e3c7bd8f2ba5161eaf6f9a","ec9f5f28b30f6bd5fc2a745a0893fe4db3d58a7a5e75a2c20f25d8d12282b9c3","90c4a0e9615038ca0e857ab7316cb7fa356e3033ff5cdfd7bd7046c31d652d4a",{"version":"d341845df0a44fcc7a94d576e360cb78a29d7ef875791b0cb4361f5d8dea1196","signature":"0df6b3f0942b921f624dfcc0bf7d61cdf7259f3a7f1e30cbc1ef19b8f02c6b7d"},"e3ffe5097610bcb45b563a9b030141e3042be9f1a8a751ede8d90709c8ce3250","e650170be755488526016e80efac0ffd0e2901cb68edf94d87d30dd483e30448","b76c334e0454a375505397d7fd795abd7ef0121e6967adf883fb706cae5596ba",{"version":"1629588c872eb8cec5d95373409ddf69a9ede393cb4941ebdb096deffec4c21f","signature":"4a1517d112fe35e6fa548f11f0ffdca59bc878873f02bdb0c9309f1f5a3efb19"},{"version":"18e1324b77e576ab01e833f06215d238e0992d198c9a9c640ad04d50d9d785fc","signature":"b688f56d9b7ce2dfd5a9f5bd54716ceadcd47cbe4e5e815493f29d91cd5addd8"},{"version":"10f5c2f7183cb26233703380bce25cd0ceb981628996a313aeb4840852002bab","signature":"f3aa675fa0b7b9e541ec67d00f37b762ce1e0daa3de0e398af50a2ef98439147"},{"version":"275fd15445c802843e5e9a2750f1da1abfa02b1f9cdcf54da589970960cf3863","signature":"a49c67b4e20259be3678afa60ddac3415c678d7711055d0ad5574ae6440b66b9"},{"version":"ede89d1356d05c43d3d8fa58865c1cbce58d9a537bb2a4e14a18c98e51957f8f","signature":"5f90455e7dc3e4b5f2ac38dfb5d2d69c2b37a5db648471b766c6cf5cc06a9411"},{"version":"82af1d59083db1786e24a99cbf063e1a2a5d30ebb1590dc93d3792b65a7fce3c","signature":"06cf4e3d2d4939482e4f5d9bcb9f62470ffbddab3889dc563ef5b77515128fc9"},{"version":"04959be4784b4693093c56ef92be6ccfd1161fc40f0903f208757d76ffebc906","signature":"2df85640936f9a0ace25343e914c04f7e479db48184ee9d4b06f8cdfb0e05421"},{"version":"6d37bd524bec816ed6ef8cccf974e445bc8cbc87b829f86aca4eb41ba72a75ea","signature":"b0d6985207cc6f15b7b03cb60caac720227e559d53bbb6053b1c9f27990112b8"},{"version":"0ad9e39fafe8fb76bced047efcda25f283a6f929372bc3d062840e44345f072f","signature":"8200d050d8888b931bcd408157296a822954dcc5b5c492de31e0a3408b8c62e8"},{"version":"64aec43676c202c32702cddb4dcefa6827d48d27fde9ed22cb8d3bd925f4abdf","signature":"aac498689f4477dc28236f0393b977aaf6662b10bb31031366f06408425fa0a7"},{"version":"ece6b1ca3d6b69532783fa246a53df2b3e39e939422d7c6e389280db7a625261","signature":"51e745df5694d25bf790caaf47e707135afd411c73b9fb5be631a406a32aa9de"},{"version":"7725bdb18976a09234fdc8458d654d822cf95ed992274bf59cb1422dbf274db2","signature":"489aa6e3b901b60716674717e978893985c344e0748c2244ba25a20359d8e30a"},{"version":"35604223d0bf32420f21c79736ad526069da7afda5915d88f458fe32e4ae9504","signature":"bb112f757034fc3cb347ef6c09f6b01a07b8ad033725df27d94f976538ce853d"},{"version":"9fad4c630c78eb3e382a90ce9c2d93fd882c011b339a0cd1159715801e2633a6","signature":"7b9fc8f4b06f36fc0d53efe106c61bd7e013fd793e1519313de3cc75765db93a"},{"version":"b1057852688f57b0203e0a7929ba89c065cb07f58e07a4005c6ba3623c0113b1","signature":"327b20e610041b77b6303ee835f12fd81afb9dbc4b8a91a14274db20bba1b650"},{"version":"1d38c3e92429f2f4990c4e5b0317f994c6effa76c91a762dd6ae00c4da44b180","signature":"7529df674cd3bc883099c36f7debc7c0d87be026d8576214e7fc0fed777e2d3a"},"a2eac10d9e1e4ca903cb3672a9a7d0e51a62a5d224ce1aa5572a4577491ba677","9a8de4f7173962bc52f218f498683a98b18cba88d87376204c3d06e4d1c8a25a","94678424b19b4746f59cbd284a0076651c5fe2c8021fde5b9d281931b5bf64a9","87313fb29a4db52fb1872ad632872da8d462bad557533565fb496612c53446aa",{"version":"3d70dd83ee959adcfe4aabe66ecc9ce006f9300f49026223541334bddc00b6b5","signature":"3b3d70f95f9c4b217c67335a9d47a37f118ef439daed66c51a33d6ef86389642"},{"version":"1e7b54ab1b526fd14cf6373c3f41c9f0941ac1a1dfc119b72458eb1a7aa1eb6f","signature":"a5d36a866b5d1dd435604fabb783c9085c70932378a32e5c399d028a0cada0a9"},{"version":"403921dd5a3d901dbe1af1a347a1d1e12de6b9876135d1898278d0c974e88529","signature":"51e745df5694d25bf790caaf47e707135afd411c73b9fb5be631a406a32aa9de"},{"version":"1b0ed3e05d0976614e44e87ccbb7eb24dd6cada7ed27e063c5bb8deebd3873ab","signature":"163a1dbb788fec47008f6fa3788acaaad22bfd2f4a622aecb20cfa79977307fe"},{"version":"51e8591ecd12220fe8c32b22e5ac2edfc6390dc868b3d1d22e13ec604a7d9b36","signature":"ca43d345db26019e728afefa05e3c3eb16c0745ba04bf4bea7de08cb47f7a59d"},{"version":"cbcf2a78ef7d1ab74d57c54e11b014e3a7a56f9b64af9b80bdbffc43bdf98f94","signature":"81260b085ed15c747f90c91c61bf300c35fdb526f329dda91ba3cd2fa3824e0d"},"75b7b750f3750c665f6e377f0ce5ab09877b427f8df9d1b2599588ff688567ac","f0bcead3dbe3fa6d638b743dc5c946015301415f1f83b5ab9cb8c17ca53edd5c","5804801920a93fe0f659492322f64fcbc23901a133798641a09757d4802b7546",{"version":"18951f91932d83ff31e40438812d7c6aefb36541612c4fd2f10ee89bfd8d3c83","signature":"39695c6ee491d1ba4b7b8338a7d665e88f9876e1e9b58ec11c71c73cc97a4b7e"},{"version":"3ddf88173594983894e690db51742de4d82dee067db36598496e5ed738a86f9a","signature":"72a5d227cc418591e0626ed0573c62c673ebb1f958a4d905829562ea7664b922"},{"version":"f3a1d95379ba4d51ff1afad444738d7f1d01c2d7b41d5138fdccfcf285a6d786","signature":"aac75b9930af8386755cb6314026e4d84bc06fd4f5109d640f504d934c89bd0c"},{"version":"2cb457281bbafa5cfe57069b44dc8b2a0b8b21d3cfb802ab1713a5950ee0bcc2","signature":"b4555edab697395f1e0bf883dfada8744db539ea4a2b6c4fab7364ac64998d54"},"8580704e1c68e323e1383ab3df7d4172592961627d3296b9281a9506b8773376",{"version":"b7df02b7e03995e20d1b3e9b44596c8dbc00071d8f910a8594aedb7fdf23f9c8","signature":"e0ccb9a63a960dc929d6e7b4bfb962a0bd6d4261277c896c763b0dee086bd9bf"},"3f5929917bac240bd6fb9594655492dffac545d124b77f4bc4d790d96916ee81","d4e89437d4c320c495d9cb4789a9db9482ef660f93adaf9dde20526d8227b96b","97c03eb075414147a26469d7856c60ce9907b34df50645822d5668e6e0be8f48",{"version":"8015b3bfddff0a24601a63af28f31c586fd7ff3b452e4e83508d43ea9d886821","signature":"179c044bc58cd501fc495c34562b369d481126d11150fc07e78b75e06e2ec4f4"},{"version":"3fce33fb74beff5aad06658b9a7428620874f7314d761c4083d89562568d9f78","signature":"dbef849e95b7128659508a6cfff652c2048fb516612fcf72a0595e54e733c314"},{"version":"0803eacb171150fb04bc04e7088c188ab5c036893184c692d5878d385e93457d","signature":"8ee89495fcf5758211dedf6db604f7566097e0a9718aa10ef787bdccc09f843b"},{"version":"5457cecdf7af79eda18746ba5ad4afb6861d7367da8307faed0ea0b4acafe08e","signature":"b35eda1de1bb333f48cbdcdb7343ae45a8eab422bee325697289ccd3af5b2f90"},{"version":"fa9d657770b3feb05e356ab651f3a7b8de608d97bc096def72744a2f99037bed","signature":"f7d3a2ca106f993ec0448dee66134c0afcf5d301aaade8d1eaef3a8f2273413d"},{"version":"54a8e003c49c075fe66f6586fde0c4c43352fa883f45df9cf9d04989167586a8","signature":"bd2a897a880dc34725a84df912006406269567c29b353abb058ed2cee83c8425"},"938c019354e4e14dd2194944d1c944b7492f306380decd1d549cb3ace3ad6f73",{"version":"155bd3d664e11a9093af4a9fad78baf4aeac3330ed288a9bb41a200e43720ff3","signature":"77a7443ee4e939c182d628685bf0beebc5447e22ea59d46ce361e47ec9e8c871"},{"version":"f01ffdae41d9474dcf16e8943852aae327f417acc5a3de2a4cc307ae0b67f97b","signature":"df6c60a4a9192b5583e6faa64bf859a3b00ce4274b764ce26830aaf5dba64380"},{"version":"27624731a0c1bcff2d914a0851e38587611e10327727e9702180da897f14af8c","signature":"bf435082747e11e9d6953d14c219c91200fbbb10ecc1aa93af0a187e8bbb652f"},{"version":"8bba97cc296842ed377fc22ede310d179ddd3b40c763de2f78ddc41776a120ce","signature":"38fd0884c4f5710164917dcd8090d5ad98f16f492b46de2aa4126248a5d2b3a0"},{"version":"49ccb86c7d12478038c8622dd23fdde2f1f0b50ce0c0ae0721721b5036009b30","signature":"74e0fbe5e89eba110bf9cb66dcff85acce9400f12123edc81a3131eec6643b7c"},"e68318ea8434681516207a47256a2b64b9138b5346cb7bbf6d19b554f33a1592","87d51d934ffa35fd62e717663d477d8f0edbcd820419f110206c45102b2e2371","4cef644f24f110fdc38c7b90c6ca0c24244a99e0c8ad9a71b30cb1541eabe076","97145449feac27dc1512c443ca89c784612fd41fc8db04444f68420909790889","5e062d8b7f9e09e4b534ad8fda8d202f8e1f03fc22409469999fe33f6eb42239",{"version":"280ba52f5f265d21499a4a5d51e09db57d18f60da638ac85039a05f9e8f1408a","signature":"015e42b5fc721291855524071ce3856b21446e47f57f795a4e8ccdea5249291b"},{"version":"368cdd1c14aa924f3c09ab4141a638b6dec7ce592d5a0b60c02f7f330c15629b","signature":"c08b57a0534258db5a8f9a09a769d45e0fba9ad57cb7dd228f4089bcd8ff2a83"},"76530067628f6f2f656ab0021fb2cd09b03cdd7591a278a4d2e720fd03bb4552","91c09e5832b40f9945dcd55e4e280a2107f6cfd60f0ba5f607f2f42a07d5b716",{"version":"882dea995bb798fa93b3b3a8dc03c8c853be3bb8ab37a5bfa99e5a97146f0269","signature":"6966d2c3daf413d2368f0cc27c5232572fa670b6fe28970890a6cbb63a2dee77"},"475364dc700607f22bd890841fec4ba8d719f09cf4548d874e5ef4f3e571c311",{"version":"8a765153c9912840bc429477ba9158d58163cd17c041b534d5ec46d3fa1a983c","signature":"00089c77e7542e53c53c2f1faffd3925116d8a163b1af2402752bc065219797f"},{"version":"9d962e20d3bf6fa92fc939c75b296ab308b579dc915b6519f053176355eb7a3b","signature":"5a93ba1b093095840ae0055385ed887cc57d7bbba9b38b5080d963a55277a69d"},{"version":"fc8ea7edfb5f734d1a63392fdb7617aea4f0a2d8a4ed0160783326dca8638a37","signature":"7ac7d0065581fec353ef85b1ff52a32461a02cdb061ac5e194907dc847633cad"},{"version":"e851926d48a9770bf726f4a5e4b793ee5f35302f932fb9c35615048bcc59756b","signature":"a21d7a2d480c1b6503109e29b836e2e0ed57fe48436eaeda7b57c4c3abe12262"},{"version":"83a3a0f3190935f0c2156df602fc214c53ba0f035f6d0dfbce7349ff4917c285","signature":"a0f8ce3aa11a2f20d1b46d16405a25d37462e48c24cd5a5ce156e68fcb5e3054"},"19d5cbf8e292f9527421a867962d7cbd98c822a68ca918b5dcf27f0532509cfa","97d0646c732258e00335173e05d66ad2e9e5efadb4676738dc4d817949e07782",{"version":"48cff60b0f721904137a51f6cafbd7cdd1e4054a6010d62cf450ef6df8f44146","signature":"6bfdcb234bcd9db213c15d33b0037ec367ad7a2d1d27dbd388967c0dadb05980"},{"version":"5e1649da6691e26a94a405e7e07668225e394bf7c40370131134cd8c1e62b8fb","signature":"e9980e39c09e720af05326a7a1150d6f6047d639195cc21eeeff320804e767ff"},"ffaaafcaad725833d4dd7cc1e347a73eaa3d63b43c99ad8321ef3d5f2237124f",{"version":"59859bcb84574c0f1bd8a04251054fb54f2e2d2718f1668a148e7e2f48c4980d","impliedFormat":1},{"version":"e7e329d1c623fae85ff0920a1aa34a083354999224a752659a6ebef7d8631309","signature":"667bde375b6609dc5f2faf11527184a0b335806e74df320d50d5183011697c0b"},{"version":"d5a07fc0b503b9cc31530bd68b31fe633cc540373eac08f0b4045b81ed677b7a","signature":"532404e79f0a366535ec92532df9869a2205bb4dc53934dc3bb0254075803e7f"},{"version":"623e7d4b7006efb28cfca4e547103be13d2bded7fdb56476c10c5994b87a737f","signature":"efc62924bc2848382dec62a39f524a244c1f9f70a71dd5a989594994a477d403"},{"version":"898a7d59c4433492d65bdff79ddc86cc6ffda9a64f8cded1be3fbdf9e19b40a5","signature":"816c729805927b15adf8cc81128826754095b50c00f20657b67906d2a630b1dd"},{"version":"4d6f1c91c7f1aa9a55adaf960c57bf9b4e13b6b364e00308640d5da6ff782588","signature":"5830dbae853a10480a6c4b43b300a02a8803e6b94a6c26e67dd2c353ecee92ff"},"2e080b4fc8af4da8c29f80761b6d726f97e10b9ad255eba61ef8784416581730","1c0a972d6f6dda86615aa4eeb6049862cd588932ea9c974e5178d6802eac6ac7","b90d0cf126e835c8ff0a9ddeeae0b4ce01525abb846b25fe742dde20b889f02f",{"version":"5cc22bbf7c99ef617d9b01b9791adecaeb500cfe2c0a4d204f20f4e3c5462b12","signature":"dd6ad8697a4d2af7b376aeee8c8b6a2060bd2ed6391c8addb5462deb49c87445"},{"version":"aca7c918c09a5c63aa1944b4e5e6b37d42cdbe6bfd15c8a4a5f9d4b1c2d3eff4","signature":"46b9cd0a753c58fd9334b75875f6f638fdb181496b3baf88596d037056198652"},"f7c0e87b2447b46bb15c705ed95b7798f26ee230b7f60929628e4606617a7121","62e3d7ee6a6cdbc6208741eadac03c07e62169a063d7089565e634a0f8091bf6","b3ad2466aaa8dbd363eca5723088bef121f92b1ce8c2150e72ea839fb594e916","ca490ab6442acfb5d556e9924ec501f7e08dd10dd9a36067b92688e1bbbed7a7","93f5693833a47f7a79372f9edbb7c035d6670006ca95ede705e3d3d0f4877e19","c54161c7b125f000d7f2a903fdb39237121e4ea9434a5ee3b20bc0932d0bc5cb",{"version":"20b9246422267a4034c039703da844f8caed378c70e9053afd4b2f2be0636868","signature":"db42bb461fc1112b73cce84078fb753f343ae382c253f3ee98ff389aa6bae75f"},"5da4cfd6cb5aa58d7e3d85b45f7aeae18a00c310e50ee65b81c539065a5aa63c","b2b72b53f31c1c351f84a79211f5ee3e5f4d2264b2f3afbf445639bf366f293a","0500a8062d4d3c2460c230050c63cb49c2a3e3d81014b75645d85703f72f65ba","ac1152dda99531334ba719560d55f3d168ef0a76d9c2f425647b46895dae5418",{"version":"8178d524fcdc41f160f4199dd7bcc7eb7dcc7be82d297f1e93c93571844922a4","signature":"42b28f0c30f2c6283d3a6dbdf800e39ebab16ea31d682bc7677a0fcf5a7f686c"},"32d46ce3922eaaa66b690f83933bc3efd30c50a410ae72b1b09f74239d3c9366","5c7aecfc868b52f40c33f4bb7554c40e09c4f6dee068c530e6a06e2ff541d6c0",{"version":"6862e4c284bda801380411eec5e12253c37bff523917dba2d6b905e7531ccda9","signature":"9c14ff4988b7876057e546343d5ac687166e26631d2484ca81bdbba676dcb369"},{"version":"18e75ff3b4f4cb7c3da0f78ca59615ba29b305034e97ba314343b8079f64cedd","signature":"6688ab89eeb44744e19abbce57a209ff048b992ce8a5b45801380982eddb21e7"},"272f40665558773212c5d0f4eb45648f2db4e11b32beb5f015801b58134cda99","493f14640122aea4f091735047c6e7f48dd4db0a07a87a101c8942637a7a1f09","1545cb0d1e63796697fe1d4dd045215e58b4fcfd3df546dfb98c233532c2568d","421d56f6ca932c57d112567093ae05498998ed3cdef10ff3a835d3bf33f4705a","9b2f7a0bd912aa4124c49229543c16f39041e6d1c61b77e2bb3df9cbc711b959",{"version":"bfe14372fa8124b1b747e251b7714470ab117fc9e11fc1e93b25748b6815c1bf","signature":"2c055d681d4e7d6f22c3d8daa2ed3842f5ab839d8e76041e1e720b284e692816"},"b175e90454ff1a22cdd4c9c1703a7c0ea7b3db52a70fc2d34e63a6a14974673d",{"version":"e9943e1220d62033a420b3d92e2280b5ccc6c76ed07e1590d6c0756ce6461d87","signature":"a6df78f5e334c7955da11b465ade95a317ceca6a2550ebbd9d1afde682ae09d7"},"541cd8f91ffb41b2f551eca03c973c542bca7a3457a2c5846a2da468adf1673b",{"version":"4eed535f24e33d88f777dc18d5e56f44d1cd271cf0c2ced4aa9720fa16442de0","signature":"f13fdc80d9626a39c72e22ed1481b1700ceba518fbd07c49ce755645ad65ca8c"},"2ba8261ff08a8715be66e5fe736f7c5110496bf04c88de3f555b8955d7d9fe51","e7b9da616512a5b6a678b1d4db345fb64551f332459a41e8dd2455f4540ee056","d3db431b61e007da510f9d2931fdda2f109d38c3bd2526ced42feea22389cc54","e9bdb45b109e0bfdcb0eab0979addd58947568ac5ddf1cd0f1699b4d5df0b6ec","7e131895be4c4471c18d21ebe19627fb75d58d785d0e4fa09a6965bd68c30d06","404b85bdc12f1fac3ef29d05b6dff0516589783527dd797e9c7311d464fab4f3","4768dcbe6d024dd95a9832f1689408b17d334be2edbd38a34d723207072ee3f7","6985dfe078d3e138870d95893b7878c611122c3ba217171cf27044ad9830c0ae","7b5d25e4d4649f9ba8ce948fb29c78d5f0147db2ea0a8ba6a36631c26e52d69e","11019938ef69d1514a053540370d331a5560c94dbae3d04e69d722b0d9d07ae7","0c00395f3c8de084fe73df3c9b5b6431b22d4e3b7adf1fb9176d504ed106c113","6351e0c17874825d3b63f77f46f383ac6cb6565f4fbbd37ec501bd7ebae419f9","89080ee08d7684fae2fb7b05b9c17a3438e71ac9c56d34251d1452e85fdfdae8",{"version":"d2c0b14eb5a669137dcde63ee32dc8bed0c009704cca07c65de92e166d46eeed","signature":"8635c2ab5f7d2be7691bba61bd460dba736c13d3208cbe59c45a499424736e21"},{"version":"7385e834f04a94ebcb2db898a9fb4b4cf5f2dcb13a775c9b9d5a3da78cb53d3f","signature":"2f56d877b29d55e07838e6e83ebec95c55fab1dc4e98a8bcf828b82854d86cda"},{"version":"b53c4282614b015f7cfff5445994420f79899b1036217553263338d6f1e0b731","signature":"3298c6f05898e24199a73afefe7cf4dd2df5e02cc631c007f835181365b8ed77"},"3b6ca874d29dd1784664380eb2141080ddd01eb1681a0e5bc86f5e2329fe6eed","db97cae33cb7af947ca4e51b077168a481bea82158d433785deb785876e3ad87","021b0531d00cec7f92a589cf4a30763fe038ebe88d40dfc774f7f19317ebdf60","b26189c7daf6dfef9f825beee82b712b1efe14662f6241c29536f909c74af46f","f49d08c3fd42640ae07bca037847e72b40cf7d186c99574c23bbe85a28ea4ff9","40c44bb44399c4c0052eeb6abdb25c41d3e1bf5bed2adc3e31f01cb44afa0a99",{"version":"1334c02f0939165c540db9b6419caa2d77d8625f9214e94230be1e972665e4e3","signature":"b46203807bbca46e6bfa14beca76282625bf50df032d1ba449e399227d58ed34"},"6c8266ba779afa107931dc96fab7fdd6456fb43cc4790b76a0e9086e35af56a7","6a63c26a2ebec5d7964f41c2c8fd21aef87ca69ff6e01c507fcbb40bcaf57f0f","20ddcef002348fc27493c19b57861cf4b667da36788276075c5575ef5504c244",{"version":"50e8da1dc00d99f5c2d89ce6b332dce35699552627198733b3fc9b944c2f85c2","signature":"21a95e12dd3c319148fc55ad73ab3fc2716cd09339b5d28765f4071f6e644a6e"},{"version":"ab34f6042c7ffc530fda1427b2295fa77348b6e4052b8e6744cbd2db21281fe4","signature":"021786bbb90bbc3063b64c42cbef33e6c20e3270ec1e8fd6a6efec6ebb853ffa"},{"version":"cfb2b3122285f3f6d2b99bfed44918fb399ae83ed2edbed5cbfdd43e4542ebd0","signature":"82f9c5867409795e4f7d42a37e71bd1ea4f721e3d5d5bc022070b99e436e92ef"},"17ad26d311f72ebeb0029bd94660fa7f3af4eece1e505566bcae221da5cd5651","df446e01bd657728a89f1ce80b454bead850805062dffe66df83c2a4a0517000","d4e627ae11243e06733c6401d22c0237f1ad216fa5b5901e7475d7681ffe6c99","36c5cb118e7ab852b1b9844105b9db6c162b52d82f4dda72da35937fec1d2eca",{"version":"1e8c6d4f1ae5e7a3376577882f03ceb31c42d141ac8409075a2b0aea989484c8","signature":"0e48e1aadd6d1908e15091393761f1125550057b8bda3010e2772ae4ce930629"},"48cd2a715406089c88025e5e958218e215b2f04a7fd21696bbb9d5ac5d5de388","85feb53c6a14f2018f3279eeac4281a89d1aedc63c65ea67895c19f304508f44",{"version":"4eba35aad282912ca77416c414a173746d95f9eaa67cb7c80a6a5edfaa3a7ff4","signature":"1de3c9a2daf9efb2720c20c909f23513394d9d3babdfbf1a45d236c478b86222"},{"version":"d2f905b7f904eef12c82d20f9b717742c0f2d6aa859a3929c57b1b844356f9e2","signature":"9af69ebaf64ef42799cc9c1c237673ebf19c8c219978c4a990595fbe771c0f38"},{"version":"50eddc59f5bb98614ae22088503d252526cf4b65d3bbeaafe3fc2b2d71d38719","signature":"faff6a0695def8f1fcd0e7156415b3ac4d9abfd6c139df125060ea4412c70b9c"},"1935892e1266fe38eed42b4db3d91aa690d039dd27dec6e582ad18366d6fe2ad","dd77bc7c52f8f955c7f5baf8d7d3f03ad2c6516c5413213e6128c3d962096c20","bfd133e6606bacf790e201448f09f1b3883b583735b83e085fb1aa3e3cefaf9b",{"version":"28f6ff75d4262e5a1bd4ff06c9a75799f50d9285d0441a31870697d8eaddeebb","signature":"6688ab89eeb44744e19abbce57a209ff048b992ce8a5b45801380982eddb21e7"},"61485feb87bb41e420e0a89f23e07f2c18010ed4574dae5076586549ee8444ee","3ded9c360d9e41199b0522f317730b04284995e2fe49ea6731380922b1b9f2ce",{"version":"5ebc6dda07cd1112abcba3da894fafc01c04b37f55bc94bc110da3a662236cee","impliedFormat":1},"533c7a56c7b4a41fe729a6349f998fdd64bfba90472e5ab665ee11fe78a4548a",{"version":"f71438dde034370d995a17e8191fc3e47954f9b75b3ef070e73e9f64f03277f6","signature":"4e8090ac6dd73921a4cc6269bc3c6dbf7e4d5cf4eadabaafd5d611ef8c105323"},{"version":"c477ab5472a9a6a5a74bc1e24aea6f0e1f7f957b5fc675b8a2667ae6bd2fc71c","signature":"44a1b3e67539f9baf5d3acdf10805ecaff60c6f0d78dcadbac99a19e4591ab76"},{"version":"b87c5ec537a5410267c15705d7af7ceccfd18e5b464800f59238238fd7530309","signature":"39df68e4575d856cc518e0745f9f6974357a94254b58820f593ec2fbff9c1510"},{"version":"336662dda0355ba97eeb60a841ff5608671069702503e5811882042d89940dd3","signature":"58ada619632b37d7cd2d8b25d20424a6ea2cb85522c2c30e0e8f20318cf4ba1b"},{"version":"034024c8dc4186e91de000f5c2c1a625a1b719b453d3490dc9054830aa00bafa","signature":"1a8fb9fcce14354454df28f7f2b713ab23e862148e9ccc48108394287fd66540"},{"version":"12198890596086da4591d6fd1eef51e738b014d7bfb4d64c74dd769e136db5c8","signature":"4a43abfa626359b6bb7391e7086c63bb63fab174a21e5d9b882b8bcdcc213d60"},{"version":"1c8ff6bf81bcb887e327f51e261625f75584a2052fcc4710a77f542aea12303c","impliedFormat":1},{"version":"0dcb288859aaa54d0827010f73bcfbb4354ff644f15b4fb3782213579d0597b4","impliedFormat":1},{"version":"130732ac19879a76e89db5fa3ec75ca665a61e89bac03dcbaa8e97cff042ff9e","impliedFormat":1},{"version":"f568a765b5da538a45256b0df9888bc2baea92e8643c735380ba673ae7840fff","impliedFormat":1},{"version":"8cfc56bf1e712a55ec2e979998f1b0a0cb54e3ee2053009964969085c36dfaae","impliedFormat":1},{"version":"03a4facd4eb2fe452d64718d3a52db39de8ecdf395a0b0d6d57a500f52e88065","impliedFormat":1},{"version":"b75d56703daaffcb31a7cdebf190856e07739a9481f01c2919f95bde99be9424","impliedFormat":99},{"version":"b449756870e42b4f1c4ede96641dd4e985f1662e787f85a78917919f344ff34a","signature":"91ff8afee5766c7c8f146e4264e8d953b1aff6a985e40d548c391ab4ecd6a295"},{"version":"19a08e0c32e27d6631c826194c84ed1a548573932608c8487276d4d4a52074f7","signature":"6d77882b452533777fcd0d2d339fefb5dfcb887fa6e77b0dd34975beb0c05729"},{"version":"2a3cb0dd90ad34ccd09be34fa124de36f68b997b5d76039ecbb7426f9b58e970","signature":"2a4685648441d4c306fd9da443cc102f1b93e806ac37a786776cfbab89bbe615"},{"version":"969a3270334af413f07fb9f58827523db6f4294f6fa7c8cded9eed62fe0a3b41","signature":"55c9f160d1c362b9da66359cd429501d26a2267fdb73f49d726ea084776a2396"},{"version":"806bfc94b8599b913debcb4032361bce98760718059bf7d39efc58bad3169f4e","signature":"2b2e585b6a4b0c748470fa76b90d78c56c63e2961c94c74232b44ed1bd18545e"},{"version":"6769644ad3a44c9966d4a4e19a0a2a011b54640402c66e61772fc73f5809b957","signature":"7e504238884ae7522bcf58d67bb18b767d43cd1d7a8ae778e7cee1edf5822c22"},{"version":"5a7e6ffaeee1768a9bf5c9ae892038f9789599be4acd669eb9d0747457bbffd9","signature":"558ccfbe1fc3fe998608f41e5e77a56f78fa37d8fd30279fb29e7a50ee664902"},"f456039c87769ee27cdcb351b2b3534fbcd28672c2c80ca444b8fbe5416f7470",{"version":"bcd2b75d211a30e1394a91a37ca8fb863a06bf87e9bac9e14b073397a3b5372f","signature":"30646062acf968991bd1025d82b7c39f2cb6d213ddc3b4c39c72dadcbcea239d"},"0e92fe2a5b422f2cf3f9db1d857ae219a28348c1855388eacd4d2525bbbf6059",{"version":"c8363223fefdbc5340f21e2d640de3c6ca25b927d6986f2a2630577998b71a81","signature":"abc987549dcde0bd7aa40be612a199b024a3fc6fe3f7178003ceb58e490bfa86"},{"version":"16dc70f8f17c89a5efa676e4db1bf712210a18af12c2d5a31cd1414aa62628e5","signature":"3ec13e8a422f4b0f9b25f7edf3498485a5fa550d865f24d7a6719525b98281e2"},"0c28b2326dc9012afd0407c0d27b371a26fdde4591cefdf7de195dc6f4e72de2","df48883e4ccb174caac4be51d3c6ffb765deb3c5b853c32651592d2ee5c83a89","b59213560d7697a2c9a42c8081c764fd6a6a5996a53ce6484950dc6c996f03ad","2c03cc322b7bbc258f85b9f9a4acdc563fda91e70931c460b013baf7f4a0b5ec",{"version":"b06f5fb08c1accddf6cf1590c863c70d9422ac9f7fc2a9db00aac22e3a818314","signature":"5b5ffb32185f027d35ffcfc2fc7bec13fe187980daaafd412bd2c145eb83919a"},{"version":"5403110bf13cd301f95a6e28fdd71216c0e9c58df7c7b0646b2a1c1fd4a62bd2","signature":"39df2ad3a3f9303bbe53a08e13c62e83799c602e0ddb64f124967e7cf8141e2f"},{"version":"30dd967af4d70cf680a09532f95b7de2ec92563bfe23f6b9bddc63d69759f28a","signature":"22e8268e922c452d01ffaa1788df0e5dd65734a80298e3ae17e79a61512fffda"},{"version":"0e7c07d9dc1bc811268e82479ced46ee5992fdda40dfd592ff64ef21fd189d39","signature":"b8e13034ec542301917b60eefccf701dd86a668b7faf919a8419f481c9b47a32"},{"version":"1aff2ed644cd4db2ad6aeade946aeae1396ab08282eddcd535e2bf6da7f3e873","signature":"6688ab89eeb44744e19abbce57a209ff048b992ce8a5b45801380982eddb21e7"},{"version":"0a86b8c2d216d29d3abed0eb9ba20ecddac182499819382b482b8989f56fdd8f","signature":"2c1594a9d01e2d8eaa4d49be94a4963426534713f859b43f28408b08034e3d01"},{"version":"7b20ca7080c1834b039bd9d270dc41734532ac6a1a10c2c1a68783c1ab20d702","signature":"34cbf412ee8042e0cd456ee76648d9bde31fe45e8737e6251de2830676e5e650"},{"version":"47f08ad50075b8fce7c86c2ad6224f9c728c90281fa5dd98568b6569b991bc1d","signature":"732aad56d04d9581ca918956ab42e98e52fe67f73796ca652c7043c5408ec990"},{"version":"0b76528debdf17a80335ae129da2d94fde6193d05fc956575f470fc90e7aba35","signature":"cbca4a8bb33ee6c35c5db2204fcf258b1f07aac93a6c17803134852cd4bfa8b2"},{"version":"8797d037bc0e2266c47869ccc1342eed67cc6adf04a9612d063477d2e2c31861","signature":"cfb10a70590ded24261c77d24fd88f9d84fa317579d1b8933a33244d2a04a21c"},{"version":"8e8ac2410c5b940984783670d0885c85a0d3782a00d1015bba9d44523004ad51","signature":"62206b278585095aa1f8782ec2222de3e3571f64baaaf924843253246abec92f"},{"version":"308a3b071f6fbf9280bd945e30629c95e6125fb8d25e9e6f16f40d757785f3fb","signature":"5f8384e47595156489cf457476dce4e4a1cfd4540b7af1b2402bcf2e05703ff1"},{"version":"ce416bc117f366213ff98b4f2112bae9d1108e543fc8cc94a7ce9150bbe5d396","signature":"550e2fbe6968718961b04a00c67902eb33fd0c36e637fd8d3f7c078f9b5b7b26"},{"version":"11f0f8b6b29fa866009d23755098998630987d1e659d4da7327d6a118215f4ee","signature":"6e12fb710815ea74abb15ffb1a3e31ca4cf38a5200cd6d25ee0ee5b33194791c"},{"version":"bff4bdfe880a0ca13e9f05cac474e9fffa4901180f4709a838c71d9a57e65581","signature":"233d75372f28c9bb6f6298bd7cd4b21331d61771ba3a2825b8dc12f6ec3dd7c6"},"baa1df4285b1271605065f3dec7628a2c52a06cedf913cb06d0f7b4a5808f20b","7f8a560146444c18fed8e4ba69cc6a118f4946cae95c288b42885c0dd23c3f77","15b136d84ef608619ea02b40b570acfa9bbf9a2b04daf4c0b339f7dc37fac325",{"version":"0c831ca2460fbc911c5e5084a778e2aa4aae74c0444c0e9e6c87a1e4e73eaf99","signature":"c9fa48d51934792dd0490faf5aa40c8d4ea7f37b2cde7d29cbaf4f3812d3717f"},{"version":"d0e8c69f886550ba94c1a0aa9245b692513717e6c2226188b1e511fb5882b760","signature":"08bcde75e632f2ba99b30b4d438d35b0266b8686be67d4546dba480127bbe085"},{"version":"0a44747115d160d59c99e5c894137c36115741e32aae31be1e8e5a754aa3f3d5","signature":"36c14bb6f5b32268bffef7b13f28ef4724d3006ccbfc1f0ff8a7852a1eeb2c89"},"389119f50d90d0a642a32ee2374eccf2804ccc675f80834d4400f3d5b7e011b9",{"version":"c66ecd83ad8b9f67a983516d544cfee5b4b1266141b69b293080ef19683c36dd","impliedFormat":1},{"version":"ff23646932adc8eb8b264ca41a58f3c6f043327b23d90abdffab4aa671018be5","signature":"644f3e7ff8e98cb8c0cff273005ac8b17af121ae7e9a8807c6994903ef702026"},"315166461d253264a2711049e6b73eea1206549cfa509a366e902187b039ce53","a9d7c41085f79331eccd0215dad3d227cb30498f403a93b4438169d568a4325f","698ca55b7d47ed1396a8ba728aeeaddf1f4c25910dd43ca55025078b73d4794b","e074c9d449ad4d8d75d6cf1427be173e05f5556b558eee228c5ec44e605f29a2","ea419a6658a54658ce08101fc3426c4ede067f042b0f5a5b30fc68e1aa3b32f3","0b4e2e6a16ac0cc5b188e7b0b0585925bacc9329d96b32de24b41d5429bb4575","18c3649968b5b9aadb1b04c093449ad1cef807f5af697e252fffc92a23d952f3",{"version":"278043da98efa48deae12da28e3a1eed1eba05b9b8625895fc6ba9605ba0c339","signature":"c978fd65e5a960cd7c91b31d414c2841c96d484b561e21161570247f0f3bb535"},{"version":"0c84ab8ec0f29e5fef5b24458208033099544405aecf41bb1fa3bc10c049a183","signature":"ad9ce294389ded565a527c196d978ee3933aabf1bc62d5d3dfccc3761b76ff44"},"81f3a11f6d172e9818b31d87d5546978ae4eebfa8e5199eb81725ca8d6fb8095",{"version":"fa06adccbb10278df114e2f1c229487462ca0a8ee60c8dcd4963bc9b353d14c6","signature":"3df8e2426d59382cf81121e469e7d76813f308f16ac6e2820e0352256049dbdb"},{"version":"082339b93f9e72bf1177c217ecaadce68c8018dd0cf1d0522233692eed4ab1dd","signature":"d25e0cd5d431f2f41eade1ba0775a988c1c1f8b00a35feffbe7afa01d29aa24d"},"c6ad3616c573a2c4db587ae8d58992e17a34f179674af8797c8175fb9dfdd3fe","31d7d053a9a664629c2e72d876f86cb7f49cdc0dbe3a563396b4d15f2545f89f","7e8189d55d98db80af3fd685c8993684137b70d5036d1e0b67bb92cc08dae6c9","d1eab7c2e2ae4c95b62fbc16e461a6939e6396e9d9af00b03399aed165576f58","2df2d112d738adbf71ece72fe7368577c249a5a297e9d66be10e43f047078991",{"version":"d093f41b410267332642fd734cf6c9564cea703659259823cd7572860aa9c2fc","signature":"a6dfdf26dc7285ca3ee117e3bed79485aff8340090d2862665eabbb7732db00a"},{"version":"12e458b79807b9ddb5b2d63a8538a149e7de3ea6cc10588db71b47ff0b2ab9a0","signature":"302cdf6727c558c499f7399ba29ba6ef26136587b5c987343d581187fef4a194"},{"version":"73649f98324775340a622bc021831f6dd3f347028253935b6c41e50aebb31fe7","signature":"067b21a8aa06d8f95dde20acf3b60e31d54c7585f46fae39fe683b0377865b22"},"a459364c8e390a151988d77288e2995cdc29d778009d227ea0e01d9d57e65b69",{"version":"b8917de4489ee84897ef710b5a056c3c6c0861471f57bb1e1d20f1528e200634","signature":"af3b07b170b8ebff15cdc02cc97672787745af4196ff92b8ae84ebfb9fb8ce37"},{"version":"3b71d8bdc263d362c61a17340b5a37e9f30e3c0ecf0e4e413a7ec2ebca3553ae","signature":"d414f859f426674b98c35483f0a36b7f59a8fbdbc8c05cb8bf9767dac1b57b08"},{"version":"cbfd631988ceb6176b56116a191cd0c327cd7617e3e84e3444c2e11d2b47a68d","signature":"95c9c87d4117308ceaed7e61df7bdb8ba31db0d0b4c4724a8296bf3aa0fe828a"},{"version":"aa1355cf259744ce0002d74f08e91d9a74da27814ec800841c3bd5c1839d2bb3","signature":"693e4aea8c9a4fb8fff1e569a052c71b09dfb32da8c661f3b692ac100b419407"},"00265e840fc9eb54791066ed9c9e9047e75f86fcdec044bbd5752a809883c207","832850fda01110c16bba0b6876acb9efb30c6d34be83c940ef7811b6586e82b9","194ac9592e135117c5eb4cf7c0491fc5c0d0060afc958ca8a163e04181a8c32c",{"version":"41ae86200c5937c3121434acaa57b9cc1322bc48e3d5e80dcc4cb2120ddcf83c","signature":"049223c818763d14ec8e9198db13382ded061a08ead9013568af824dbeb82544"},"8c690cc481edfb5db4a21a6dde09431ebdf3c78e79f3d47649d6d579f288dec7","44bbdb6b1bffcfd8016cce89e361757178bba3c9dc994b2a50088e0a971e531f",{"version":"c1cbaaa6b0054b7dbd6217877fcdc47b59ad3de86f8496985ff9a59bb87eb598","signature":"c8108bf913bf6d2cfd45082193c7cf304069d1d2ddccc1b5ace524c8454104a7"},"a9b4c5bb3832fca0a628955eff36d766868a63c046fc882d190dcd6fb6cd925c","b3b46ede019c587b17ef2a749cebd0f2772ab823799cf72fe6c01613ec0fcd15","f05ad953abc1d069c72eb6938ee2f62064b614c0312ecd3aa1fa682c6ddd0731","9c8c0a39dd0b856e52f65ca3ab6420d74c6d7c7dde5c39f61c73626a8c8c4ea3","a0d42389b648eebe06d61a9395550fa483c75924226c2e98eeee4aeb10e35a29","7745d1996cae0c15f19e65aa4913c17a7b33d68e84553a47856b88d6881809c6","62fd72b7d39c10cee2fb5d34d78587eae1457562186e2f25a36e6cf3055865a4","81677e4580eb98ffd18fe6e7998fc898e42d2393fd6a9c47bf7e61738c0688c6",{"version":"07ee83cbaff22673a47edc6a325a2eb5c1d36840e0d3845139301b026939a72a","signature":"bfaf8eff1cf19381e454591072d62d703bae1b46ef8ac122d467ff46139a798b"},"f4ff307591d54c2da1f125f71bd5eca51cf550747eabb394ef463a8203d052b0","33999686194e5d80dbca2a68e723003b062ffb50adc6024176f5445e50d155e6","220fac0c1cafb79798162f56d6c5cc6983dd1d373c3805e52da2ae8555ee3400",{"version":"9cbca3a6ef60f31ca268d9ca0ee4d66b4a7ac5a4964422729c255965081c0ef8","signature":"ad9aa97cd32c13923d250cd00706579f7436debc9f04737ac146d37e2bbfe97e"},"68dc20ae56349ab663a106b6710a525557ea0f709c8d1dc8a2cf62fc5f35e5fe",{"version":"8d39ecefb744f0a0a78ea3f13483f9cba595b13fe01fb5572a5057d7bc4c8bd3","signature":"93383ef6c798afeb9048cbc6c9e2821e4980cdf3c16c2b1f30b98167cdf04a9d"},{"version":"53ed2ba5033707c09ba120d004696648bbf365233c292ec8026e9300fe909c32","signature":"d55bb2425e51a043aec4c38d449a6cd45aff877cad83e3ba3793c23dd83b0914"},"d9a704ed9ed2a7762e4960a2a988ca22dcbb9f7175e56e2e67c1c084511c8519","0419d9f15aa5121f47d2f8752dc1d7febbe503d974aa6f8c9ad124ef84b2a224","b29b9e75412f9692c68a55779018831dac47a23e886a4463a56adf0eab1ec18d","ba71dd6fc64124c123c7e029e965e9d54756afe5b932ebe9a8b6d70afb33737c","2ae8ad283b464cec0daf1342779915616d4425776d65ed9786ebd9b47fa4cced","f7fa61f3882154fbc3ba0e291c5d1db8aedec158cc27760d0c0b0d5e9697d6e8","975ee193f61302ad4565970f4f460f09a9f294ae688f557506a1146993516be3",{"version":"a649fcceffcbf22d4df15a96a73defee1dd95d032df27e9b33ed25c8ab3c5348","signature":"4389672eb2864b3d2f704def8eae1b69aeed3335b8e41397b5ee27bacd2940a2"},{"version":"03cacfe8e043088d6a353f1cbdeae447c309d634679b2343246cb5c61a39b83a","signature":"02beb641d6ad9e0affc07ac0084154e6533d63dbe445c8c310daaa7073d38819"},{"version":"cb21835b8a790c69cf5e9083ad540680a3a2c4796b701f8f5b125ec067462c7a","signature":"3437f2d208bb4dd9914d4bde5cf2da27a55b31368e460d91603cc02b3152e5b8"},"a3060a7fb1a8006155353d53b06cf1732a7e73fbc2c7cc921292ffb27277b8e6","a87b9cf6641eec011aedf554ddddef40e3f5dd29a003c5f302ae6e39d6f62365","c58647a0de5bd101368f8ba8cfa96fb8343fbf7aeb55358820afb04ef2f95809",{"version":"9ac3bb2c9515258e0b62ad913553996e52e6511485fd4dc6f74504ccf5771ed5","signature":"1fd15281680b7f5cfdf6aeef1471d1dbe4285e218375ff7ea0625cb8239dfa88"},"89c0dc487669a81bc05bec4e3a313eefb644677b89c626a1a4c459c129188996","0e8f2e94f156a8c9cb7b9d7a8db366f7f5f52d0407208a01c089779f7eda61fe","0f7e1e68ad57a141c78908c29d787d62d600a7920ea2f53f70374a92e4fc3bc4","03fd3f1a060235bde515425ebcafa9c1fdb407c29fe7c102fa33708f667f062a",{"version":"fb34998ae2d427c6ebefdc8b32819c9bda70c5ca9070fd9615f141cc4c034c8c","signature":"5a80c3a01d4b7161b5a4e3ce259f070d439117530ade322e93a22c4ab931535a"},{"version":"024192bd9c8312b624c064e8e54f84f915f8ad0ed1c0df504ba43639d0a4ee7c","signature":"6688ab89eeb44744e19abbce57a209ff048b992ce8a5b45801380982eddb21e7"},"d6fab532196ceb1ecad6029574c4ed08ccc6d6c6213e0e89a7b0637342fb2a45",{"version":"8f83cf4caf29bd1325eafbbf99096307b9157f3706ab0498c1a5e73fa1fdc4af","signature":"bc8973a728872a321cf34e9d6d3b4432d4aa37e2e40a561b74bab0eb0e358cd3"},{"version":"433e9715a38e16de042ffeb619dd2a4f02366d6a72ee58726855f684361933cd","signature":"be9640efa6f5490b7ea49f3378165ab72386a32a370a08a4403b3dfabf891636"},{"version":"2001411a9bd9d96017950a1349bad78f746c88234785779da0dd68a9c03229a4","signature":"127d6e73fc15e5aade51ee7b7a14d7f06e5b012288b8f34e63e9f7495ca10c41"},"a3e0c538f192e6796ae0f62c5f4ab5c15a79723c6f7523475a6b49400df708d2",{"version":"1698fe833645bbcd80695cd2549913b890d5ff352244b8bdb70c863a1877dfc2","signature":"9d95d80f99b234ac2a66956d4f93334fe9179014fa2050d23439ac95ecc5ef47"},"70808f76e4a70f35a0ef1c171c0bc470919997d42f3da3523b6358ec936797b2",{"version":"36def2d7fc0273254c29491b47dc44617eb31628328828645b30ab83ab3e5649","signature":"7b9b30ca6a0c3191a3c24ff23f02c6760ecf0c0528d52fdcbb6b2c8a419b350a"},{"version":"fffd71ea6bd0abc0a9537a7d6e2db9992f4726ebb1c65d81738955ffe00eb6ca","signature":"778f2436d822644b05223ab5b3d288283c0de7909dcaf2e3e9b6f29d40ab452b"},{"version":"f0dd0b5d683ad77ef920e2bc94f91900eef9491504c493a25769a7eb36730b1f","signature":"3497a5e3b7d5d1590f4b49f3aeeafa589e7b49464711cdc011f2af357afba58c"},"65f7e2b7d1a98255f9d9ba7a73fc6c372066722c565e258d1e3049be3593b427",{"version":"6f934fb2ae3d649f30d48990ce935e42261362256012aadee642a1d8bf10e391","signature":"51e6d9534aa31e3ec321b52140b5cea5169b0e3baf5997c3261ff3374e66c7cf"},{"version":"e230e6212e49b4c36aa1f5fc6488340b247cfd630c8e3244db0dbd48da5e2456","signature":"136738c4eb0a0da7ad685669125b6054fa9b9e2f432a51a11fae130f4c15c8cc"},{"version":"412af2911ae58b15f554539b807880e1fc188dd594252a000091e4bee0437302","signature":"87dcb865ba0eebb1ab2f15eb488095658a30caef62a8372bbd64f48fc5abfcd8"},"e4b516c5a1fab55256fd12864d5385f925d97dab430b74934eee599d971fa796",{"version":"1c2784611b0e2fc7fd019ef31ef219b374e5d44b1d83633ccce47814370b2da0","signature":"d1f73cf8971bd910d62589a6487162e8e008439cc91eb56e5a2ab0eaafe5a481"},"8357ec5720fd787260b057e93c11429585a7c53745a1c7f7b6e6d25a95f08016","c551bf9df22f85bb0f3e30d5ec5fad124e77d6040bc27a81d0f30a1b8a3dac0e",{"version":"8e3a26c1d42718989c640ccb9016d10259f43722fe50d3d4597da2fd6e3c5fe9","signature":"7dafbe008dff41a5053e4a30939190d72cf4c185f3cacb3824a8c6cffc9e020f"},{"version":"3cc9a0c482aba94f8c1dee035ede4df8895992d410f9174ac91e55b7ece2ee0b","signature":"d8aedb945883fe056f6f80b845d36acfa6e57143b81c28791afefec17fba2fd1"},"412e5a324398c6090c905221ec5e642fdb23b71726d7d3d37cb29fbd0df66216","941cd9a7315f7daad6efa11873adabb3ffa8afcff241b4013968ff730590c98b",{"version":"b35855761800b5f141b266f0af250e8c8915f3629af12e19a00052a4fd13bd68","signature":"dd9ec7629bea1c206d47741e2b06c06862c8bb999279f21f76d730c6c61491d5"},{"version":"e315530dc07d8791100f66e946782c6c8c7fd6e558c38d8266429e45b901cef5","signature":"3c1851386fe47975d5ad0dccbc215fc29154f13906355ce6dc9da11f5879dcd7"},{"version":"559928bcd6d854f8fb392aa917a96f74e22ec73b67fe086ab690704ea743f7d3","signature":"35ee79dadc8c979f6aa83ed0f05772ffc93b11e0cd2516cb92673a2d5d8658a2"},{"version":"5bb2dc188f4ebff47c14d6ac32fed8b13fdc4ce8bedd7bfb3584fcfefad2b621","signature":"ad9995835115cd93c0b91c1d48680094334d2b7581fc988793e115d25a02a5df"},{"version":"d05eb5f11de4e6a4b08e13f79a814bcd10b7c1b4683154f2acb2cb19ccc463f9","signature":"23522f811194831b47f4736947b0af87bab87a82f2ed2c5b8528ba05691e2973"},{"version":"d00ad44ef9530dd32993cfd14b68ba3e13e759adcf533eb675a14d09a7208a35","signature":"f64d2fe275db831352b3feb3e37e0e68e02590002b62671de88b444c973b29a8"},{"version":"712d795079f8783e5971b573a1d37c77eb2196ddbccec80925768a4e8b0071b0","signature":"e0a5eba406bb4a2161339f0655c47298519a87cc4b0c1ce691b1d1d769e06f73"},{"version":"d3040845d84db78b1ca237fe8d12fcc3c38182e4f53328ef8d9bb683fd294016","signature":"d1a3b015e6cb2c4a3fde922a48c0f701e280b6649f310d7974a3237bc204bf71"},{"version":"f34cf4109b2c51441924bf7904799ad63d2962145cf61203c880e05fda29302f","signature":"1356277153728bb050a13182906a1f9a7b4b5b412c28ee978f59268069de559e"},"2d41d021ae429aaeae733a974739aefbb7c0a5b7c0450b9b473b0735fc0ffa04","3bee07e728429e3020096c8f1e9387b114b2b4f1cb439d311ac4002542e6f137","c7524cccea4ae2d93768b863af149d44dd0f5bdbb6c4aba56ae15375b29f9b56","7047c1d5bacb8c04fe6140515f34a476d5a06bbe29ceecd8a335e732fc0662a0","ccc291cdd55311df2a2baaabaabc6f0b2f2be6b28d824ca3cf655414f0fd4585","58d6c37c28a517fa56b762fe7df4e1136985d6642b0d86c2b9a280518247505f",{"version":"28f315cfc0340af73c3b38125a69e2a9ab6b62c0f8f0755d0ef6736c9e93056b","signature":"4ffef05314addf51fc1af8d109c64ee2b93725219b505731eac01e6301895982"},"b9dcba50fbf73abf326c3265fe8865308023b18e1b0e7022973348452bac152b",{"version":"ed3fdf6bc5e60d807e5fc98741113e7cf9a3050d49632aa7f5e73a426dbb8f81","signature":"5c49e83f03d6e5629af15a43aeb5754c272d384fd48e969afded9038135eab8d"},"73e5bc17172156bb88a2376d9c87e9fb4efcfb58d881770a47a770aec8b11197","b78944593855f63c1af2fb43bf8f4d2e1cf6f25e095674fb9ffe6bacf372856f","62d49aa67088e61e2cb1c6a47b1ca846e9abd683ec538c0fe9efd87b4bbdac5c","d1cd40bc6d13551a20f00dfc6785e2abdc1346f0d2f28a29a37829a72615a07e","cf9754dafed662d278cfba53ddf01169d5a6dc82341d4ffd8b3bbf8a1fd9b9b8","b8b963e1812a5ca76ce6c6e8949306ef95ebc85e7abae3526e7c2591e3cf74f5","1d5a79ebb83e90b31a2fb99429da5c02367654f75fee5f74aeeca22b44404f4f","755b1978d7698d3a10ed0879db9c387f8e9bdc4d3ccfd4ccf792759135a9fe0b",{"version":"cc639442512d1dd8460445d6e95466a167145a43f6b133d4075cdd05187eef06","signature":"6688ab89eeb44744e19abbce57a209ff048b992ce8a5b45801380982eddb21e7"},{"version":"32716daa3610acb9194203da6108f4d8c9f820f804c63fe091c459d2f0e794e0","signature":"7e1df050f720f3aaf9e6e8d3990e2946ae202865b40eff74d331bc347b248e95"},{"version":"e9170cde9229b0499337d40fafdd8d62220012d04c3706f92945a5460e1e0184","signature":"be39bb8cd48eb8e971129e3fd9eb3b75c2db421bbfbc32de9280522e39c37156"},{"version":"ddf5f707838068c95bc65f347e5be2a2b6bd38af3f246788550e1d9d0f4db773","signature":"86a2f09bf936a9d01e8bcd2096c589366381c93df871494cdc645a1d267d17e5"},"b6f42b518267d47834ba58e603e5868ab436d17b65dac685e1649103e07c665b",{"version":"afd4ffa7633e3acaa107a102b9437d00bc1702567bd6af8730a318cd83b79dea","signature":"d39a48ed9a7b4b738b6e23b7dc37edbec9ff6e8c81ebd4603a8379f7747aa0ce"},{"version":"c7837ed435771b4b6dbeeceedb1313ad5fc6f72fc6b9cbd3846069369d21984c","signature":"54498fd3f36682c02390e253c8b396778a6b77af1ab499a62d9418f30b255e9b"},{"version":"a83d6566d891582f7b58d7a50ec277c65e4d369fda718bda11aee6ab29a449bc","signature":"17538c426a4708ea4f043a5b9987e2cbefa19be1e710b0f066eca7b31aec40eb"},"f42cd43b3b5b8f3ada32b762a4149ba82996e7ce0d9c08aa41fb23407b7668ae",{"version":"b630336f7fdd3a8820e7352186a05ab4c5d9f358bc82d5d69797d72a5277794e","signature":"6c322298bf478f84553f5939120714de6045670880cdc5fecf15f19ab11263b0"},"4eb10612b7943a3cfc3a81cb03cfa2fe2afdd9495ae6b9b6987230feed1378a0",{"version":"b82534b5e4ea4784d3076dfcd2992fade287df34d88834e70ba60ff23fd33b91","signature":"756a92787fa2b6f9dfccd5a7e1ff38395887f69b8844ea282b5642290b5378ed"},{"version":"64621f9a8004d4c58c92c62128fa328dde2af771d015009ffceb38f3425d97f7","signature":"76225f53ff23c8689862d3929a69540c9e940f318ad412507868f39241e23f29"},{"version":"1cfaddc340b132c25da5c5a34a505a0b045c5db44ba9e31414631f577bb9d719","signature":"b56a2759e296fac1477c57b353d4ab948e6afd22b00414e1e171c35de5957455"},"9232388e9107d730f891e4cd95c33b22543b1af440fbdcd2bf26c76deef39480",{"version":"1de83133faccda726829abdb60c0960a6956a3f3e752de592c5ddac1104827ae","signature":"396e6e2a8f276c1c2045cf9db1e920c3315c522d15582226d902e7e282d10bb3"},{"version":"5c32ac8e71b233d8d94d6df9ee1ea2cbf61f0ab8f670c68be5dc6170e4ad02c5","signature":"da54bcefa8850e631e6a85eb066cf53e1be5049c11f8cbf65498521b482d96b2"},{"version":"4d475c0648f14a1ea3ce068fcb6e8a6c3f1a20c1bd91eb8e460a241927e44dd9","signature":"a41c534f0445bbd2ea846ec531d31dad33856995ef249b8197d2b2a5466ccd3e"},{"version":"06cda5d976fc856962ea5ec91a68e06949c3b6107acbec0dffa77149bfe7bb83","signature":"cd6c95355a98b89cf2db939a8dbb36642adf2f1cc85174b79138c00b11a448f9"},{"version":"4191007f814ee2dd62e6c81ba4492b87fc9e096e15cd9d3b6eb0707155f4f8d5","signature":"ccd24db30017828e427fc54f16b2caf04fc4b82fcb99221e7560cba539192d73"},{"version":"6bf10f710ab674bffe724f8917f1757ee60f4133165640051d6ada0b4e4a6d4b","signature":"be757dca819f81ae20eac862de3826bac014f54d729ea637170c05d27617f6bf"},{"version":"1e876cd87bc37dea91d0add6d2d7f905661d7b11bd12b3ca4e1ccaaf8e83fbb9","signature":"1e0ad0e108134a5306fd121bd6a998eeb9413440c1e8ef2e7bc6851c2d8da2c5"},{"version":"2d96c0bb061335b9440cd77509f9207ab78b648a637e4bb9e133dd09cf0b914a","signature":"2b5cda62360c4876ca516066bf58473befcc39fc3d3349e5bf4f24f6cd3544f9"},{"version":"629d8a43e4f2d6b864ab45d0a935aaec1fbcdc0b506f6fe8da318e7c37d46a95","signature":"ad52dec43f52dfa00a78ee330b0179f4d6247d5001ffb2b3574d13944d8b2365"},"bfb8b16f9b95496fb1aaa1eca63da166eac6dad322618fa7703b167a2a39e2e9",{"version":"547517bcfe85bc1f78e4bb3230ebe1d8dd30db944e53654423b22e7811607a53","signature":"49186662df738b7724ebdb927885042c1ec647a78941eb4c94a107683a2cde6c"},"557b4920d37d7dd80a8f4e819fb37d0171f066c69c3fcb2b7bc4d5b6d9af60c4","367b978d5768e1b8fb0925293aa2b3d4c45514b3c323e6cc2892c68ab7263a9b",{"version":"612bd7d1bca84b230f62d303409ce7a4534fa9e02ab00fe56518d41be86810b8","signature":"572f7606335dd8832e53ee97d8ad79d91caf61a4477e5cc8f5ed4c4ea1cd67af"},"ad399adaa85966ef4b399bea5befb8b7a95763d5f0b647c3a1133ba886622c24","5fdec03a1909e22d09525e2a1e75be64acb4a8a4192127516319e179a9004bb6",{"version":"9da33360c5e6a608711a831848680ba4e690cffa90738dc31c140910f0ef1a90","signature":"27294c27ddeaa51581713a493892452b5c469423a7adfd0536a4dc191f203221"},{"version":"4d978ac55f678928bd3f63cfc61f22050833aaf523817fd356ff62a2c82f5ca5","signature":"976545632ffe8ed66cd5ad62e3e035cb972f20c0ed0f3cd73d59e8237945c568"},{"version":"0d35ab642d75fc3c0e348b06d320301306e3e994e78174492d7aec7e38998d0c","signature":"ccf5882c71ac3bd635aa8cdbad9852160f3228c82d322acc3487adaab8b5230c"},{"version":"70c600983321c79bc2460c340f6cf81a8b4bb3a645f1cdf6cc8d7fab10fa9780","signature":"8621cc9ef2751fec59a787ff508f2ab22b0219e4e60fa2278489d47f3aba6b16"},{"version":"8f636c9a63cce7dc25e1b898a88b85db1869ddf3130ade62adc7300099319d24","signature":"b45a1eb91b73dce4f4a3db24c02cfa677904be0481945ceca5a727e0f68d1432"},{"version":"e61d06badeed2050db5ae49e3a552102300f8b389403bd8c600269e540a0f353","signature":"9c09d46ccf169260b0d5a5bcf29e459b7b8cd94869560e35590965348f247f5c","affectsGlobalScope":true},{"version":"d9e31a17389b3041778f216e51cb643d0a4293fc94a29e0d3ef124597b686cf6","signature":"4361aed947f35da66d71b981e4fcc225fdbded3afa1478c6b32d7600ddb781aa"},{"version":"b5db9810c23a8c30982dba44995a41fb98aebb2aac184d02ab8aeaed8247122d","signature":"55ad0802761e9e97674fe7584309af80e725847828d1ea4ec5619c2d2856009e"},{"version":"419c03c171f76840f608b00d47a122da0703930b7efb998f6ce9b074df6c7332","signature":"b453600819f97876809237c56321ebb4515f4af81c9690de369a72f9785345a5"},"d89f4317c54ee5237ab8cb62855012b3aaa26ba8a69d4e0982878b9a2ff7c035","bfb8941a38e2bf4bf3686295a6b770d6b769e4c22d73ea97f2b8b904ec0dc859",{"version":"2822433c39fcaa10e7b9aef37a77d9e3b92437910ba2536d37094587c8a4beb3","signature":"67c0e92bf5fbe9fd11b5ee5cd2f647d9900b35876659be80642f38752bde66d1"},{"version":"cfac76d88453859e659462eb0ed95601d0d16f641b0f0a556080751afd8613cd","signature":"6688ab89eeb44744e19abbce57a209ff048b992ce8a5b45801380982eddb21e7"},{"version":"cd5aa8de2f3288d982d57ec6be2281f705fbb227b498f254e721e95df334d8f3","signature":"6653ed1e1299bad7b646bff93f04ad5070ca95517218c477833bff9303d10be3"},"7adb2e483a0d88e238dfa5f6137f8c2acb9decebe4e39806975d034ba480104c",{"version":"e294c1e680395f039e6a73f70b9b713208fd5eb55fd2c2f32316c75e7561b2ff","signature":"587b0284df83fa9ca1fbc3c3f71eed349edafdf164c9bf173a74b15c9e9deab0"},{"version":"107e56393a32cf33f9768cb28b6c12a6d44702d65701b3d59f758eec4458c43c","signature":"906de8a4a2b7c72e05edb1741204ce78d5ad2deb1c33fc433d99ff84a731248c"},"0f0ad9823f8ecf5ef15f969b820f02a483cd47b187471914d5970a203adcf08d","597edc442a2c477755090f0e666cac73168928741e19ca89f90ca9ad807677ac","97c37e99fd3e702569ef2c22c8994be456f9d59630dd04f0ebac29090ac9b8c7","8508de2067ee1d8fa7bda160360b01f9f7765551894325d90b76a6474f77971e","bdd43680c32a98aa9c9fd702166b844c3bf364c357c0011eb23b59eacd73f20f","8cd7bdd301f815b37f7dcda906e38cdb76143cc301e5d412f94bc793b7f4789f","cf1bdb669038221a40d0e9a87d65f0cd6c6006c5d30f9facb77b724175031a9c","7a92676a259f519c21962682ece787c920f3d9b70f702382ec0392581980303f",{"version":"4ba574932d6ee43ed9e74973a33c851ab0e8d8e89d867fb847ac19cfe2058585","signature":"9cce19f809c9b6fda60cc1b4b91c5d42f67c4c08d669637060b4c4817df9f82d"},{"version":"5d017251da692a084026f73502dbb50dab3d3704852335269a1b3b5543083335","signature":"e182641d43d462cf0372c69518df83961ad391836abdb14372ce3fafdfdb085c"},{"version":"387c7aabaef35ac17e9b09e4e4169b066afa80a4aae97ffcf5f1ed38a357b6c6","signature":"bba417099326ffe21c842a037aef324ba384a0c8e0c6c51fb150119d4fdd3c24"},{"version":"dc4c99125c12128e3b3967c1a6c32287275f963cda5f799015b99ea25940e8a6","signature":"bed291711eabdfb26076aca11edb889563e2b8f4063de403571e6127a46f3bc4"},"f00f13c9752e87a0dbec6b0f826d8861a5b213d15903cd428d1b72d91569934e","49f522a0ae3eddc16e696affaa7460f54122741ba7b365c1ee6e9b101d8bf355",{"version":"6b1f21f1f62cdb719165c0e70fb659a7201f9329c362966d9d1f98c0c4f999de","signature":"7f026b08fb100b928238a339aed22814104f7aebeb87f4117a840bac0b0f056a"},"a59ee1c1debdea7bf37a772bc54e9d76fb8218c8844a6714473656fe1d7ef60b","29b6e35a03dba10898e0dd33e770b3f17cd4b2420856dd2979a141d825937bfe",{"version":"4fba7948309725b17a0d52674e61eb3bc456eae352ff321c5f837a26759b8c89","signature":"bba2de3082dd81dace3efcd68ec05e85f345355652b403e411dab332bd57d5c5"},{"version":"d030f7f36a0bae1e76d64457af9bc1850b81dd2524649b7d5e1e296c7f5edda2","signature":"4bf9c62ad595432ba51f9761662c891b66c58d20fa5a6b1c84a2f4a6e25d88b3"},{"version":"5509b2d6109a06766011fa14350d2ef4f075d8bdafc2972015c8e4ee505f0b49","signature":"e3df6e35bae36b678a9ce273d2e554eb0c291bb1d98660aa543347f63b4e7201"},{"version":"40c0b13bfdfbf89f4851aad219d888670dc5d8a047103ed4e8ef4e31324a2908","signature":"e05829b171f828d065b6e08070e9b4e34d8894c865d989c9a52134d06d4394ba"},{"version":"9507422d2f8c033fc0bcd29bee9244ecf0292696ec07cdd398c2c3b01a652432","signature":"e7e499183e019ee8a07c625cdafb323c7e2a5035f0c39e5396729a0886a72b32"},{"version":"26e87976a41b2a3b687e8b67acc83b83a1b541503b2115d8acd2f04b3cfff5b6","signature":"c57fd40d8919efdc1e0a1dbaba9626eed9be6052783f94b0626f86f42a303605"},{"version":"fec1b6ba6c3404fa1cbbdbd4a37e182c81b54e0c57697b872465f807588790e0","signature":"3e32249be44a859e2c0d4a77e804698890367f6ddbebd52b987c6f37ed59e029"},{"version":"57e1e5d5bec335dc45483d34efa75eb119bc8b477071fabf2710919e1774875b","signature":"67bf75a321e9a4f97feba63d21d0630a03a2410d276e7967a24e052bd6c1c422"},"520c303197bb92f6139f3a64bced6c5e085409b1f0018a0a3de404f88662fde8",{"version":"cbe3f9fcdc095492e0de31be70a2b3bfd66d8682a5c66aa79a3fdabc9c0841c1","signature":"6efdd151da8ad7aaf7d7a862425d5202a63aac0a8fbb46bb2745b1af0480976c"},{"version":"e54e63f884310455e1d5affdb4a8d2d6f42312699bc1337977b3c9ff9c3c572c","signature":"f80086f82217a4aa0585fbf60f3b7f4000047d3ea9f1f7db6c033aaf1c9bd105"},{"version":"ef8d6e20c1a04ffc39f648635a137fb640f22cec501a43a72f9a9ab740b891d2","signature":"d1610be28d0204b57e1624a639555ca8685d7d4c1d179b5c97f11c1402101c42"},"c7f7f3e0a0b1fd9c1b6c9d3cfaa996594e0d14d0680cac33433b20e3d292ebd5",{"version":"acc31dce4a1462bb30c104752826c50ba740cefbaecf4255f508648129b1b916","signature":"c3fcb0f286e968116b7ebe439f225eeae17a6eda79368f32acb01835a35197b5"},{"version":"b8316c34c65a8a5bca70befeebe5240ff6d31deba487d0ce543b48834e8d6976","signature":"736e4cbb1d2cab847a9faa5e5c4ab0ea07c41a48ebdc2cef48948afd45f66546"},{"version":"e1556a4f2152fe403f5df2afc0952493b266ca4931ff58b7c5dc6457d055af6a","signature":"9f308d690e2f8b43ca03dbc1438ff27a6a7ccbb32c8436242fd0f2893ce8d628"},{"version":"5e7bf3d7d4f650f9e2683b4bfc922d5abaf767d38d3839eb6553ccf7ae24d94a","signature":"f3023b82b19e2b802a9050c32e2982c0bd1520866f6546c27c11aea5e284cf9e"},"e2b60ac77375386325f3ee7d48a642fcf3e6ebccd4c5d5b7d402ae595ddd2c08","6231b37f4ddb5be4bcf89256f1263ebd94428fcabec68828a04e7eb3ac467439","7d46d9bc4babe002424501422ac6685a2b91667ef289b18df0fd696c8329dde3","137652af6f2f2308d7c169750c9a3e458b9e86bd7b44c467bb5bc04e4428ab24","2ed41c60ba22c659fd3bb3ffb502db774328c17382b3528a00bbd2827cddc589","db69ce06fdbd864368a3d0d1898624d6d06304169e717cea460cf58f5e297c45",{"version":"eb2a4ae5fb465ed3a8eb9aed155ec71a1f35dc4a0981ac9759abe6e58b88c822","signature":"de073f6f3731e15fe4f52fd585c7e3e4270d2b0f860c21d341b4212d4adce2b2"},"b36099e741242c7a49177a1006480c8d7599e78b8f027b043712d716e8a54433",{"version":"e4cb1e40333fc6f8569d107bf47cff82345f02259b602192c2347e13de50d82f","signature":"bb2ad40c12f71eda45e3621544309220d1196e388a21e1e7b04b481c970f6ece"},{"version":"dc7d553243bada5752934a4c4f4ffb1757fb64276ab49618cacb3ae0dcd20e0e","signature":"c02420726b562883bbb922867dbc3fef7f5aac8a8e641a7412d4edc0a8501a7d"},"8d69fb4af602f4b5de27e36f23142fbd751bb2aaa103695e58f95fe0314ded36","2be395e104ebbb781a1507d1ad10785753711fb6cdfee2305f899e82601d0702","83abbf16cfe6b5935a3e5074eaa3cc38b326fcaf6242ac5a84a42ff5ac1ca1e9","586c2942b7df3276ff4f127b046e12a2a84a1e51a608d92ba2edce040495fc29",{"version":"976a4aa1e584c90adc5db4b93848715cf3f07c4c9d5d6847fc1143b8fb05c6d2","signature":"245ecc313b39ab9baaf300c3a8dc99b60a9bdf04d1f68ee49dfec11fdff06cbb"},{"version":"a726bf3351277f0ba4f85c8b82c7aee9b299e978786f58c6352ee22bc2c269ea","signature":"99606a924acc69451268c9ea744e8dbc8e2625af5477970f660e5c4dfe873d35"},{"version":"50f8ba36b66de70cd4db6f795b4b1d927b3a83785128d2434c61fe76aca78b04","signature":"582b0f671f09c1d4e01d4c7791983018934570d87620feec0d63c9dd28adce62"},"5abaf6dddba518662e62cbda6d83c99888dc3f8c4e46bc082c2021a3cf894f5c","d7523d617771b47dc8c937021a91b2c52497d04ba952ccb2c4d96c4247800ded",{"version":"947441c468e9211669209f574941047599b1d0733fe9a764b8368b84f31c4edd","signature":"57e9e3ebff0ca01be282370366463d01d91015059190378ff0cb0a0338c10347"},{"version":"bb8596170f28740990b90a1b25caf2aa3199ef1a350d27c813224d23fd044795","signature":"9f25db3ce700160eb932712806a405db235e20ab2324df64cc2ea304f20dd9f4"},{"version":"93d0ce042fd7bb9c56cfde878e0f42c8f44737f7f4d4e05139085560a8710e57","signature":"f7f932595d95cab2ec94bc37999e679f57c438dd54dcd9bbd3eda11b8e0a45bc"},{"version":"b81036d28107117020728a5c5881b4ad0849884968a647203e15fa705ec4b0d9","signature":"010f043ebe7d9312f66ab1e657f1d0c38eea5228ea797320ccc8e20746916a0a"},{"version":"c8de60a5739c5c9cc72dd90fe6233a66c6fa4f375d89e566da5d11b14327cc56","signature":"d683d2e546091bccf6105c54c3dc440adf4c297ad5cec4994b371acb55074f04"},"bc36bd13dbd3d989d9f26d3c3a473a5f72f906f79d8820adf45fcc0c972d3e9d","dbe53e4e94c0d27cb7c550922e639543b5e9daf5b694baba30d77aff3bdfe0c6",{"version":"314f5d0a64f49d07e4c691efb2903f73b4bfa7eb77bb20a5f7ddd1ab602ff4dc","signature":"50ce65fd9b75e360b7790ff90d18515c83b14336604c4a964c80f252841f9fad"},{"version":"b4f0232f15e175d09e384196ce5760023159a57ae4232e8c1daf0167a3f6a172","signature":"525a65a300d60bf15489f80f3ba39f229d4887f796961b9aa049913d9198a2a3"},{"version":"861f2aa664bc16f0583014349a2c1b274088a3637a9975801400ff45bfe66dcd","signature":"02684e55976c8e71f7e22a2d44535a02561f52042213a6a6efd5605f8c1eb27c"},{"version":"4af0f43879f2dbe376273ebfc46630f8e38f67b55e796e1bf81d67ca1b326b1b","signature":"a2bf85a43aec9a3bd842179bbed3698793948119b23329b7df09d8476678bbb4"},{"version":"b0b96e7598c49cdc55d225971e76d10c8dd15f26c3153335711cd5ddb189a580","signature":"a99312b2d10d21fbc5e88362ddc4a9a3d951c45a9de1842f9514f7affd303317"},"bc77b44071895b39586b35672e8198a8dc2004a0fc6414a0f338ee01348306d0",{"version":"bc4f5deb47b27418517e1871deda4d11c269ca3ad1907c2791b339be889e776e","signature":"ef704ca10327985d4b4ea9a16c8ced00a5ed6ca87bbcee868d18672e1cf71fe0"},"96bca967229e03d8c830b0bd75a60cc502561c02653db84853b4da0033982e5e",{"version":"1b306e5c0772efefd40a4fbd1c150f7453a24fa9c46038629d672a343f8aec01","signature":"d42b66a7f7c971e11346c6838e20abdd9c547806acceb6ceef415af8ad78fed5"},"7a7f416d0920bfbfc4f27a7993d7bbe109ff5ecf4f80d753c6952af5710853f2",{"version":"fca18a5146472e063111b6030e18abf2c1d73acc827a281db788ca73162e6f57","signature":"8e37d643bd92c5ddeca1f28a49998fd9d6fbef1df73c24bcf4bb963b65c35ea9"},"53873f7f77621cb1dbeaeb7326eb95d35d9c1601f81a1d1a4f6d5f7bc775af0b",{"version":"8305379d16ed9c94f0e63164e105820bb1a834611b3876d78e50cff594faface","signature":"dffdaa90a22136c2cada4fe5b33d99f23242a733427ff60e4b8249bddcb17125"},"b20acc65552acf38242bfae0bbf76d06c081a7fdd118565bb40c1db66f20931f","3595262a5e856785c6ed718136dc0d58811703cc92cc1fb545458be9897ce32a","5318a68feda5bfb305578d4cec1e3056c3213fd834b820eab6b4c20764cea1ae",{"version":"480c854e14783dcccfbe8ca7684a65285689c41820d143368da5529be031374d","signature":"897274a699ec8590478844f8f3ac89160041a75b9f47f829d0c0339e0e905507"},{"version":"bcade08ce408ed0d35da47f066a3aa7c83680fb401c8a398179b3845bc24344c","signature":"a192d0c3f07db5bc11750f1941a5212af2e1f1355838dfb920c813b5f733b7fd"},{"version":"c96d58024fb25531110ebce6e5393f0b5bd7119b4d532f15f789baa6c631b58a","signature":"4539d9595ed4694578114313b8aba2b64c7635b31c0d32d871fbf9d50e18c50d"},{"version":"96ccfc8df40fd3adc81612030b7cf93122c4c547c60bdf1d32f7fa241b8c9848","signature":"077ee33bfa62ef9c60a19126d3d09ad90064aacd821d7de3dc25deaaf8e263cd"},{"version":"0eea237420384e3e2937ad35360554e2cb0b6f2ff158477e34a8bcf1274197be","signature":"fec9fabd992207b38f61716b0613d7b157135af1900d454e5ea2e4003556327d"},{"version":"7aa8923d9ccab89420cd162016a2ebdf08dfde7420b6c06e391b665fe8bc3215","signature":"12e00f11b6497d095d84b1906ff6a77a329590cef5cdc431e0e6fd25157b810a"},{"version":"427416b4196c396ab729b0bfa9d4f8d0e5c5ea0a9ce098d94cd44162dfd0a645","signature":"03745cbd3c43593e85be94e513150ee56ad253a975fbaf19a5e2527dd063282a"},{"version":"b6160c36c47e734893f355158db9a23eb6f98ce839f13d8a5f6d10b60b221a5c","signature":"b975d4bd1e5baf7fd9818757ca559745297543ae350bdbba3d303606bfbcbf08"},{"version":"995b6d497f5ccd1bc9543e66afd8cd2ae9482f6b9948a7242a60b5229cfd9b98","signature":"f44c09c21a3dcc3455659c35749107ce9fcb83f172c6fd5e6dd32ef98254391b"},{"version":"5f5f6845fe362126ec8362510084c62f6e2353dd4c7085b5c8f785247dba4442","signature":"a0dc796ecce9fc6ef598d77387e7e089cea95cca368dc5e017f90b4611494a35"},{"version":"ced3fb1e0b00c621fe9c3ae96ae29fe36c63bf4193d28ba9dd33e6a4a9b02f52","signature":"2133d04fd279eb1047c8b70f7be0f459797ea946e4f6b48fa5cc09466ae186de"},{"version":"4afd569c8d1d6d529b32d88d0cf2c6e5dcdfc797578f705e273e116d8851dce9","signature":"dfb2f325ee8aace7d6f080aca9239c3b569151d9f4d453f3da85a6ac415c566e"},"6c0fbfab8fa861cc5fdf1f5a4944141e4ced0dae1f1c7d42c35d0c1155f20b19","edb7b26e37b62f7e2792e5f41db5092f2a880b37cdbbea60831f0f9f7a60151e",{"version":"52cfdad37a698355e646a424457bc24148c0400bd8d285e8b8e872513fc24a92","signature":"92b848c141af7839ed5c719191916a1708777be26b838524ecd2e3a7c20e1b5c"},"d8c503e07c61b0d4fff8467517c46cac3f5f814c1f06722d22378b6ce44dc89b","78603cfed9f1595591038276caed9335f1965eb39d4600f1d8928368baca62b5",{"version":"c6ff27a54f94c015c9f8ef6ea9d1ef2c848a431b1c1db06d3fdf88eda3b94e19","signature":"2c099655a627cd98512d2cb8de151da6a75a8dc9748e4d0cf24e92fc4fdbf9be"},{"version":"7f963773d10300835049b8605562374902d8a237d72904237655d80351fb3695","signature":"ac51f367ba308560a15db9cd2b34744340909ce2ba3f67d7d385fbb7001ffea0"},{"version":"f92cef66f6a7bd6eca888f0318175a524f75d77b54eb5c335e36f3d44b9b76c1","impliedFormat":1},{"version":"cc78001d811441c911311a5406b7eb801d2ef250d0b3dfa3a890ce2a423d7e88","impliedFormat":1},{"version":"a83d8c15d0ab29e132e96630d6cc91e2430f3330084a48d497705a354484ed85","impliedFormat":1},{"version":"57d105b702a37a434d29fd975fea07067bd340e2fa20f5cd7900be98dd02ac3e","impliedFormat":1},{"version":"2dede7dbdeda7233fd3481f4ef4629d8838ee949adaffad68476c86ce11d6d58","impliedFormat":1},{"version":"3b574a4602368c1ff44540f61e7ab72a126c3cbecd2741a3666e3bd7714faf91","signature":"535174aebf238cf05fd83bfe97ea18c293a6346ffd9f0aa3b9b16347650204ea"},{"version":"7a6a661abbbe5c15b77d15b8b5f6d4ebdcdf6fdea892f887b3c7684367b37e23","signature":"2d3273504aa682bd2ca7d45b3011a4f3d04afcdafc420cd49dd6c6ca832fe0d7"},{"version":"4106f71ebeb76b36ae780880993c7494e8a1feba8143fc62a95ce03037245661","signature":"7c41af3316f2392c6ea3e8a66ab3951331ee1bbe6a8f922ab13073d08d5ccbf0"},{"version":"98ae1f273cde322f4327148c86829dbdcca28fa2b608545f90d07810f7262bbd","signature":"dc495c79e72bb39604c5dba9663a0a64b21526fa199c5a9c03a9d2d4e156c06e"},{"version":"0e572a4f7d2197187833f527b734afa9669c88dc671c37fd8ff55719b74b9e28","signature":"dc115e6712b232a8e9090fe5ff3c69529ca9186d510fe939601c4ba7c4c8662d"},{"version":"bc7cbc21d212cb531e7a91f164cf2225b28974d6a0f868f0de430309915ba91e","signature":"0875f2d50da2a0d072341ca6f19c4f17711fa0ef67ed68d58af1ff877c05c20a"},{"version":"6bb2f1338af99c0cd7636bab03e4159e90776f2890653988bf06c053a64ae326","signature":"ce40f68ead25c7726d6f01d6b2e3a4fb9ba19528e2481021631557641f6f18d7"},{"version":"68bc7ab891e3614131c76370c83b60443a5406679b49d65812deffe3ff10191d","signature":"bc4e2dc3d4435a6ec5e3f9361e4e4476fbef48f4f42c4a8a2ac0b86705a20db5"},{"version":"e5f510da10d532486ec87b4b67c1e29baaefbbff3ee236cbe4bb51961e597a12","signature":"436bcadb42d782fc9a1f8681c1007dd7df963d57fc2b35343dc74ad4721f4f28"},{"version":"a0e3af2aeb17c57dab379b470913f1ccd9f8afd81c69ce6ebb87073d14e6e70c","signature":"66945a857eb0fb62ac0e6dfc78e2ee35c05bdfde3cbca09511a584c57b91c969"},{"version":"c0aa04de8350afc54a38d2db012be101d7e12c87ba429ad589c53223a5924ba0","signature":"7caf458058a10157a048570589332d51d9b1aee2714938fcae671afb8611621e"},{"version":"b60123baba649f41d7bf564535b652b0917d7de6a3773056e8c0aa5615a3d9a3","signature":"170e54c7b03aa71a92de1afdd4cf56b47c9df01195f98a8d933771b75ecff8f6"},{"version":"ede89d1356d05c43d3d8fa58865c1cbce58d9a537bb2a4e14a18c98e51957f8f","signature":"5f90455e7dc3e4b5f2ac38dfb5d2d69c2b37a5db648471b766c6cf5cc06a9411"},{"version":"82af1d59083db1786e24a99cbf063e1a2a5d30ebb1590dc93d3792b65a7fce3c","signature":"06cf4e3d2d4939482e4f5d9bcb9f62470ffbddab3889dc563ef5b77515128fc9"},{"version":"29b227d1b80b00943e3cf8c89bac0aa0e3757102071da7396ab4e36674ee93eb","signature":"feb354a7fb20192898f06ceb66c148670fed41c8fbb669293758680d39d72e77"},{"version":"4a396638e8016b529a6f7fc71b176756a14246b55fd82d2fe98858c39ac3cc2c","signature":"6e35df4ad8dbdc65975cc49fa3e92cf2d7a3d7c6d328e1a36be880eddab9ee8b"},"0649960ec2df4d36f0a39eac27643de251a2cfdc950bf017ada42b24faa0fd1e","55340bf0c9f5e6d732cf94f8518868a964ba6d9cf5dca13370d2b7f8d03c17d1",{"version":"d130f0eaa2f3e2753de589f31b2cf54c6359acbaa2851b72f34205bd73de1191","signature":"3b38c9dec9d0a3dee076b016573b538503c66b2722ed7a7e6ee1049ae2987699"},"2cf3840377d0c2cca336ad84491458cf2bef7335b823f8d0ca2087345215acfd","8e5e8c8148d458863b5086cffdb974ebe05c5803f1f9fa82b2ffc844de85b515","45881f9546e340bc4d4124e9892ebbceb9465c8073b7e6d91683b7d4d8fb1473","0f340ac84df773e840a96b3feda1ab40faf4874f782586ae49d901e01f1b5ab9",{"version":"33ec7282e374eae2ebe784449ff0a456f30361652ccba5b349206bfa9e7bd044","signature":"a892da29c2ea6ba0a7edc6661d3076e0af555a7fc1cdeabfe1b0276cdd5fc401"},{"version":"a33ea06913b712c529662bee7fd75959781267cf8a307902cc7761307fec0337","impliedFormat":1},{"version":"de6ebb31f426b7b15456e2599233f57ee8c01e12b4de4858126181c4f4ad3d43","signature":"7cd58e35cb4c919a9eb0add07622e860d931318f61f546cf57ef9dac8d2e05db"},{"version":"7fdf97d82cd000e332f00c5a934a138bc8b5b211f65273787f4a00fb89e95b28","signature":"0b693910387943504093437efdc194d1bc2197392277f6e83efac1c1d0f2f83c"},{"version":"12198890596086da4591d6fd1eef51e738b014d7bfb4d64c74dd769e136db5c8","signature":"4a43abfa626359b6bb7391e7086c63bb63fab174a21e5d9b882b8bcdcc213d60"},{"version":"43dcdda5eeb69fd3453a09e0b48254bcbffd46556af74189c4998093cd2b10b1","signature":"f113f3af8e8f4458d9e510dcc59c456608bd11a6ca5b147b5cb18949da5cb42c"}],"root":[491,[1090,1093],1095,1096,[4128,4136],[4151,4163],[4304,4308],[4311,4314],[4318,4322],[4326,4329],[4360,4365],[4383,4397],[4419,4430],[4444,4452],[4459,4474],[4476,4481],[4488,4490],5326,[5347,5355],[5357,5390],5392,5393,[5397,5436],[5469,5538],[5573,5580],[5582,5600],[5648,5650],[5670,5673],5675,[5680,5682],5688,5689,[5691,5694],[5698,5713],[5716,5734],[5741,5743],[5751,5811],[5813,5820],[5822,5839],[5845,5919],[5921,5996],[5998,6046],[6048,6057],[6065,6068],6070,6071,6098,6099,6103,[6106,6110],[6112,6161],[6163,6175],[6524,6552],[6557,6613],[6712,6803],[6805,6893],[6906,7152],[7154,7228],[7230,7265],[7269,7334],[7518,7547],[7549,7585],7592,[7594,7612],[7615,7624],[7723,7814],[7892,7953],[7955,8018],[8020,8032],[8034,8088],[8271,8284],[8594,8682],[8684,8764],[8766,8772],8780,8781,[8783,8817],[8819,9078],[9084,9107],[9109,9112]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":2},"referencedMap":[[81,1],[491,2],[6071,3],[8034,4],[8036,5],[8043,6],[8044,7],[6108,8],[8045,9],[8046,10],[8047,11],[8050,12],[8048,13],[8049,14],[1092,1],[8051,15],[8059,16],[8052,17],[6109,1],[1090,8],[8053,18],[6110,1],[8055,19],[8056,20],[8054,21],[8058,22],[1091,8],[8057,23],[6103,24],[8037,25],[8038,26],[8041,27],[6107,28],[8042,29],[6112,30],[8060,1],[8062,31],[8065,32],[8067,33],[8068,34],[8069,35],[8071,1],[8074,36],[8076,37],[8082,38],[8084,39],[8085,40],[8086,41],[8080,42],[8088,43],[8611,44],[8613,45],[8615,46],[8078,47],[8616,1],[8617,41],[8619,48],[8621,49],[8623,50],[8625,51],[8627,52],[8629,53],[8633,54],[8631,55],[8072,1],[8070,1],[8635,56],[8636,57],[1093,1],[6106,58],[6113,59],[6114,60],[6099,61],[6127,62],[6128,63],[6130,64],[6131,65],[6129,66],[6134,67],[6135,68],[6138,69],[6137,70],[6136,71],[6141,72],[6147,73],[6150,74],[6153,75],[6156,76],[6159,77],[6905,78],[6902,79],[6901,79],[6903,79],[6904,80],[6900,81],[6899,1],[619,1],[620,1],[621,82],[627,83],[616,84],[617,85],[618,1],[623,86],[625,87],[624,86],[622,88],[626,89],[575,1],[581,90],[584,91],[585,92],[576,93],[595,94],[607,95],[587,96],[588,97],[589,97],[594,98],[577,1],[590,97],[591,97],[592,97],[593,84],[579,99],[596,1],[597,100],[599,101],[598,100],[600,102],[602,103],[582,1],[583,104],[601,102],[603,105],[578,84],[604,105],[605,105],[580,106],[606,106],[862,107],[863,108],[861,1],[972,1],[975,109],[5324,40],[973,40],[5323,110],[974,1],[4491,111],[4492,111],[4493,111],[4494,111],[4495,111],[4496,111],[4497,111],[4498,111],[4499,111],[4500,111],[4501,111],[4502,111],[4503,111],[4504,111],[4505,111],[4506,111],[4507,111],[4508,111],[4509,111],[4510,111],[4511,111],[4512,111],[4513,111],[4514,111],[4515,111],[4516,111],[4517,111],[4518,111],[4519,111],[4520,111],[4521,111],[4522,111],[4523,111],[4524,111],[4525,111],[4526,111],[4527,111],[4528,111],[4529,111],[4531,111],[4530,111],[4532,111],[4533,111],[4534,111],[4535,111],[4536,111],[4537,111],[4538,111],[4539,111],[4540,111],[4541,111],[4542,111],[4543,111],[4544,111],[4545,111],[4546,111],[4547,111],[4548,111],[4549,111],[4550,111],[4551,111],[4552,111],[4553,111],[4554,111],[4555,111],[4556,111],[4557,111],[4558,111],[4559,111],[4560,111],[4561,111],[4562,111],[4563,111],[4564,111],[4570,111],[4565,111],[4566,111],[4567,111],[4568,111],[4569,111],[4571,111],[4572,111],[4573,111],[4574,111],[4575,111],[4576,111],[4577,111],[4578,111],[4579,111],[4580,111],[4581,111],[4582,111],[4583,111],[4584,111],[4585,111],[4586,111],[4587,111],[4588,111],[4589,111],[4590,111],[4591,111],[4592,111],[4596,111],[4597,111],[4598,111],[4599,111],[4600,111],[4601,111],[4602,111],[4603,111],[4593,111],[4594,111],[4604,111],[4605,111],[4606,111],[4595,111],[4607,111],[4608,111],[4609,111],[4610,111],[4611,111],[4612,111],[4613,111],[4614,111],[4615,111],[4616,111],[4617,111],[4618,111],[4619,111],[4620,111],[4621,111],[4622,111],[4623,111],[4624,111],[4625,111],[4626,111],[4627,111],[4628,111],[4629,111],[4630,111],[4631,111],[4632,111],[4633,111],[4634,111],[4635,111],[4636,111],[4637,111],[4638,111],[4639,111],[4640,111],[4641,111],[4646,111],[4647,111],[4648,111],[4649,111],[4642,111],[4643,111],[4644,111],[4645,111],[4650,111],[4651,111],[4652,111],[4653,111],[4654,111],[4655,111],[4656,111],[4657,111],[4658,111],[4659,111],[4660,111],[4661,111],[4662,111],[4663,111],[4664,111],[4665,111],[4666,111],[4667,111],[4668,111],[4669,111],[4671,111],[4672,111],[4673,111],[4674,111],[4675,111],[4670,111],[4676,111],[4677,111],[4678,111],[4679,111],[4680,111],[4681,111],[4682,111],[4683,111],[4684,111],[4686,111],[4687,111],[4688,111],[4685,111],[4689,111],[4690,111],[4691,111],[4692,111],[4693,111],[4694,111],[4695,111],[4696,111],[4697,111],[4698,111],[4699,111],[4700,111],[4701,111],[4702,111],[4703,111],[4704,111],[4705,111],[4706,111],[4707,111],[4708,111],[4709,111],[4710,111],[4711,111],[4712,111],[4713,111],[4714,111],[4715,111],[4716,111],[4717,111],[4718,111],[4719,111],[4720,111],[4721,111],[4722,111],[4723,111],[4724,111],[4725,111],[4730,111],[4726,111],[4727,111],[4728,111],[4729,111],[4731,111],[4732,111],[4733,111],[4734,111],[4735,111],[4736,111],[4737,111],[4738,111],[4739,111],[4740,111],[4741,111],[4742,111],[4743,111],[4744,111],[4745,111],[4746,111],[4747,111],[4748,111],[4749,111],[4750,111],[4751,111],[4752,111],[4753,111],[4754,111],[4755,111],[4756,111],[4757,111],[4758,111],[4759,111],[4760,111],[4761,111],[4762,111],[4763,111],[4764,111],[4765,111],[4766,111],[4767,111],[4768,111],[4769,111],[4770,111],[4771,111],[4772,111],[4773,111],[4774,111],[4775,111],[4776,111],[4777,111],[4778,111],[4779,111],[4780,111],[4781,111],[4782,111],[4783,111],[4784,111],[4785,111],[4786,111],[4787,111],[4788,111],[4789,111],[4790,111],[4791,111],[4792,111],[4793,111],[4794,111],[4795,111],[4796,111],[4797,111],[4798,111],[4799,111],[4800,111],[4801,111],[4802,111],[4803,111],[4804,111],[4805,111],[4806,111],[4807,111],[4808,111],[4809,111],[4810,111],[4811,111],[4812,111],[4813,111],[4814,111],[4815,111],[4816,111],[4817,111],[4818,111],[4819,111],[4820,111],[4821,111],[4822,111],[4823,111],[4824,111],[4825,111],[4826,111],[4827,111],[4828,111],[4829,111],[4830,111],[4831,111],[4832,111],[4833,111],[4834,111],[4835,111],[4836,111],[4837,111],[4838,111],[4839,111],[4840,111],[4841,111],[4842,111],[4843,111],[4845,111],[4846,111],[4844,111],[4847,111],[4848,111],[4849,111],[4850,111],[4851,111],[4852,111],[4853,111],[4854,111],[4855,111],[4856,111],[4857,111],[4858,111],[4859,111],[4860,111],[4861,111],[4862,111],[4863,111],[4864,111],[4865,111],[4866,111],[4867,111],[4868,111],[4869,111],[4870,111],[4871,111],[4872,111],[4876,111],[4873,111],[4874,111],[4875,111],[4877,111],[4878,111],[4879,111],[4880,111],[4881,111],[4882,111],[4883,111],[4884,111],[4885,111],[4886,111],[4887,111],[4888,111],[4889,111],[4890,111],[4891,111],[4892,111],[4893,111],[4894,111],[4895,111],[4896,111],[4897,111],[4898,111],[4899,111],[4900,111],[4901,111],[4902,111],[4903,111],[4904,111],[4905,111],[4906,111],[4907,111],[4908,111],[4909,111],[4910,111],[4911,111],[4912,111],[4913,111],[5322,112],[4914,111],[4915,111],[4916,111],[4917,111],[4918,111],[4919,111],[4920,111],[4921,111],[4922,111],[4923,111],[4924,111],[4925,111],[4926,111],[4927,111],[4928,111],[4929,111],[4930,111],[4931,111],[4932,111],[4933,111],[4934,111],[4935,111],[4936,111],[4937,111],[4938,111],[4939,111],[4940,111],[4941,111],[4942,111],[4943,111],[4944,111],[4945,111],[4946,111],[4947,111],[4948,111],[4949,111],[4950,111],[4951,111],[4952,111],[4954,111],[4955,111],[4953,111],[4956,111],[4957,111],[4958,111],[4959,111],[4960,111],[4961,111],[4962,111],[4963,111],[4964,111],[4965,111],[4966,111],[4967,111],[4968,111],[4969,111],[4970,111],[4971,111],[4972,111],[4973,111],[4974,111],[4975,111],[4976,111],[4977,111],[4978,111],[4979,111],[4980,111],[4981,111],[4982,111],[4983,111],[4984,111],[4985,111],[4986,111],[4987,111],[4988,111],[4989,111],[4990,111],[4991,111],[4992,111],[4993,111],[4994,111],[4995,111],[4996,111],[4997,111],[4998,111],[4999,111],[5000,111],[5001,111],[5002,111],[5003,111],[5004,111],[5005,111],[5006,111],[5007,111],[5008,111],[5009,111],[5010,111],[5011,111],[5012,111],[5013,111],[5014,111],[5015,111],[5016,111],[5017,111],[5018,111],[5019,111],[5020,111],[5021,111],[5022,111],[5023,111],[5024,111],[5025,111],[5026,111],[5027,111],[5028,111],[5029,111],[5030,111],[5031,111],[5032,111],[5033,111],[5034,111],[5035,111],[5036,111],[5037,111],[5038,111],[5039,111],[5040,111],[5041,111],[5042,111],[5043,111],[5044,111],[5045,111],[5046,111],[5047,111],[5048,111],[5049,111],[5050,111],[5051,111],[5052,111],[5053,111],[5054,111],[5055,111],[5056,111],[5057,111],[5058,111],[5059,111],[5060,111],[5061,111],[5062,111],[5063,111],[5064,111],[5065,111],[5066,111],[5067,111],[5068,111],[5069,111],[5070,111],[5071,111],[5072,111],[5073,111],[5074,111],[5075,111],[5076,111],[5077,111],[5078,111],[5079,111],[5080,111],[5081,111],[5082,111],[5083,111],[5084,111],[5085,111],[5086,111],[5087,111],[5088,111],[5089,111],[5090,111],[5091,111],[5092,111],[5093,111],[5094,111],[5095,111],[5096,111],[5097,111],[5101,111],[5102,111],[5103,111],[5098,111],[5099,111],[5100,111],[5104,111],[5105,111],[5106,111],[5107,111],[5108,111],[5109,111],[5110,111],[5111,111],[5112,111],[5113,111],[5114,111],[5115,111],[5116,111],[5117,111],[5118,111],[5119,111],[5120,111],[5121,111],[5122,111],[5123,111],[5124,111],[5125,111],[5126,111],[5127,111],[5128,111],[5129,111],[5130,111],[5131,111],[5132,111],[5133,111],[5134,111],[5135,111],[5136,111],[5137,111],[5138,111],[5139,111],[5140,111],[5141,111],[5142,111],[5143,111],[5144,111],[5145,111],[5146,111],[5147,111],[5148,111],[5149,111],[5150,111],[5151,111],[5153,111],[5154,111],[5155,111],[5156,111],[5152,111],[5157,111],[5158,111],[5159,111],[5160,111],[5161,111],[5162,111],[5163,111],[5164,111],[5165,111],[5166,111],[5167,111],[5168,111],[5169,111],[5170,111],[5171,111],[5172,111],[5173,111],[5174,111],[5175,111],[5176,111],[5177,111],[5178,111],[5179,111],[5180,111],[5181,111],[5182,111],[5183,111],[5184,111],[5185,111],[5186,111],[5187,111],[5188,111],[5189,111],[5190,111],[5191,111],[5192,111],[5193,111],[5194,111],[5195,111],[5196,111],[5197,111],[5198,111],[5199,111],[5200,111],[5201,111],[5202,111],[5203,111],[5204,111],[5205,111],[5206,111],[5207,111],[5208,111],[5209,111],[5210,111],[5211,111],[5212,111],[5213,111],[5214,111],[5215,111],[5216,111],[5217,111],[5218,111],[5219,111],[5220,111],[5222,111],[5223,111],[5224,111],[5221,111],[5225,111],[5226,111],[5227,111],[5228,111],[5229,111],[5230,111],[5231,111],[5232,111],[5233,111],[5234,111],[5236,111],[5237,111],[5238,111],[5235,111],[5239,111],[5240,111],[5241,111],[5242,111],[5243,111],[5244,111],[5245,111],[5246,111],[5247,111],[5248,111],[5249,111],[5250,111],[5251,111],[5252,111],[5253,111],[5254,111],[5255,111],[5256,111],[5257,111],[5258,111],[5259,111],[5260,111],[5261,111],[5262,111],[5263,111],[5264,111],[5269,111],[5265,111],[5266,111],[5267,111],[5268,111],[5270,111],[5271,111],[5272,111],[5273,111],[5274,111],[5277,111],[5278,111],[5275,111],[5276,111],[5279,111],[5280,111],[5281,111],[5282,111],[5283,111],[5284,111],[5285,111],[5286,111],[5287,111],[5288,111],[5289,111],[5290,111],[5291,111],[5292,111],[5293,111],[5294,111],[5295,111],[5296,111],[5297,111],[5298,111],[5299,111],[5300,111],[5301,111],[5302,111],[5303,111],[5304,111],[5305,111],[5306,111],[5307,111],[5308,111],[5309,111],[5310,111],[5311,111],[5312,111],[5313,111],[5314,111],[5315,111],[5316,111],[5317,111],[5318,111],[5319,111],[5320,111],[5321,111],[5325,113],[1065,40],[8575,114],[8580,115],[8297,1],[8286,116],[8287,40],[8288,40],[8285,40],[8290,117],[8289,21],[8554,118],[8294,119],[8296,120],[8295,21],[8555,118],[8299,121],[8300,121],[8301,121],[8303,122],[8298,123],[8556,118],[8302,121],[8306,124],[8307,125],[8305,126],[8557,118],[8582,127],[8581,128],[8583,129],[8586,130],[8584,131],[8585,132],[8558,118],[8291,21],[8293,133],[8292,134],[8559,118],[8593,135],[8309,136],[8308,137],[8532,138],[8531,139],[8560,118],[8588,140],[8587,141],[8533,40],[8561,118],[8534,142],[8535,142],[8538,143],[8536,1],[8542,144],[8537,145],[8539,146],[8540,40],[8541,40],[8562,118],[8544,147],[8543,40],[8563,118],[8545,123],[8564,118],[8553,148],[8568,149],[8569,150],[8570,151],[8548,1],[8549,1],[8552,152],[8550,1],[8551,1],[8546,1],[8547,153],[8572,154],[8565,118],[8571,40],[8577,155],[8576,156],[8574,157],[8573,40],[8566,118],[8590,158],[8589,1],[8578,40],[8567,118],[8579,159],[8591,160],[8592,161],[6556,162],[6554,163],[6553,40],[6555,164],[8177,165],[8179,166],[8178,1],[8180,167],[8181,168],[8176,169],[8211,170],[8212,171],[8210,172],[8214,173],[8217,174],[8213,175],[8215,176],[8216,176],[8218,177],[8219,178],[8224,179],[8221,180],[8220,40],[8223,181],[8222,182],[8228,183],[8227,184],[8225,185],[8226,175],[8229,186],[8230,187],[8234,188],[8232,189],[8231,190],[8233,191],[8169,192],[8151,175],[8152,193],[8154,194],[8168,193],[8155,195],[8157,175],[8156,1],[8158,175],[8159,196],[8166,175],[8160,1],[8161,1],[8162,1],[8163,175],[8164,197],[8165,198],[8153,177],[8167,199],[8235,200],[8208,201],[8209,202],[8207,203],[8145,204],[8143,205],[8144,206],[8142,207],[8141,208],[8138,209],[8137,210],[8131,208],[8133,211],[8132,212],[8140,213],[8139,210],[8134,214],[8135,215],[8136,215],[8172,195],[8170,195],[8173,216],[8175,217],[8174,218],[8171,219],[8122,197],[8123,1],[8146,220],[8150,221],[8147,1],[8148,222],[8149,1],[8125,223],[8126,223],[8129,224],[8130,225],[8128,223],[8127,224],[8124,193],[8182,175],[8183,175],[8184,175],[8185,226],[8206,227],[8194,228],[8193,1],[8186,229],[8189,175],[8187,175],[8190,175],[8192,230],[8191,231],[8188,175],[8202,1],[8195,1],[8196,1],[8197,175],[8198,175],[8199,1],[8200,175],[8201,1],[8205,232],[8203,1],[8204,175],[8236,199],[8243,233],[8239,199],[8237,199],[8238,199],[8240,199],[8241,199],[8242,199],[8250,234],[8249,235],[8253,236],[8254,237],[8251,238],[8252,239],[8270,240],[8262,241],[8261,242],[8260,199],[8255,243],[8259,244],[8256,243],[8257,243],[8258,243],[8245,199],[8244,1],[8248,245],[8246,238],[8247,246],[8263,1],[8264,1],[8265,199],[8269,247],[8266,1],[8267,199],[8268,243],[8099,1],[8101,248],[8102,249],[8100,1],[8103,1],[8104,1],[8107,250],[8105,1],[8106,1],[8108,1],[8109,1],[8110,1],[8111,251],[8112,1],[8113,252],[8098,253],[8089,1],[8090,1],[8092,1],[8091,40],[8093,40],[8094,1],[8095,40],[8096,1],[8097,1],[8121,254],[8119,255],[8114,1],[8115,1],[8116,1],[8117,1],[8118,1],[8120,1],[5736,256],[5738,257],[5739,258],[5740,259],[5735,1],[5737,1],[8310,1],[8312,260],[8313,260],[8311,1],[8315,261],[8316,261],[8314,1],[8317,1],[8318,262],[8319,263],[8320,263],[8321,1],[8322,1],[8323,1],[8330,1],[8324,1],[8325,262],[8326,1],[8327,1],[8328,264],[8331,265],[8335,266],[8332,267],[8329,1],[8333,268],[8334,269],[8336,1],[8337,262],[8338,262],[8339,262],[8340,262],[8341,262],[8342,262],[8343,262],[8344,262],[8345,262],[8346,262],[8347,270],[8348,1],[8350,271],[8351,262],[8371,272],[8365,273],[8367,273],[8366,274],[8363,275],[8364,273],[8369,1],[8368,1],[8370,1],[8352,276],[8353,1],[8356,1],[8359,1],[8354,1],[8361,1],[8362,277],[8358,1],[8355,1],[8357,1],[8360,1],[8349,1],[5695,278],[5696,278],[5697,279],[5541,280],[5543,281],[5539,280],[5542,278],[5545,282],[5540,283],[5546,284],[5684,285],[5686,286],[5685,287],[5683,280],[5610,288],[5611,288],[5612,280],[5613,289],[5618,290],[5614,280],[5615,280],[5616,280],[5623,291],[5617,280],[5619,292],[5609,293],[5620,294],[5608,295],[5621,296],[5622,293],[5638,297],[5636,280],[5637,280],[5655,298],[5676,280],[5640,298],[5643,299],[5641,300],[5642,301],[5639,280],[5604,280],[5605,302],[5624,303],[5602,280],[5603,280],[5606,304],[5647,305],[5646,280],[5549,306],[5548,307],[5547,280],[5644,280],[5714,308],[5651,1],[5661,309],[5662,1],[5663,1],[5581,310],[5468,280],[5653,311],[5654,40],[5552,312],[5656,313],[5645,314],[5664,1],[5665,315],[5666,1],[5667,316],[5657,280],[5660,317],[5668,318],[5669,40],[5687,319],[5551,320],[5659,321],[5652,310],[5550,322],[5658,310],[5715,280],[5674,1],[5750,323],[5601,280],[5635,324],[5625,280],[5626,280],[5627,298],[5631,325],[5630,326],[5632,298],[5633,280],[5628,327],[5629,328],[5634,329],[5744,1],[5745,280],[5749,330],[5746,1],[5747,280],[5748,1],[5556,331],[5553,280],[5554,280],[5555,280],[6069,332],[239,1],[2615,333],[2616,333],[2617,333],[2619,333],[2620,333],[2621,333],[2622,333],[2623,333],[2624,333],[2625,333],[2618,333],[2626,333],[2627,333],[2628,333],[2629,333],[2630,333],[2631,333],[2632,333],[2633,333],[2634,333],[2635,333],[2636,333],[2637,333],[2638,333],[2639,333],[2640,333],[2641,333],[2642,333],[2643,333],[2644,333],[2645,333],[2646,333],[2647,333],[2650,333],[2651,333],[2652,333],[2648,333],[2649,333],[2653,333],[2654,333],[2655,333],[2656,333],[2657,333],[2658,333],[2659,333],[2660,333],[2661,333],[2662,333],[2663,333],[2664,333],[2665,333],[2666,333],[2667,333],[2668,333],[2669,333],[2670,333],[2671,333],[2672,333],[2673,333],[2674,333],[2675,333],[2676,333],[2677,333],[2678,333],[2679,333],[2680,333],[2681,333],[2682,333],[2683,333],[2684,333],[2685,333],[2686,333],[2687,333],[2688,333],[2689,333],[2690,333],[2691,333],[2692,333],[2693,333],[2694,333],[2696,333],[2697,333],[2698,333],[2699,333],[2695,333],[2700,333],[2701,333],[2702,333],[2703,333],[2704,333],[2705,333],[2706,333],[2707,333],[2708,333],[2709,333],[2710,333],[2711,333],[2733,333],[2734,333],[2735,333],[2736,333],[2737,333],[2738,333],[2739,333],[2740,333],[2741,333],[2742,333],[2743,333],[2744,333],[2745,333],[2746,333],[2747,333],[2748,333],[2712,333],[2713,333],[2714,333],[2715,333],[2716,333],[2717,333],[2718,333],[2719,333],[2720,333],[2721,333],[2749,333],[2750,333],[2722,333],[2723,333],[2724,333],[2725,333],[2730,333],[2731,333],[2732,333],[2726,333],[2727,333],[2728,333],[2729,333],[2751,333],[2752,333],[2753,333],[2754,333],[2755,333],[2756,333],[2757,333],[2758,333],[2759,333],[2760,333],[2761,333],[2762,333],[2763,333],[2764,333],[2765,333],[2766,333],[2767,333],[2768,333],[2769,333],[2770,333],[2771,333],[2772,333],[2773,333],[2774,333],[2775,333],[2776,333],[2777,333],[2778,333],[2779,333],[2780,333],[2781,333],[2782,333],[2783,333],[2784,333],[2785,333],[2786,333],[2787,333],[2788,333],[2789,333],[2790,333],[2791,333],[2792,333],[2793,333],[2794,333],[2795,333],[2796,333],[2797,333],[2798,333],[2799,333],[2800,333],[2801,333],[2802,333],[2803,333],[2804,333],[2805,333],[2806,333],[2807,333],[2808,333],[2809,333],[2810,333],[2811,333],[2812,333],[2813,333],[2814,333],[2815,333],[2816,333],[2817,333],[2818,333],[2819,333],[2820,333],[2821,333],[2822,333],[2823,333],[2824,333],[2825,333],[2826,333],[2830,333],[2832,333],[2831,333],[2833,333],[2827,333],[2828,333],[2829,333],[2834,333],[2835,333],[2836,333],[2837,333],[2838,333],[2840,333],[2839,333],[2841,333],[2842,333],[2843,333],[2844,333],[2845,333],[2846,333],[2847,333],[2848,333],[2849,333],[2850,333],[2851,333],[2852,333],[2853,333],[2854,333],[2855,333],[2856,333],[2857,333],[2859,333],[2858,333],[2860,333],[2862,333],[2861,333],[2863,333],[2864,333],[2865,333],[2866,333],[2867,333],[2868,333],[2869,333],[2870,333],[2871,333],[2873,333],[2872,333],[2874,333],[2875,333],[2876,333],[2877,333],[2878,333],[2879,333],[2880,333],[2881,333],[2882,333],[2883,333],[2884,333],[2885,333],[2886,333],[2887,333],[2888,333],[2890,333],[2889,333],[2893,333],[2894,333],[2895,333],[2896,333],[2897,333],[2898,333],[2899,333],[2900,333],[2901,333],[2902,333],[2903,333],[2904,333],[2905,333],[2906,333],[2907,333],[2908,333],[2909,333],[2910,333],[2911,333],[2912,333],[2913,333],[2914,333],[2915,333],[2916,333],[2917,333],[2891,333],[2918,333],[2892,333],[2919,333],[2920,333],[2921,333],[2922,333],[2923,333],[2924,333],[2925,333],[2926,333],[2927,333],[2928,333],[2929,333],[2930,333],[2931,333],[2932,333],[2933,333],[2934,333],[2935,333],[2936,333],[2937,333],[2938,333],[2939,333],[2940,333],[2941,333],[2942,333],[2943,333],[2944,333],[2945,333],[2946,333],[2947,333],[2948,333],[2949,333],[2950,333],[2951,333],[2952,333],[2953,333],[2954,333],[2955,333],[2956,333],[2957,333],[2964,333],[2965,333],[2958,333],[2966,333],[2959,333],[2960,333],[2961,333],[2962,333],[2963,333],[2967,333],[2968,333],[2972,333],[2969,333],[2973,333],[2970,333],[2971,333],[2974,333],[2975,333],[2976,333],[2977,333],[2978,333],[2979,333],[2980,333],[2981,333],[2982,333],[2983,333],[2984,333],[2985,333],[2986,333],[2987,333],[2988,333],[2989,333],[2990,333],[2991,333],[2992,333],[2994,333],[2993,333],[2995,333],[2996,333],[2997,333],[2998,333],[2999,333],[3002,333],[3000,333],[3001,333],[3003,333],[3004,333],[3005,333],[3006,333],[3007,333],[3008,333],[3009,333],[3010,333],[3011,333],[3012,333],[3013,333],[3014,333],[3015,333],[3016,333],[3018,333],[3017,333],[3020,333],[3021,333],[3019,333],[3023,333],[3022,333],[3024,333],[3026,333],[3025,333],[3027,333],[3028,333],[3029,333],[3030,333],[3031,333],[3032,333],[3033,333],[3034,333],[3035,333],[3036,333],[3037,333],[3038,333],[3039,333],[3040,333],[3042,333],[3043,333],[3041,333],[3044,333],[3045,333],[3046,333],[3047,333],[3048,333],[3049,333],[3050,333],[3051,333],[3052,333],[3053,333],[3054,333],[3055,333],[3056,333],[3057,333],[3058,333],[3059,333],[3060,333],[3061,333],[3062,333],[3063,333],[3064,333],[3065,333],[3066,333],[3067,333],[3068,333],[3069,333],[3070,333],[3071,333],[3072,333],[3073,333],[3074,333],[3075,333],[3076,333],[3077,333],[3078,333],[3079,333],[3080,333],[3081,333],[3082,333],[3083,333],[3084,333],[3085,333],[3086,333],[3087,333],[3089,333],[3090,333],[3091,333],[3092,333],[3093,333],[3097,333],[3094,333],[3095,333],[3096,333],[3088,333],[3098,333],[3099,333],[3100,333],[3101,333],[3102,333],[3103,333],[3104,333],[3105,333],[3106,333],[3107,333],[3108,333],[3109,333],[3110,333],[3111,333],[3112,333],[3113,333],[3114,333],[3115,333],[3116,333],[3117,333],[3118,333],[3119,333],[3120,333],[3121,333],[3122,333],[3123,333],[3124,333],[3125,333],[3126,333],[3127,333],[3128,333],[3129,333],[3130,333],[3131,333],[3136,333],[3132,333],[3133,333],[3134,333],[3135,333],[3137,333],[3138,333],[3139,333],[3140,333],[3141,333],[3142,333],[3143,333],[3144,333],[3145,333],[3146,333],[3147,333],[3148,333],[3149,333],[3150,333],[3151,333],[3152,333],[3153,333],[3154,333],[3155,333],[3156,333],[3157,333],[3158,333],[3159,333],[3160,333],[3161,333],[3163,333],[3164,333],[3165,333],[3166,333],[3162,333],[3168,333],[3167,333],[3169,333],[3170,333],[3171,333],[3172,333],[3173,333],[3174,333],[3175,333],[3176,333],[3177,333],[3178,333],[3179,333],[3184,333],[3180,333],[3181,333],[3182,333],[3183,333],[3185,333],[3187,333],[3188,333],[3189,333],[3186,333],[3190,333],[3191,333],[3192,333],[3193,333],[3194,333],[3195,333],[3196,333],[3197,333],[3198,333],[3199,333],[3200,333],[3201,333],[3202,333],[3203,333],[3204,333],[3205,333],[3206,333],[3207,333],[3208,333],[3209,333],[3221,333],[3210,333],[3211,333],[3212,333],[3213,333],[3214,333],[3215,333],[3216,333],[3217,333],[3218,333],[3219,333],[3220,333],[3222,333],[3223,333],[3224,333],[3225,333],[3226,333],[3227,333],[3228,333],[3229,333],[3230,333],[3231,333],[3232,333],[3233,333],[3234,333],[3235,333],[3236,333],[3239,333],[3237,333],[3238,333],[3240,333],[3241,333],[3242,333],[3243,333],[3244,333],[3245,333],[3246,333],[3248,333],[3247,333],[3249,333],[3250,333],[3251,333],[3252,333],[3253,333],[3254,333],[3255,333],[3256,333],[3257,333],[3258,333],[3259,333],[3269,333],[3260,333],[3261,333],[3262,333],[3263,333],[3264,333],[3265,333],[3266,333],[3267,333],[3268,333],[3270,333],[3271,333],[3272,333],[3273,333],[3274,333],[3275,333],[3276,333],[3277,333],[3278,333],[3279,333],[3280,333],[3281,333],[3282,333],[3283,333],[3284,333],[3285,333],[3286,333],[3287,333],[3288,333],[3289,333],[3290,333],[3291,333],[3292,333],[3293,333],[3294,333],[3295,333],[3296,333],[3297,333],[3298,333],[3299,333],[3300,333],[3301,333],[3302,333],[3303,333],[3306,333],[3307,333],[3308,333],[3304,333],[3305,333],[3309,333],[3310,333],[3311,333],[3312,333],[3313,333],[3314,333],[3315,333],[3316,333],[3317,333],[3318,333],[3319,333],[3320,333],[3321,333],[3322,333],[3323,333],[3324,333],[3325,333],[3326,333],[3327,333],[3328,333],[3329,333],[3330,333],[3331,333],[3332,333],[3333,333],[3334,333],[3335,333],[3336,333],[3337,333],[3338,333],[3339,333],[3340,333],[3341,333],[3342,333],[3345,333],[3343,333],[3344,333],[3361,333],[3362,333],[3346,333],[3347,333],[3348,333],[3349,333],[3350,333],[3351,333],[3352,333],[3353,333],[3354,333],[3363,333],[3365,333],[3355,333],[3364,333],[3356,333],[3357,333],[3358,333],[3359,333],[3360,333],[3366,333],[3367,333],[3368,333],[3369,333],[3370,333],[3371,333],[3372,333],[3373,333],[3374,333],[3375,333],[3380,333],[3376,333],[3377,333],[3378,333],[3379,333],[3381,333],[3382,333],[3383,333],[3384,333],[3385,333],[3386,333],[3387,333],[3388,333],[3389,333],[3390,333],[3391,333],[3392,333],[3393,333],[3394,333],[3395,333],[3396,333],[3397,333],[3398,333],[3399,333],[3400,333],[3401,333],[3402,333],[3403,333],[3404,333],[3405,333],[3406,333],[3408,333],[3407,333],[3409,333],[3410,333],[3411,333],[3412,333],[3413,333],[3416,333],[3414,333],[3415,333],[3417,333],[3418,333],[3419,333],[3420,333],[3421,333],[3422,333],[3423,333],[3424,333],[3426,333],[3427,333],[3425,333],[3428,333],[3429,333],[3430,333],[3431,333],[3432,333],[3433,333],[3434,333],[3435,333],[3436,333],[3437,333],[3438,333],[3439,333],[3440,333],[3441,333],[3442,333],[3443,333],[3444,333],[3445,333],[3446,333],[3447,333],[3448,333],[3449,333],[3451,333],[3450,333],[3452,333],[3453,333],[3454,333],[3455,333],[3456,333],[3457,333],[3462,333],[3458,333],[3459,333],[3460,333],[3461,333],[3463,333],[3464,333],[3465,333],[3466,333],[3467,333],[3468,333],[3469,333],[3470,333],[3471,333],[3472,333],[3473,333],[3474,333],[3482,333],[3475,333],[3476,333],[3477,333],[3478,333],[3479,333],[3480,333],[3481,333],[3483,333],[3484,333],[3485,333],[3486,333],[3487,333],[3488,333],[3489,333],[3490,333],[3492,333],[3491,333],[3493,333],[3494,333],[3496,333],[3495,333],[3497,333],[3498,333],[3499,333],[3500,333],[3501,333],[3502,333],[3503,333],[3504,333],[3505,333],[3506,333],[3507,333],[3508,333],[3509,333],[3510,333],[3511,333],[3512,333],[3513,333],[3514,333],[3515,333],[3516,333],[3517,333],[3518,333],[3519,333],[3520,333],[3521,333],[3522,333],[3523,333],[3524,333],[3525,333],[3526,333],[3527,333],[3528,333],[3529,333],[3530,333],[3531,333],[3533,333],[3532,333],[3534,333],[3535,333],[3536,333],[3537,333],[3538,333],[3539,333],[3540,333],[3541,333],[3542,333],[3543,333],[3544,333],[3545,333],[3546,333],[3547,333],[3548,333],[3550,333],[3549,333],[3551,333],[3552,333],[3553,333],[3554,333],[3555,333],[3556,333],[3557,333],[3558,333],[3559,333],[3560,333],[3565,333],[3567,333],[3566,333],[3569,333],[3570,333],[3568,333],[3561,333],[3571,333],[3572,333],[3562,333],[3563,333],[3564,333],[3573,333],[3574,333],[3575,333],[3576,333],[3577,333],[3578,333],[3579,333],[3580,333],[3581,333],[3582,333],[3583,333],[3584,333],[3585,333],[3586,333],[3587,333],[3588,333],[3589,333],[3590,333],[3591,333],[3592,333],[3593,333],[3594,333],[3595,333],[3596,333],[3597,333],[3598,333],[3599,333],[3600,333],[3601,333],[3602,333],[3603,333],[3604,333],[3605,333],[3606,333],[3607,333],[3608,333],[3609,333],[3610,333],[3611,333],[3612,333],[3613,333],[3614,333],[3615,333],[3616,333],[3617,333],[3618,333],[3619,333],[3620,333],[3621,333],[3622,333],[3623,333],[3627,333],[3628,333],[3624,333],[3625,333],[3626,333],[3629,333],[3630,333],[3631,333],[3632,333],[3633,333],[3634,333],[3635,333],[3636,333],[3637,333],[3638,333],[3639,333],[3640,333],[3641,333],[3644,333],[3645,333],[3646,333],[3647,333],[3648,333],[3649,333],[3650,333],[3651,333],[3642,333],[3643,333],[3652,333],[3653,333],[3654,333],[3655,333],[3657,333],[3656,333],[3659,333],[3658,333],[3660,333],[3661,333],[3662,333],[3663,333],[3664,333],[3665,333],[3666,333],[3667,333],[3668,333],[3669,333],[3670,333],[3671,333],[3672,333],[3673,333],[3674,333],[3675,333],[3676,333],[3677,333],[3678,333],[3679,333],[3680,333],[3681,333],[3682,333],[3683,333],[3684,333],[3685,333],[3686,333],[3687,333],[3688,333],[3690,333],[3689,333],[3691,333],[3692,333],[3693,333],[3694,333],[3695,333],[3696,333],[3697,333],[3698,333],[3699,333],[3700,333],[3702,333],[3701,333],[3703,333],[3704,333],[3705,333],[3706,333],[3707,333],[3708,333],[3709,333],[3710,333],[3711,333],[3712,333],[3713,333],[3714,333],[3715,333],[3716,333],[3717,333],[3718,333],[3719,333],[3720,333],[3721,333],[3722,333],[3723,333],[3724,333],[3725,333],[3726,333],[3727,333],[3728,333],[3729,333],[3730,333],[3731,333],[3732,333],[3733,333],[3734,333],[3735,333],[3736,333],[3737,333],[3738,333],[3739,333],[3740,333],[3742,333],[3741,333],[3743,333],[3744,333],[3745,333],[3746,333],[3747,333],[3748,333],[3749,333],[3750,333],[3751,333],[3752,333],[3753,333],[3754,333],[3755,333],[3756,333],[3757,333],[3758,333],[3759,333],[3760,333],[3761,333],[3762,333],[3763,333],[3764,333],[3765,333],[3766,333],[3767,333],[3768,333],[3769,333],[3770,333],[3771,333],[3772,333],[3773,333],[3774,333],[3775,333],[3776,333],[3777,333],[3778,333],[3779,333],[3780,333],[3781,333],[3782,333],[3783,333],[3784,333],[3785,333],[3786,333],[3787,333],[3788,333],[3789,333],[3792,333],[3790,333],[3791,333],[3793,333],[3794,333],[3795,333],[3796,333],[3797,333],[3798,333],[3799,333],[3800,333],[3801,333],[3802,333],[3803,333],[3804,333],[3805,333],[3806,333],[3807,333],[3808,333],[3809,333],[3810,333],[3811,333],[3812,333],[3813,333],[3814,333],[3815,333],[3816,333],[3817,333],[3818,333],[3820,333],[3819,333],[3821,333],[3822,333],[3823,333],[3824,333],[3827,333],[3825,333],[3826,333],[3828,333],[3829,333],[3830,333],[3831,333],[3832,333],[3833,333],[3834,333],[3835,333],[3836,333],[3837,333],[3838,333],[3839,333],[3840,333],[3841,333],[3844,333],[3842,333],[3843,333],[3845,333],[3846,333],[3847,333],[3848,333],[3849,333],[3850,333],[3851,333],[3852,333],[3853,333],[3854,333],[3855,333],[3856,333],[3857,333],[3858,333],[3859,333],[3860,333],[3861,333],[3862,333],[3863,333],[3864,333],[3865,333],[3866,333],[3867,333],[3868,333],[3869,333],[3870,333],[3871,333],[3872,333],[3873,333],[3874,333],[3875,333],[3876,333],[3877,333],[3879,333],[3878,333],[3880,333],[3881,333],[3882,333],[3883,333],[3884,333],[3885,333],[3886,333],[3887,333],[3888,333],[3889,333],[3892,333],[3890,333],[3891,333],[3893,333],[3894,333],[3895,333],[3896,333],[3897,333],[3898,333],[3899,333],[3900,333],[3902,333],[3901,333],[3903,333],[3904,333],[3905,333],[3906,333],[3907,333],[3908,333],[3909,333],[3910,333],[3911,333],[3912,333],[3913,333],[3914,333],[3915,333],[3916,333],[3917,333],[3918,333],[3919,333],[3920,333],[3921,333],[3922,333],[3923,333],[3924,333],[3925,333],[3926,333],[3927,333],[3928,333],[3929,333],[3931,333],[3930,333],[3932,333],[3933,333],[3934,333],[3935,333],[3936,333],[3937,333],[3938,333],[3939,333],[3941,333],[3942,333],[3943,333],[3944,333],[3945,333],[3946,333],[3947,333],[3948,333],[3949,333],[3950,333],[3951,333],[3952,333],[3953,333],[3954,333],[3955,333],[3956,333],[3958,333],[3959,333],[3960,333],[3961,333],[3962,333],[3957,333],[3963,333],[3981,333],[3964,333],[3965,333],[3966,333],[3967,333],[3968,333],[3969,333],[3970,333],[3971,333],[3972,333],[3973,333],[3974,333],[3975,333],[3976,333],[3977,333],[3978,333],[3979,333],[3980,333],[3982,333],[3983,333],[3984,333],[3985,333],[3986,333],[3987,333],[3988,333],[3989,333],[3990,333],[3991,333],[3992,333],[3993,333],[3994,333],[3996,333],[3995,333],[3997,333],[3998,333],[3999,333],[4000,333],[4001,333],[4002,333],[4003,333],[4004,333],[4005,333],[4006,333],[4007,333],[4008,333],[4009,333],[4010,333],[4011,333],[4012,333],[4013,333],[4014,333],[4015,333],[4016,333],[4017,333],[4018,333],[4019,333],[4020,333],[4023,333],[4021,333],[4022,333],[4024,333],[4025,333],[4026,333],[4027,333],[4028,333],[4029,333],[4030,333],[4031,333],[4032,333],[4033,333],[4034,333],[4035,333],[4036,333],[4037,333],[4038,333],[3940,333],[4039,333],[4040,333],[4041,333],[4042,333],[4043,333],[4044,333],[4045,333],[4046,333],[4047,333],[4048,333],[4049,333],[4050,333],[4051,333],[4052,333],[4053,333],[4054,333],[4055,333],[4056,333],[4057,333],[4058,333],[4059,333],[4060,333],[4061,333],[4062,333],[4063,333],[4067,333],[4068,333],[4064,333],[4065,333],[4069,333],[4066,333],[4070,333],[4071,333],[4072,333],[4073,333],[4074,333],[4075,333],[4076,333],[4077,333],[4078,333],[4079,333],[4080,333],[4081,333],[4082,333],[4083,333],[4084,333],[4085,333],[4086,333],[4087,333],[4088,333],[4089,333],[4090,333],[4091,333],[4092,333],[4093,333],[4094,333],[4099,333],[4100,333],[4101,333],[4095,333],[4096,333],[4097,333],[4098,333],[4102,333],[4103,333],[4104,333],[4105,333],[4106,333],[4107,333],[4108,333],[4109,333],[4110,333],[4111,333],[4112,333],[4113,333],[4114,333],[4115,333],[4116,333],[4117,333],[4118,333],[4119,333],[4120,333],[4121,333],[4122,333],[4123,333],[4124,333],[4125,333],[4126,333],[4127,334],[1098,335],[1099,335],[1101,336],[1100,335],[1097,40],[1102,333],[1103,333],[1104,333],[1106,333],[1107,333],[1108,333],[1109,333],[1110,333],[1111,333],[1112,333],[1105,333],[1113,333],[1114,333],[1115,333],[1116,333],[1117,333],[1118,333],[1119,333],[1120,333],[1121,333],[1122,333],[1123,333],[1124,333],[1125,333],[1126,333],[1127,333],[1128,333],[1129,333],[1130,333],[1131,333],[1132,333],[1133,333],[1134,333],[1137,333],[1138,333],[1139,333],[1135,333],[1136,333],[1140,333],[1141,333],[1142,333],[1143,333],[1144,333],[1145,333],[1146,333],[1147,333],[1148,333],[1149,333],[1150,333],[1151,333],[1152,333],[1153,333],[1154,333],[1155,333],[1156,333],[1157,333],[1158,333],[1159,333],[1160,333],[1161,333],[1162,333],[1163,333],[1164,333],[1165,333],[1166,333],[1167,333],[1168,333],[1169,333],[1170,333],[1171,333],[1172,333],[1173,333],[1174,333],[1175,333],[1176,333],[1177,333],[1178,333],[1179,333],[1180,333],[1181,333],[1183,333],[1184,333],[1185,333],[1186,333],[1182,333],[1187,333],[1188,333],[1189,333],[1190,333],[1191,333],[1192,333],[1193,333],[1194,333],[1195,333],[1196,333],[1197,333],[1198,333],[1220,333],[1221,333],[1222,333],[1223,333],[1224,333],[1225,333],[1226,333],[1227,333],[1228,333],[1229,333],[1230,333],[1231,333],[1232,333],[1233,333],[1234,333],[1235,333],[1199,333],[1200,333],[1201,333],[1202,333],[1203,333],[1204,333],[1205,333],[1206,333],[1207,333],[1208,333],[1236,333],[1237,333],[1209,333],[1210,333],[1211,333],[1212,333],[1217,333],[1218,333],[1219,333],[1213,333],[1214,333],[1215,333],[1216,333],[1238,333],[1239,333],[1240,333],[1241,333],[1242,333],[1243,333],[1244,333],[1245,333],[1246,333],[1247,333],[1248,333],[1249,333],[1250,333],[1251,333],[1252,333],[1253,333],[1254,333],[1255,333],[1256,333],[1257,333],[1258,333],[1259,333],[1260,333],[1261,333],[1262,333],[1263,333],[1264,333],[1265,333],[1266,333],[1267,333],[1268,333],[1269,333],[1270,333],[1271,333],[1272,333],[1273,333],[1274,333],[1275,333],[1276,333],[1277,333],[1278,333],[1279,333],[1280,333],[1281,333],[1282,333],[1283,333],[1284,333],[1285,333],[1286,333],[1287,333],[1288,333],[1289,333],[1290,333],[1291,333],[1292,333],[1293,333],[1294,333],[1295,333],[1296,333],[1297,333],[1298,333],[1299,333],[1300,333],[1301,333],[1302,333],[1303,333],[1304,333],[1305,333],[1306,333],[1307,333],[1308,333],[1309,333],[1310,333],[1311,333],[1312,333],[1313,333],[1317,333],[1319,333],[1318,333],[1320,333],[1314,333],[1315,333],[1316,333],[1321,333],[1322,333],[1323,333],[1324,333],[1325,333],[1327,333],[1326,333],[1328,333],[1329,333],[1330,333],[1331,333],[1332,333],[1333,333],[1334,333],[1335,333],[1336,333],[1337,333],[1338,333],[1339,333],[1340,333],[1341,333],[1342,333],[1343,333],[1344,333],[1346,333],[1345,333],[1347,333],[1349,333],[1348,333],[1350,333],[1351,333],[1352,333],[1353,333],[1354,333],[1355,333],[1356,333],[1357,333],[1358,333],[1360,333],[1359,333],[1361,333],[1362,333],[1363,333],[1364,333],[1365,333],[1366,333],[1367,333],[1368,333],[1369,333],[1370,333],[1371,333],[1372,333],[1373,333],[1374,333],[1375,333],[1377,333],[1376,333],[1380,333],[1381,333],[1382,333],[1383,333],[1384,333],[1385,333],[1386,333],[1387,333],[1388,333],[1389,333],[1390,333],[1391,333],[1392,333],[1393,333],[1394,333],[1395,333],[1396,333],[1397,333],[1398,333],[1399,333],[1400,333],[1401,333],[1402,333],[1403,333],[1404,333],[1378,333],[1405,333],[1379,333],[1406,333],[1407,333],[1408,333],[1409,333],[1410,333],[1411,333],[1412,333],[1413,333],[1414,333],[1415,333],[1416,333],[1417,333],[1418,333],[1419,333],[1420,333],[1421,333],[1422,333],[1423,333],[1424,333],[1425,333],[1426,333],[1427,333],[1428,333],[1429,333],[1430,333],[1431,333],[1432,333],[1433,333],[1434,333],[1435,333],[1436,333],[1437,333],[1438,333],[1439,333],[1440,333],[1441,333],[1442,333],[1443,333],[1444,333],[1451,333],[1452,333],[1445,333],[1453,333],[1446,333],[1447,333],[1448,333],[1449,333],[1450,333],[1454,333],[1455,333],[1459,333],[1456,333],[1460,333],[1457,333],[1458,333],[1461,333],[1462,333],[1463,333],[1464,333],[1465,333],[1466,333],[1467,333],[1468,333],[1469,333],[1470,333],[1471,333],[1472,333],[1473,333],[1474,333],[1475,333],[1476,333],[1477,333],[1478,333],[1479,333],[1481,333],[1480,333],[1482,333],[1483,333],[1484,333],[1485,333],[1486,333],[1489,333],[1487,333],[1488,333],[1490,333],[1491,333],[1492,333],[1493,333],[1494,333],[1495,333],[1496,333],[1497,333],[1498,333],[1499,333],[1500,333],[1501,333],[1502,333],[1503,333],[1505,333],[1504,333],[1507,333],[1508,333],[1506,333],[1510,333],[1509,333],[1511,333],[1513,333],[1512,333],[1514,333],[1515,333],[1516,333],[1517,333],[1518,333],[1519,333],[1520,333],[1521,333],[1522,333],[1523,333],[1524,333],[1525,333],[1526,333],[1527,333],[1529,333],[1530,333],[1528,333],[1531,333],[1532,333],[1533,333],[1534,333],[1535,333],[1536,333],[1537,333],[1538,333],[1539,333],[1540,333],[1541,333],[1542,333],[1543,333],[1544,333],[1545,333],[1546,333],[1547,333],[1548,333],[1549,333],[1550,333],[1551,333],[1552,333],[1553,333],[1554,333],[1555,333],[1556,333],[1557,333],[1558,333],[1559,333],[1560,333],[1561,333],[1562,333],[1563,333],[1564,333],[1565,333],[1566,333],[1567,333],[1568,333],[1569,333],[1570,333],[1571,333],[1572,333],[1573,333],[1574,333],[1576,333],[1577,333],[1578,333],[1579,333],[1580,333],[1584,333],[1581,333],[1582,333],[1583,333],[1575,333],[1585,333],[1586,333],[1587,333],[1588,333],[1589,333],[1590,333],[1591,333],[1592,333],[1593,333],[1594,333],[1595,333],[1596,333],[1597,333],[1598,333],[1599,333],[1600,333],[1601,333],[1602,333],[1603,333],[1604,333],[1605,333],[1606,333],[1607,333],[1608,333],[1609,333],[1610,333],[1611,333],[1612,333],[1613,333],[1614,333],[1615,333],[1616,333],[1617,333],[1618,333],[1623,333],[1619,333],[1620,333],[1621,333],[1622,333],[1624,333],[1625,333],[1626,333],[1627,333],[1628,333],[1629,333],[1630,333],[1631,333],[1632,333],[1633,333],[1634,333],[1635,333],[1636,333],[1637,333],[1638,333],[1639,333],[1640,333],[1641,333],[1642,333],[1643,333],[1644,333],[1645,333],[1646,333],[1647,333],[1648,333],[1650,333],[1651,333],[1652,333],[1653,333],[1649,333],[1655,333],[1654,333],[1656,333],[1657,333],[1658,333],[1659,333],[1660,333],[1661,333],[1662,333],[1663,333],[1664,333],[1665,333],[1666,333],[1671,333],[1667,333],[1668,333],[1669,333],[1670,333],[1672,333],[1674,333],[1675,333],[1676,333],[1673,333],[1677,333],[1678,333],[1679,333],[1680,333],[1681,333],[1682,333],[1683,333],[1684,333],[1685,333],[1686,333],[1687,333],[1688,333],[1689,333],[1690,333],[1691,333],[1692,333],[1693,333],[1694,333],[1695,333],[1696,333],[1708,333],[1697,333],[1698,333],[1699,333],[1700,333],[1701,333],[1702,333],[1703,333],[1704,333],[1705,333],[1706,333],[1707,333],[1709,333],[1710,333],[1711,333],[1712,333],[1713,333],[1714,333],[1715,333],[1716,333],[1717,333],[1718,333],[1719,333],[1720,333],[1721,333],[1722,333],[1723,333],[1726,333],[1724,333],[1725,333],[1727,333],[1728,333],[1729,333],[1730,333],[1731,333],[1732,333],[1733,333],[1735,333],[1734,333],[1736,333],[1737,333],[1738,333],[1739,333],[1740,333],[1741,333],[1742,333],[1743,333],[1744,333],[1745,333],[1746,333],[1756,333],[1747,333],[1748,333],[1749,333],[1750,333],[1751,333],[1752,333],[1753,333],[1754,333],[1755,333],[1757,333],[1758,333],[1759,333],[1760,333],[1761,333],[1762,333],[1763,333],[1764,333],[1765,333],[1766,333],[1767,333],[1768,333],[1769,333],[1770,333],[1771,333],[1772,333],[1773,333],[1774,333],[1775,333],[1776,333],[1777,333],[1778,333],[1779,333],[1780,333],[1781,333],[1782,333],[1783,333],[1784,333],[1785,333],[1786,333],[1787,333],[1788,333],[1789,333],[1790,333],[1793,333],[1794,333],[1795,333],[1791,333],[1792,333],[1796,333],[1797,333],[1798,333],[1799,333],[1800,333],[1801,333],[1802,333],[1803,333],[1804,333],[1805,333],[1806,333],[1807,333],[1808,333],[1809,333],[1810,333],[1811,333],[1812,333],[1813,333],[1814,333],[1815,333],[1816,333],[1817,333],[1818,333],[1819,333],[1820,333],[1821,333],[1822,333],[1823,333],[1824,333],[1825,333],[1826,333],[1827,333],[1828,333],[1829,333],[1832,333],[1830,333],[1831,333],[1848,333],[1849,333],[1833,333],[1834,333],[1835,333],[1836,333],[1837,333],[1838,333],[1839,333],[1840,333],[1841,333],[1850,333],[1852,333],[1842,333],[1851,333],[1843,333],[1844,333],[1845,333],[1846,333],[1847,333],[1853,333],[1854,333],[1855,333],[1856,333],[1857,333],[1858,333],[1859,333],[1860,333],[1861,333],[1862,333],[1867,333],[1863,333],[1864,333],[1865,333],[1866,333],[1868,333],[1869,333],[1870,333],[1871,333],[1872,333],[1873,333],[1874,333],[1875,333],[1876,333],[1877,333],[1878,333],[1879,333],[1880,333],[1881,333],[1882,333],[1883,333],[1884,333],[1885,333],[1886,333],[1887,333],[1888,333],[1889,333],[1890,333],[1891,333],[1892,333],[1893,333],[1895,333],[1894,333],[1896,333],[2614,337],[1897,333],[1898,333],[1899,333],[1900,333],[1903,333],[1901,333],[1902,333],[1904,333],[1905,333],[1906,333],[1907,333],[1908,333],[1909,333],[1910,333],[1911,333],[1913,333],[1914,333],[1912,333],[1915,333],[1916,333],[1917,333],[1918,333],[1919,333],[1920,333],[1921,333],[1922,333],[1923,333],[1924,333],[1925,333],[1926,333],[1927,333],[1928,333],[1929,333],[1930,333],[1931,333],[1932,333],[1933,333],[1934,333],[1935,333],[1936,333],[1938,333],[1937,333],[1939,333],[1940,333],[1941,333],[1942,333],[1943,333],[1944,333],[1949,333],[1945,333],[1946,333],[1947,333],[1948,333],[1950,333],[1951,333],[1952,333],[1953,333],[1954,333],[1955,333],[1956,333],[1957,333],[1958,333],[1959,333],[1960,333],[1961,333],[1969,333],[1962,333],[1963,333],[1964,333],[1965,333],[1966,333],[1967,333],[1968,333],[1970,333],[1971,333],[1972,333],[1973,333],[1974,333],[1975,333],[1976,333],[1977,333],[1979,333],[1978,333],[1980,333],[1981,333],[1983,333],[1982,333],[1984,333],[1985,333],[1986,333],[1987,333],[1988,333],[1989,333],[1990,333],[1991,333],[1992,333],[1993,333],[1994,333],[1995,333],[1996,333],[1997,333],[1998,333],[1999,333],[2000,333],[2001,333],[2002,333],[2003,333],[2004,333],[2005,333],[2006,333],[2007,333],[2008,333],[2009,333],[2010,333],[2011,333],[2012,333],[2013,333],[2014,333],[2015,333],[2016,333],[2017,333],[2018,333],[2020,333],[2019,333],[2021,333],[2022,333],[2023,333],[2024,333],[2025,333],[2026,333],[2027,333],[2028,333],[2029,333],[2030,333],[2031,333],[2032,333],[2033,333],[2034,333],[2035,333],[2037,333],[2036,333],[2038,333],[2039,333],[2040,333],[2041,333],[2042,333],[2043,333],[2044,333],[2045,333],[2046,333],[2047,333],[2052,333],[2054,333],[2053,333],[2056,333],[2057,333],[2055,333],[2048,333],[2058,333],[2059,333],[2049,333],[2050,333],[2051,333],[2060,333],[2061,333],[2062,333],[2063,333],[2064,333],[2065,333],[2066,333],[2067,333],[2068,333],[2069,333],[2070,333],[2071,333],[2072,333],[2073,333],[2074,333],[2075,333],[2076,333],[2077,333],[2078,333],[2079,333],[2080,333],[2081,333],[2082,333],[2083,333],[2084,333],[2085,333],[2086,333],[2087,333],[2088,333],[2089,333],[2090,333],[2091,333],[2092,333],[2093,333],[2094,333],[2095,333],[2096,333],[2097,333],[2098,333],[2099,333],[2100,333],[2101,333],[2102,333],[2103,333],[2104,333],[2105,333],[2106,333],[2107,333],[2108,333],[2109,333],[2110,333],[2114,333],[2115,333],[2111,333],[2112,333],[2113,333],[2116,333],[2117,333],[2118,333],[2119,333],[2120,333],[2121,333],[2122,333],[2123,333],[2124,333],[2125,333],[2126,333],[2127,333],[2128,333],[2131,333],[2132,333],[2133,333],[2134,333],[2135,333],[2136,333],[2137,333],[2138,333],[2129,333],[2130,333],[2139,333],[2140,333],[2141,333],[2142,333],[2144,333],[2143,333],[2146,333],[2145,333],[2147,333],[2148,333],[2149,333],[2150,333],[2151,333],[2152,333],[2153,333],[2154,333],[2155,333],[2156,333],[2157,333],[2158,333],[2159,333],[2160,333],[2161,333],[2162,333],[2163,333],[2164,333],[2165,333],[2166,333],[2167,333],[2168,333],[2169,333],[2170,333],[2171,333],[2172,333],[2173,333],[2174,333],[2175,333],[2177,333],[2176,333],[2178,333],[2179,333],[2180,333],[2181,333],[2182,333],[2183,333],[2184,333],[2185,333],[2186,333],[2187,333],[2189,333],[2188,333],[2190,333],[2191,333],[2192,333],[2193,333],[2194,333],[2195,333],[2196,333],[2197,333],[2198,333],[2199,333],[2200,333],[2201,333],[2202,333],[2203,333],[2204,333],[2205,333],[2206,333],[2207,333],[2208,333],[2209,333],[2210,333],[2211,333],[2212,333],[2213,333],[2214,333],[2215,333],[2216,333],[2217,333],[2218,333],[2219,333],[2220,333],[2221,333],[2222,333],[2223,333],[2224,333],[2225,333],[2226,333],[2227,333],[2229,333],[2228,333],[2230,333],[2231,333],[2232,333],[2233,333],[2234,333],[2235,333],[2236,333],[2237,333],[2238,333],[2239,333],[2240,333],[2241,333],[2242,333],[2243,333],[2244,333],[2245,333],[2246,333],[2247,333],[2248,333],[2249,333],[2250,333],[2251,333],[2252,333],[2253,333],[2254,333],[2255,333],[2256,333],[2257,333],[2258,333],[2259,333],[2260,333],[2261,333],[2262,333],[2263,333],[2264,333],[2265,333],[2266,333],[2267,333],[2268,333],[2269,333],[2270,333],[2271,333],[2272,333],[2273,333],[2274,333],[2275,333],[2276,333],[2279,333],[2277,333],[2278,333],[2280,333],[2281,333],[2282,333],[2283,333],[2284,333],[2285,333],[2286,333],[2287,333],[2288,333],[2289,333],[2290,333],[2291,333],[2292,333],[2293,333],[2294,333],[2295,333],[2296,333],[2297,333],[2298,333],[2299,333],[2300,333],[2301,333],[2302,333],[2303,333],[2304,333],[2305,333],[2307,333],[2306,333],[2308,333],[2309,333],[2310,333],[2311,333],[2314,333],[2312,333],[2313,333],[2315,333],[2316,333],[2317,333],[2318,333],[2319,333],[2320,333],[2321,333],[2322,333],[2323,333],[2324,333],[2325,333],[2326,333],[2327,333],[2328,333],[2331,333],[2329,333],[2330,333],[2332,333],[2333,333],[2334,333],[2335,333],[2336,333],[2337,333],[2338,333],[2339,333],[2340,333],[2341,333],[2342,333],[2343,333],[2344,333],[2345,333],[2346,333],[2347,333],[2348,333],[2349,333],[2350,333],[2351,333],[2352,333],[2353,333],[2354,333],[2355,333],[2356,333],[2357,333],[2358,333],[2359,333],[2360,333],[2361,333],[2362,333],[2363,333],[2364,333],[2366,333],[2365,333],[2367,333],[2368,333],[2369,333],[2370,333],[2371,333],[2372,333],[2373,333],[2374,333],[2375,333],[2376,333],[2379,333],[2377,333],[2378,333],[2380,333],[2381,333],[2382,333],[2383,333],[2384,333],[2385,333],[2386,333],[2387,333],[2389,333],[2388,333],[2390,333],[2391,333],[2392,333],[2393,333],[2394,333],[2395,333],[2396,333],[2397,333],[2398,333],[2399,333],[2400,333],[2401,333],[2402,333],[2403,333],[2404,333],[2405,333],[2406,333],[2407,333],[2408,333],[2409,333],[2410,333],[2411,333],[2412,333],[2413,333],[2414,333],[2415,333],[2416,333],[2418,333],[2417,333],[2419,333],[2420,333],[2421,333],[2422,333],[2423,333],[2424,333],[2425,333],[2426,333],[2428,333],[2429,333],[2430,333],[2431,333],[2432,333],[2433,333],[2434,333],[2435,333],[2436,333],[2437,333],[2438,333],[2439,333],[2440,333],[2441,333],[2442,333],[2443,333],[2445,333],[2446,333],[2447,333],[2448,333],[2449,333],[2444,333],[2450,333],[2468,333],[2451,333],[2452,333],[2453,333],[2454,333],[2455,333],[2456,333],[2457,333],[2458,333],[2459,333],[2460,333],[2461,333],[2462,333],[2463,333],[2464,333],[2465,333],[2466,333],[2467,333],[2469,333],[2470,333],[2471,333],[2472,333],[2473,333],[2474,333],[2475,333],[2476,333],[2477,333],[2478,333],[2479,333],[2480,333],[2481,333],[2483,333],[2482,333],[2484,333],[2485,333],[2486,333],[2487,333],[2488,333],[2489,333],[2490,333],[2491,333],[2492,333],[2493,333],[2494,333],[2495,333],[2496,333],[2497,333],[2498,333],[2499,333],[2500,333],[2501,333],[2502,333],[2503,333],[2504,333],[2505,333],[2506,333],[2507,333],[2510,333],[2508,333],[2509,333],[2511,333],[2512,333],[2513,333],[2514,333],[2515,333],[2516,333],[2517,333],[2518,333],[2519,333],[2520,333],[2521,333],[2522,333],[2523,333],[2524,333],[2525,333],[2427,333],[2526,333],[2527,333],[2528,333],[2529,333],[2530,333],[2531,333],[2532,333],[2533,333],[2534,333],[2535,333],[2536,333],[2537,333],[2538,333],[2539,333],[2540,333],[2541,333],[2542,333],[2543,333],[2544,333],[2545,333],[2546,333],[2547,333],[2548,333],[2549,333],[2550,333],[2554,333],[2555,333],[2551,333],[2552,333],[2556,333],[2553,333],[2557,333],[2558,333],[2559,333],[2560,333],[2561,333],[2562,333],[2563,333],[2564,333],[2565,333],[2566,333],[2567,333],[2568,333],[2569,333],[2570,333],[2571,333],[2572,333],[2573,333],[2574,333],[2575,333],[2576,333],[2577,333],[2578,333],[2579,333],[2580,333],[2581,333],[2586,333],[2587,333],[2588,333],[2582,333],[2583,333],[2584,333],[2585,333],[2589,333],[2590,333],[2591,333],[2592,333],[2593,333],[2594,333],[2595,333],[2596,333],[2597,333],[2598,333],[2599,333],[2600,333],[2601,333],[2602,333],[2603,333],[2604,333],[2605,333],[2606,333],[2607,333],[2608,333],[2609,333],[2610,333],[2611,333],[2612,333],[2613,333],[6064,338],[5607,1],[851,339],[852,340],[849,341],[850,342],[772,40],[856,343],[857,344],[855,345],[864,346],[868,347],[869,40],[866,348],[867,349],[870,350],[865,351],[767,40],[501,352],[500,352],[499,353],[502,354],[883,355],[880,40],[882,356],[884,357],[881,40],[834,358],[836,359],[835,360],[833,1],[557,361],[561,361],[559,361],[560,361],[555,362],[563,362],[564,363],[556,364],[558,361],[562,361],[554,1],[553,365],[565,365],[893,365],[527,366],[528,367],[526,1],[899,40],[904,368],[905,369],[902,40],[900,370],[901,371],[903,372],[932,373],[931,374],[912,375],[914,376],[913,375],[911,377],[909,1],[944,378],[942,40],[943,379],[782,40],[783,380],[784,381],[778,382],[779,383],[780,380],[781,380],[777,380],[926,384],[930,385],[925,1],[928,386],[927,384],[929,384],[534,40],[531,387],[533,388],[535,389],[530,40],[532,40],[946,40],[947,390],[735,391],[733,392],[732,393],[734,393],[529,1],[552,394],[547,395],[549,396],[548,397],[550,397],[551,397],[542,398],[541,1],[540,40],[963,399],[959,400],[958,1],[961,401],[962,401],[960,402],[1072,403],[1071,40],[536,404],[538,405],[537,1],[977,40],[745,406],[749,407],[744,408],[750,409],[742,40],[746,410],[747,410],[748,411],[743,412],[994,413],[990,413],[991,414],[995,415],[989,40],[992,40],[993,416],[1011,40],[1012,417],[1014,40],[758,1],[761,418],[764,419],[762,40],[763,420],[771,421],[760,422],[759,1],[765,423],[766,424],[768,425],[769,423],[770,426],[837,427],[842,428],[841,429],[839,430],[840,40],[838,431],[922,432],[919,375],[921,433],[920,433],[573,434],[574,435],[802,436],[806,437],[804,438],[801,434],[805,439],[803,439],[1039,440],[1035,441],[1036,442],[1038,443],[1037,444],[1026,445],[1027,40],[1031,446],[1025,447],[1028,441],[1029,448],[1030,441],[544,449],[546,450],[539,40],[543,451],[545,452],[1041,453],[1043,454],[814,40],[1042,455],[910,1],[497,1],[496,40],[498,456],[736,40],[739,457],[737,40],[741,458],[740,40],[738,40],[6627,459],[6626,1],[4330,1],[4337,1],[4359,460],[4338,461],[4340,462],[4341,463],[4342,1],[4343,1],[4345,464],[4344,465],[4347,466],[4346,463],[4348,463],[4350,467],[4339,465],[4351,463],[4352,463],[4355,468],[4353,463],[4354,463],[4356,1],[4357,1],[4358,465],[4349,463],[4332,469],[4331,1],[4334,470],[4333,471],[4336,472],[4335,471],[7381,1],[7378,1],[7380,1],[7382,1],[7379,1],[7383,1],[7384,1],[7385,473],[7377,474],[7376,474],[7374,1],[7375,475],[4432,476],[4434,477],[4441,478],[4435,479],[4436,1],[4437,476],[4438,479],[4433,1],[4440,479],[4431,1],[4439,1],[5339,480],[5346,481],[5336,482],[5345,40],[5343,482],[5337,480],[5338,80],[5329,482],[5327,483],[5344,484],[5340,483],[5342,482],[5341,483],[5335,483],[5334,482],[5328,482],[5330,485],[5332,482],[5333,482],[5331,482],[5396,486],[5395,487],[5394,1],[8375,1],[8377,488],[8378,488],[8379,1],[8380,1],[8382,489],[8383,1],[8384,1],[8385,488],[8386,1],[8387,1],[8388,490],[8389,1],[8390,1],[8391,491],[8392,1],[8393,492],[6620,1],[8394,1],[8395,1],[8396,1],[8397,1],[6679,493],[8376,1],[6621,494],[8398,1],[6678,1],[8399,1],[8400,488],[8401,495],[8402,496],[8381,1],[6162,1],[5558,497],[5557,1],[5840,1],[7613,498],[9108,498],[5560,499],[5561,500],[5559,501],[5562,502],[5563,503],[5564,504],[5565,505],[5566,506],[5567,507],[5568,508],[5569,509],[5570,510],[8033,498],[5821,498],[8818,498],[5571,511],[8765,498],[7593,498],[5572,498],[7614,498],[137,1],[138,512],[139,1],[98,513],[140,1],[141,1],[142,1],[93,1],[96,514],[94,1],[95,1],[143,1],[144,1],[145,1],[146,1],[147,1],[148,1],[149,1],[151,1],[150,1],[152,1],[153,1],[154,1],[136,515],[97,1],[155,1],[156,1],[157,1],[189,516],[158,1],[159,1],[160,1],[161,1],[162,1],[163,1],[164,1],[165,1],[166,1],[167,1],[168,1],[169,1],[170,517],[171,1],[173,1],[172,1],[174,1],[175,1],[176,518],[177,1],[178,1],[179,1],[180,1],[181,1],[182,1],[183,1],[184,1],[185,1],[186,1],[187,1],[188,1],[7669,1],[7670,519],[7671,1],[7630,520],[7672,1],[7673,1],[7674,1],[7625,1],[7628,521],[7626,1],[7627,1],[7675,1],[7676,1],[7677,1],[7678,1],[7679,1],[7680,1],[7681,1],[7683,1],[7682,1],[7684,1],[7685,1],[7686,1],[7668,522],[7629,1],[7687,1],[7688,1],[7689,1],[7721,523],[7690,1],[7691,1],[7692,1],[7693,1],[7694,1],[7695,1],[7696,1],[7697,1],[7698,1],[7699,1],[7700,1],[7701,1],[7702,524],[7703,1],[7705,1],[7704,1],[7706,1],[7707,1],[7708,1],[7709,1],[7710,1],[7711,1],[7712,1],[7713,1],[7714,1],[7715,1],[7716,1],[7717,1],[7718,1],[7719,1],[7720,1],[7722,525],[5544,1],[193,526],[349,40],[194,527],[192,40],[350,528],[5356,40],[8304,126],[8683,40],[190,529],[347,1],[191,530],[82,1],[84,531],[346,40],[257,40],[5677,1],[971,40],[714,532],[715,40],[513,533],[503,534],[504,40],[505,1],[506,535],[507,40],[508,1],[509,40],[510,40],[511,1],[512,1],[751,114],[716,536],[492,1],[723,537],[494,1],[493,40],[525,40],[820,538],[821,539],[636,540],[495,541],[637,540],[514,542],[515,40],[516,543],[638,544],[518,545],[517,40],[519,546],[639,540],[1055,547],[1054,548],[1057,549],[640,540],[1056,550],[1058,551],[1059,552],[1061,553],[1060,554],[1062,555],[1063,556],[641,540],[1064,40],[642,540],[822,557],[825,558],[823,559],[824,40],[643,540],[827,560],[826,561],[828,562],[644,540],[524,563],[522,564],[523,565],[729,566],[646,567],[645,544],[831,568],[832,569],[830,570],[653,571],[845,572],[846,40],[847,542],[848,573],[654,540],[1066,574],[655,540],[854,575],[853,576],[656,544],[773,577],[775,578],[774,579],[776,580],[657,581],[1067,582],[859,583],[858,40],[860,584],[658,544],[871,585],[873,586],[874,587],[872,588],[659,540],[1048,589],[1047,40],[1049,590],[1050,591],[521,40],[730,592],[728,593],[875,594],[829,595],[652,596],[651,597],[650,598],[876,542],[878,599],[877,600],[660,540],[879,601],[661,544],[885,602],[886,603],[662,540],[794,604],[793,605],[795,606],[664,607],[731,542],[665,1],[1068,608],[887,609],[666,540],[888,610],[891,611],[889,612],[892,613],[890,614],[667,540],[894,615],[895,616],[571,617],[722,618],[572,619],[720,620],[896,365],[570,621],[897,622],[721,616],[898,623],[569,624],[668,544],[566,625],[935,626],[934,554],[669,540],[907,627],[906,628],[670,581],[1089,629],[933,630],[672,631],[671,632],[908,40],[924,633],[915,634],[916,635],[917,636],[918,637],[673,638],[647,540],[923,639],[1070,640],[1069,40],[786,40],[674,544],[937,641],[938,642],[936,542],[675,544],[819,643],[818,644],[941,645],[940,646],[939,647],[676,540],[945,648],[677,632],[792,649],[785,650],[788,651],[787,652],[789,40],[790,653],[678,544],[791,654],[950,655],[520,542],[948,656],[679,544],[949,657],[1052,658],[953,659],[1051,660],[951,661],[952,662],[680,540],[1053,663],[957,664],[954,542],[955,665],[681,581],[956,666],[796,667],[753,668],[682,632],[756,669],[757,670],[683,540],[755,671],[754,672],[684,673],[816,674],[815,542],[685,540],[965,675],[964,676],[686,540],[967,677],[970,678],[966,679],[968,677],[969,680],[687,540],[1073,681],[688,581],[976,682],[689,544],[1074,582],[978,683],[690,540],[752,684],[691,685],[648,544],[980,686],[981,686],[979,542],[983,687],[988,688],[984,686],[982,686],[985,40],[987,689],[692,540],[986,40],[996,690],[693,540],[998,691],[997,692],[999,40],[1000,693],[694,540],[798,542],[695,540],[1005,694],[1002,695],[1003,696],[1001,696],[1004,696],[696,540],[1008,697],[1010,698],[1007,699],[697,540],[1009,697],[1006,40],[1013,700],[698,544],[663,701],[649,702],[1015,703],[699,540],[1016,704],[1017,705],[797,704],[1019,706],[800,707],[799,708],[700,540],[1018,709],[844,710],[701,540],[843,711],[1020,40],[1021,542],[1022,712],[702,544],[630,713],[1076,714],[615,715],[711,716],[712,717],[713,718],[610,1],[611,1],[614,719],[612,1],[613,1],[608,1],[609,720],[635,721],[1075,532],[629,84],[628,1],[631,722],[633,581],[632,723],[634,724],[727,725],[1024,726],[703,540],[1023,727],[719,728],[717,729],[704,673],[718,40],[1078,730],[807,731],[1077,732],[705,673],[811,733],[813,734],[808,1],[809,735],[812,40],[810,736],[706,540],[1040,737],[708,738],[1033,739],[1034,740],[707,581],[1032,741],[1080,742],[1085,743],[1081,744],[1082,744],[709,540],[1083,744],[1084,744],[1079,733],[1045,745],[1046,746],[817,747],[710,540],[1044,748],[1087,749],[1086,1],[1088,40],[6447,40],[6286,750],[6287,40],[6187,751],[6176,534],[6177,40],[6178,1],[6180,752],[6181,40],[6182,1],[6183,40],[6184,40],[6185,1],[6186,1],[6307,114],[6288,753],[6188,1],[6296,754],[6351,1],[6179,40],[6190,40],[6346,755],[6347,756],[6208,757],[6352,758],[6209,757],[6348,759],[6349,40],[6350,760],[6210,761],[6354,762],[6353,40],[6355,763],[6211,757],[6411,764],[6410,765],[6413,766],[6212,757],[6412,767],[6414,768],[6415,769],[6417,770],[6416,771],[6418,772],[6419,773],[6213,757],[6420,40],[6214,757],[6356,774],[6359,775],[6357,776],[6358,40],[6215,757],[6361,777],[6360,778],[6362,779],[6216,757],[6302,780],[6300,781],[6301,782],[6303,783],[6218,784],[6217,761],[6365,785],[6366,786],[6364,787],[6225,788],[6369,789],[6370,40],[6371,759],[6372,790],[6226,757],[6421,574],[6227,757],[6374,791],[6373,792],[6228,761],[6314,793],[6316,794],[6315,795],[6317,796],[6229,797],[6422,798],[6376,799],[6375,40],[6377,800],[6230,761],[6378,801],[6380,802],[6381,803],[6379,804],[6231,757],[6514,805],[6513,40],[6515,806],[6516,807],[6297,40],[6304,808],[6299,809],[6382,810],[6363,811],[6224,812],[6223,813],[6222,814],[6383,759],[6385,815],[6384,816],[6232,757],[6386,817],[6233,761],[6387,818],[6388,819],[6234,757],[6327,820],[6326,821],[6328,822],[6236,823],[6305,759],[6237,1],[6423,824],[6389,825],[6238,757],[6390,826],[6393,827],[6391,828],[6394,829],[6392,830],[6239,757],[6519,831],[6520,832],[6518,833],[6295,834],[6191,835],[6293,836],[6521,365],[6517,837],[6522,838],[6294,616],[6523,839],[6292,624],[6240,761],[6189,840],[6509,841],[6405,771],[6241,757],[6396,842],[6395,843],[6242,797],[6508,844],[6404,845],[6244,846],[6243,847],[6397,40],[6403,848],[6398,849],[6399,850],[6400,851],[6401,852],[6245,853],[6219,757],[6402,854],[6425,855],[6424,40],[6319,40],[6246,761],[6511,856],[6512,857],[6510,759],[6247,761],[6345,858],[6344,859],[6428,860],[6427,861],[6426,862],[6248,757],[6429,863],[6249,847],[6325,864],[6318,650],[6321,865],[6320,866],[6322,40],[6323,653],[6250,761],[6324,867],[6432,868],[6406,759],[6430,869],[6251,761],[6431,870],[6407,871],[6435,872],[6306,873],[6433,874],[6434,875],[6252,757],[6408,876],[6438,877],[6409,759],[6436,878],[6253,797],[6437,879],[6329,880],[6309,881],[6254,847],[6312,882],[6313,883],[6255,757],[6311,884],[6310,885],[6256,886],[6342,887],[6341,759],[6257,757],[6440,888],[6439,889],[6258,757],[6442,890],[6445,891],[6441,892],[6443,890],[6444,893],[6259,757],[6446,894],[6260,797],[6448,895],[6261,761],[6449,798],[6450,896],[6262,757],[6308,897],[6263,898],[6220,544],[6452,899],[6453,899],[6451,759],[6455,900],[6460,901],[6456,899],[6454,899],[6457,40],[6459,902],[6264,757],[6458,40],[6461,903],[6265,757],[6463,904],[6462,905],[6464,40],[6465,906],[6266,757],[6331,759],[6267,757],[6470,907],[6467,908],[6468,909],[6466,909],[6469,909],[6268,757],[6473,910],[6475,911],[6472,912],[6269,757],[6474,910],[6471,40],[6476,913],[6270,761],[6235,914],[6221,915],[6477,916],[6271,757],[6478,917],[6479,918],[6330,917],[6481,919],[6333,920],[6332,921],[6272,757],[6480,922],[6368,923],[6273,757],[6367,924],[6482,40],[6483,759],[6484,925],[6274,761],[6202,926],[6486,927],[6199,928],[6283,929],[6284,930],[6285,931],[6194,1],[6195,1],[6198,932],[6196,1],[6197,1],[6192,1],[6193,933],[6207,934],[6485,750],[6201,84],[6200,1],[6203,935],[6205,797],[6204,936],[6206,937],[6298,938],[6488,939],[6275,757],[6487,940],[6291,941],[6289,942],[6276,886],[6290,40],[6490,943],[6334,944],[6489,945],[6277,886],[6338,946],[6340,947],[6335,1],[6336,948],[6339,40],[6337,949],[6278,757],[6494,950],[6280,951],[6492,952],[6493,953],[6279,797],[6491,954],[6496,955],[6501,956],[6497,957],[6498,957],[6281,757],[6499,957],[6500,957],[6495,946],[6503,958],[6504,959],[6343,960],[6282,757],[6502,961],[6506,962],[6505,1],[6507,40],[5812,1],[7363,1],[4475,1],[567,1],[6111,1],[83,1],[586,1],[8522,963],[8518,1],[8519,1],[8517,1],[8520,1],[8521,1],[8523,1],[8515,1],[8516,964],[8524,965],[726,966],[725,967],[724,1],[4309,968],[6104,969],[6105,970],[4310,971],[6706,1],[7589,1],[8373,972],[5678,972],[7954,1],[8019,973],[5690,1],[6896,974],[6897,975],[4482,1],[7548,976],[4148,976],[4149,977],[4150,978],[4483,979],[4487,980],[4485,981],[4486,981],[4484,979],[4453,1],[4458,982],[4454,983],[4455,984],[4456,984],[4457,984],[4442,985],[4443,986],[4147,987],[4146,988],[4142,989],[4145,990],[4143,991],[4144,991],[4417,992],[4415,987],[4416,987],[4414,987],[4413,993],[4418,994],[4141,995],[4139,996],[4137,997],[4138,998],[4140,997],[4412,999],[4401,976],[4405,1000],[4411,976],[4407,976],[4400,976],[4410,976],[4399,1000],[4406,1000],[4398,1],[4403,976],[4408,976],[4402,976],[4404,976],[4409,976],[4317,1001],[4315,1],[4316,1],[4325,1002],[4323,1],[4324,1],[6100,1003],[5447,1004],[5448,1005],[5461,1006],[5464,1007],[5459,1],[5462,1],[5463,1006],[5460,1008],[5467,1009],[5449,1010],[5442,1011],[5445,1012],[5441,1013],[5450,1014],[5446,1015],[5443,1016],[5451,280],[5439,1017],[5452,1018],[5444,1],[5453,1019],[5454,1020],[5455,1021],[5437,1022],[5456,1014],[5457,1023],[5440,1024],[5458,1025],[5438,1023],[5465,1],[5466,1],[5997,40],[5391,40],[5920,1],[5679,1],[8374,1026],[8446,1027],[8445,1028],[8443,1029],[8444,1027],[8447,1],[8527,1030],[8526,1],[8530,1031],[8528,1032],[8372,1033],[8529,1034],[8448,1035],[8525,1036],[8514,1037],[8450,1038],[8510,1038],[8451,1038],[8452,1038],[8453,1038],[8454,1038],[8507,1038],[8511,1038],[8455,1038],[8456,1038],[8457,1038],[8458,1038],[8459,1038],[8460,1038],[8512,1038],[8461,1038],[8462,1038],[8506,1038],[8463,1038],[8464,1038],[8465,1038],[8466,1038],[8467,1038],[8468,1038],[8469,1038],[8470,1038],[8471,1038],[8472,1038],[8473,1038],[8474,1038],[8509,1038],[8475,1038],[8476,1038],[8477,1038],[8478,1038],[8479,1038],[8480,1038],[8513,1038],[8481,1038],[8482,1038],[8483,1038],[8484,1038],[8485,1038],[8486,1038],[8508,1038],[8487,1038],[8488,1038],[8489,1038],[8490,1038],[8491,1038],[8492,1038],[8493,1038],[8494,1038],[8495,1038],[8496,1038],[8497,1038],[8498,1038],[8499,1038],[8500,1038],[8501,1038],[8502,1038],[8503,1038],[8504,1038],[8505,1038],[8449,1039],[8441,1040],[8442,1041],[6895,1042],[6894,1],[6898,1043],[91,1044],[437,1045],[442,1046],[444,1047],[215,1048],[243,1049],[420,1050],[238,1051],[226,1],[207,1],[213,1],[410,1052],[274,1053],[214,1],[379,1054],[248,1055],[249,1056],[345,1057],[407,1058],[362,1059],[414,1060],[415,1061],[413,1062],[412,1],[411,1063],[245,1064],[216,1065],[295,1],[296,1066],[211,1],[227,1067],[217,1068],[279,1067],[276,1067],[200,1067],[241,1069],[240,1],[419,1070],[429,1],[206,1],[321,1071],[322,1071],[316,40],[465,1],[324,1],[325,80],[317,1072],[471,1073],[469,1074],[464,1],[406,1075],[405,1],[463,1076],[318,40],[358,1077],[356,1078],[466,1],[470,1],[468,1079],[467,1],[357,1080],[458,1081],[461,40],[286,1082],[285,1083],[284,1084],[474,40],[283,1085],[268,1],[477,1],[7267,1086],[7266,1],[480,1],[479,40],[481,1087],[196,1],[416,1],[417,1088],[418,1089],[229,1],[205,1090],[195,1],[337,40],[198,1091],[336,1092],[335,1093],[326,1],[327,1],[334,1],[329,1],[332,1094],[328,1],[330,1095],[333,1096],[331,1095],[212,1],[203,1],[204,1067],[258,1097],[259,1098],[256,1099],[254,1100],[255,1101],[251,1],[343,80],[364,80],[436,1102],[445,1103],[449,1104],[423,1105],[422,1],[271,1],[482,1106],[432,1107],[319,1108],[320,1109],[311,1110],[301,1],[342,1111],[302,1112],[344,1113],[339,1114],[338,1],[340,1],[355,1115],[424,1116],[425,1117],[304,1118],[308,1119],[299,1120],[402,1121],[431,1122],[278,1123],[380,1124],[201,1],[430,1125],[197,1051],[252,1],[260,1126],[391,1127],[250,1],[390,1128],[92,1],[385,1129],[228,1],[297,1130],[381,1],[202,1],[261,1],[389,1131],[210,1],[266,1132],[307,1133],[421,1134],[306,1],[388,1],[253,1],[393,1135],[394,1136],[208,1],[396,1137],[398,1051],[397,1138],[231,1],[387,1],[400,1139],[386,1140],[392,1141],[219,1],[222,1],[220,1],[224,1],[221,1],[223,1],[225,1142],[218,1],[372,1143],[371,1],[377,1144],[373,1145],[376,1146],[375,1146],[378,1144],[374,1145],[265,1147],[365,1148],[428,1149],[484,1],[453,1150],[455,1151],[303,1],[454,1152],[426,1116],[483,1153],[323,1116],[209,1],[305,1154],[262,1155],[263,1156],[264,1157],[294,1158],[401,1158],[280,1158],[366,1159],[281,1159],[247,1160],[246,1],[370,1161],[369,1162],[368,1163],[367,1164],[427,1165],[315,1166],[352,1167],[314,1168],[348,1169],[351,1170],[409,1171],[408,1172],[404,1173],[361,1174],[363,1175],[360,1176],[399,1177],[354,1],[441,1],[353,1178],[403,1],[267,1179],[300,1],[298,1180],[269,1181],[272,1182],[478,1],[270,1183],[273,1183],[439,1],[438,1],[440,1],[476,1],[275,1184],[313,40],[90,1],[359,1185],[244,1],[233,1186],[309,1],[447,40],[457,1187],[293,40],[451,80],[292,1188],[434,1189],[291,1187],[199,1],[459,1190],[289,40],[290,40],[282,1],[232,1],[288,1191],[287,1192],[230,1193],[310,1],[277,1],[395,1],[383,1194],[382,1],[443,1],[341,1195],[312,40],[435,1196],[85,40],[88,1197],[89,1198],[86,40],[87,1],[242,1],[237,1199],[236,1],[235,1200],[234,1],[433,1201],[446,1202],[448,1203],[450,1204],[7268,1205],[452,1206],[456,1207],[490,1208],[460,1208],[489,1209],[462,1210],[472,1211],[473,1212],[475,1213],[485,1214],[488,1090],[487,1],[486,1215],[5844,1216],[5842,1217],[5841,1218],[5843,1217],[6061,1219],[6058,1],[6059,1219],[6060,1220],[6063,1221],[6062,1222],[6088,1223],[6086,1224],[6087,1225],[6075,1226],[6076,1224],[6083,1227],[6074,1228],[6079,1229],[6089,1],[6080,1230],[6085,1231],[6091,1232],[6090,1233],[6073,1234],[6081,1235],[6082,1236],[6077,1237],[6084,1223],[6078,1238],[6047,1],[8775,1239],[8774,40],[8778,1240],[8773,40],[8776,1],[8777,1241],[8779,1242],[6102,1243],[6689,1244],[6635,1245],[6682,1246],[6655,1247],[6652,1248],[6642,1249],[6703,1250],[6651,1251],[6637,1252],[6687,1253],[6686,1254],[6685,1255],[6641,1256],[6683,1257],[6684,1258],[6690,1259],[6698,1260],[6692,1260],[6700,1260],[6704,1260],[6691,1260],[6693,1260],[6696,1260],[6699,1260],[6695,1261],[6697,1260],[6701,1262],[6694,1262],[6618,1263],[6666,40],[6663,1262],[6668,40],[6659,1260],[6619,1260],[6632,1260],[6638,1264],[6662,1265],[6665,40],[6667,40],[6664,1266],[6615,40],[6614,40],[6681,40],[6710,1267],[6709,1268],[6711,1269],[6675,1270],[6674,1271],[6672,1272],[6673,1260],[6676,1273],[6677,1274],[6671,40],[6636,1275],[6616,1260],[6670,1260],[6631,1260],[6669,1260],[6639,1275],[6702,1260],[6629,1276],[6656,1277],[6630,1278],[6643,1279],[6628,1280],[6644,1281],[6645,1282],[6646,1278],[6648,1283],[6649,1284],[6688,1285],[6653,1286],[6634,1287],[6640,1288],[6650,1289],[6657,1290],[6617,1291],[6708,1],[6633,1292],[6654,1293],[6705,1],[6647,1],[6660,1],[6707,1294],[6658,1295],[6661,1],[6625,1296],[6623,1],[6624,1],[568,1297],[384,973],[6072,1],[9083,1298],[7496,1299],[7497,1299],[7498,1299],[7480,40],[7343,40],[9079,1300],[7339,1301],[9082,1302],[7340,1303],[7341,40],[7342,40],[7481,1304],[7345,1305],[7346,40],[7392,1306],[7393,1306],[7395,1307],[7396,1307],[7491,1307],[7397,1308],[7402,1309],[7403,1309],[7404,1310],[7405,40],[7406,40],[7407,1311],[7408,40],[7413,1312],[7414,1313],[7416,1314],[7417,40],[7419,1315],[7420,1316],[7421,1317],[7422,1318],[7423,40],[7424,1319],[7425,1319],[7426,1319],[7427,1319],[7428,1319],[7429,1319],[7430,1319],[7431,1319],[7432,1319],[7433,1319],[7434,1319],[7435,1318],[7494,1320],[7438,1321],[7439,1322],[7442,1323],[7344,1324],[7440,1325],[7501,1326],[7443,1327],[7500,1328],[7499,1325],[7445,1329],[7449,1330],[7450,1331],[7516,1332],[7503,1333],[7504,1333],[7505,1333],[7506,1333],[7507,1333],[7508,1333],[7509,1333],[7510,1333],[7511,1333],[7512,1333],[7447,1334],[7513,1333],[7514,1333],[7515,1333],[7446,40],[7452,1335],[7453,40],[7454,40],[7455,1336],[7456,1336],[7457,1336],[7460,1337],[7461,1336],[7462,1336],[7463,1338],[7464,1339],[7465,40],[7471,1340],[7466,40],[7467,40],[7468,40],[7469,40],[7470,40],[7472,1341],[7473,1341],[7474,1341],[7475,40],[7476,1339],[7477,1341],[7478,40],[7482,1342],[7484,1343],[9080,1344],[7485,1],[7490,1345],[9081,1300],[7492,1346],[7495,1347],[7502,1348],[7517,1349],[7356,1],[7352,1350],[7337,1351],[7349,1],[7348,1],[7358,1352],[7390,1353],[7389,1354],[7399,1355],[7400,1356],[7357,1357],[7410,1358],[7409,1359],[7360,1360],[7359,1360],[7361,1360],[7436,1361],[7362,1362],[7347,1352],[7388,1363],[7398,1364],[7371,1365],[7448,1366],[7372,1354],[7458,1367],[7373,1360],[7479,1368],[7386,1369],[7387,1370],[7355,1371],[7391,1372],[7401,1373],[7411,1374],[7412,1375],[7415,1376],[7418,1377],[7437,1378],[7493,1379],[7441,1380],[7444,1381],[7451,1382],[7459,1383],[7483,1384],[7394,1363],[7486,1385],[7338,1386],[7487,1387],[7488,1388],[7489,1389],[7370,1390],[7368,1391],[7367,1392],[7366,1392],[7369,1393],[7365,1394],[7350,1],[7335,1],[7364,1395],[7353,1],[7351,1396],[7336,1397],[7354,1398],[7588,1],[7586,1],[7590,1399],[7587,1400],[7591,1401],[6096,1402],[6094,1403],[6093,1],[6092,1],[6095,1404],[6101,40],[8433,1405],[8419,1406],[8430,1407],[8403,1],[8421,1408],[8420,1],[8422,1409],[8428,1410],[8427,1],[8404,1],[8425,1],[8426,1],[8412,1411],[8407,1],[8406,1412],[8405,1],[8414,1],[8431,1413],[8410,1411],[8413,1],[8418,1],[8411,1411],[8408,1412],[8409,1],[8415,1412],[8416,1412],[8429,1],[8424,1],[8432,1],[8423,1],[8434,1],[8417,1],[8435,1414],[8436,1414],[8440,1415],[8437,1416],[8438,1417],[8439,1416],[79,1],[80,1],[13,1],[14,1],[16,1],[15,1],[2,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[23,1],[24,1],[3,1],[25,1],[26,1],[4,1],[27,1],[31,1],[28,1],[29,1],[30,1],[32,1],[33,1],[34,1],[5,1],[35,1],[36,1],[37,1],[38,1],[6,1],[42,1],[39,1],[40,1],[41,1],[43,1],[7,1],[44,1],[49,1],[50,1],[45,1],[46,1],[47,1],[48,1],[8,1],[54,1],[51,1],[52,1],[53,1],[55,1],[9,1],[56,1],[57,1],[58,1],[60,1],[59,1],[61,1],[62,1],[10,1],[63,1],[64,1],[65,1],[11,1],[66,1],[67,1],[68,1],[69,1],[70,1],[1,1],[71,1],[72,1],[12,1],[76,1],[74,1],[78,1],[73,1],[77,1],[75,1],[114,1418],[124,1419],[113,1418],[134,1420],[105,1421],[104,1],[133,973],[127,1422],[132,1421],[107,1423],[121,1424],[106,1425],[130,1426],[102,1427],[101,973],[131,1428],[103,1429],[108,1419],[109,1],[112,1419],[99,1],[135,1430],[125,1431],[116,1432],[117,1433],[119,1434],[115,1435],[118,1436],[128,973],[110,1437],[111,1438],[120,1439],[100,1],[123,1431],[122,1419],[126,1],[129,1440],[7646,1441],[7656,1442],[7645,1441],[7666,1443],[7637,1444],[7636,1],[7665,973],[7659,1445],[7664,1444],[7639,1446],[7653,1447],[7638,1448],[7662,1449],[7634,1450],[7633,973],[7663,1451],[7635,1452],[7640,1442],[7641,1],[7644,1442],[7631,1],[7667,1453],[7657,1454],[7648,1455],[7649,1456],[7651,1457],[7647,1458],[7650,1459],[7660,973],[7642,1460],[7643,1461],[7652,1462],[7632,1],[7655,1454],[7654,1442],[7658,1],[7661,1463],[7153,1],[6804,40],[4382,1464],[4367,1],[4368,1],[4369,1],[4370,1],[4366,1],[4371,1465],[4372,1],[4374,1466],[4373,1465],[4375,1465],[4376,1466],[4377,1465],[4378,1],[4379,1465],[4380,1],[4381,1],[6680,1467],[6622,1468],[4303,1469],[4297,1470],[4301,1471],[4298,1471],[4294,1470],[4302,1472],[4299,1473],[4300,1471],[4295,1474],[4296,1475],[4225,1476],[4282,1477],[4171,1478],[4288,1479],[4173,1480],[4290,1481],[4224,1],[4281,1],[4172,1482],[4289,1483],[4293,1484],[4285,1485],[4292,1486],[4284,1487],[4226,1488],[4283,1489],[4164,1],[4227,1],[4174,1478],[4230,1479],[4175,1],[4232,1],[4166,1490],[4291,1491],[4170,1492],[4287,1493],[4165,1],[4228,1],[4167,1494],[4286,1495],[4168,1496],[4229,1497],[4169,1],[4231,1],[4176,1498],[4233,1499],[4177,1498],[4234,1499],[4178,1498],[4235,1499],[4179,1498],[4236,1499],[4180,1498],[4237,1499],[4181,1498],[4238,1499],[4182,1498],[4239,1499],[4183,1498],[4240,1499],[4184,1498],[4241,1499],[4185,1498],[4242,1499],[4186,1498],[4243,1499],[4187,1498],[4244,1499],[4188,1498],[4245,1499],[4190,1498],[4247,1499],[4189,1498],[4246,1499],[4191,1498],[4248,1499],[4192,1498],[4249,1499],[4193,1498],[4250,1499],[4223,1500],[4280,1501],[4194,1498],[4251,1499],[4195,1498],[4252,1499],[4196,1498],[4253,1499],[4197,1498],[4254,1499],[4198,1498],[4255,1499],[4199,1498],[4256,1499],[4200,1498],[4257,1499],[4201,1498],[4258,1499],[4202,1498],[4259,1499],[4203,1498],[4260,1499],[4204,1498],[4261,1499],[4205,1498],[4262,1499],[4206,1498],[4263,1499],[4208,1498],[4265,1499],[4207,1498],[4264,1499],[4209,1498],[4266,1499],[4210,1498],[4267,1499],[4211,1498],[4268,1499],[4212,1498],[4269,1499],[4213,1498],[4270,1499],[4214,1498],[4271,1499],[4215,1498],[4272,1499],[4216,1498],[4273,1499],[4217,1498],[4274,1499],[4218,1498],[4275,1499],[4219,1498],[4276,1499],[4222,1498],[4279,1499],[4220,1498],[4277,1499],[4221,1498],[4278,1499],[7891,1502],[7885,1503],[7889,1504],[7886,1504],[7882,1503],[7890,1505],[7887,1506],[7888,1504],[7883,1507],[7884,1508],[7878,1509],[7822,1510],[7824,1511],[7877,1],[7823,1512],[7881,1513],[7880,1514],[7879,1515],[7815,1],[7825,1510],[7826,1],[7817,1516],[7821,1517],[7816,1],[7818,1518],[7819,1519],[7820,1],[7827,1520],[7828,1520],[7829,1520],[7830,1520],[7831,1520],[7832,1520],[7833,1520],[7834,1520],[7835,1520],[7836,1520],[7837,1520],[7838,1520],[7839,1520],[7841,1520],[7840,1520],[7842,1520],[7843,1520],[7844,1520],[7845,1520],[7876,1521],[7846,1520],[7847,1520],[7848,1520],[7849,1520],[7850,1520],[7851,1520],[7852,1520],[7853,1520],[7854,1520],[7855,1520],[7856,1520],[7857,1520],[7858,1520],[7860,1520],[7859,1520],[7861,1520],[7862,1520],[7863,1520],[7864,1520],[7865,1520],[7866,1520],[7867,1520],[7868,1520],[7869,1520],[7870,1520],[7871,1520],[7872,1520],[7875,1520],[7873,1520],[7874,1520],[1094,1],[1095,1522],[6070,1523],[8782,1],[6160,1],[6161,1],[6163,1524],[6164,1],[6165,1],[6166,1],[6167,1],[6168,1],[6169,1524],[6170,1],[6171,1],[6172,1524],[6173,1],[6174,1],[6175,1524],[7240,1525],[8638,1526],[8639,1527],[8640,1528],[6525,1529],[6524,1530],[8647,1531],[8644,1532],[8645,1533],[8648,1533],[8649,1533],[8646,1534],[6526,1535],[6527,1535],[6528,8],[8641,21],[8642,8],[8643,1536],[8650,1537],[8651,1538],[8652,1538],[6529,24],[8654,1539],[8653,1540],[6530,1541],[8656,1542],[1096,1],[8655,1543],[8660,1544],[8659,1545],[8658,1546],[8661,1547],[6532,977],[6531,1548],[8665,1549],[8666,1549],[8669,1550],[8668,1551],[8667,1552],[6533,24],[8670,1553],[8671,977],[8672,1554],[8673,1555],[8674,1556],[8664,1557],[8675,977],[8676,1558],[8677,1559],[8678,1560],[6534,1561],[6536,1562],[6535,977],[6537,1563],[8662,1564],[8663,1565],[6539,1537],[6544,1566],[6540,1537],[6538,1567],[6541,1568],[6545,1569],[6548,1570],[6549,1571],[6542,1572],[8679,1573],[6546,1574],[6547,1575],[6543,1],[8680,1576],[8681,1577],[6552,1578],[8682,1579],[6551,1580],[8684,1581],[6557,1582],[6559,1583],[6558,1],[6550,1584],[5957,8],[8685,1585],[6560,8],[8657,1586],[6561,8],[8686,1587],[8687,1588],[6562,1589],[6584,1590],[6565,1591],[6588,1592],[6576,1593],[6577,1594],[6590,1595],[6591,1596],[6563,977],[6592,1597],[6593,1598],[6594,1599],[6575,1],[6597,1600],[6586,1590],[6596,1601],[6573,1602],[6571,1603],[6574,1],[6570,1604],[6581,1605],[6566,1606],[6578,1607],[6579,1608],[6580,1609],[6568,1610],[6582,1],[6598,1611],[6587,1612],[6599,1613],[8732,1614],[8690,1615],[8702,1616],[8703,1617],[8733,1618],[6719,1618],[6720,1619],[6600,1620],[6712,1621],[6713,1622],[6601,1],[8730,1623],[8728,1624],[8729,1625],[8726,1626],[8704,1627],[6604,1628],[6605,1629],[8694,1630],[8692,8],[8693,21],[8735,8],[8734,21],[8691,1631],[8696,1632],[8695,1633],[8697,1634],[8731,1635],[8689,1636],[8736,1637],[8708,1638],[8706,1639],[8707,1640],[8711,1641],[8710,1642],[8709,21],[8737,1643],[8705,21],[8712,1644],[8713,1645],[6606,1],[8724,1646],[8725,1647],[6716,1648],[6722,1649],[6721,1650],[6723,1651],[6613,1652],[6717,1653],[8738,1654],[6714,1655],[6715,1656],[6612,1657],[6607,1],[6610,1658],[6608,1],[6609,1],[6611,1659],[8714,1660],[8723,1661],[8716,1662],[8715,1537],[6726,1663],[8718,1664],[8742,1538],[8717,21],[6727,1665],[8739,1666],[8740,1667],[8719,21],[8720,1668],[8741,1669],[8722,1670],[6724,1635],[6725,1],[6564,1610],[8688,1],[6583,1671],[6730,1672],[6728,1],[6731,1673],[6729,1635],[6732,40],[8699,1674],[6733,1675],[8700,1676],[6602,1677],[6603,1678],[6734,1679],[6735,1680],[6567,1591],[6736,1681],[6737,1682],[6738,1683],[6739,1684],[6740,1685],[8701,1686],[8727,1687],[6741,1],[8698,1688],[6742,1689],[6743,40],[6569,1690],[6718,1],[8743,1691],[6585,1692],[6572,1],[6744,1693],[6749,1694],[6750,1695],[6759,1],[6752,1696],[6756,1697],[6753,1698],[6757,1699],[6764,1700],[6765,1701],[6766,1702],[6770,1538],[6771,1703],[6772,1704],[6773,1705],[6783,1706],[6769,21],[6784,1707],[8744,1708],[6790,1],[6791,40],[6792,1709],[6794,1710],[6795,1711],[6793,1709],[6797,1712],[6796,1713],[8745,1714],[6788,1715],[6789,1716],[6786,1717],[6787,40],[6775,1718],[6776,1719],[6799,1720],[6747,1721],[6763,1722],[6758,1723],[6780,1724],[6781,1725],[6778,1713],[6779,1726],[6782,1727],[6774,1728],[6760,1693],[6761,1729],[6768,1730],[6800,1731],[6798,1732],[6745,1],[6777,1733],[6746,1],[6755,1],[6751,1],[6762,1713],[6748,1713],[6785,1],[6810,1],[8746,1734],[6803,1735],[6805,1736],[6806,1],[6807,1737],[6808,1738],[6802,1739],[6809,1740],[6801,1],[8756,21],[8757,1741],[8758,1742],[6823,1743],[6821,1743],[6822,1744],[8759,1745],[6820,1],[8762,21],[6824,1746],[8760,1747],[8761,1748],[8747,21],[8748,1749],[6825,1],[8749,1750],[8763,1751],[8764,1752],[6826,1],[8754,1753],[6818,1754],[8753,1755],[8755,1756],[6819,1682],[8752,1757],[6827,1758],[6828,1759],[8750,1760],[8751,1761],[6831,24],[6829,1762],[6830,1763],[8768,1764],[8766,1765],[6836,1766],[8767,1767],[4128,1768],[8769,1769],[4129,21],[8770,5],[8035,1537],[6850,1770],[6845,1771],[6848,977],[6847,1772],[6875,1773],[6844,1774],[6843,1589],[6874,1775],[6866,1776],[6867,1777],[6838,1778],[6873,1777],[8771,40],[6879,1779],[6863,1780],[6880,1538],[6868,1781],[6837,1782],[6846,1783],[6849,40],[6842,1784],[6840,1785],[6882,1786],[6870,1787],[6881,1788],[6877,1789],[6876,1790],[6878,1791],[6886,1589],[6851,1792],[6852,1793],[6853,40],[6887,40],[6883,1793],[6854,1794],[6855,1793],[6856,40],[6841,1795],[6888,1796],[6884,1797],[8772,1798],[6889,1799],[6857,40],[6858,1796],[6872,1800],[6869,1801],[6890,1589],[6859,1793],[6871,1802],[6860,1801],[6885,1803],[6865,1804],[6861,1805],[6864,1806],[6839,1807],[6862,1589],[8783,1808],[6891,24],[6892,1],[8780,1809],[8781,1810],[8795,1811],[8785,1812],[8794,1813],[8784,1814],[8796,1815],[8797,1816],[4133,8],[8799,1817],[8800,1537],[6893,1],[8798,1818],[4130,8],[8801,1819],[8802,1820],[4131,8],[8803,1821],[8804,1822],[4132,8],[8805,1823],[6921,1824],[6920,40],[6924,1825],[6906,1826],[6907,1827],[6908,1],[6910,1828],[6922,1],[6923,1],[6909,977],[6911,1828],[6912,1],[6913,977],[6916,1829],[6915,1830],[6914,1831],[6917,1],[6919,1832],[6918,1833],[8940,1834],[7257,1610],[7258,24],[8951,6],[8946,1835],[8944,1836],[8945,1837],[8947,1838],[8952,24],[8948,1839],[7260,1840],[7259,24],[8949,1841],[8953,1842],[8954,1843],[8955,1844],[6039,8],[8950,1845],[7261,24],[8959,1846],[8960,1847],[6040,1],[8957,1848],[8956,1],[7262,24],[8962,1849],[8961,1850],[6042,1],[8964,1851],[8963,1852],[6041,8],[8965,1853],[7263,977],[8966,1854],[7264,977],[8958,1855],[7265,1],[7269,1856],[8967,1857],[8968,1858],[8969,1859],[7270,977],[7271,1860],[7272,1861],[8970,1862],[7274,24],[6043,1],[8971,1863],[8973,1864],[8974,1864],[8975,1865],[8977,1866],[8976,1867],[7273,40],[8978,1868],[8979,1869],[8980,1870],[8972,40],[7285,1],[7286,1871],[7287,1872],[7288,1873],[8994,1874],[8981,1875],[7289,1872],[7290,1876],[7280,1],[7281,24],[8982,1877],[7282,40],[8987,1878],[8991,1879],[7277,1880],[8992,1881],[7278,1682],[7279,40],[8988,1882],[8989,1883],[8983,1884],[8984,1885],[8985,1886],[8986,1887],[8990,1888],[7283,977],[7284,977],[7276,1889],[6754,1890],[7295,977],[7296,24],[8997,1891],[8995,8],[8838,1892],[8996,1893],[9001,1894],[9002,1895],[8837,1781],[8998,8],[7291,1],[7293,1872],[7294,1896],[7298,1897],[8999,1898],[7299,1899],[7300,1900],[9000,1901],[7292,1],[7297,1902],[7301,1872],[7302,1903],[8993,1904],[7275,1],[6833,1905],[7304,1906],[7305,1],[6835,1907],[6834,1],[7307,1],[7308,1908],[7309,1909],[7306,1910],[9006,1911],[6044,1763],[6832,1],[9014,1912],[7318,1543],[7310,1543],[9008,1913],[9003,1914],[9004,1915],[9007,1916],[9009,1917],[9010,1918],[9011,1919],[7311,1920],[7313,1921],[7314,1922],[7324,1923],[7315,1922],[7316,1924],[7317,1921],[7319,1925],[7320,1920],[7322,1926],[7323,1927],[9012,1928],[9005,1536],[7312,1543],[7321,1543],[7303,1],[9017,1929],[9015,1930],[9016,1931],[9013,1932],[9019,1933],[9022,1934],[9023,1935],[6045,1936],[9018,1937],[9020,1938],[9021,14],[9024,1],[9025,1939],[9026,1940],[8943,1941],[7326,1942],[8941,40],[9028,1943],[9027,1768],[9029,1944],[8942,40],[9030,1945],[9031,1946],[7328,1947],[9036,1948],[9032,1904],[9033,1949],[9034,21],[9035,1950],[7325,1951],[7327,1952],[9037,1953],[7329,1],[9038,1954],[9040,1955],[9039,1956],[9041,1957],[9042,1958],[9043,1959],[9047,1960],[9048,8],[9050,1961],[9044,8],[9049,1962],[9045,1963],[9051,1964],[9052,1965],[7330,1966],[7331,40],[7332,1967],[9046,1968],[9053,1867],[9054,1969],[6046,8],[9058,1970],[9055,1971],[9056,1972],[9059,1971],[9057,1973],[9060,1974],[9061,1975],[9062,1976],[9063,1977],[9064,1978],[9066,1979],[9065,1980],[8937,1981],[8938,1982],[8939,1982],[8806,1983],[8807,21],[6925,1],[8808,1984],[8809,1985],[8810,40],[8830,13],[8831,1986],[7147,1610],[8832,1987],[7148,1],[7149,1],[7151,1988],[6028,1],[7150,1989],[7152,1],[8271,1986],[8811,1990],[8812,1991],[8813,1992],[5958,1993],[8814,1],[8815,1],[8816,1],[8599,1994],[8817,1995],[5959,1996],[8283,1997],[5960,8],[8822,1998],[8274,13],[8275,1999],[8276,2000],[6012,2001],[8278,2002],[6013,8],[8277,2003],[8819,2004],[8821,2005],[6015,2006],[8820,2007],[6014,1],[8282,2008],[6017,8],[8823,2009],[8825,2010],[8824,2011],[6926,977],[6016,8],[8281,2012],[6022,8],[8279,2013],[6927,2014],[6023,2015],[8826,2016],[8280,2017],[6928,2018],[6021,2019],[8594,2020],[8595,2021],[8596,2022],[6931,2023],[8597,2024],[6930,2025],[6929,1],[8601,2026],[6932,977],[8827,2027],[8605,2028],[8600,2029],[6933,24],[8272,2030],[6934,24],[6025,1],[8273,2031],[6024,2032],[8606,2033],[8284,2034],[6935,24],[6027,2035],[8598,2036],[6026,2032],[8828,2037],[8602,2038],[8604,2039],[7146,2040],[8603,2041],[4134,40],[8829,2042],[7154,2043],[7157,1],[7156,2044],[7155,977],[6029,1],[8607,2045],[8609,2046],[8608,1543],[8610,2047],[8063,1543],[7161,2048],[7165,1682],[7166,1682],[7167,1682],[7168,2049],[8834,2050],[8835,2051],[8836,2052],[8839,2053],[8840,2054],[8833,2055],[7169,2056],[7170,2057],[7171,2058],[7164,2059],[7163,2060],[7158,1],[7162,2061],[7159,2062],[7160,2051],[8841,2063],[7172,24],[8842,2064],[7173,24],[8843,2065],[6030,8],[8844,2066],[8845,2067],[7174,21],[7175,1],[7176,2068],[7183,2069],[7179,2070],[7180,2071],[7181,2072],[7184,2073],[7182,2074],[7178,1967],[8847,2075],[7191,2076],[7189,2077],[7186,2078],[7190,2079],[7187,2080],[7188,8],[7177,8],[7185,1537],[7195,2081],[7193,2082],[7196,1],[7194,2083],[7192,2084],[7197,977],[8846,2085],[8848,2086],[6033,1],[8849,2087],[8855,2088],[8853,2089],[7198,1],[8851,2090],[7201,1],[6034,1],[8852,2091],[6031,1],[8850,2092],[7199,2093],[6032,2094],[7200,1],[8854,2095],[7203,1],[8863,2096],[7204,1],[8859,2097],[8857,2098],[8864,2099],[8856,2100],[7205,1],[7206,40],[8865,2101],[8862,2102],[7207,40],[8868,2103],[7209,2104],[8858,2105],[7208,2106],[7202,2107],[8872,2108],[8874,2109],[7211,977],[8873,2110],[7212,24],[7213,1],[8879,2111],[8880,2112],[8881,2113],[8882,2114],[8883,2115],[7214,40],[8884,2116],[7215,1],[8870,2117],[8869,2118],[7216,1],[7217,40],[8885,2119],[8878,2120],[7218,24],[8860,21],[8861,2121],[7219,24],[8875,2122],[8876,2123],[8877,2124],[7220,24],[7221,40],[8867,2125],[8866,2126],[7222,40],[7223,2127],[7224,977],[8871,2128],[7225,2129],[7227,2130],[7226,2106],[7210,2107],[8721,2131],[8787,2132],[8786,2099],[8789,2133],[8788,2134],[8790,2135],[8887,2136],[8888,2137],[6036,1],[8791,2138],[8792,2139],[8793,2140],[6035,8],[7229,1],[8040,2141],[8039,2142],[7230,2143],[7228,1],[8886,1],[8889,2144],[8890,2145],[7231,1],[7232,977],[8897,2146],[8899,1904],[8891,2147],[8895,21],[8892,2148],[8901,2149],[8900,2150],[8894,2151],[7233,2152],[8893,2153],[8908,2154],[8909,2155],[7234,24],[8906,2156],[8907,2157],[8896,2158],[8898,2159],[8902,2160],[8903,1543],[8904,2161],[7236,2162],[7237,1],[7239,2163],[7235,1],[7241,2164],[7238,2165],[8905,2166],[7242,1840],[7243,1],[7244,1589],[7245,1],[7247,2167],[7248,977],[7246,1],[8911,2168],[8912,1914],[8913,2169],[8914,2169],[8915,2170],[8916,2171],[8910,2172],[8917,2173],[8918,2174],[8919,2175],[8920,2176],[7249,1],[8921,2177],[8925,2178],[8926,2179],[7250,24],[6037,2180],[8927,2181],[8928,2182],[8929,2183],[7251,2184],[7252,1],[8930,2185],[6038,1610],[8931,2186],[8932,2186],[8924,2187],[8933,2188],[8934,2189],[7256,2190],[8935,2191],[7253,1682],[7254,2192],[7255,1682],[8922,2193],[8923,2194],[8936,2195],[7334,2196],[7518,2197],[9067,40],[9068,2198],[9069,2198],[9070,40],[9071,1537],[9073,2199],[9072,2200],[9074,2201],[9075,2202],[7520,1966],[7521,2203],[7522,2204],[7523,40],[7524,2203],[7525,1967],[7530,40],[7531,2203],[7526,1966],[7527,2205],[7529,2206],[7528,2207],[7519,977],[7532,1],[7533,1],[7559,2208],[7560,35],[7561,40],[7562,2209],[7563,40],[7564,21],[7565,40],[7566,40],[7567,40],[9076,2210],[7568,40],[7569,40],[7570,1914],[7571,2211],[7572,40],[7573,40],[7574,2212],[7575,40],[7576,6],[7577,1543],[7578,1],[7579,40],[7598,2213],[7599,1],[7600,2214],[7585,2215],[9077,2216],[7592,2217],[7607,2218],[7606,40],[7601,1],[7602,2219],[7603,1840],[7604,977],[7608,1],[7580,1],[7609,1],[7610,1],[7612,2220],[7615,2221],[7611,2217],[7616,1],[7617,1],[7618,1610],[9078,2222],[7731,1],[7733,2223],[7734,2224],[7732,2225],[6048,2226],[7594,2196],[9084,2227],[7735,1],[6049,1],[7619,1],[7620,1],[7605,1610],[7621,1],[7622,2228],[7623,2229],[7736,2230],[7737,2231],[7333,1],[7595,2229],[7624,1],[7723,2232],[7596,2196],[7724,2233],[7725,1],[7726,1],[7727,1],[7729,2234],[7728,2228],[7597,2235],[7730,1],[7742,2236],[7743,2237],[7744,2238],[7741,1],[7738,1543],[7746,2239],[7747,2240],[7745,2217],[7740,2217],[7739,2241],[7748,1906],[7749,2242],[7751,2243],[7750,977],[6117,1610],[7752,1],[7581,1],[9085,1],[7754,2244],[7760,2245],[7755,2246],[7753,2247],[7758,2248],[7759,2249],[7757,2250],[7756,1],[6767,1620],[7582,1],[7761,2251],[6595,2251],[7583,1],[6055,2252],[7584,1],[7762,1],[9086,1],[8061,2253],[8064,2254],[8066,2255],[9087,34],[9089,1],[8073,2256],[8075,2257],[8081,1090],[8083,2258],[9091,1],[9092,41],[9093,1],[9094,1],[8079,1981],[8087,2259],[9095,1],[8612,1],[8614,1],[8077,1],[9096,1],[9097,41],[9098,1],[9099,1],[8618,1],[8620,1],[8622,1],[8624,1],[8626,1],[8628,2260],[8632,1],[8630,2261],[9090,1],[9088,2262],[8634,2263],[7765,1],[7766,2264],[7767,1],[7764,2265],[7768,1],[7769,2266],[7770,1],[7771,1],[7773,2267],[7772,1],[7776,2268],[7775,1610],[7774,1],[7778,1],[7780,2269],[7779,1],[7781,1],[7777,1],[7783,2270],[7782,1],[7784,1],[6589,1],[7785,2271],[7763,2271],[7787,2272],[7786,1],[7789,2273],[7788,1],[7790,1],[7792,2274],[7791,1],[7794,2275],[7793,1],[7796,2276],[7795,1],[7799,2277],[7798,2278],[7797,1],[7800,1],[7801,1],[7803,1],[7802,2271],[7534,1],[7535,2279],[7537,2280],[7547,2281],[7550,2282],[7551,2283],[7552,2284],[7558,2285],[7549,2286],[7805,1561],[7555,2287],[7556,2288],[7557,2289],[7554,2290],[7553,1],[7806,1966],[7807,977],[7808,2291],[7814,2292],[7811,1682],[7810,1682],[7812,1770],[7809,1682],[7813,2293],[7893,2294],[7909,2295],[7907,2296],[7899,2297],[7910,2298],[7911,2299],[7912,2300],[7913,2301],[7897,2302],[7906,2303],[7892,2304],[7908,2305],[7898,2306],[7902,2307],[7900,2308],[7905,2309],[7901,2310],[7903,2311],[7896,2312],[7894,2313],[7895,2314],[7904,2315],[7914,2316],[7915,2317],[7916,2318],[7918,2319],[7917,2320],[7921,1],[7920,2321],[7923,2321],[7922,2322],[7919,2323],[7924,2324],[7925,2325],[7927,2326],[7928,2327],[7929,2328],[7544,2329],[7545,2330],[7543,2331],[7930,2332],[7931,2333],[7541,2334],[7542,2335],[7546,2336],[7536,2337],[9100,2338],[7932,1966],[7933,2339],[7804,977],[7538,2340],[7539,2341],[7540,2342],[7934,2343],[7935,977],[7936,1682],[7937,2344],[7938,2345],[7939,2346],[7944,2347],[7945,2348],[7946,2349],[7940,1],[7941,2350],[7948,2351],[7942,2346],[7943,2350],[7947,2352],[7949,2353],[7950,2354],[7951,2355],[7952,2356],[6097,1],[8637,1931],[6098,2357],[7953,1620],[7957,2358],[7958,2358],[7956,2359],[7955,1],[7959,1],[6152,2360],[6155,2361],[6126,2362],[6146,2363],[6149,2364],[6158,2365],[6140,2366],[6133,2367],[6115,2368],[7961,2362],[6125,2369],[6124,2370],[7962,2371],[6132,2372],[6139,2372],[7963,2373],[6143,2374],[6142,63],[6145,2375],[7964,2376],[6144,2377],[6148,2372],[7965,2378],[7966,2379],[6151,2372],[7967,2380],[6154,2372],[7960,1],[6157,2372],[7968,2381],[7996,2382],[7982,2383],[7983,2384],[9101,2385],[7984,2386],[7985,2387],[7989,2388],[7990,2389],[7986,2390],[7993,2391],[7995,2392],[9102,1537],[9103,2393],[7994,2394],[9104,2395],[7992,2396],[7997,2397],[7998,2398],[7978,2399],[7980,2400],[7979,2401],[7999,2402],[7981,2386],[7987,2403],[7976,40],[7991,2404],[8003,2405],[7988,2406],[8002,2407],[8001,2408],[7977,977],[8000,2409],[7975,2410],[7972,2411],[7971,2412],[7973,2413],[7974,2414],[7969,2415],[7970,2416],[6972,2417],[6973,2418],[6971,2419],[6969,2420],[6970,1],[6976,2421],[6975,2422],[6974,2423],[5897,2424],[5898,2425],[5896,2426],[5895,2427],[5893,2428],[5894,1],[6020,2429],[6018,2430],[5900,2431],[6019,2432],[5899,2433],[6944,2434],[6945,2435],[6943,2436],[6941,2437],[6942,1],[6957,2438],[6956,2439],[6955,2440],[6964,2441],[6965,2442],[6963,2443],[6961,2428],[6962,1],[6968,2444],[6967,2445],[6966,2446],[6977,2447],[5829,2448],[5891,2449],[5892,2450],[5830,2451],[4136,2452],[5890,1],[6959,2453],[6960,2454],[6958,2455],[5866,2456],[5901,2457],[5837,1],[5903,2458],[5855,2459],[5902,977],[5856,1],[5831,2452],[5832,1],[4135,1],[5838,2460],[5791,2461],[5797,2462],[4151,977],[5906,1],[5911,2463],[5910,2464],[5907,2465],[5908,2466],[5909,2467],[5806,2468],[7926,2215],[5798,2462],[4157,2469],[4158,2470],[4159,2470],[4156,2471],[4160,2471],[4154,2471],[4155,2472],[4162,2473],[4153,2474],[4161,2475],[5847,2476],[5846,2477],[5845,2478],[8004,2479],[5839,2428],[5801,2480],[5799,2481],[5804,2482],[5803,2483],[5802,2484],[5805,2485],[5800,2486],[5794,2472],[5793,2487],[5795,2488],[5792,2472],[5790,2489],[5796,1543],[4152,2490],[5789,2491],[5788,2492],[4394,1906],[4395,2493],[4448,2494],[4444,2495],[4445,2496],[4446,1],[4447,1],[4163,1],[4305,1],[4304,2420],[6948,2497],[6949,2498],[6947,2499],[6940,2428],[6946,2484],[6954,2500],[6953,2501],[6952,2502],[6950,2503],[6951,2503],[5816,2504],[5817,2505],[5809,2506],[5810,2507],[5807,2428],[5808,2508],[5828,2509],[5826,2510],[5827,2511],[5825,2512],[5824,2513],[5823,2514],[5867,2515],[5869,2516],[5870,2517],[5868,2518],[5820,2519],[5818,2520],[5819,1],[5968,2521],[5967,2522],[5877,2523],[5872,2524],[5874,2525],[5873,2526],[5822,2527],[5876,2528],[5871,2529],[5875,2530],[5883,2531],[5884,2532],[5885,2533],[5880,2534],[5878,2428],[5879,1],[5889,2535],[5888,2536],[5887,2537],[5886,2538],[5882,2539],[5881,2532],[5848,2540],[5849,2541],[5851,2542],[5850,2215],[5835,2543],[5836,2544],[5833,2428],[5834,2543],[5865,2545],[5864,2546],[5854,2547],[5858,2548],[5862,2549],[5857,2550],[5852,2551],[5863,2552],[5860,2553],[5859,2554],[5861,2555],[5853,2556],[7048,2557],[7046,2558],[7045,2559],[7047,2560],[6987,2561],[7008,2562],[7009,2563],[7015,2564],[6986,2565],[6985,2566],[7010,2567],[7011,2568],[7012,2569],[7014,2570],[6983,2571],[6982,40],[8005,2572],[7016,1537],[7019,2573],[7017,2574],[7018,1768],[7020,2575],[6995,40],[7022,2576],[7031,2577],[7025,2578],[7032,2579],[7024,2580],[7023,2581],[7026,2582],[7027,2583],[7028,2576],[7029,2584],[7030,2585],[7021,2586],[7033,2587],[6998,2588],[6999,2589],[7000,2590],[7001,2591],[7002,2592],[7003,2593],[7013,2594],[6988,2595],[7004,2596],[7005,2597],[6993,2598],[6989,2599],[7007,2600],[6978,2601],[7006,2602],[6991,2603],[6992,2604],[6990,1],[6981,2605],[6994,2606],[6984,2607],[6996,2586],[6997,2608],[7084,2609],[7074,2610],[7075,2611],[7073,2612],[7072,2613],[7035,2614],[7050,2615],[7051,2616],[7053,2617],[7052,2618],[7054,2619],[7060,2620],[7059,2621],[7061,2622],[7049,2623],[7037,2624],[7038,2625],[7040,2626],[7039,2627],[7041,2628],[7043,2629],[7042,2630],[7044,2631],[7036,2623],[7076,2632],[7081,2633],[7080,2634],[7079,2635],[7078,2636],[7077,8],[7063,2637],[7064,2638],[7066,2639],[7065,2640],[7067,2641],[7069,2642],[7068,2643],[7070,2644],[7062,2623],[7056,2645],[7057,2646],[7058,2647],[7055,2648],[7034,1543],[7071,2649],[5963,2650],[5966,2651],[5965,2652],[5970,2653],[5972,2654],[5974,2655],[5964,2656],[5969,2657],[5962,2658],[5973,2659],[5971,2660],[6006,2661],[6008,2662],[6007,2663],[6009,2664],[6005,2665],[5993,2666],[5992,2667],[5994,2668],[5991,2669],[5990,2670],[6004,2671],[5998,2672],[5996,2673],[5995,2674],[6003,2675],[5999,2676],[6002,2677],[6001,2678],[6000,2678],[5989,2679],[5987,2680],[5984,2681],[5983,2682],[5985,2683],[5986,2682],[5988,2684],[5978,2685],[5982,2686],[5979,2670],[5980,2687],[5981,2670],[6011,2688],[6010,2689],[5977,2690],[5976,2691],[5975,2692],[5961,1543],[6938,2693],[6980,2694],[6979,2695],[6939,2696],[7083,2697],[7082,2698],[7110,2699],[7108,2700],[7109,2701],[7096,2702],[6936,13],[7085,2703],[7086,2704],[7095,2705],[7130,1986],[7131,2706],[7128,2707],[7129,2708],[7132,2709],[7118,2710],[7111,2711],[7120,2712],[7113,2713],[7114,2714],[7117,2715],[7112,2716],[7116,2717],[9105,2718],[7088,13],[7089,2719],[9106,2720],[7090,2721],[7125,2722],[7124,2723],[7126,2724],[7094,2725],[7102,21],[7101,2726],[7103,2727],[7104,2728],[7145,2729],[7106,2730],[9107,8],[7092,2731],[7091,2732],[7100,1538],[7142,2733],[7143,2734],[7138,2735],[7135,2736],[7139,2737],[7136,2738],[7137,2739],[7141,2740],[7134,2741],[7144,2742],[7140,2743],[7133,8],[7093,2744],[7107,2745],[7122,2746],[6814,2747],[6811,40],[6815,2748],[6817,2749],[6813,2750],[6812,2751],[6816,2752],[7121,2753],[7087,2754],[8008,2755],[7105,2756],[8007,2757],[7119,2758],[7099,2758],[7127,2759],[7123,2760],[7097,977],[7098,2761],[7115,1],[5955,2762],[5956,2763],[8006,1],[5922,2764],[5921,2765],[5919,2766],[5929,2767],[5930,2768],[5931,2769],[5912,2768],[5917,2770],[5914,2771],[5928,2772],[5915,2773],[5913,2152],[5916,1906],[5946,2774],[5945,2775],[5950,2776],[5951,2777],[5952,2778],[5953,2779],[5949,2780],[5948,2781],[5923,2782],[5947,2783],[5918,2784],[5924,2785],[5935,2786],[5933,2787],[5940,2788],[5941,2789],[5934,2790],[5925,2791],[5932,1],[5905,2766],[5936,2792],[5942,2793],[5944,2794],[5926,2795],[5927,2796],[5943,2448],[5954,2797],[5904,2766],[5937,1906],[5938,1906],[5939,2798],[5813,2799],[5811,1],[5815,2800],[5814,2801],[5765,2802],[5760,2803],[5761,40],[5764,1543],[5763,40],[5762,40],[8009,2804],[5770,1],[5771,2805],[4428,2806],[4430,2807],[4427,977],[4396,977],[4423,977],[4419,1682],[4424,977],[4422,1543],[4425,977],[4420,977],[4421,1682],[4426,2808],[4397,977],[4429,1],[4318,1],[5769,2809],[4319,1],[4320,2810],[4321,2811],[4388,1],[4306,1],[4322,1],[4384,1],[4311,2230],[4329,2812],[4312,2813],[4308,1],[4363,1],[4361,1],[4362,2814],[4383,2815],[4393,2816],[4328,1],[4326,2817],[4327,1],[4387,1],[4360,2818],[4313,1],[4365,1],[4364,1],[4390,1],[4386,2819],[4389,1],[4392,1],[4314,1],[4391,1],[4307,1],[4385,1],[4465,1567],[4470,2820],[4466,1],[4477,2821],[4479,2822],[4468,2820],[4474,2823],[4478,2824],[4476,1906],[4473,2825],[4469,2826],[4467,2827],[5773,2828],[9109,2829],[5772,2830],[5777,2831],[5779,2832],[5774,2833],[5775,2834],[5778,2835],[5776,2836],[5780,2837],[5505,2838],[5506,2828],[5504,2839],[5402,21],[5507,1781],[5512,2840],[5503,2841],[5502,40],[5501,2842],[5509,1538],[5430,2843],[5429,2828],[5428,2843],[5433,2844],[5432,2845],[5436,2846],[5435,2847],[5434,2848],[5431,1906],[5495,2849],[5494,2850],[5493,1],[5496,1831],[5498,1537],[5499,2851],[5497,1537],[5421,2852],[5473,21],[5474,2853],[5422,21],[5476,2854],[5417,2843],[5416,2855],[5415,2843],[5418,1872],[5419,2856],[5471,2857],[5472,2858],[5492,2859],[5500,2860],[5480,2738],[5481,2861],[5479,2862],[5478,2828],[5484,2863],[5405,2864],[5403,2843],[5404,2738],[5427,2865],[5426,2738],[5489,2866],[5491,2867],[5490,2866],[5413,2843],[5414,2868],[5412,2855],[5420,2738],[5425,2869],[5424,2828],[5423,2828],[5483,2870],[5482,2738],[5477,2738],[5475,8],[5487,2871],[5488,2872],[5486,2842],[5485,2842],[5411,2873],[5410,2843],[5510,40],[5511,1537],[5400,2874],[5407,2875],[5409,2876],[5393,2877],[5399,2878],[5398,2878],[5401,2879],[5408,2880],[5392,2874],[5406,2881],[5397,2882],[5508,2883],[5785,2884],[5786,2885],[5784,8],[5582,280],[5691,2886],[5755,2887],[5754,2888],[5580,2889],[5576,2890],[5573,8],[5577,2890],[5578,2891],[5579,2892],[5575,2893],[5574,1781],[5648,2894],[5649,2895],[5650,2895],[5759,2896],[5594,40],[5598,40],[5703,2897],[5707,2898],[5708,2899],[5709,2900],[5710,2901],[5712,2902],[5717,2903],[5716,1],[5720,2904],[5702,1],[5725,2905],[5724,2906],[5589,1],[5592,2907],[5733,2908],[5590,1],[5729,2909],[5713,2910],[5722,2911],[5723,2912],[5727,2913],[5730,2914],[5732,2915],[5721,2916],[5692,2917],[5734,2918],[5741,2919],[5699,2920],[5700,2921],[5597,2922],[5595,2923],[5587,2886],[5588,280],[5593,2924],[5600,280],[5596,280],[5599,2925],[5586,1],[5694,2926],[8012,2927],[5718,2928],[5704,1],[5705,2929],[5726,2930],[5728,280],[5671,280],[8011,2931],[5711,2932],[5706,2933],[5719,1],[5693,2934],[8013,2906],[5698,2935],[8010,1],[5591,2936],[5688,2937],[5701,2938],[5673,2939],[5469,280],[9110,2940],[5681,2941],[5675,2942],[5680,2943],[5672,1],[5758,2944],[5689,2917],[5742,280],[5743,2945],[5753,2946],[5583,280],[5584,280],[5751,2947],[5752,2948],[5682,2949],[5470,2950],[5757,2951],[5756,40],[5585,2952],[6051,2953],[5731,2954],[5670,280],[5783,2955],[5782,2209],[5781,2209],[5787,2956],[5348,2957],[4488,2958],[5326,977],[4481,2959],[4490,2960],[5377,2961],[4463,2962],[4462,1589],[5376,2963],[5366,2964],[5367,2965],[4450,2966],[5375,2965],[5357,2967],[5386,40],[5381,1779],[5363,2968],[5382,2738],[5368,2843],[4449,2969],[4489,2970],[4472,2971],[5347,40],[4460,2972],[4452,2973],[5384,2974],[5371,2975],[5383,2976],[5379,2977],[5378,2978],[5380,2979],[8014,1589],[5349,2980],[5350,2981],[5351,40],[8015,40],[5385,2982],[5389,2983],[5352,2984],[5353,2982],[5354,40],[4459,2985],[8016,2986],[4471,1797],[5369,2987],[9111,2988],[8017,2989],[5355,40],[5358,2986],[5373,2990],[5370,2981],[8018,1589],[5359,2982],[5372,2991],[5360,2981],[5390,2992],[5365,2993],[5387,2994],[5388,2995],[5361,2996],[5364,1806],[4451,2997],[5362,1589],[5514,2998],[5515,2998],[5516,2998],[5517,2998],[5518,2998],[5519,2998],[5520,2998],[5521,2998],[5522,2998],[5523,2998],[5524,2998],[5525,2998],[5526,2998],[5527,2998],[5528,2998],[5529,2998],[5530,2998],[5531,2998],[5513,1],[5532,2998],[5533,2998],[5534,2999],[5538,3000],[5537,3001],[5535,8],[5536,3002],[5768,3003],[9112,3004],[5767,3005],[5766,3006],[4464,3007],[5374,1],[4480,1589],[6937,3008],[4461,1],[6050,3009],[8020,3010],[8024,3011],[6116,1],[6052,3012],[6053,3013],[8022,3014],[8023,3015],[8025,3016],[8026,3017],[6118,3018],[6056,2233],[6122,3019],[8027,1],[6119,3020],[6057,1],[6066,3021],[6120,3011],[6121,3022],[6065,3011],[8029,3023],[8028,3011],[6054,1],[8031,3024],[6067,2368],[8032,3025],[8030,3026],[6123,3011],[8021,3027],[6068,1]],"semanticDiagnosticsPerFile":[[5853,[{"start":48466,"length":14,"code":2322,"category":1,"messageText":{"messageText":"Type '{} | null' is not assignable to type 'Record | null | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '{}' is not assignable to type 'Record'.","category":1,"code":2322,"next":[{"messageText":"Index signature for type 'string' is missing in type '{}'.","category":1,"code":2329}]}]}},{"start":67473,"length":765,"code":2352,"category":1,"messageText":{"messageText":"Conversion of type '{ id: string; name: string; slug: null; version: null; flags: { is_custom: false; is_evaluator: false; is_feedback: false; is_chat: boolean; is_base: true; }; data: { parameters: Record; schemas: { ...; }; }; meta: { ...; }; }' to type '{ id: string; slug?: string | null | undefined; version?: number | null | undefined; name?: string | null | undefined; description?: string | null | undefined; flags?: { is_managed: boolean; ... 13 more ...; is_base: boolean; } | null | undefined; ... 14 more ...; deleted_by_id?: string | ... 1 more ... | undefined; }' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.","category":1,"code":2352,"next":[{"messageText":"Types of property 'flags' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type '{ is_custom: false; is_evaluator: false; is_feedback: false; is_chat: boolean; is_base: true; }' is missing the following properties from type '{ is_managed: boolean; is_custom: boolean; is_llm: boolean; is_hook: boolean; is_code: boolean; is_match: boolean; is_feedback: boolean; is_chat: boolean; has_url: boolean; has_script: boolean; has_handler: boolean; is_application: boolean; is_evaluator: boolean; is_snippet: boolean; is_base: boolean; }': is_managed, is_llm, is_hook, is_code, and 6 more.","category":1,"code":2740,"canonicalHead":{"code":2678,"messageText":"Type '{ is_custom: false; is_evaluator: false; is_feedback: false; is_chat: boolean; is_base: true; }' is not comparable to type '{ is_managed: boolean; is_custom: boolean; is_llm: boolean; is_hook: boolean; is_code: boolean; is_match: boolean; is_feedback: boolean; is_chat: boolean; has_url: boolean; has_script: boolean; has_handler: boolean; is_application: boolean; is_evaluator: boolean; is_snippet: boolean; is_base: boolean; }'."}}]}]}}]],[5857,[{"start":20277,"length":6,"code":2322,"category":1,"messageText":{"messageText":"Type '{} | null' is not assignable to type 'Record | null | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '{}' is not assignable to type 'Record'.","category":1,"code":2322,"next":[{"messageText":"Index signature for type 'string' is missing in type '{}'.","category":1,"code":2329}]}]},"relatedInformation":[{"start":20118,"length":6,"messageText":"The expected type comes from property 'inputs' which is declared here on type '{ inputs?: Record | null | undefined; outputs?: Record | null | undefined; parameters?: Record | null | undefined; }'","category":3,"code":6500}]},{"start":20325,"length":7,"code":2322,"category":1,"messageText":{"messageText":"Type '{} | null' is not assignable to type 'Record | null | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '{}' is not assignable to type 'Record'.","category":1,"code":2322,"next":[{"messageText":"Index signature for type 'string' is missing in type '{}'.","category":1,"code":2329}]}]},"relatedInformation":[{"start":20166,"length":7,"messageText":"The expected type comes from property 'outputs' which is declared here on type '{ inputs?: Record | null | undefined; outputs?: Record | null | undefined; parameters?: Record | null | undefined; }'","category":3,"code":6500}]},{"start":20375,"length":10,"code":2322,"category":1,"messageText":{"messageText":"Type '{} | null' is not assignable to type 'Record | null | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '{}' is not assignable to type 'Record'.","category":1,"code":2322,"next":[{"messageText":"Index signature for type 'string' is missing in type '{}'.","category":1,"code":2329}]}]},"relatedInformation":[{"start":20215,"length":10,"messageText":"The expected type comes from property 'parameters' which is declared here on type '{ inputs?: Record | null | undefined; outputs?: Record | null | undefined; parameters?: Record | null | undefined; }'","category":3,"code":6500}]},{"start":22469,"length":442,"code":2352,"category":1,"messageText":{"messageText":"Conversion of type '{ id: string; name: string | null | undefined; slug: string; version: null; flags: { is_custom: false; is_evaluator: true; is_feedback: false; is_chat: false; is_base: false; }; data: { uri: string; parameters: Record<...>; schemas: { ...; }; }; meta: { ...; }; }' to type '{ id: string; slug?: string | null | undefined; version?: number | null | undefined; name?: string | null | undefined; description?: string | null | undefined; flags?: { is_managed: boolean; ... 13 more ...; is_base: boolean; } | null | undefined; ... 14 more ...; deleted_by_id?: string | ... 1 more ... | undefined; }' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.","category":1,"code":2352,"next":[{"messageText":"Types of property 'flags' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type '{ is_custom: false; is_evaluator: true; is_feedback: false; is_chat: false; is_base: false; }' is missing the following properties from type '{ is_managed: boolean; is_custom: boolean; is_llm: boolean; is_hook: boolean; is_code: boolean; is_match: boolean; is_feedback: boolean; is_chat: boolean; has_url: boolean; has_script: boolean; has_handler: boolean; is_application: boolean; is_evaluator: boolean; is_snippet: boolean; is_base: boolean; }': is_managed, is_llm, is_hook, is_code, and 6 more.","category":1,"code":2740,"canonicalHead":{"code":2678,"messageText":"Type '{ is_custom: false; is_evaluator: true; is_feedback: false; is_chat: false; is_base: false; }' is not comparable to type '{ is_managed: boolean; is_custom: boolean; is_llm: boolean; is_hook: boolean; is_code: boolean; is_match: boolean; is_feedback: boolean; is_chat: boolean; has_url: boolean; has_script: boolean; has_handler: boolean; is_application: boolean; is_evaluator: boolean; is_snippet: boolean; is_base: boolean; }'."}}]}]}},{"start":26238,"length":5,"code":2740,"category":1,"messageText":"Type '{ is_custom: false; is_feedback: true; is_evaluator: true; is_chat: false; is_base: false; }' is missing the following properties from type '{ is_managed: boolean; is_custom: boolean; is_llm: boolean; is_hook: boolean; is_code: boolean; is_match: boolean; is_feedback: boolean; is_chat: boolean; has_url: boolean; has_script: boolean; has_handler: boolean; is_application: boolean; is_evaluator: boolean; is_snippet: boolean; is_base: boolean; }': is_managed, is_llm, is_hook, is_code, and 6 more.","relatedInformation":[{"file":"./packages/agenta-entities/src/workflow/api/api.ts","start":19061,"length":5,"messageText":"The expected type comes from property 'flags' which is declared here on type 'CreateWorkflowPayload'","category":3,"code":6500}],"canonicalHead":{"code":2322,"messageText":"Type '{ is_custom: false; is_feedback: true; is_evaluator: true; is_chat: false; is_base: false; }' is not assignable to type '{ is_managed: boolean; is_custom: boolean; is_llm: boolean; is_hook: boolean; is_code: boolean; is_match: boolean; is_feedback: boolean; is_chat: boolean; has_url: boolean; has_script: boolean; has_handler: boolean; is_application: boolean; is_evaluator: boolean; is_snippet: boolean; is_base: boolean; }'."}},{"start":27253,"length":5,"code":2740,"category":1,"messageText":"Type '{ is_feedback: true; is_custom: false; is_evaluator: true; is_chat: false; is_base: false; }' is missing the following properties from type '{ is_managed: boolean; is_custom: boolean; is_llm: boolean; is_hook: boolean; is_code: boolean; is_match: boolean; is_feedback: boolean; is_chat: boolean; has_url: boolean; has_script: boolean; has_handler: boolean; is_application: boolean; is_evaluator: boolean; is_snippet: boolean; is_base: boolean; }': is_managed, is_llm, is_hook, is_code, and 6 more.","relatedInformation":[{"file":"./packages/agenta-entities/src/workflow/api/api.ts","start":25540,"length":5,"messageText":"The expected type comes from property 'flags' which is declared here on type 'UpdateWorkflowPayload'","category":3,"code":6500}],"canonicalHead":{"code":2322,"messageText":"Type '{ is_feedback: true; is_custom: false; is_evaluator: true; is_chat: false; is_base: false; }' is not assignable to type '{ is_managed: boolean; is_custom: boolean; is_llm: boolean; is_hook: boolean; is_code: boolean; is_match: boolean; is_feedback: boolean; is_chat: boolean; has_url: boolean; has_script: boolean; has_handler: boolean; is_application: boolean; is_evaluator: boolean; is_snippet: boolean; is_base: boolean; }'."}}]],[6055,[{"start":120,"length":36,"messageText":"Cannot find module '@/oss/services/observability/types' or its corresponding type declarations.","category":1,"code":2307},{"start":190,"length":24,"messageText":"Cannot find module './shared/variant/types' or its corresponding type declarations.","category":1,"code":2307}]],[6103,[{"start":66,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307}]],[6106,[{"start":115,"length":34,"messageText":"Cannot find module '@/oss/lib/api/assets/axiosConfig' or its corresponding type declarations.","category":1,"code":2307},{"start":180,"length":23,"messageText":"Cannot find module '@/oss/lib/helpers/api' or its corresponding type declarations.","category":1,"code":2307},{"start":223,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307},{"start":273,"length":17,"messageText":"Cannot find module '@/oss/state/org' or its corresponding type declarations.","category":1,"code":2307},{"start":322,"length":36,"messageText":"Cannot find module '@/oss/state/profile/selectors/user' or its corresponding type declarations.","category":1,"code":2307},{"start":387,"length":21,"messageText":"Cannot find module '@/oss/state/project' or its corresponding type declarations.","category":1,"code":2307},{"start":441,"length":21,"messageText":"Cannot find module '@/oss/state/session' or its corresponding type declarations.","category":1,"code":2307},{"start":798,"length":12,"messageText":"'profileQuery' is of type 'unknown'.","category":1,"code":18046},{"start":1831,"length":10,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 3, '(getOptions: (get: Getter) => UndefinedInitialDataOptions, getQueryClient?: ((get: Getter) => QueryClient) | undefined): WritableAtom<...>', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(get: Getter) => { queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' is not assignable to parameter of type '(get: Getter) => UndefinedInitialDataOptions'.","category":1,"code":2345,"next":[{"messageText":"Type '{ queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' is not assignable to type 'UndefinedInitialDataOptions'.","category":1,"code":2322,"next":[{"messageText":"Type '{ queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' is not assignable to type 'AtomWithQueryOptions'.","category":1,"code":2322,"next":[{"messageText":"Types of property 'enabled' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type 'unknown' is not assignable to type 'Enabled | undefined'.","category":1,"code":2322,"canonicalHead":{"code":2322,"messageText":"Type '{ queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' is not assignable to type 'AtomWithQueryOptions'."}}]}]}]}]}]},{"messageText":"Overload 2 of 3, '(getOptions: (get: Getter) => DefinedInitialDataOptions, getQueryClient?: ((get: Getter) => QueryClient) | undefined): WritableAtom<...>', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(get: Getter) => { queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' is not assignable to parameter of type '(get: Getter) => DefinedInitialDataOptions'.","category":1,"code":2345,"next":[{"messageText":"Type '{ queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' is not assignable to type 'DefinedInitialDataOptions'.","category":1,"code":2322,"next":[{"messageText":"Type '{ queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' is not assignable to type 'AtomWithQueryOptions'.","category":1,"code":2322,"next":[{"messageText":"Types of property 'enabled' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type 'unknown' is not assignable to type 'Enabled | undefined'.","category":1,"code":2322,"canonicalHead":{"code":2322,"messageText":"Type '{ queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' is not assignable to type 'AtomWithQueryOptions'."}}]}]}]}]}]},{"messageText":"Overload 3 of 3, '(getOptions: (get: Getter) => AtomWithQueryOptions, getQueryClient?: ((get: Getter) => QueryClient) | undefined): WritableAtom<...>', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(get: Getter) => { queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' is not assignable to parameter of type '(get: Getter) => AtomWithQueryOptions'.","category":1,"code":2345,"next":[{"messageText":"Call signature return types '{ queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' and 'AtomWithQueryOptions' are incompatible.","category":1,"code":2202,"next":[{"messageText":"The types of 'enabled' are incompatible between these types.","category":1,"code":2200,"next":[{"messageText":"Type 'unknown' is not assignable to type 'Enabled | undefined'.","category":1,"code":2322,"canonicalHead":{"code":2322,"messageText":"Type '{ queryKey: any[]; queryFn: () => Promise; staleTime: number; refetchOnWindowFocus: true; refetchOnReconnect: false; refetchOnMount: true; enabled: unknown; retry: (failureCount: number, error: Error) => boolean; }' is not assignable to type 'AtomWithQueryOptions'."}}]}]}]}]}]},"relatedInformation":[]},{"start":1906,"length":12,"messageText":"'profileQuery' is of type 'unknown'.","category":1,"code":18046},{"start":3179,"length":12,"messageText":"'profileQuery' is of type 'unknown'.","category":1,"code":18046}]],[6107,[{"start":153,"length":39,"messageText":"Cannot find module '@/oss/components/SidebarBanners/types' or its corresponding type declarations.","category":1,"code":2307},{"start":211,"length":40,"messageText":"Cannot find module '@/oss/lib/helpers/dateTimeHelper/dayjs' or its corresponding type declarations.","category":1,"code":2307},{"start":273,"length":25,"messageText":"Cannot find module '@/oss/lib/helpers/utils' or its corresponding type declarations.","category":1,"code":2307},{"start":318,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307},{"start":368,"length":17,"messageText":"Cannot find module '@/oss/state/url' or its corresponding type declarations.","category":1,"code":2307},{"start":2004,"length":10,"code":2339,"category":1,"messageText":"Property 'free_trial' does not exist on type '{}'."},{"start":2075,"length":4,"code":2339,"category":1,"messageText":"Property 'plan' does not exist on type '{}'."},{"start":2137,"length":10,"code":2339,"category":1,"messageText":"Property 'period_end' does not exist on type '{}'."},{"start":2642,"length":4,"code":2339,"category":1,"messageText":"Property 'plan' does not exist on type '{}'."}]],[6108,[{"start":62,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307}]],[6112,[{"start":114,"length":30,"messageText":"Cannot find module '@/oss/lib/helpers/dynamicEnv' or its corresponding type declarations.","category":1,"code":2307}]],[6117,[{"start":84,"length":37,"messageText":"Cannot find module '@/oss/lib/hooks/useEvaluators/types' or its corresponding type declarations.","category":1,"code":2307},{"start":190,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307}]],[6118,[{"start":128,"length":42,"messageText":"An import path can only end with a '.ts' extension when 'allowImportingTsExtensions' is enabled.","category":1,"code":5097},{"start":289,"length":12,"messageText":"Module '\"../../../../../oss/src/lib/Types\"' has no exported member 'ListAppsItem'.","category":1,"code":2305},{"start":7376,"length":3,"messageText":"Parameter 'app' implicitly has an 'any' type.","category":1,"code":7006},{"start":8342,"length":3,"messageText":"Parameter 'app' implicitly has an 'any' type.","category":1,"code":7006}]],[6119,[{"start":137,"length":42,"messageText":"An import path can only end with a '.ts' extension when 'allowImportingTsExtensions' is enabled.","category":1,"code":5097}]],[6128,[{"start":52,"length":41,"messageText":"Cannot find module '@/oss/components/Playground/state/types' or its corresponding type declarations.","category":1,"code":2307}]],[6136,[{"start":327,"length":45,"messageText":"Cannot find module '@/oss/lib/hooks/usePreviewEvaluations/types' or its corresponding type declarations.","category":1,"code":2307},{"start":408,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307}]],[6142,[{"start":52,"length":41,"messageText":"Cannot find module '@/oss/components/Playground/state/types' or its corresponding type declarations.","category":1,"code":2307}]],[6151,[{"start":324,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307}]],[6160,[{"start":21,"length":30,"messageText":"Cannot find module '@/oss/lib/helpers/dynamicEnv' or its corresponding type declarations.","category":1,"code":2307}]],[6161,[{"start":21,"length":30,"messageText":"Cannot find module '@/oss/lib/helpers/dynamicEnv' or its corresponding type declarations.","category":1,"code":2307}]],[6163,[{"start":65,"length":30,"messageText":"Cannot find module '@/oss/lib/helpers/dynamicEnv' or its corresponding type declarations.","category":1,"code":2307}]],[6164,[{"start":21,"length":30,"messageText":"Cannot find module '@/oss/lib/helpers/dynamicEnv' or its corresponding type declarations.","category":1,"code":2307}]],[6166,[{"start":21,"length":30,"messageText":"Cannot find module '@/oss/lib/helpers/dynamicEnv' or its corresponding type declarations.","category":1,"code":2307}]],[6170,[{"start":21,"length":25,"messageText":"Cannot find module '@/oss/lib/helpers/utils' or its corresponding type declarations.","category":1,"code":2307}]],[6171,[{"start":21,"length":25,"messageText":"Cannot find module '@/oss/lib/helpers/utils' or its corresponding type declarations.","category":1,"code":2307}]],[6172,[{"start":65,"length":25,"messageText":"Cannot find module '@/oss/lib/helpers/utils' or its corresponding type declarations.","category":1,"code":2307}]],[6173,[{"start":21,"length":25,"messageText":"Cannot find module '@/oss/lib/helpers/utils' or its corresponding type declarations.","category":1,"code":2307}]],[6174,[{"start":21,"length":25,"messageText":"Cannot find module '@/oss/lib/helpers/utils' or its corresponding type declarations.","category":1,"code":2307}]],[6175,[{"start":65,"length":25,"messageText":"Cannot find module '@/oss/lib/helpers/utils' or its corresponding type declarations.","category":1,"code":2307}]],[6524,[{"start":101,"length":34,"messageText":"Cannot find module '@/oss/services/automations/types' or its corresponding type declarations.","category":1,"code":2307}]],[6526,[{"start":53,"length":34,"messageText":"Cannot find module '@/oss/services/automations/types' or its corresponding type declarations.","category":1,"code":2307}]],[6527,[{"start":116,"length":34,"messageText":"Cannot find module '@/oss/services/automations/types' or its corresponding type declarations.","category":1,"code":2307}]],[6528,[{"start":68,"length":34,"messageText":"Cannot find module '@/oss/services/automations/types' or its corresponding type declarations.","category":1,"code":2307}]],[6529,[{"start":66,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307}]],[6530,[{"start":508,"length":17,"messageText":"Cannot find module '@/oss/state/app' or its corresponding type declarations.","category":1,"code":2307},{"start":581,"length":31,"messageText":"Cannot find module '@/oss/state/app/selectors/app' or its corresponding type declarations.","category":1,"code":2307},{"start":648,"length":22,"messageText":"Cannot find module '@/oss/state/appState' or its corresponding type declarations.","category":1,"code":2307},{"start":1004,"length":7,"code":2339,"category":1,"messageText":"Property 'appType' does not exist on type '{}'."},{"start":1138,"length":8,"messageText":"'appState' is of type 'unknown'.","category":1,"code":18046},{"start":1209,"length":8,"messageText":"'appState' is of type 'unknown'.","category":1,"code":18046},{"start":1273,"length":8,"messageText":"'appState' is of type 'unknown'.","category":1,"code":18046},{"start":2873,"length":5,"code":2339,"category":1,"messageText":"Property 'flags' does not exist on type '{}'."}]],[6533,[{"start":66,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307}]],[6537,[{"start":610,"length":31,"messageText":"Cannot find module '@/oss/state/app/selectors/app' or its corresponding type declarations.","category":1,"code":2307},{"start":5433,"length":2,"code":2339,"category":1,"messageText":"Property 'id' does not exist on type '{}'."},{"start":5474,"length":4,"code":2339,"category":1,"messageText":"Property 'name' does not exist on type '{}'."},{"start":5494,"length":4,"code":2339,"category":1,"messageText":"Property 'slug' does not exist on type '{}'."}]],[6543,[{"start":28,"length":77,"messageText":"Cannot find module '@/oss/components/TestcasesTableNew/components/TestcaseEditDrawer/fieldUtils' or its corresponding type declarations.","category":1,"code":2307}]],[6544,[{"start":688,"length":77,"messageText":"Cannot find module '@/oss/components/TestcasesTableNew/components/TestcaseEditDrawer/fieldUtils' or its corresponding type declarations.","category":1,"code":2307},{"start":56762,"length":8,"code":2322,"category":1,"messageText":{"messageText":"Type '(idx: number) => void' is not assignable to type 'SelectHandler'.","category":1,"code":2322,"next":[{"messageText":"Types of parameters 'idx' and 'value' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'number | null' is not assignable to type 'number'.","category":1,"code":2322,"next":[{"messageText":"Type 'null' is not assignable to type 'number'.","category":1,"code":2322}]}]}]},"relatedInformation":[{"file":"./node_modules/.pnpm/@rc-component+select@1.5.0_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@rc-component/select/lib/select.d.ts","start":3663,"length":8,"messageText":"The expected type comes from property 'onSelect' which is declared here on type 'IntrinsicAttributes & SelectProps & { children?: ReactNode; } & RefAttributes'","category":3,"code":6500}]}]],[6545,[{"start":127,"length":29,"messageText":"Cannot find module '@/oss/state/entities/shared' or its corresponding type declarations.","category":1,"code":2307},{"start":331,"length":29,"messageText":"Cannot find module '@/oss/state/entities/shared' or its corresponding type declarations.","category":1,"code":2307}]],[6546,[{"start":72,"length":31,"messageText":"Cannot find module '@/oss/state/entities/testcase' or its corresponding type declarations.","category":1,"code":2307},{"start":130,"length":43,"messageText":"Cannot find module '@/oss/state/entities/testcase/columnState' or its corresponding type declarations.","category":1,"code":2307},{"start":366,"length":31,"messageText":"Cannot find module '@/oss/state/entities/testcase' or its corresponding type declarations.","category":1,"code":2307}]],[6547,[{"start":931,"length":40,"messageText":"Cannot find module '@/oss/components/CopyButton/CopyButton' or its corresponding type declarations.","category":1,"code":2307},{"start":1002,"length":35,"messageText":"Cannot find module '@/oss/lib/helpers/copyToClipboard' or its corresponding type declarations.","category":1,"code":2307},{"start":1094,"length":25,"messageText":"Cannot find module '@/oss/lib/helpers/utils' or its corresponding type declarations.","category":1,"code":2307},{"start":32943,"length":4,"messageText":"Parameter 'file' implicitly has an 'any' type.","category":1,"code":7006},{"start":32949,"length":5,"messageText":"Parameter 'index' implicitly has an 'any' type.","category":1,"code":7006},{"start":35527,"length":5,"messageText":"Parameter 'image' implicitly has an 'any' type.","category":1,"code":7006},{"start":35534,"length":5,"messageText":"Parameter 'index' implicitly has an 'any' type.","category":1,"code":7006},{"start":36386,"length":9,"messageText":"Cannot find name 'traceSpan'.","category":1,"code":2304},{"start":36468,"length":25,"messageText":"Cannot find name 'traceSpanMoleculeMolecule'. Did you mean 'traceSpanMolecule'?","category":1,"code":2552,"canonicalHead":{"code":2304,"messageText":"Cannot find name 'traceSpanMoleculeMolecule'."}}]],[6548,[{"start":296,"length":77,"messageText":"Cannot find module '@/oss/components/TestcasesTableNew/components/TestcaseEditDrawer/fieldUtils' or its corresponding type declarations.","category":1,"code":2307},{"start":418,"length":29,"messageText":"Cannot find module '@/oss/state/entities/shared' or its corresponding type declarations.","category":1,"code":2307}]],[6551,[{"start":103,"length":18,"messageText":"Module '\"../../EnhancedUIs/Button\"' has no exported member 'TooltipButtonProps'. Did you mean to use 'import TooltipButtonProps from \"../../EnhancedUIs/Button\"' instead?","category":1,"code":2614}]],[6563,[{"start":59,"length":21,"messageText":"Cannot find module '@/oss/state/project' or its corresponding type declarations.","category":1,"code":2307}]],[6565,[{"start":110,"length":37,"messageText":"Cannot find module '@/oss/lib/evaluations/buildRunIndex' or its corresponding type declarations.","category":1,"code":2307},{"start":4420,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046},{"start":4519,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046},{"start":4647,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046},{"start":4738,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046},{"start":4823,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046},{"start":4927,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046},{"start":4968,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046}]],[6566,[{"start":193,"length":37,"messageText":"Cannot find module '@/oss/lib/evaluations/buildRunIndex' or its corresponding type declarations.","category":1,"code":2307},{"start":266,"length":26,"messageText":"Cannot find module '@/oss/lib/helpers/casing' or its corresponding type declarations.","category":1,"code":2307},{"start":366,"length":64,"messageText":"Cannot find module '@/oss/lib/hooks/usePreviewEvaluations/assets/previewRunBatcher' or its corresponding type declarations.","category":1,"code":2307},{"start":557,"length":59,"messageText":"Cannot find module '@/agenta-oss-common/lib/hooks/usePreviewEvaluations/types' or its corresponding type declarations.","category":1,"code":2307},{"start":4645,"length":4,"messageText":"Binding element 'step' implicitly has an 'any' type.","category":1,"code":7031}]],[6567,[{"start":137,"length":44,"messageText":"Cannot find module '@/oss/lib/evaluations/utils/evaluationKind' or its corresponding type declarations.","category":1,"code":2307}]],[6571,[{"start":95,"length":37,"messageText":"Cannot find module '@/oss/lib/evaluations/buildRunIndex' or its corresponding type declarations.","category":1,"code":2307},{"start":169,"length":23,"messageText":"Cannot find module '@/oss/lib/metricUtils' or its corresponding type declarations.","category":1,"code":2307},{"start":8188,"length":4,"code":2322,"category":1,"messageText":{"messageText":"Type 'EvaluationColumnGroupKind' is not assignable to type '\"input\" | \"invocation\"'.","category":1,"code":2322,"next":[{"messageText":"Type '\"meta\"' is not assignable to type '\"input\" | \"invocation\"'.","category":1,"code":2322}]},"relatedInformation":[{"start":3663,"length":4,"messageText":"The expected type comes from property 'kind' which is declared here on type 'StepGroupInfo'","category":3,"code":6500}]},{"start":9402,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046},{"start":9432,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046},{"start":9540,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046},{"start":9570,"length":4,"messageText":"'meta' is of type 'unknown'.","category":1,"code":18046},{"start":10731,"length":7,"messageText":"Parameter 'mapping' implicitly has an 'any' type.","category":1,"code":7006},{"start":10809,"length":7,"messageText":"Parameter 'mapping' implicitly has an 'any' type.","category":1,"code":7006}]],[6572,[{"start":33,"length":23,"messageText":"Cannot find module '@/oss/lib/evaluations' or its corresponding type declarations.","category":1,"code":2307},{"start":92,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307}]],[6573,[{"start":95,"length":37,"messageText":"Cannot find module '@/oss/lib/evaluations/buildRunIndex' or its corresponding type declarations.","category":1,"code":2307},{"start":3999,"length":6,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'ColumnDescriptorInput' is not assignable to parameter of type 'EvaluationTableColumn'.","category":1,"code":2345,"next":[{"messageText":"Property 'label' is missing in type 'ColumnDescriptorInput' but required in type 'EvaluationTableColumn'.","category":1,"code":2741}]},"relatedInformation":[{"file":"./oss/src/components/evalrundetails/atoms/table/types.ts","start":376,"length":5,"messageText":"'label' is declared here.","category":3,"code":2728}]}]],[6576,[{"start":18,"length":34,"messageText":"Cannot find module '@/oss/lib/api/assets/axiosConfig' or its corresponding type declarations.","category":1,"code":2307},{"start":89,"length":23,"messageText":"Cannot find module '@/oss/lib/metricUtils' or its corresponding type declarations.","category":1,"code":2307},{"start":28306,"length":2,"messageText":"Parameter 'id' implicitly has an 'any' type.","category":1,"code":7006},{"start":28939,"length":2,"messageText":"Parameter 'id' implicitly has an 'any' type.","category":1,"code":7006},{"start":29411,"length":14,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'staleMetricIds' does not exist in type 'RunRefreshDetailResult'."},{"start":30764,"length":14,"code":2339,"category":1,"messageText":"Property 'staleMetricIds' does not exist on type 'ScenarioRefreshDetailResult'."},{"start":30843,"length":14,"code":2339,"category":1,"messageText":"Property 'staleMetricIds' does not exist on type 'RunRefreshDetailResult'."}]],[6577,[{"start":263,"length":34,"messageText":"Cannot find module '@/oss/lib/api/assets/axiosConfig' or its corresponding type declarations.","category":1,"code":2307},{"start":333,"length":44,"messageText":"Cannot find module '@/oss/lib/evaluations/utils/evaluationKind' or its corresponding type declarations.","category":1,"code":2307},{"start":413,"length":26,"messageText":"Cannot find module '@/oss/lib/helpers/casing' or its corresponding type declarations.","category":1,"code":2307},{"start":476,"length":23,"messageText":"Cannot find module '@/oss/lib/metricUtils' or its corresponding type declarations.","category":1,"code":2307},{"start":531,"length":21,"messageText":"Cannot find module '@/oss/state/project' or its corresponding type declarations.","category":1,"code":2307},{"start":767,"length":15,"messageText":"Module '\"./metricProcessor\"' declares 'MetricProcessor' locally, but it is not exported.","category":1,"code":2459,"relatedInformation":[{"file":"./oss/src/components/evalrundetails/atoms/metricprocessor.ts","start":178,"length":15,"messageText":"'MetricProcessor' is declared here.","category":3,"code":2728}]},{"start":793,"length":11,"messageText":"Module '\"./metricProcessor\"' declares 'MetricScope' locally, but it is not exported.","category":1,"code":2459,"relatedInformation":[{"file":"./oss/src/components/evalrundetails/atoms/metricprocessor.ts","start":319,"length":11,"messageText":"'MetricScope' is declared here.","category":3,"code":2728}]},{"start":9491,"length":20,"messageText":"Cannot find name 'applyAggregatesToRaw'.","category":1,"code":2304}]],[6578,[{"start":136,"length":34,"messageText":"Cannot find module '@/oss/lib/api/assets/axiosConfig' or its corresponding type declarations.","category":1,"code":2307},{"start":206,"length":26,"messageText":"Cannot find module '@/oss/lib/helpers/casing' or its corresponding type declarations.","category":1,"code":2307},{"start":4176,"length":8,"messageText":"Parameter 'scenario' implicitly has an 'any' type.","category":1,"code":7006}]],[6580,[{"start":223,"length":34,"messageText":"Cannot find module '@/oss/lib/api/assets/axiosConfig' or its corresponding type declarations.","category":1,"code":2307},{"start":293,"length":17,"messageText":"Cannot find module '@/oss/lib/Types' or its corresponding type declarations.","category":1,"code":2307},{"start":342,"length":21,"messageText":"Cannot find module '@/oss/state/project' or its corresponding type declarations.","category":1,"code":2307},{"start":3564,"length":31,"messageText":"Expected 1 arguments, but got 0.","category":1,"code":2554,"relatedInformation":[{"file":"./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/atomfamily.d.mts","start":731,"length":12,"messageText":"An argument for 'param' was not provided.","category":3,"code":6210}]}]],[6583,[{"start":186,"length":39,"messageText":"Cannot find module '@/oss/components/InfiniteVirtualTable' or its corresponding type declarations.","category":1,"code":2307},{"start":266,"length":66,"messageText":"Cannot find module '@/oss/components/InfiniteVirtualTable/createInfiniteDatasetStore' or its corresponding type declarations.","category":1,"code":2307},{"start":2424,"length":3,"messageText":"Binding element 'get' implicitly has an 'any' type.","category":1,"code":7031},{"start":2559,"length":7,"messageText":"Binding element 'scopeId' implicitly has an 'any' type.","category":1,"code":7031},{"start":2568,"length":4,"messageText":"Binding element 'meta' implicitly has an 'any' type.","category":1,"code":7031},{"start":2638,"length":7,"messageText":"Binding element 'scopeId' implicitly has an 'any' type.","category":1,"code":7031},{"start":2647,"length":6,"messageText":"Binding element 'cursor' implicitly has an 'any' type.","category":1,"code":7031},{"start":2655,"length":5,"messageText":"Binding element 'limit' implicitly has an 'any' type.","category":1,"code":7031},{"start":2662,"length":6,"messageText":"Binding element 'offset' implicitly has an 'any' type.","category":1,"code":7031},{"start":2670,"length":9,"messageText":"Binding element 'windowing' implicitly has an 'any' type.","category":1,"code":7031},{"start":2681,"length":4,"messageText":"Binding element 'meta' implicitly has an 'any' type.","category":1,"code":7031},{"start":4779,"length":4,"messageText":"Parameter 'meta' implicitly has an 'any' type.","category":1,"code":7006},{"start":5069,"length":6,"messageText":"Parameter 'params' implicitly has an 'any' type.","category":1,"code":7006},{"start":5171,"length":6,"messageText":"Parameter 'params' implicitly has an 'any' type.","category":1,"code":7006},{"start":5286,"length":6,"messageText":"Parameter 'params' implicitly has an 'any' type.","category":1,"code":7006}]],[6584,[{"start":276,"length":34,"messageText":"Cannot find module '@/oss/lib/api/assets/axiosConfig' or its corresponding type declarations.","category":1,"code":2307},{"start":342,"length":51,"messageText":"Cannot find module '@/oss/lib/hooks/useAnnotations/assets/transformer' or its corresponding type declarations.","category":1,"code":2307},{"start":427,"length":38,"messageText":"Cannot find module '@/oss/lib/hooks/useAnnotations/types' or its corresponding type declarations.","category":1,"code":2307},{"start":497,"length":21,"messageText":"Cannot find module '@/oss/state/project' or its corresponding type declarations.","category":1,"code":2307},{"start":554,"length":39,"messageText":"Cannot find module '@/oss/state/workspace/atoms/selectors' or its corresponding type declarations.","category":1,"code":2307},{"start":1731,"length":7,"messageText":"'members' is of type 'unknown'.","category":1,"code":18046},{"start":1744,"length":6,"messageText":"Parameter 'member' implicitly has an 'any' type.","category":1,"code":7006}]],[6585,[{"start":29,"length":23,"messageText":"Cannot find module '@/oss/lib/evaluations' or its corresponding type declarations.","category":1,"code":2307},{"start":99,"length":29,"messageText":"Cannot find module '@/oss/lib/traces/traceUtils' or its corresponding type declarations.","category":1,"code":2307}]],[6586,[{"start":211,"length":34,"messageText":"Cannot find module '@/oss/lib/api/assets/axiosConfig' or its corresponding type declarations.","category":1,"code":2307},{"start":279,"length":23,"messageText":"Cannot find module '@/oss/lib/evaluations' or its corresponding type declarations.","category":1,"code":2307},{"start":338,"length":26,"messageText":"Cannot find module '@/oss/lib/helpers/casing' or its corresponding type declarations.","category":1,"code":2307},{"start":396,"length":21,"messageText":"Cannot find module '@/oss/state/project' or its corresponding type declarations.","category":1,"code":2307},{"start":532,"length":9,"messageText":"Cannot find module './types' or its corresponding type declarations.","category":1,"code":2307},{"start":5049,"length":26,"messageText":"Expected 1 arguments, but got 0.","category":1,"code":2554,"relatedInformation":[{"file":"./node_modules/.pnpm/jotai@2.16.1_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.0.10_react@19.0.0/node_modules/jotai/esm/vanilla/utils/atomfamily.d.mts","start":731,"length":12,"messageText":"An argument for 'param' was not provided.","category":3,"code":6210}]}]],[6587,[{"start":289,"length":23,"messageText":"Cannot find module '@/oss/lib/evaluations' or its corresponding type declarations.","category":1,"code":2307},{"start":362,"length":30,"messageText":"Cannot find module '@/oss/services/tracing/types' or its corresponding type declarations.","category":1,"code":2307}]],[6588,[{"start":107,"length":23,"messageText":"Cannot find module '@/oss/lib/evaluations' or its corresponding type declarations.","category":1,"code":2307},{"start":4265,"length":3,"messageText":"Parameter 'key' implicitly has an 'any' type.","category":1,"code":7006},{"start":6382,"length":3,"messageText":"Parameter 'key' implicitly has an 'any' type.","category":1,"code":7006}]],[6589,[{"start":18,"length":34,"messageText":"Cannot find module '@/oss/lib/api/assets/axiosConfig' or its corresponding type declarations.","category":1,"code":2307},{"start":83,"length":23,"messageText":"Cannot find module '@/oss/lib/helpers/api' or its corresponding type declarations.","category":1,"code":2307},{"start":138,"length":21,"messageText":"Cannot find module '@/oss/state/project' or its corresponding type declarations.","category":1,"code":2307}]],[6590,[{"start":177,"length":34,"messageText":"Cannot find module '@/oss/lib/api/assets/axiosConfig' or its corresponding type declarations.","category":1,"code":2307},{"start":2431,"length":4,"code":2339,"category":1,"messageText":"Property 'refs' does not exist on type '{}'."},{"start":7989,"length":21,"code":2345,"category":1,"messageText":"Argument of type '`id:${string}`' is not assignable to parameter of type '\"variant\" | \"revision\" | \"query\"'."},{"start":8048,"length":25,"code":2345,"category":1,"messageText":"Argument of type '`slug:${string}`' is not assignable to parameter of type '\"variant\" | \"revision\" | \"query\"'."},{"start":8165,"length":70,"code":2345,"category":1,"messageText":{"messageText":"Argument of type '`version:${string}` | `version:${number}`' is not assignable to parameter of type '\"variant\" | \"revision\" | \"query\"'.","category":1,"code":2345,"next":[{"messageText":"Type '`version:${string}`' is not assignable to type '\"variant\" | \"revision\" | \"query\"'.","category":1,"code":2322}]}},{"start":19359,"length":7,"code":2322,"category":1,"messageText":{"messageText":"Type '\"\" | EvaluationQueryRevisionSnapshot | null' is not assignable to type 'EvaluationQueryRevisionSnapshot | null'.","category":1,"code":2322,"next":[{"messageText":"Type '\"\"' has no properties in common with type 'EvaluationQueryRevisionSnapshot'.","category":1,"code":2559}]}},{"start":19888,"length":7,"code":2322,"category":1,"messageText":{"messageText":"Type '\"\" | EvaluationQueryRevisionSnapshot | null' is not assignable to type 'EvaluationQueryRevisionSnapshot | null'.","category":1,"code":2322,"next":[{"messageText":"Type '\"\"' has no properties in common with type 'EvaluationQueryRevisionSnapshot'.","category":1,"code":2559}]}},{"start":22301,"length":10,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 3, '(getOptions: (get: Getter) => UndefinedInitialDataOptions, getQueryClient?: ((get: Getter) => QueryClient) | undefined): WritableAtom<...>', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(get: Getter) => { queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to parameter of type '(get: Getter) => UndefinedInitialDataOptions'.","category":1,"code":2345,"next":[{"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'UndefinedInitialDataOptions'.","category":1,"code":2322,"next":[{"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'AtomWithQueryOptions'.","category":1,"code":2322,"next":[{"messageText":"Types of property 'queryFn' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type '() => Promise' is not assignable to type 'unique symbol | QueryFunction | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '() => Promise' is not assignable to type 'QueryFunction'.","category":1,"code":2322,"next":[{"messageText":"Type 'Promise' is not assignable to type 'EvaluationQueryConfigurationResult | Promise'.","category":1,"code":2322,"next":[{"messageText":"Type 'Promise' is not assignable to type 'Promise'.","category":1,"code":2322,"next":[{"messageText":"Type 'EvaluationQueryConfigurationResult | null' is not assignable to type 'EvaluationQueryConfigurationResult'.","category":1,"code":2322,"next":[{"messageText":"Type 'null' is not assignable to type 'EvaluationQueryConfigurationResult'.","category":1,"code":2322}]}]}],"canonicalHead":{"code":2322,"messageText":"Type '() => Promise' is not assignable to type 'QueryFunction'."}}]}],"canonicalHead":{"code":2322,"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'AtomWithQueryOptions'."}}]}]}]}]}]},{"messageText":"Overload 2 of 3, '(getOptions: (get: Getter) => DefinedInitialDataOptions, getQueryClient?: ((get: Getter) => QueryClient) | undefined): WritableAtom<...>', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(get: Getter) => { queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to parameter of type '(get: Getter) => DefinedInitialDataOptions'.","category":1,"code":2345,"next":[{"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'DefinedInitialDataOptions'.","category":1,"code":2322,"next":[{"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'AtomWithQueryOptions'.","category":1,"code":2322,"next":[{"messageText":"Types of property 'queryFn' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type '() => Promise' is not assignable to type 'unique symbol | QueryFunction | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '() => Promise' is not assignable to type 'QueryFunction'.","category":1,"code":2322,"next":[{"messageText":"Type 'Promise' is not assignable to type 'EvaluationQueryConfigurationResult | Promise'.","category":1,"code":2322,"next":[{"messageText":"Type 'Promise' is not assignable to type 'Promise'.","category":1,"code":2322,"next":[{"messageText":"Type 'EvaluationQueryConfigurationResult | null' is not assignable to type 'EvaluationQueryConfigurationResult'.","category":1,"code":2322,"next":[{"messageText":"Type 'null' is not assignable to type 'EvaluationQueryConfigurationResult'.","category":1,"code":2322}]}]}],"canonicalHead":{"code":2322,"messageText":"Type '() => Promise' is not assignable to type 'QueryFunction'."}}]}],"canonicalHead":{"code":2322,"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'AtomWithQueryOptions'."}}]}]}]}]}]},{"messageText":"Overload 3 of 3, '(getOptions: (get: Getter) => AtomWithQueryOptions, getQueryClient?: ((get: Getter) => QueryClient) | undefined): WritableAtom<...>', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(get: Getter) => { queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to parameter of type '(get: Getter) => AtomWithQueryOptions'.","category":1,"code":2345,"next":[{"messageText":"Call signature return types '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' and 'AtomWithQueryOptions' are incompatible.","category":1,"code":2202,"next":[{"messageText":"The types of 'queryFn' are incompatible between these types.","category":1,"code":2200,"next":[{"messageText":"Type '() => Promise' is not assignable to type 'unique symbol | QueryFunction | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '() => Promise' is not assignable to type 'QueryFunction'.","category":1,"code":2322,"next":[{"messageText":"Type 'Promise' is not assignable to type 'EvaluationQueryConfigurationResult | Promise'.","category":1,"code":2322,"next":[{"messageText":"Type 'Promise' is not assignable to type 'Promise'.","category":1,"code":2322,"next":[{"messageText":"Type 'EvaluationQueryConfigurationResult | null' is not assignable to type 'EvaluationQueryConfigurationResult'.","category":1,"code":2322,"next":[{"messageText":"Type 'null' is not assignable to type 'EvaluationQueryConfigurationResult'.","category":1,"code":2322}]}]}],"canonicalHead":{"code":2322,"messageText":"Type '() => Promise' is not assignable to type 'QueryFunction'."}}]}],"canonicalHead":{"code":2322,"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'AtomWithQueryOptions'."}}]}]}]}]}]},"relatedInformation":[]},{"start":23526,"length":10,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 3, '(getOptions: (get: Getter) => UndefinedInitialDataOptions, getQueryClient?: ((get: Getter) => QueryClient) | undefined): WritableAtom<...>', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(get: Getter) => { queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to parameter of type '(get: Getter) => UndefinedInitialDataOptions'.","category":1,"code":2345,"next":[{"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'UndefinedInitialDataOptions'.","category":1,"code":2322,"next":[{"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'AtomWithQueryOptions'.","category":1,"code":2322,"next":[{"messageText":"Types of property 'queryFn' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type '() => Promise' is not assignable to type 'unique symbol | QueryFunction | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '() => Promise' is not assignable to type 'QueryFunction'.","category":1,"code":2322,"next":[{"messageText":"Type 'Promise' is not assignable to type 'EvaluationQueryConfigurationResult | Promise'.","category":1,"code":2322,"next":[{"messageText":"Type 'Promise' is not assignable to type 'Promise'.","category":1,"code":2322,"next":[{"messageText":"Type 'EvaluationQueryConfigurationResult | null' is not assignable to type 'EvaluationQueryConfigurationResult'.","category":1,"code":2322,"next":[{"messageText":"Type 'null' is not assignable to type 'EvaluationQueryConfigurationResult'.","category":1,"code":2322}]}]}],"canonicalHead":{"code":2322,"messageText":"Type '() => Promise' is not assignable to type 'QueryFunction'."}}]}],"canonicalHead":{"code":2322,"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'AtomWithQueryOptions'."}}]}]}]}]}]},{"messageText":"Overload 2 of 3, '(getOptions: (get: Getter) => DefinedInitialDataOptions, getQueryClient?: ((get: Getter) => QueryClient) | undefined): WritableAtom<...>', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(get: Getter) => { queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to parameter of type '(get: Getter) => DefinedInitialDataOptions'.","category":1,"code":2345,"next":[{"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'DefinedInitialDataOptions'.","category":1,"code":2322,"next":[{"messageText":"Type '{ queryKey: any[]; enabled: boolean; staleTime: number; gcTime: number; refetchOnWindowFocus: false; refetchOnReconnect: false; queryFn: () => Promise; }' is not assignable to type 'AtomWithQueryOptions'.","category":1,"code":2322,"next":[{"messageText":"Types of property 'queryFn' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type '() => Promise' is not assignable to type 'unique symbol | QueryFunction | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '() => Promise' is not assignable to type 'QueryFunction'.","category":1,"code":2322,"next":[{"messageText":"Type 'Promise