@clovnet/plugin-sdk 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data.ts","../src/datasets.ts","../src/jobs.ts","../src/migrations.ts","../src/catalog.ts","../src/actions.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js","../src/action-schemas.ts","../src/actions-validation.ts","../src/codegen.ts"],"sourcesContent":["/**\n * Scoped data reads (`ctx.data`) — the contract half of the host's\n * ReadModelRegistry. Plugins never query tables: they call named, versioned\n * read models, and may only call a model whose required scope is declared in\n * `manifest.permissions.dataScopes`. Results are DTOs, never entities —\n * `passwordHash`/`refreshTokenHash`/secrets are structurally absent from\n * these shapes.\n */\n\n/** Read-model scopes. Granted per manifest; enforced fail-closed per call. */\nexport type DataScope =\n | \"players:read\" // id, status, createdAt — NO PII\n | \"players:pii\" // + email, username, phone (separate, deliberate grant)\n | \"wallet:read\" // balances (projection), bucket totals\n | \"ledger:read\" // wallet_ledger rows (read-only, paginated)\n | \"bets:read\" // bet/settle/rollback transactions\n | \"bonus:read\"\n | \"affiliate:read\"\n | \"tenant:read\" // tenant metadata: region, currencies\n // Player-account surface (PLAYER_ACCOUNT_BUILD_PROMPT.md §5.8/§8.4):\n | \"kyc:read\" // KYC requests/state — NO document content, NO signed URLs\n | \"documents:read\" // document METADATA (type/status/size) — never bytes\n | \"limits:read\" // responsible-gaming limits (read-only)\n // Game-catalog content surface (§7b):\n | \"catalog:read\"; // tenant-resolved catalog reads (visibility/overlays/eligibility applied)\n\nexport const DataScopes: readonly DataScope[] = [\n \"players:read\",\n \"players:pii\",\n \"wallet:read\",\n \"ledger:read\",\n \"bets:read\",\n \"bonus:read\",\n \"affiliate:read\",\n \"tenant:read\",\n \"kyc:read\",\n \"documents:read\",\n \"limits:read\",\n \"catalog:read\",\n] as const;\n\n/** Cursor-paginated page shape shared by list read models. Max page 200. */\nexport interface ReadModelPage<T> {\n items: T[];\n nextCursor?: string;\n}\n\n/**\n * Player DTO. PII fields (`email`, `username`, `phone`) are populated only\n * when the plugin holds `players:pii`; with bare `players:read` they are\n * absent from the result.\n */\nexport interface PlayerSummaryDTO {\n id: string;\n brandId: string;\n status: string;\n createdAt: string; // ISO 8601\n email?: string | null;\n username?: string | null;\n phone?: string | null;\n}\n\n/** Wallet projection snapshot — buckets, never a mutation surface. */\nexport interface WalletBalanceDTO {\n walletId: string;\n playerId: string;\n currency: string;\n cash: string; // decimal string, 4dp — Money is never a float\n bonus: string;\n locked: string;\n status: string;\n}\n\n/** One immutable `wallet_ledger` leg. */\nexport interface LedgerEntryDTO {\n id: string;\n playerId: string;\n walletId: string;\n transactionId: string;\n walletType: string;\n direction: \"credit\" | \"debit\";\n amount: string;\n currency: string;\n balanceBefore: string;\n balanceAfter: string;\n createdAt: string;\n}\n\n/** A bet-flow wallet transaction (type bet | settle | rollback). */\nexport interface BetRecordDTO {\n transactionId: string;\n playerId: string;\n walletId: string;\n type: string;\n amount: string;\n currency: string;\n source: string;\n externalTransactionId: string | null;\n gameId: string | null;\n status: string;\n createdAt: string;\n}\n\nexport interface TenantInfoDTO {\n tenantId: string;\n brandId: string;\n region: string;\n /** Currencies with at least one wallet in this tenant. */\n currencies: string[];\n}\n\n/** player_kyc_state projection — level/status only, never document content. */\nexport interface KycStateDTO {\n playerId: string;\n level: number;\n status: string;\n approvedAt: string | null;\n}\n\nexport interface KycRequestDTO {\n id: string;\n playerId: string;\n trigger: string;\n status: string;\n targetLevel: number | null;\n requiredDocumentTypes: string[];\n createdAt: string;\n}\n\n/** Document METADATA — storageRef/bytes/signed URLs are structurally absent. */\nexport interface KycDocumentDTO {\n id: string;\n playerId: string;\n kycRequestId: string | null;\n documentTypeKey: string;\n status: string;\n mimeType: string;\n sizeBytes: number;\n uploadedAt: string;\n}\n\n/** A player-history bet row (the `bets` projection, not wallet transactions). */\nexport interface PlayerBetDTO {\n betId: string;\n playerId: string;\n roundId: string;\n providerKey: string;\n gameId: string | null;\n betAmount: string;\n winAmount: string | null;\n currency: string;\n status: string;\n placedAt: string;\n}\n\nexport interface GameSessionDTO {\n id: string;\n playerId: string;\n providerKey: string;\n gameId: string | null;\n status: string;\n betCount: number;\n startedAt: string;\n lastActivityAt: string | null;\n}\n\n/** A responsible-gaming limit (read-only — no RG command is plugin-reachable). */\nexport interface PlayerLimitDTO {\n playerId: string;\n kind: string;\n period: string;\n value: string;\n currency: string | null;\n pendingValue: string | null;\n pendingActiveAt: string | null;\n}\n\n// ── Game-catalog read models (§7b) — tenant-RESOLVED views: visibility,\n// operator overlays and geo/currency eligibility are applied by the platform\n// resolver; plugins never re-implement them. ────────────────────────────────\n\n/** A visible game, resolved for the tenant (overlay name/featured applied). */\nexport interface CatalogGameDTO {\n id: string;\n slug: string | null;\n /** Locale-picked title (overlay override wins). */\n title: string | null;\n /** Full i18n name map. */\n name: unknown;\n providerId: string;\n launchCode: string | null;\n imageUrl: string | null;\n rtp: string | null;\n minBet: string | null;\n maxBet: string | null;\n featured: boolean;\n features: Record<string, unknown>;\n}\n\n/** A resolved category tree node (tenant visibility/sort/label applied). */\nexport interface CatalogCategoryNodeDTO {\n id: string;\n slug: string;\n title: string | null;\n kind: string;\n sort: number;\n children: CatalogCategoryNodeDTO[];\n}\n\n/** A provider visible to the tenant (enabled ∪ tenant-owned). */\nexport interface CatalogProviderDTO {\n id: string;\n externalId: string;\n name: string;\n alias: string | null;\n logoUrl: string | null;\n logoPath: string | null;\n weight: number;\n parentProviderId: string | null;\n}\n\n/**\n * Optional eligibility context accepted by the catalog read models — passed\n * through to the platform resolver so plugin routes automatically respect\n * restriction-group geo blocking and currency-group filtering. Restriction\n * groups only ever NARROW availability: a plugin's own groups apply on top\n * of tenant/platform compliance, never instead of it.\n */\nexport interface CatalogEligibilityParams {\n /** Raw country (alpha-2/alpha-3); normalized by the resolver. */\n country?: string;\n /** ISO-4217 currency — when set, currency filtering is strict. */\n currency?: string;\n locale?: string;\n}\n\n/**\n * The read-model catalog: name → { params, result }. The host implements each\n * entry with Zod-validated params, tenant-filtered repositories and explicit\n * indexes; this map is what makes `ctx.data.query` type-safe for plugin code.\n */\nexport interface ReadModelDefinitions {\n \"players.list\": {\n params: { status?: string; cursor?: string; limit?: number };\n result: ReadModelPage<PlayerSummaryDTO>;\n };\n \"players.byId\": {\n params: { playerId: string };\n result: { player: PlayerSummaryDTO | null };\n };\n \"wallet.balances\": {\n params: { playerId: string };\n result: { wallets: WalletBalanceDTO[] };\n };\n \"ledger.entries\": {\n params: { playerId?: string; walletId?: string; cursor?: string; limit?: number };\n result: ReadModelPage<LedgerEntryDTO>;\n };\n \"bets.list\": {\n params: { playerId?: string; gameId?: string; source?: string; cursor?: string; limit?: number };\n result: ReadModelPage<BetRecordDTO>;\n };\n \"bets.byRound\": {\n params: { source: string; externalTransactionId: string };\n result: { bets: BetRecordDTO[] };\n };\n \"tenant.info\": {\n params: Record<string, never>;\n result: TenantInfoDTO;\n };\n // ── Player-account surface (§5.8, §7, §8.4) ────────────────────────────────\n \"kyc.state\": {\n params: { playerId: string };\n result: { state: KycStateDTO | null };\n };\n \"kyc.requests\": {\n params: { playerId?: string; status?: string; cursor?: string; limit?: number };\n result: ReadModelPage<KycRequestDTO>;\n };\n \"kyc.documents\": {\n params: { playerId?: string; kycRequestId?: string; cursor?: string; limit?: number };\n result: ReadModelPage<KycDocumentDTO>;\n };\n \"bets.byPlayer\": {\n params: { playerId: string; status?: string; cursor?: string; limit?: number };\n result: ReadModelPage<PlayerBetDTO>;\n };\n \"gameSessions.list\": {\n params: { playerId?: string; cursor?: string; limit?: number };\n result: ReadModelPage<GameSessionDTO>;\n };\n \"limits.byPlayer\": {\n params: { playerId: string };\n result: { limits: PlayerLimitDTO[] };\n };\n // ── Game-catalog content surface (§7b) ─────────────────────────────────────\n \"catalog.games\": {\n params: CatalogEligibilityParams & {\n search?: string;\n categorySlug?: string;\n providerId?: string;\n cursor?: string;\n limit?: number;\n };\n result: ReadModelPage<CatalogGameDTO>;\n };\n \"catalog.categories\": {\n params: CatalogEligibilityParams & { cursor?: string; limit?: number };\n result: { categories: CatalogCategoryNodeDTO[]; nextCursor?: string };\n };\n \"catalog.providers\": {\n params: { cursor?: string; limit?: number };\n result: ReadModelPage<CatalogProviderDTO>;\n };\n}\n\nexport type ReadModelName = keyof ReadModelDefinitions;\nexport type ReadModelParams<Q extends ReadModelName> = ReadModelDefinitions[Q][\"params\"];\nexport type ReadModelResult<Q extends ReadModelName> = ReadModelDefinitions[Q][\"result\"];\n\n/**\n * Which scope each read model requires. Single source of truth for the host\n * enforcer AND the dev-harness doctor (declared-vs-used permission checks).\n * `players.*` additionally populates PII fields only under `players:pii`.\n */\nexport const ReadModelRequiredScopes: Record<ReadModelName, DataScope> = {\n \"players.list\": \"players:read\",\n \"players.byId\": \"players:read\",\n \"wallet.balances\": \"wallet:read\",\n \"ledger.entries\": \"ledger:read\",\n \"bets.list\": \"bets:read\",\n \"bets.byRound\": \"bets:read\",\n \"tenant.info\": \"tenant:read\",\n \"kyc.state\": \"kyc:read\",\n \"kyc.requests\": \"kyc:read\",\n \"kyc.documents\": \"documents:read\",\n \"bets.byPlayer\": \"bets:read\",\n \"gameSessions.list\": \"bets:read\",\n \"limits.byPlayer\": \"limits:read\",\n \"catalog.games\": \"catalog:read\",\n \"catalog.categories\": \"catalog:read\",\n \"catalog.providers\": \"catalog:read\",\n};\n\n/** Hard cap on any read-model page size (host clamps, never errors). */\nexport const READ_MODEL_MAX_PAGE = 200;\n","import type { z } from \"zod\";\n\n/**\n * Plugin datasets — plugin-owned custom data (the Metafields/Metaobjects\n * analogue). Declared in the manifest, provisioned at install (snapshot only;\n * rows materialize on first write), accessed exclusively through\n * `ctx.datasets` — a host-owned capability that injects `tenantId`, validates\n * every write against the declared Zod schema and enforces quotas. There is\n * no dynamic DDL, ever: all records share one table with up to three\n * extracted index columns.\n */\nexport interface PluginDatasetDecl {\n /** Record shape, validated on every write. */\n schema: z.ZodObject<z.ZodRawShape>;\n /** Business key inside the record (upsert identity). */\n keyField: string;\n /** Up to 3 top-level fields queryable via `.query({ where })`. */\n indexes?: string[];\n /** Readable by other plugins that declare `permissions.datasets.read`. */\n shared?: boolean;\n /** Per-tenant record cap. The host cap wins when smaller. */\n maxRecords?: number;\n}\n\nexport interface PluginDatasetQuery {\n /** Indexed fields only — a non-indexed field here is a ValidationError. */\n where?: Partial<Record<string, string | number | boolean>>;\n cursor?: string;\n /** Max 200 (host clamps). */\n limit?: number;\n}\n\nexport interface PluginDatasetCollection<T = Record<string, unknown>> {\n get(key: string): Promise<T | null>;\n /** Upsert by business key. */\n put(key: string, value: T): Promise<void>;\n /** Batched upsert, max 500 per call. All-or-nothing on quota breach. */\n putMany(records: Array<{ key: string; value: T }>): Promise<void>;\n delete(key: string): Promise<void>;\n query(q: PluginDatasetQuery): Promise<{ records: Array<{ key: string; value: T }>; nextCursor?: string }>;\n count(): Promise<number>;\n /** Audited; own datasets only. */\n truncate(): Promise<void>;\n}\n\n/** Host-enforced dataset limits (Phase 1, shared-table storage model). */\nexport const PLUGIN_DATASET_LIMITS = {\n maxIndexes: 3,\n maxBatch: 500,\n maxQueryLimit: 200,\n /** Serialized record cap in bytes. */\n maxRecordBytes: 65_536,\n /** Default per-tenant record quota when the declaration omits one. */\n defaultMaxRecords: 100_000,\n} as const;\n","import type { PluginContext } from \"./context.js\";\n\n/**\n * Scheduled plugin jobs. Declared in the manifest, implemented as named\n * handlers in `definePlugin({ handlers.jobs })`, executed by the JobScheduler\n * in `apps/worker` per `(tenant, enabled plugin, job)` under a Redis lock so\n * exactly one worker runs a due job. Missed schedules coalesce to ONE\n * catch-up run; handlers must be idempotent regardless.\n */\nexport interface PluginJobDecl {\n /** 5-field cron expression, UTC. Minimum effective interval: 1 minute. */\n schedule: string;\n /** Name of the implementation in `definePlugin({ handlers: { jobs } })`. */\n handler: string;\n /** Default 300, max 900. */\n timeoutSec?: number;\n}\n\nexport type PluginJobHandler = (ctx: PluginContext) => Promise<void>;\n\nexport const PLUGIN_JOB_LIMITS = {\n defaultTimeoutSec: 300,\n maxTimeoutSec: 900,\n /** Consecutive failures before `PLUGIN_JOB_FAILED` is emitted. */\n failureStreakThreshold: 3,\n} as const;\n","import type { PluginContext } from \"./context.js\";\n\n/**\n * Upgrade migrations — ordered dataset/settings transforms that run inside\n * `UpgradePluginCommand` when a tenant moves THROUGH `toVersion`. Each step is\n * recorded in `plugin_migrations` (running → completed | failed) and must be\n * idempotent: a failed upgrade leaves the OLD version running and a retry\n * resumes from the failed step's checkpoint.\n *\n * Migrations are forward-only. Rollback = pin to the old version, which never\n * re-runs old migrations — so dataset schemas must stay read-compatible one\n * version back.\n */\nexport interface PluginMigrationDecl {\n /** Runs when upgrading through this version (semver in (from, to]). */\n toVersion: string;\n /** Name of the implementation in `definePlugin({ handlers: { migrations } })`. */\n handler: string;\n description: string;\n}\n\n/**\n * Batch-transform helper handed to migration handlers. Iterates an own\n * dataset in batches of 500, applies the transform, upserts the result and\n * checkpoints the cursor into the `plugin_migrations` row after every batch —\n * a re-run after a mid-batch failure resumes where it stopped.\n */\nexport interface PluginMigrationHelper {\n transformDataset<T = Record<string, unknown>>(\n dataset: string,\n transform: (record: { key: string; value: T }) =>\n | Promise<{ key: string; value: T } | null>\n | { key: string; value: T }\n | null,\n ): Promise<{ processed: number }>;\n}\n\nexport type PluginMigrationHandler = (\n ctx: PluginContext,\n helper: PluginMigrationHelper,\n) => Promise<void>;\n\nexport const PLUGIN_MIGRATION_LIMITS = {\n batchSize: 500,\n /** Per-step timeout (ms). */\n stepTimeoutMs: 900_000,\n} as const;\n","import type { PluginContext } from \"./context.js\";\nimport type {\n NormalizedCatalog,\n NormalizedCatalogDelta,\n NormalizedCategory,\n NormalizedCurrencyGroup,\n NormalizedGame,\n NormalizedProvider,\n NormalizedRestrictionGroup,\n} from \"@cwe/catalog/source-adapter\";\n\n/**\n * Plugin catalog-content surface (§7b): plugins normalize their game content\n * into the PLATFORM catalog and manage only their own rows — search,\n * categories, visibility, eligibility, overlays, stats and caching stay 100%\n * platform code. The host registers ONE tenant-owned catalog source per\n * (tenant, plugin); every write below is scoped to that source and enforced\n * twice (bridge + tenant service). Foreign sources, global base rows,\n * operator overlays and the curated tree are unreachable from plugin code.\n */\n\n// The normalized content contract is the catalog's own source-adapter shape —\n// TYPE-only re-export (inlined into the published d.ts, same rule as the\n// @cwe/providers adapter contract; dist purity unaffected).\nexport type {\n NormalizedProvider,\n NormalizedCategory,\n NormalizedRestrictionGroup,\n NormalizedCurrencyGroup,\n NormalizedLaunchCodes,\n NormalizedGame,\n NormalizedGameCategoryLink,\n NormalizedCatalog,\n NormalizedCatalogDelta,\n} from \"@cwe/catalog/source-adapter\";\n\n/** Reserved task type the HOST executes: full ingest via the registered\n * adapter → validate → snapshot import (insert/update/retire). Plugins may\n * use it as `install.seedTask` and via `ctx.catalog.requestImport()`; they\n * never implement a handler for it. */\nexport const CATALOG_IMPORT_TASK_TYPE = \"catalog:import\";\n\n/** Plugin kinds allowed to declare `manifest.catalog` (doctor-enforced). */\nexport const CATALOG_ALLOWED_KINDS = [\"provider\", \"content\", \"integration\"] as const;\n\nexport const PLUGIN_CATALOG_LIMITS = {\n /** Max rows per family per `upsertBatch` call. */\n maxRowsPerFamily: 500,\n} as const;\n\n/** Per-family counts returned by the incremental upsert path. */\nexport interface ImportSummaryLite {\n providers: { inserted: number; updated: number };\n categories: { inserted: number; updated: number };\n restrictionGroups: { inserted: number; updated: number };\n currencyGroups: { inserted: number; updated: number };\n games: { inserted: number; updated: number; unchanged: number };\n /** Games whose category memberships changed via `gameCategories` links. */\n gameCategoryLinks: number;\n}\n\n/** Full snapshot-import summary (host `catalog:import` task result shape). */\nexport interface CatalogImportSummary {\n providers: { inserted: number; updated: number };\n categories: { inserted: number; updated: number };\n restrictionGroups: { inserted: number; updated: number };\n currencyGroups: { inserted: number; updated: number };\n games: { inserted: number; updated: number; retired: number; unchanged: number };\n skippedUnknownCategoryLinks: number;\n durationMs: number;\n}\n\n/** One of the plugin's OWN games (management view — includes retired rows). */\nexport interface OwnGameSummary {\n /** Internal catalog GameId — what wallet/analytics reference. */\n gameId: string;\n externalGameId: string;\n slug: string | null;\n name: Record<string, string> | null;\n launchCode: string | null;\n providerId: string;\n status: \"active\" | \"retired\";\n}\n\n/**\n * `ctx.catalog` — present only when the manifest declares a `catalog` block\n * AND the plugin kind is in `CATALOG_ALLOWED_KINDS`. All `*ExternalId`\n * references resolve within the plugin's own source only. A game referencing\n * an unknown provider auto-creates a stub provider row (the importer's own\n * rule — `games.providerId` is NOT NULL and must always resolve); an unknown\n * restriction/currency-group/category reference is a ValidationError naming\n * the missing externalId — compliance data is never silently invented.\n * Restriction groups only ever NARROW availability: they apply on top of —\n * never instead of — tenant/platform compliance rules.\n */\nexport interface PluginCatalogCapability {\n /**\n * RECOMMENDED incremental entry point: a partial NormalizedCatalog delta.\n * The bridge runs the SAME family ordering + second-pass FK resolution as\n * the importer (providers → restriction/currency groups → categories →\n * games → category links). No retire step (that is import-only).\n * ≤500 rows per family per call.\n */\n upsertBatch(delta: NormalizedCatalogDelta): Promise<ImportSummaryLite>;\n\n // Family-specific sugar over upsertBatch — every games-table relationship\n // is manageable:\n upsertProviders(providers: NormalizedProvider[]): Promise<{ upserted: number }>;\n upsertRestrictionGroups(groups: NormalizedRestrictionGroup[]): Promise<{ upserted: number }>;\n upsertCurrencyGroups(groups: NormalizedCurrencyGroup[]): Promise<{ upserted: number }>;\n upsertCategories(categories: NormalizedCategory[]): Promise<{ upserted: number }>;\n upsertGames(games: NormalizedGame[]): Promise<{ upserted: number }>;\n attachGameCategories(\n links: Array<{ gameExternalId: string; categoryExternalId: string }>,\n ): Promise<void>;\n\n /** Enable/disable one of the plugin's OWN games (status flip — never an\n * operator overlay, never a delete). */\n setGameStatus(externalGameId: string, enabled: boolean): Promise<void>;\n\n /** Cursor-paginated listing of the plugin's own rows (incl. retired). */\n listOwnGames(q?: {\n cursor?: string;\n limit?: number;\n }): Promise<{ games: OwnGameSummary[]; nextCursor?: string }>;\n\n /** Enqueue a full ingest via the registered adapter (the host-run\n * `catalog:import` task: ingest → validate → import with retire). */\n requestImport(): Promise<{ taskId: string }>;\n}\n\n/**\n * The plugin's catalog source adapter — registered in `setup(ctx)` via\n * `ctx.registerCatalogSource`. `ingest` receives the PluginContext so it can\n * use `ctx.http` / `ctx.settings` / `ctx.secrets`; the host adapts it to the\n * catalog's `CatalogSourceAdapter` shape and runs it inside the\n * `catalog:import` task.\n */\nexport interface PluginCatalogSourceAdapter {\n ingest(ctx: PluginContext): Promise<NormalizedCatalog>;\n}\n","/**\n * Plugin actions (manifest v3) — SDK-exposed aliases of a plugin's declared\n * `public`/`player` routes, served to frontends through the host's extension\n * catalog (`GET /api/ext/_catalog`) and called generically via\n * `sdk.ext(\"<key>\").call(\"<action>\", input)`.\n *\n * Spec: docs/prompts/PLUGIN_ACTIONS_RUNTIME_BUILD_PROMPT.md §2. The doctor\n * enforces every structural rule below at build/publish time (fail closed):\n *\n * - `route` references a declared route with surface `public` or `player` —\n * never `admin` or `callback`.\n * - `kind: \"query\"` ⇒ GET; `kind: \"mutation\"` ⇒ POST/PUT/DELETE.\n * - `idempotent` matches the referenced route declaration's flag.\n * - keys unique per plugin, camelCase.\n * - `emits` ⊆ manifest-declared emitted events (short form — see below);\n * `permissions.frontendEvents` ⊆ emitted events.\n * - `frontend.widgets[].dataAction` is a declared `query` action and\n * `actions[]` are declared mutations.\n *\n * Event-type convention: `emits` and `permissions.frontendEvents` use the\n * SHORT event type — the emitted name without its `plugin.` prefix, e.g.\n * `\"cashback.claimed\"` for an emitted `\"plugin.cashback.claimed\"`. The same\n * short type is what reaches player sockets as `ExtPluginEvent.data.type`.\n */\n\n/** camelCase action keys — a plugin's stable public API. */\nexport const ACTION_KEY_RE = /^[a-z][a-zA-Z0-9]*$/;\n\nexport interface PluginActionDecl {\n /** camelCase, unique per plugin, stable public API. */\n key: string;\n /** `\"<METHOD> <path>\"` referencing a declared route, e.g. `\"POST /claim\"`. */\n route: string;\n title: string;\n description?: string;\n kind: \"query\" | \"mutation\";\n /** Mutations requiring `Idempotency-Key` (must match the route decl). */\n idempotent?: boolean;\n /** Short plugin event types this action may cause, e.g. `\"cashback.claimed\"`. */\n emits?: string[];\n deprecated?: string;\n}\n\nexport interface PluginFrontendWidgetDecl {\n key: string;\n title: string;\n slot: \"lobby\" | \"account\" | \"cashier\" | \"game-sidebar\";\n /** Must reference a declared `kind: \"query\"` action. */\n dataAction: string;\n /** Mutation action keys the widget may invoke. */\n actions?: string[];\n}\n\nexport interface PluginFrontendDecl {\n widgets?: PluginFrontendWidgetDecl[];\n}\n\n/**\n * Parse an action's `route` reference into method + path. Returns null when\n * the string is not of the form `\"<METHOD> <path>\"`.\n */\nexport function parseActionRoute(\n route: string,\n): { method: string; path: string } | null {\n const match = /^([A-Z]+) (\\/\\S*)$/.exec(route);\n if (!match) return null;\n return { method: match[1]!, path: match[2]! };\n}\n\n/** Short event type (`<key>.<type>`) → full emitted name (`plugin.<key>.<type>`). */\nexport function fullPluginEventName(shortType: string): string {\n return `plugin.${shortType}`;\n}\n\n/** Full emitted name → short event type, or null if not `plugin.`-prefixed. */\nexport function shortPluginEventType(fullName: string): string | null {\n return fullName.startsWith(\"plugin.\") ? fullName.slice(\"plugin.\".length) : null;\n}\n","export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n if (def.description) {\n try {\n return {\n ...jsonSchema,\n ...JSON.parse(def.description),\n };\n }\n catch { }\n }\n return jsonSchema;\n};\nexport const defaultOptions = {\n name: undefined,\n $refStrategy: \"root\",\n basePath: [\"#\"],\n effectStrategy: \"input\",\n pipeStrategy: \"all\",\n dateStrategy: \"format:date-time\",\n mapStrategy: \"entries\",\n removeAdditionalStrategy: \"passthrough\",\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: \"definitions\",\n target: \"jsonSchema7\",\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n markdownDescription: false,\n patternStrategy: \"escape\",\n applyRegexFlags: false,\n emailStrategy: \"format:email\",\n base64Strategy: \"contentEncoding:base64\",\n nameStrategy: \"ref\",\n openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n ? {\n ...defaultOptions,\n name: options,\n }\n : {\n ...defaultOptions,\n ...options,\n });\n","import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n const _options = getDefaultOptions(options);\n const currentPath = _options.name !== undefined\n ? [..._options.basePath, _options.definitionPath, _options.name]\n : _options.basePath;\n return {\n ..._options,\n flags: { hasReferencedOpenAiAnyType: false },\n currentPath: currentPath,\n propertyPath: undefined,\n seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: undefined,\n },\n ])),\n };\n};\n","export function addErrorMessage(res, key, errorMessage, refs) {\n if (!refs?.errorMessages)\n return;\n if (errorMessage) {\n res.errorMessage = {\n ...res.errorMessage,\n [key]: errorMessage,\n };\n }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n res[key] = value;\n addErrorMessage(res, key, errorMessage, refs);\n}\n","export const getRelativePath = (pathA, pathB) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i])\n break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n","import { ZodFirstPartyTypeKind } from \"zod/v3\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n switch (typeName) {\n case ZodFirstPartyTypeKind.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNumber:\n return parseNumberDef(def, refs);\n case ZodFirstPartyTypeKind.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBigInt:\n return parseBigintDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUndefined:\n return parseUndefinedDef(refs);\n case ZodFirstPartyTypeKind.ZodNull:\n return parseNullDef(refs);\n case ZodFirstPartyTypeKind.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUnion:\n case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLiteral:\n return parseLiteralDef(def, refs);\n case ZodFirstPartyTypeKind.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLazy:\n return () => def.getter()._def;\n case ZodFirstPartyTypeKind.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNaN:\n case ZodFirstPartyTypeKind.ZodNever:\n return parseNeverDef(refs);\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef(refs);\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef(refs);\n case ZodFirstPartyTypeKind.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind.ZodFunction:\n case ZodFirstPartyTypeKind.ZodVoid:\n case ZodFirstPartyTypeKind.ZodSymbol:\n return undefined;\n default:\n return ((_) => undefined)(typeName);\n }\n};\n","import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n if (refs.target !== \"openAi\") {\n return {};\n }\n const anyDefinitionPath = [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ];\n refs.flags.hasReferencedOpenAiAnyType = true;\n return {\n $ref: refs.$refStrategy === \"relative\"\n ? getRelativePath(anyDefinitionPath, refs.currentPath)\n : anyDefinitionPath.join(\"/\"),\n };\n}\n","import { ZodFirstPartyTypeKind } from \"zod/v3\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n const res = {\n type: \"array\",\n };\n if (def.type?._def &&\n def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n }\n if (def.minLength) {\n setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n }\n if (def.maxLength) {\n setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n }\n if (def.exactLength) {\n setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n }\n return res;\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n const res = {\n type: \"integer\",\n format: \"int64\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n","export function parseBooleanDef() {\n return {\n type: \"boolean\",\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n return parseDef(_def.type._def, refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n const strategy = overrideDateStrategy ?? refs.dateStrategy;\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n };\n }\n switch (strategy) {\n case \"string\":\n case \"format:date-time\":\n return {\n type: \"string\",\n format: \"date-time\",\n };\n case \"format:date\":\n return {\n type: \"string\",\n format: \"date\",\n };\n case \"integer\":\n return integerDateParser(def, refs);\n }\n}\nconst integerDateParser = (def, refs) => {\n const res = {\n type: \"integer\",\n format: \"unix-time\",\n };\n if (refs.target === \"openApi3\") {\n return res;\n }\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n }\n }\n return res;\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue(),\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n return refs.effectStrategy === \"input\"\n ? parseDef(_def.schema._def, refs)\n : parseAnyDef(refs);\n}\n","export function parseEnumDef(def) {\n return {\n type: \"string\",\n enum: Array.from(def.values),\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n if (\"type\" in type && type.type === \"string\")\n return false;\n return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n const allOf = [\n parseDef(def.left._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n }),\n parseDef(def.right._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n }),\n ].filter((x) => !!x);\n let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n ? { unevaluatedProperties: false }\n : undefined;\n const mergedAllOf = [];\n // If either of the schemas is an allOf, merge them into a single allOf\n allOf.forEach((schema) => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n if (schema.unevaluatedProperties === undefined) {\n // If one of the schemas has no unevaluatedProperties set,\n // the merged schema should also have no unevaluatedProperties set\n unevaluatedProperties = undefined;\n }\n }\n else {\n let nestedSchema = schema;\n if (\"additionalProperties\" in schema &&\n schema.additionalProperties === false) {\n const { additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n else {\n // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n unevaluatedProperties = undefined;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length\n ? {\n allOf: mergedAllOf,\n ...unevaluatedProperties,\n }\n : undefined;\n}\n","export function parseLiteralDef(def, refs) {\n const parsedType = typeof def.value;\n if (parsedType !== \"bigint\" &&\n parsedType !== \"number\" &&\n parsedType !== \"boolean\" &&\n parsedType !== \"string\") {\n return {\n type: Array.isArray(def.value) ? \"array\" : \"object\",\n };\n }\n if (refs.target === \"openApi3\") {\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n enum: [def.value],\n };\n }\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n const: def.value,\n };\n}\n","import { ZodFirstPartyTypeKind, } from \"zod/v3\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n if (refs.target === \"openAi\") {\n console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n }\n if (refs.target === \"openApi3\" &&\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n type: \"object\",\n required: def.keyType._def.values,\n properties: def.keyType._def.values.reduce((acc, key) => ({\n ...acc,\n [key]: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", key],\n }) ?? parseAnyDef(refs),\n }), {}),\n additionalProperties: refs.rejectedAdditionalProperties,\n };\n }\n const schema = {\n type: \"object\",\n additionalProperties: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n }) ?? refs.allowedAdditionalProperties,\n };\n if (refs.target === \"openApi3\") {\n return schema;\n }\n if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.checks?.length) {\n const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values,\n },\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.type._def.checks?.length) {\n const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n return schema;\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n if (refs.mapStrategy === \"record\") {\n return parseRecordDef(def, refs);\n }\n const keys = parseDef(def.keyType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n }) || parseAnyDef(refs);\n const values = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n }) || parseAnyDef(refs);\n return {\n type: \"array\",\n maxItems: 125,\n items: {\n type: \"array\",\n items: [keys, values],\n minItems: 2,\n maxItems: 2,\n },\n };\n}\n","export function parseNativeEnumDef(def) {\n const object = def.values;\n const actualKeys = Object.keys(def.values).filter((key) => {\n return typeof object[object[key]] !== \"number\";\n });\n const actualValues = actualKeys.map((key) => object[key]);\n const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n return {\n type: parsedTypes.length === 1\n ? parsedTypes[0] === \"string\"\n ? \"string\"\n : \"number\"\n : [\"string\", \"number\"],\n enum: actualValues,\n };\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n return refs.target === \"openAi\"\n ? undefined\n : {\n not: parseAnyDef({\n ...refs,\n currentPath: [...refs.currentPath, \"not\"],\n }),\n };\n}\n","export function parseNullDef(refs) {\n return refs.target === \"openApi3\"\n ? {\n enum: [\"null\"],\n nullable: true,\n }\n : {\n type: \"null\",\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n ZodString: \"string\",\n ZodNumber: \"number\",\n ZodBigInt: \"integer\",\n ZodBoolean: \"boolean\",\n ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n if (refs.target === \"openApi3\")\n return asAnyOf(def, refs);\n const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n if (options.every((x) => x._def.typeName in primitiveMappings &&\n (!x._def.checks || !x._def.checks.length))) {\n // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n const types = options.reduce((types, x) => {\n const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n return type && !types.includes(type) ? [...types, type] : types;\n }, []);\n return {\n type: types.length > 1 ? types : types[0],\n };\n }\n else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n // all options literals\n const types = options.reduce((acc, x) => {\n const type = typeof x._def.value;\n switch (type) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return [...acc, type];\n case \"bigint\":\n return [...acc, \"integer\"];\n case \"object\":\n if (x._def.value === null)\n return [...acc, \"null\"];\n case \"symbol\":\n case \"undefined\":\n case \"function\":\n default:\n return acc;\n }\n }, []);\n if (types.length === options.length) {\n // all the literals are primitive, as far as null can be considered primitive\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce((acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n }, []),\n };\n }\n }\n else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n return {\n type: \"string\",\n enum: options.reduce((acc, x) => [\n ...acc,\n ...x._def.values.filter((x) => !acc.includes(x)),\n ], []),\n };\n }\n return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n const anyOf = (def.options instanceof Map\n ? Array.from(def.options.values())\n : def.options)\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n }))\n .filter((x) => !!x &&\n (!refs.strictUnions ||\n (typeof x === \"object\" && Object.keys(x).length > 0)));\n return anyOf.length ? { anyOf } : undefined;\n};\n","import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n if (refs.target === \"openApi3\") {\n return {\n type: primitiveMappings[def.innerType._def.typeName],\n nullable: true,\n };\n }\n return {\n type: [\n primitiveMappings[def.innerType._def.typeName],\n \"null\",\n ],\n };\n }\n if (refs.target === \"openApi3\") {\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath],\n });\n if (base && \"$ref\" in base)\n return { allOf: [base], nullable: true };\n return base && { ...base, nullable: true };\n }\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n });\n return base && { anyOf: [base, { type: \"null\" }] };\n}\n","import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n const res = {\n type: \"number\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"int\":\n res.type = \"integer\";\n addErrorMessage(res, \"type\", check.message, refs);\n break;\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n const forceOptionalIntoNullable = refs.target === \"openAi\";\n const result = {\n type: \"object\",\n properties: {},\n };\n const required = [];\n const shape = def.shape();\n for (const propName in shape) {\n let propDef = shape[propName];\n if (propDef === undefined || propDef._def === undefined) {\n continue;\n }\n let propOptional = safeIsOptional(propDef);\n if (propOptional && forceOptionalIntoNullable) {\n if (propDef._def.typeName === \"ZodOptional\") {\n propDef = propDef._def.innerType;\n }\n if (!propDef.isNullable()) {\n propDef = propDef.nullable();\n }\n propOptional = false;\n }\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", propName],\n propertyPath: [...refs.currentPath, \"properties\", propName],\n });\n if (parsedDef === undefined) {\n continue;\n }\n result.properties[propName] = parsedDef;\n if (!propOptional) {\n required.push(propName);\n }\n }\n if (required.length) {\n result.required = required;\n }\n const additionalProperties = decideAdditionalProperties(def, refs);\n if (additionalProperties !== undefined) {\n result.additionalProperties = additionalProperties;\n }\n return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n if (def.catchall._def.typeName !== \"ZodNever\") {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n });\n }\n switch (def.unknownKeys) {\n case \"passthrough\":\n return refs.allowedAdditionalProperties;\n case \"strict\":\n return refs.rejectedAdditionalProperties;\n case \"strip\":\n return refs.removeAdditionalStrategy === \"strict\"\n ? refs.allowedAdditionalProperties\n : refs.rejectedAdditionalProperties;\n }\n}\nfunction safeIsOptional(schema) {\n try {\n return schema.isOptional();\n }\n catch {\n return true;\n }\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n return parseDef(def.innerType._def, refs);\n }\n const innerSchema = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n });\n return innerSchema\n ? {\n anyOf: [\n {\n not: parseAnyDef(refs),\n },\n innerSchema,\n ],\n }\n : parseAnyDef(refs);\n};\n","import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n if (refs.pipeStrategy === \"input\") {\n return parseDef(def.in._def, refs);\n }\n else if (refs.pipeStrategy === \"output\") {\n return parseDef(def.out._def, refs);\n }\n const a = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n });\n const b = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n });\n return {\n allOf: [a, b].filter((x) => x !== undefined),\n };\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n return parseDef(def.type._def, refs);\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n const items = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n const schema = {\n type: \"array\",\n uniqueItems: true,\n items,\n };\n if (def.minSize) {\n setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n }\n if (def.maxSize) {\n setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n }\n return schema;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n if (def.rest) {\n return {\n type: \"array\",\n minItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalItems\"],\n }),\n };\n }\n else {\n return {\n type: \"array\",\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n };\n }\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n return {\n not: parseAnyDef(refs),\n };\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n return parseAnyDef(refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n const seenItem = refs.seen.get(def);\n if (refs.override) {\n const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n if (seenSchema !== undefined) {\n return seenSchema;\n }\n }\n const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n refs.seen.set(def, newItem);\n const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n ? parseDef(jsonSchemaOrGetter(), refs)\n : jsonSchemaOrGetter;\n if (jsonSchema) {\n addMeta(def, refs, jsonSchema);\n }\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n newItem.jsonSchema = jsonSchema;\n return postProcessResult;\n }\n newItem.jsonSchema = jsonSchema;\n return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n switch (refs.$refStrategy) {\n case \"root\":\n return { $ref: item.path.join(\"/\") };\n case \"relative\":\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case \"none\":\n case \"seen\": {\n if (item.path.length < refs.currentPath.length &&\n item.path.every((value, index) => refs.currentPath[index] === value)) {\n console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n return parseAnyDef(refs);\n }\n return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n }\n }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n if (def.description) {\n jsonSchema.description = def.description;\n if (refs.markdownDescription) {\n jsonSchema.markdownDescription = def.description;\n }\n }\n return jsonSchema;\n};\n","import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n const refs = getRefs(options);\n let definitions = typeof options === \"object\" && options.definitions\n ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n ...acc,\n [name]: parseDef(schema._def, {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, true) ?? parseAnyDef(refs),\n }), {})\n : undefined;\n const name = typeof options === \"string\"\n ? options\n : options?.nameStrategy === \"title\"\n ? undefined\n : options?.name;\n const main = parseDef(schema._def, name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, false) ?? parseAnyDef(refs);\n const title = typeof options === \"object\" &&\n options.name !== undefined &&\n options.nameStrategy === \"title\"\n ? options.name\n : undefined;\n if (title !== undefined) {\n main.title = title;\n }\n if (refs.flags.hasReferencedOpenAiAnyType) {\n if (!definitions) {\n definitions = {};\n }\n if (!definitions[refs.openAiAnyTypeName]) {\n definitions[refs.openAiAnyTypeName] = {\n // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n items: {\n $ref: refs.$refStrategy === \"relative\"\n ? \"1\"\n : [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ].join(\"/\"),\n },\n };\n }\n }\n const combined = name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join(\"/\"),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n if (refs.target === \"jsonSchema7\") {\n combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n }\n if (refs.target === \"openAi\" &&\n (\"anyOf\" in combined ||\n \"oneOf\" in combined ||\n \"allOf\" in combined ||\n (\"type\" in combined && Array.isArray(combined.type)))) {\n console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n }\n return combined;\n};\nexport { zodToJsonSchema };\n","/**\n * Publish-time JSON-Schema derivation for plugin actions.\n *\n * When a plugin version is published/registered, the host derives a JSON\n * Schema (draft-07) from each action route's Zod `input` (and `output` if\n * declared) and persists the result on the `plugin_versions` catalog row\n * (`actionSchemas` JSON column); installing a version pins a copy on the\n * tenant row. Schemas are NEVER computed per-request — the catalog endpoint\n * only reads the persisted documents.\n *\n * The same function feeds the codegen CLI so generated clients, the doctor's\n * regenerate-and-diff check and the served catalog can never disagree.\n */\nimport type { z } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { parseActionRoute } from \"./actions.js\";\nimport type { PluginDefinition } from \"./define.js\";\nimport type { PluginRouteDecl } from \"./routes.js\";\n\n/** Persisted per-action schema document (draft-07 JSON Schemas, JSON-safe). */\nexport interface PluginActionSchema {\n /**\n * Input schema. For GET (query) actions this is the route's `query` schema;\n * for mutations it is the route's `body` schema. Absent when the route\n * declares none.\n */\n input?: unknown;\n /** Output schema, when the route declares `output`. */\n output?: unknown;\n}\n\n/** Map persisted on `plugin_versions.actionSchemas`, keyed by action key. */\nexport type PluginActionSchemas = Record<string, PluginActionSchema>;\n\nfunction toJsonSchema(schema: z.ZodTypeAny): unknown {\n // target draft-07 per the frozen catalog contract; `errorMessages` off and\n // no `$ref` reuse so every action document is standalone and stable.\n return zodToJsonSchema(schema, { target: \"jsonSchema7\", $refStrategy: \"none\" });\n}\n\nfunction inputSchemaFor(decl: PluginRouteDecl): z.ZodTypeAny | undefined {\n return decl.method === \"GET\" ? decl.input?.query : decl.input?.body;\n}\n\n/**\n * Derive the persisted action-schema map for a plugin definition. Assumes the\n * definition already passed the doctor (unknown route references are skipped,\n * not thrown — validation owns the error surface).\n */\nexport function deriveActionSchemas(definition: PluginDefinition): PluginActionSchemas {\n const out: PluginActionSchemas = {};\n const actions = definition.manifest.actions ?? [];\n const routes = definition.manifest.routes ?? [];\n for (const action of actions) {\n const ref = parseActionRoute(action.route);\n if (!ref) continue;\n const decl = routes.find((r) => r.method === ref.method && r.path === ref.path);\n if (!decl) continue;\n const doc: PluginActionSchema = {};\n const input = inputSchemaFor(decl);\n if (input) doc.input = toJsonSchema(input);\n if (decl.output) doc.output = toJsonSchema(decl.output);\n out[action.key] = doc;\n }\n return out;\n}\n","/**\n * Structural validation for manifest v3 actions / frontend / frontendEvents.\n *\n * ONE implementation shared by the SDK's offline doctor-lite\n * (`testing/validate.ts`, run by `cwe-plugin build`) and the host's\n * `validateDefinition` (publish gate + dev-harness doctor) — the two layers\n * cannot drift because they call the same function. Fail closed: every rule\n * from PLUGIN_ACTIONS_RUNTIME_BUILD_PROMPT.md §2 is an ERROR.\n */\nimport { ACTION_KEY_RE, parseActionRoute } from \"./actions.js\";\nimport { deriveActionSchemas } from \"./action-schemas.js\";\nimport type { PluginDefinition } from \"./define.js\";\nimport type { PluginRouteDecl } from \"./routes.js\";\n\nexport interface ActionValidationIssues {\n errors: string[];\n warnings: string[];\n}\n\nconst QUERY_METHOD = \"GET\";\nconst MUTATION_METHODS = new Set([\"POST\", \"PUT\", \"DELETE\"]);\n\n/**\n * JS reserved words + a few globals: an action key becomes a generated\n * `export function <key>(...)`, so a reserved word (`delete`, `class`, `new`,\n * `return`, …) — though camelCase — would emit uncompilable client code.\n */\nconst RESERVED_KEYS = new Set([\n \"break\", \"case\", \"catch\", \"class\", \"const\", \"continue\", \"debugger\", \"default\",\n \"delete\", \"do\", \"else\", \"enum\", \"export\", \"extends\", \"false\", \"finally\", \"for\",\n \"function\", \"if\", \"import\", \"in\", \"instanceof\", \"new\", \"null\", \"return\", \"super\",\n \"switch\", \"this\", \"throw\", \"true\", \"try\", \"typeof\", \"var\", \"void\", \"while\",\n \"with\", \"yield\", \"let\", \"static\", \"await\", \"async\", \"implements\", \"interface\",\n \"package\", \"private\", \"protected\", \"public\",\n]);\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * The SDK encodes query actions as flat key/value pairs — nested objects are\n * NOT flattened on the wire. Accepts scalars (string/number/integer/boolean,\n * enums/consts of those) and arrays of scalars, optionally nullable.\n */\nfunction isFlatQueryProperty(schema: unknown): boolean {\n if (schema === true || schema === undefined) return false;\n if (!isPlainObject(schema)) return false;\n if (Array.isArray(schema.enum) || \"const\" in schema) return true;\n const composite = (schema.anyOf ?? schema.oneOf) as unknown[] | undefined;\n if (Array.isArray(composite)) return composite.every(isFlatQueryProperty);\n const type = schema.type;\n if (Array.isArray(type)) {\n return type.every((t) => isFlatQueryProperty({ ...schema, type: t }));\n }\n if (type === \"string\" || type === \"number\" || type === \"integer\" || type === \"boolean\" || type === \"null\") {\n return true;\n }\n if (type === \"array\") {\n return !Array.isArray(schema.items) && isFlatQueryProperty(schema.items);\n }\n return false;\n}\n\nexport function validateActionDecls(definition: PluginDefinition): ActionValidationIssues {\n const errors: string[] = [];\n const warnings: string[] = [];\n const manifest = definition.manifest;\n const actions = manifest.actions ?? [];\n const routes = manifest.routes ?? [];\n const frontend = manifest.frontend;\n\n if (actions.length === 0 && !frontend && !manifest.permissions.frontendEvents?.length) {\n return { errors, warnings };\n }\n\n const emittedShort = new Set(\n manifest.permissions.events.emit\n .filter((name) => name.startsWith(\"plugin.\"))\n .map((name) => name.slice(\"plugin.\".length)),\n );\n\n // First-wins on (method, path) — MUST match how action-schemas.ts and the\n // catalog service (both `routes.find(...)`) resolve the same reference, so\n // the doctor validates the exact route whose schema is derived + served.\n const declByRef = new Map<string, PluginRouteDecl>();\n for (const route of routes) {\n const key = `${route.method} ${route.path}`;\n if (!declByRef.has(key)) declByRef.set(key, route);\n }\n\n const seenKeys = new Set<string>();\n const queryActions = new Set<string>();\n const mutationActions = new Set<string>();\n\n for (const action of actions) {\n const label = `action '${action.key}'`;\n\n if (!ACTION_KEY_RE.test(action.key)) {\n errors.push(`${label}: key must be camelCase (${ACTION_KEY_RE})`);\n } else if (RESERVED_KEYS.has(action.key)) {\n errors.push(`${label}: key is a reserved word — pick another (it becomes a generated function name)`);\n }\n if (seenKeys.has(action.key)) errors.push(`${label}: duplicate key`);\n seenKeys.add(action.key);\n if (!action.title || action.title.trim().length === 0) {\n errors.push(`${label}: title is required`);\n }\n\n const ref = parseActionRoute(action.route);\n if (!ref) {\n errors.push(`${label}: route '${action.route}' must look like 'POST /claim'`);\n continue;\n }\n const decl = declByRef.get(`${ref.method} ${ref.path}`);\n if (!decl) {\n errors.push(`${label}: route '${action.route}' does not reference a declared route`);\n continue;\n }\n if (decl.surface !== \"public\" && decl.surface !== \"player\") {\n errors.push(\n `${label}: route surface '${decl.surface}' is not exposable — actions may only alias public/player routes`,\n );\n }\n if (action.kind === \"query\" && decl.method !== QUERY_METHOD) {\n errors.push(`${label}: kind 'query' requires a GET route (got ${decl.method})`);\n }\n if (action.kind === \"mutation\" && !MUTATION_METHODS.has(decl.method)) {\n errors.push(`${label}: kind 'mutation' requires POST/PUT/DELETE (got ${decl.method})`);\n }\n if (Boolean(action.idempotent) !== Boolean(decl.idempotent)) {\n errors.push(\n `${label}: idempotent flag (${Boolean(action.idempotent)}) must match the route declaration (${Boolean(decl.idempotent)})`,\n );\n }\n if (action.kind === \"query\") queryActions.add(action.key);\n if (action.kind === \"mutation\") mutationActions.add(action.key);\n\n for (const emit of action.emits ?? []) {\n if (!emittedShort.has(emit)) {\n errors.push(\n `${label}: emits '${emit}' is not a manifest-declared emitted event (expected one of permissions.events.emit without the 'plugin.' prefix)`,\n );\n }\n }\n }\n\n for (const type of manifest.permissions.frontendEvents ?? []) {\n if (!emittedShort.has(type)) {\n errors.push(\n `permissions.frontendEvents '${type}': not a manifest-declared emitted event (expected an entry of permissions.events.emit without the 'plugin.' prefix)`,\n );\n }\n }\n\n const widgetKeys = new Set<string>();\n for (const widget of frontend?.widgets ?? []) {\n const label = `frontend widget '${widget.key}'`;\n if (widgetKeys.has(widget.key)) errors.push(`${label}: duplicate key`);\n widgetKeys.add(widget.key);\n if (!queryActions.has(widget.dataAction)) {\n errors.push(`${label}: dataAction '${widget.dataAction}' is not a declared query action`);\n }\n for (const key of widget.actions ?? []) {\n if (!mutationActions.has(key)) {\n errors.push(`${label}: action '${key}' is not a declared mutation action`);\n }\n }\n }\n\n // Flat-query guarantee (SDK encodes GET inputs as key/value pairs).\n if (actions.some((a) => a.kind === \"query\")) {\n let schemas: Record<string, { input?: unknown }> = {};\n try {\n schemas = deriveActionSchemas(definition);\n } catch (err) {\n errors.push(`action schema derivation failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n for (const action of actions) {\n if (action.kind !== \"query\") continue;\n const input = schemas[action.key]?.input;\n if (input === undefined) continue;\n if (!isPlainObject(input) || input.type !== \"object\" || !isPlainObject(input.properties)) {\n errors.push(`action '${action.key}': query input must be a flat object schema`);\n continue;\n }\n for (const [prop, propSchema] of Object.entries(input.properties)) {\n if (!isFlatQueryProperty(propSchema)) {\n errors.push(\n `action '${action.key}': query input property '${prop}' must be a scalar or array of scalars (nested objects are not encodable as query parameters)`,\n );\n }\n }\n }\n }\n\n return { errors, warnings };\n}\n","/**\n * Typed-client codegen — `cwe-plugin codegen client` engine.\n *\n * Input: a PluginDefinition (manifest + Zod route schemas, imported from the\n * plugin's source so types are exact). Output: the file map of a publishable\n * npm package `@cwe-plugins/<key>-client` that delegates every call to the\n * generic SDK layer (`sdk.ext(\"<key>\").call(...)`) — zero own transport, zero\n * own auth.\n *\n * Determinism contract: the same definition ALWAYS yields byte-identical\n * files (stable ordering, no timestamps) — the doctor regenerates and diffs\n * against a committed `client/` directory and fails on mismatch.\n *\n * Types are printed from the SAME JSON Schemas the catalog persists\n * (deriveActionSchemas), so the generated types, the served catalog and the\n * doctor can never disagree.\n */\nimport { parseActionRoute } from \"./actions.js\";\nimport { deriveActionSchemas } from \"./action-schemas.js\";\nimport type { PluginActionDecl } from \"./actions.js\";\nimport type { PluginDefinition } from \"./define.js\";\n\n/** Relative path → file contents. Paths use `/` separators. */\nexport type GeneratedClientFiles = Record<string, string>;\n\n/**\n * Locale-INDEPENDENT string order (UTF-16 code units). Determinism is a\n * contract here — the doctor diffs generated output across machines, and\n * `localeCompare` can flip case order under some locales (e.g. da-DK).\n */\nfunction compareKeys(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nexport interface GenerateClientOptions {\n /** Peer range on the Casino SDK. Default `\">=0.3.0\"`. */\n sdkPeerRange?: string;\n}\n\nconst GENERATED_HEADER = (key: string, version: string): string =>\n `// Generated by \\`cwe-plugin codegen client\\` for plugin \"${key}\"@${version}.\\n` +\n `// DO NOT EDIT — regenerate with \\`cwe-plugin codegen client\\`; the doctor\\n` +\n `// fails on any drift between this directory and the plugin source.\\n`;\n\nexport function pascalCase(value: string): string {\n return value\n .split(/[-_.\\s]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n}\n\n// ── JSON Schema (draft-07, zod-to-json-schema subset) → TypeScript text ──────\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction literalText(value: unknown): string {\n if (typeof value === \"string\") return JSON.stringify(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === null) return \"null\";\n return \"unknown\";\n}\n\nconst IDENT_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\nfunction propertyKey(name: string): string {\n return IDENT_RE.test(name) ? name : JSON.stringify(name);\n}\n\nfunction indent(text: string): string {\n return text\n .split(\"\\n\")\n .map((line) => (line.length > 0 ? ` ${line}` : line))\n .join(\"\\n\");\n}\n\n/**\n * Print a TypeScript type for a derived JSON Schema. Handles exactly the\n * shapes zod-to-json-schema emits for plugin route schemas; anything outside\n * the subset degrades to `unknown` (never throws — codegen must not be able\n * to fail on an exotic schema the doctor already accepted).\n */\nexport function jsonSchemaToTsType(schema: unknown): string {\n if (schema === true || schema === undefined) return \"unknown\";\n if (schema === false) return \"never\";\n if (!isPlainObject(schema)) return \"unknown\";\n\n if (Array.isArray(schema.enum)) {\n return schema.enum.map(literalText).join(\" | \") || \"never\";\n }\n if (\"const\" in schema) return literalText(schema.const);\n\n const composite = (schema.anyOf ?? schema.oneOf) as unknown[] | undefined;\n if (Array.isArray(composite)) {\n const parts = composite.map(jsonSchemaToTsType);\n return [...new Set(parts)].join(\" | \") || \"unknown\";\n }\n if (Array.isArray(schema.allOf)) {\n const parts = (schema.allOf as unknown[]).map(jsonSchemaToTsType);\n return parts.join(\" & \") || \"unknown\";\n }\n\n const type = schema.type;\n if (Array.isArray(type)) {\n const parts = type.map((t) => jsonSchemaToTsType({ ...schema, type: t }));\n return [...new Set(parts)].join(\" | \") || \"unknown\";\n }\n\n switch (type) {\n case \"string\":\n return \"string\";\n case \"number\":\n case \"integer\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"null\":\n return \"null\";\n case \"array\": {\n if (Array.isArray(schema.items)) {\n const parts = (schema.items as unknown[]).map(jsonSchemaToTsType);\n return `[${parts.join(\", \")}]`;\n }\n const item = jsonSchemaToTsType(schema.items);\n return item.includes(\" \") ? `Array<${item}>` : `${item}[]`;\n }\n case \"object\": {\n const props = isPlainObject(schema.properties) ? schema.properties : undefined;\n const required = new Set(Array.isArray(schema.required) ? (schema.required as string[]) : []);\n const lines: string[] = [];\n if (props) {\n for (const [name, prop] of Object.entries(props)) {\n const optional = required.has(name) ? \"\" : \"?\";\n lines.push(`${propertyKey(name)}${optional}: ${jsonSchemaToTsType(prop)};`);\n }\n }\n const additional = schema.additionalProperties;\n if (isPlainObject(additional) || additional === true) {\n const valueType = additional === true ? \"unknown\" : jsonSchemaToTsType(additional);\n if (lines.length === 0) return `Record<string, ${valueType}>`;\n // With named props present, the index signature's value type must be a\n // supertype of every named prop's type or TS rejects the literal. Use\n // `unknown` (a supertype of everything) so catchall/passthrough schemas\n // still compile while preserving \"extra keys are allowed\".\n lines.push(`[key: string]: unknown;`);\n }\n if (lines.length === 0) return \"Record<string, never>\";\n return `{\\n${indent(lines.join(\"\\n\"))}\\n}`;\n }\n default:\n return \"unknown\";\n }\n}\n\n// ── package generation ────────────────────────────────────────────────────────\n\ninterface ActionModel {\n decl: PluginActionDecl;\n inputType: string | null;\n outputType: string | null;\n}\n\nfunction buildActionModels(definition: PluginDefinition): ActionModel[] {\n const schemas = deriveActionSchemas(definition);\n const actions = [...(definition.manifest.actions ?? [])].sort((a, b) =>\n compareKeys(a.key, b.key),\n );\n return actions\n .filter((a) => parseActionRoute(a.route) !== null)\n .map((decl) => {\n const doc = schemas[decl.key] ?? {};\n return {\n decl,\n inputType: doc.input !== undefined ? jsonSchemaToTsType(doc.input) : null,\n outputType: doc.output !== undefined ? jsonSchemaToTsType(doc.output) : null,\n };\n });\n}\n\nfunction typesFile(definition: PluginDefinition, models: ActionModel[]): string {\n const { key, version } = definition.manifest;\n const actionsName = `${pascalCase(key)}Actions`;\n const lines: string[] = [GENERATED_HEADER(key, version)];\n\n for (const model of models) {\n const base = pascalCase(model.decl.key);\n if (model.inputType !== null) {\n lines.push(`export type ${base}Input = ${model.inputType};`, \"\");\n }\n if (model.outputType !== null) {\n lines.push(`export type ${base}Output = ${model.outputType};`, \"\");\n }\n }\n\n lines.push(`/** Action map for \\`ExtRegistry\\` augmentation — keys are stable API. */`);\n lines.push(`export interface ${actionsName} {`);\n for (const model of models) {\n const base = pascalCase(model.decl.key);\n const input = model.inputType !== null ? `${base}Input` : \"undefined\";\n const output = model.outputType !== null ? `${base}Output` : \"unknown\";\n lines.push(\n ` ${propertyKey(model.decl.key)}: { kind: ${JSON.stringify(model.decl.kind)}; input: ${input}; output: ${output} };`,\n );\n }\n lines.push(`}`, \"\");\n\n const frontendEvents = [...(definition.manifest.permissions.frontendEvents ?? [])].sort();\n if (frontendEvents.length > 0) {\n const eventsName = `${pascalCase(key)}Event`;\n lines.push(`/** Realtime events on the \\`ext.${key}\\` channel (\\`data.type\\` values). */`);\n lines.push(\n `export type ${eventsName}Type = ${frontendEvents.map((e) => JSON.stringify(e)).join(\" | \")};`,\n );\n lines.push(\n `export type ${eventsName} = ${frontendEvents\n .map((e) => `{ type: ${JSON.stringify(e)}; payload: unknown }`)\n .join(\" | \")};`,\n \"\",\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction clientFile(definition: PluginDefinition, models: ActionModel[]): string {\n const { key, version } = definition.manifest;\n const actionsName = `${pascalCase(key)}Actions`;\n const lines: string[] = [GENERATED_HEADER(key, version)];\n lines.push(`import type { ${actionsName} } from \"./types.js\";`, \"\");\n lines.push(`export const PLUGIN_KEY = ${JSON.stringify(key)};`);\n lines.push(`/** Extension catalog protocol version this client was generated against. */`);\n lines.push(`export const CATALOG_VERSION = 1;`);\n lines.push(`/**`);\n lines.push(` * Plugin semver range this client is valid for. The SDK checks it against`);\n lines.push(` * the live catalog entry (\\`assertPluginVersion\\`) and throws`);\n lines.push(` * \\`PluginVersionMismatchError\\` when the installed plugin drifted.`);\n lines.push(` */`);\n lines.push(`export const expectedPluginVersion = ${JSON.stringify(`^${version}`)};`, \"\");\n lines.push(`export interface ExtCallOpts {`);\n lines.push(` idempotencyKey?: string;`);\n lines.push(` signal?: AbortSignal;`);\n lines.push(`}`, \"\");\n lines.push(`/**`);\n lines.push(` * Structural slice of \\`@clovnet/casino-sdk\\` — this package carries zero`);\n lines.push(` * transport and zero auth; every call delegates to the generic ext layer.`);\n lines.push(` */`);\n lines.push(`export interface ExtSdkLike {`);\n lines.push(` ext(pluginKey: string): {`);\n lines.push(\n ` call<TResult = unknown>(actionKey: string, input?: unknown, opts?: ExtCallOpts): Promise<TResult>;`,\n );\n lines.push(` };`);\n lines.push(`}`, \"\");\n\n for (const model of models) {\n const base = pascalCase(model.decl.key);\n const doc: string[] = [model.decl.title];\n if (model.decl.description) doc.push(model.decl.description);\n if (model.decl.deprecated) doc.push(`@deprecated ${model.decl.deprecated}`);\n lines.push(`/**`);\n for (const d of doc) lines.push(` * ${d}`);\n lines.push(` */`);\n const output = `Promise<${actionsName}[${JSON.stringify(model.decl.key)}][\"output\"]>`;\n if (model.inputType !== null) {\n lines.push(\n `export function ${model.decl.key}(sdk: ExtSdkLike, input: ${base}Input, opts?: ExtCallOpts): ${output} {`,\n );\n lines.push(\n ` return sdk.ext(PLUGIN_KEY).call(${JSON.stringify(model.decl.key)}, input, opts);`,\n );\n } else {\n lines.push(`export function ${model.decl.key}(sdk: ExtSdkLike, opts?: ExtCallOpts): ${output} {`);\n lines.push(\n ` return sdk.ext(PLUGIN_KEY).call(${JSON.stringify(model.decl.key)}, undefined, opts);`,\n );\n }\n lines.push(`}`, \"\");\n }\n\n // referenced input types are imported lazily via the types module\n const usedInputs = models\n .filter((m) => m.inputType !== null)\n .map((m) => `${pascalCase(m.decl.key)}Input`);\n if (usedInputs.length > 0) {\n lines[1] = `import type { ${actionsName}, ${usedInputs.join(\", \")} } from \"./types.js\";`;\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction augmentFile(definition: PluginDefinition): string {\n const { key, version } = definition.manifest;\n const actionsName = `${pascalCase(key)}Actions`;\n return [\n GENERATED_HEADER(key, version),\n `import type { ${actionsName} } from \"./types.js\";`,\n ``,\n `declare module \"@clovnet/casino-sdk\" {`,\n ` interface ExtRegistry {`,\n ` ${propertyKey(key)}: ${actionsName};`,\n ` }`,\n `}`,\n ``,\n `export {};`,\n ``,\n ].join(\"\\n\");\n}\n\nfunction indexFile(definition: PluginDefinition): string {\n const { key, version } = definition.manifest;\n return [\n GENERATED_HEADER(key, version),\n `import \"./augment.js\";`,\n ``,\n `export * from \"./types.js\";`,\n `export * from \"./client.js\";`,\n ``,\n ].join(\"\\n\");\n}\n\nfunction packageJsonFile(definition: PluginDefinition, opts: GenerateClientOptions): string {\n const { key, version } = definition.manifest;\n const pkg = {\n name: `@cwe-plugins/${key}-client`,\n version,\n description: `Typed Casino SDK client for the \"${key}\" plugin. Generated by cwe-plugin codegen client — do not edit.`,\n license: \"MIT\",\n type: \"module\",\n sideEffects: false,\n exports: {\n \".\": \"./src/index.ts\",\n },\n files: [\"src\"],\n peerDependencies: {\n \"@clovnet/casino-sdk\": opts.sdkPeerRange ?? \">=0.3.0\",\n },\n };\n return `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\n/**\n * Generate the full `@cwe-plugins/<key>-client` package for a definition.\n * Pure and deterministic — no filesystem access, no clock, no randomness.\n */\nexport function generateClientPackage(\n definition: PluginDefinition,\n opts: GenerateClientOptions = {},\n): GeneratedClientFiles {\n const models = buildActionModels(definition);\n return {\n \"package.json\": packageJsonFile(definition, opts),\n \"src/augment.ts\": augmentFile(definition),\n \"src/client.ts\": clientFile(definition, models),\n \"src/index.ts\": indexFile(definition),\n \"src/types.ts\": typesFile(definition, models),\n };\n}\n"],"mappings":";AA0BO,IAAM,aAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA8RO,IAAM,0BAA4D;AAAA,EACvE,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,qBAAqB;AACvB;AAGO,IAAM,sBAAsB;;;AC3S5B,IAAM,wBAAwB;AAAA,EACnC,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,eAAe;AAAA;AAAA,EAEf,gBAAgB;AAAA;AAAA,EAEhB,mBAAmB;AACrB;;;AClCO,IAAM,oBAAoB;AAAA,EAC/B,mBAAmB;AAAA,EACnB,eAAe;AAAA;AAAA,EAEf,wBAAwB;AAC1B;;;ACiBO,IAAM,0BAA0B;AAAA,EACrC,WAAW;AAAA;AAAA,EAEX,eAAe;AACjB;;;ACNO,IAAM,2BAA2B;AAGjC,IAAM,wBAAwB,CAAC,YAAY,WAAW,aAAa;AAEnE,IAAM,wBAAwB;AAAA;AAAA,EAEnC,kBAAkB;AACpB;;;ACtBO,IAAM,gBAAgB;AAmCtB,SAAS,iBACd,OACyC;AACzC,QAAM,QAAQ,qBAAqB,KAAK,KAAK;AAC7C,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,EAAE,QAAQ,MAAM,CAAC,GAAI,MAAM,MAAM,CAAC,EAAG;AAC9C;AAGO,SAAS,oBAAoB,WAA2B;AAC7D,SAAO,UAAU,SAAS;AAC5B;AAGO,SAAS,qBAAqB,UAAiC;AACpE,SAAO,SAAS,WAAW,SAAS,IAAI,SAAS,MAAM,UAAU,MAAM,IAAI;AAC7E;;;AC7EO,IAAM,iBAAiB,uBAAO,mDAAmD;AAajF,IAAM,iBAAiB;AAAA,EAC1B,MAAM;AAAA,EACN,cAAc;AAAA,EACd,UAAU,CAAC,GAAG;AAAA,EACd,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,aAAa;AAAA,EACb,0BAA0B;AAAA,EAC1B,6BAA6B;AAAA,EAC7B,8BAA8B;AAAA,EAC9B,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,aAAa,CAAC;AAAA,EACd,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,mBAAmB;AACvB;AACO,IAAM,oBAAoB,CAAC,YAAa,OAAO,YAAY,WAC5D;AAAA,EACE,GAAG;AAAA,EACH,MAAM;AACV,IACE;AAAA,EACE,GAAG;AAAA,EACH,GAAG;AACP;;;AC5CG,IAAM,UAAU,CAAC,YAAY;AAChC,QAAM,WAAW,kBAAkB,OAAO;AAC1C,QAAM,cAAc,SAAS,SAAS,SAChC,CAAC,GAAG,SAAS,UAAU,SAAS,gBAAgB,SAAS,IAAI,IAC7D,SAAS;AACf,SAAO;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,4BAA4B,MAAM;AAAA,IAC3C;AAAA,IACA,cAAc;AAAA,IACd,MAAM,IAAI,IAAI,OAAO,QAAQ,SAAS,WAAW,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM;AAAA,MACpE,IAAI;AAAA,MACJ;AAAA,QACI,KAAK,IAAI;AAAA,QACT,MAAM,CAAC,GAAG,SAAS,UAAU,SAAS,gBAAgB,IAAI;AAAA;AAAA,QAE1D,YAAY;AAAA,MAChB;AAAA,IACJ,CAAC,CAAC;AAAA,EACN;AACJ;;;ACrBO,SAAS,gBAAgB,KAAK,KAAK,cAAc,MAAM;AAC1D,MAAI,CAAC,MAAM;AACP;AACJ,MAAI,cAAc;AACd,QAAI,eAAe;AAAA,MACf,GAAG,IAAI;AAAA,MACP,CAAC,GAAG,GAAG;AAAA,IACX;AAAA,EACJ;AACJ;AACO,SAAS,0BAA0B,KAAK,KAAK,OAAO,cAAc,MAAM;AAC3E,MAAI,GAAG,IAAI;AACX,kBAAgB,KAAK,KAAK,cAAc,IAAI;AAChD;;;ACbO,IAAM,kBAAkB,CAAC,OAAO,UAAU;AAC7C,MAAI,IAAI;AACR,SAAO,IAAI,MAAM,UAAU,IAAI,MAAM,QAAQ,KAAK;AAC9C,QAAI,MAAM,CAAC,MAAM,MAAM,CAAC;AACpB;AAAA,EACR;AACA,SAAO,EAAE,MAAM,SAAS,GAAG,SAAS,GAAG,GAAG,MAAM,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG;AACtE;;;ACPA,SAAS,yBAAAA,8BAA6B;;;ACC/B,SAAS,YAAY,MAAM;AAC9B,MAAI,KAAK,WAAW,UAAU;AAC1B,WAAO,CAAC;AAAA,EACZ;AACA,QAAM,oBAAoB;AAAA,IACtB,GAAG,KAAK;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AACA,OAAK,MAAM,6BAA6B;AACxC,SAAO;AAAA,IACH,MAAM,KAAK,iBAAiB,aACtB,gBAAgB,mBAAmB,KAAK,WAAW,IACnD,kBAAkB,KAAK,GAAG;AAAA,EACpC;AACJ;;;AChBA,SAAS,6BAA6B;AAG/B,SAAS,cAAc,KAAK,MAAM;AACrC,QAAM,MAAM;AAAA,IACR,MAAM;AAAA,EACV;AACA,MAAI,IAAI,MAAM,QACV,IAAI,MAAM,MAAM,aAAa,sBAAsB,QAAQ;AAC3D,QAAI,QAAQ,SAAS,IAAI,KAAK,MAAM;AAAA,MAChC,GAAG;AAAA,MACH,aAAa,CAAC,GAAG,KAAK,aAAa,OAAO;AAAA,IAC9C,CAAC;AAAA,EACL;AACA,MAAI,IAAI,WAAW;AACf,8BAA0B,KAAK,YAAY,IAAI,UAAU,OAAO,IAAI,UAAU,SAAS,IAAI;AAAA,EAC/F;AACA,MAAI,IAAI,WAAW;AACf,8BAA0B,KAAK,YAAY,IAAI,UAAU,OAAO,IAAI,UAAU,SAAS,IAAI;AAAA,EAC/F;AACA,MAAI,IAAI,aAAa;AACjB,8BAA0B,KAAK,YAAY,IAAI,YAAY,OAAO,IAAI,YAAY,SAAS,IAAI;AAC/F,8BAA0B,KAAK,YAAY,IAAI,YAAY,OAAO,IAAI,YAAY,SAAS,IAAI;AAAA,EACnG;AACA,SAAO;AACX;;;ACxBO,SAAS,eAAe,KAAK,MAAM;AACtC,QAAM,MAAM;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,EACZ;AACA,MAAI,CAAC,IAAI;AACL,WAAO;AACX,aAAW,SAAS,IAAI,QAAQ;AAC5B,YAAQ,MAAM,MAAM;AAAA,MAChB,KAAK;AACD,YAAI,KAAK,WAAW,eAAe;AAC/B,cAAI,MAAM,WAAW;AACjB,sCAA0B,KAAK,WAAW,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,UAC9E,OACK;AACD,sCAA0B,KAAK,oBAAoB,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,UACvF;AAAA,QACJ,OACK;AACD,cAAI,CAAC,MAAM,WAAW;AAClB,gBAAI,mBAAmB;AAAA,UAC3B;AACA,oCAA0B,KAAK,WAAW,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,QAC9E;AACA;AAAA,MACJ,KAAK;AACD,YAAI,KAAK,WAAW,eAAe;AAC/B,cAAI,MAAM,WAAW;AACjB,sCAA0B,KAAK,WAAW,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,UAC9E,OACK;AACD,sCAA0B,KAAK,oBAAoB,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,UACvF;AAAA,QACJ,OACK;AACD,cAAI,CAAC,MAAM,WAAW;AAClB,gBAAI,mBAAmB;AAAA,UAC3B;AACA,oCAA0B,KAAK,WAAW,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,QAC9E;AACA;AAAA,MACJ,KAAK;AACD,kCAA0B,KAAK,cAAc,MAAM,OAAO,MAAM,SAAS,IAAI;AAC7E;AAAA,IACR;AAAA,EACJ;AACA,SAAO;AACX;;;AChDO,SAAS,kBAAkB;AAC9B,SAAO;AAAA,IACH,MAAM;AAAA,EACV;AACJ;;;ACHO,SAAS,gBAAgB,MAAM,MAAM;AACxC,SAAO,SAAS,KAAK,KAAK,MAAM,IAAI;AACxC;;;ACFO,IAAM,gBAAgB,CAAC,KAAK,SAAS;AACxC,SAAO,SAAS,IAAI,UAAU,MAAM,IAAI;AAC5C;;;ACFO,SAAS,aAAa,KAAK,MAAM,sBAAsB;AAC1D,QAAM,WAAW,wBAAwB,KAAK;AAC9C,MAAI,MAAM,QAAQ,QAAQ,GAAG;AACzB,WAAO;AAAA,MACH,OAAO,SAAS,IAAI,CAAC,MAAM,MAAM,aAAa,KAAK,MAAM,IAAI,CAAC;AAAA,IAClE;AAAA,EACJ;AACA,UAAQ,UAAU;AAAA,IACd,KAAK;AAAA,IACL,KAAK;AACD,aAAO;AAAA,QACH,MAAM;AAAA,QACN,QAAQ;AAAA,MACZ;AAAA,IACJ,KAAK;AACD,aAAO;AAAA,QACH,MAAM;AAAA,QACN,QAAQ;AAAA,MACZ;AAAA,IACJ,KAAK;AACD,aAAO,kBAAkB,KAAK,IAAI;AAAA,EAC1C;AACJ;AACA,IAAM,oBAAoB,CAAC,KAAK,SAAS;AACrC,QAAM,MAAM;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,EACZ;AACA,MAAI,KAAK,WAAW,YAAY;AAC5B,WAAO;AAAA,EACX;AACA,aAAW,SAAS,IAAI,QAAQ;AAC5B,YAAQ,MAAM,MAAM;AAAA,MAChB,KAAK;AACD;AAAA,UAA0B;AAAA,UAAK;AAAA,UAAW,MAAM;AAAA;AAAA,UAChD,MAAM;AAAA,UAAS;AAAA,QAAI;AACnB;AAAA,MACJ,KAAK;AACD;AAAA,UAA0B;AAAA,UAAK;AAAA,UAAW,MAAM;AAAA;AAAA,UAChD,MAAM;AAAA,UAAS;AAAA,QAAI;AACnB;AAAA,IACR;AAAA,EACJ;AACA,SAAO;AACX;;;AC5CO,SAAS,gBAAgB,MAAM,MAAM;AACxC,SAAO;AAAA,IACH,GAAG,SAAS,KAAK,UAAU,MAAM,IAAI;AAAA,IACrC,SAAS,KAAK,aAAa;AAAA,EAC/B;AACJ;;;ACJO,SAAS,gBAAgB,MAAM,MAAM;AACxC,SAAO,KAAK,mBAAmB,UACzB,SAAS,KAAK,OAAO,MAAM,IAAI,IAC/B,YAAY,IAAI;AAC1B;;;ACNO,SAAS,aAAa,KAAK;AAC9B,SAAO;AAAA,IACH,MAAM;AAAA,IACN,MAAM,MAAM,KAAK,IAAI,MAAM;AAAA,EAC/B;AACJ;;;ACJA,IAAM,yBAAyB,CAAC,SAAS;AACrC,MAAI,UAAU,QAAQ,KAAK,SAAS;AAChC,WAAO;AACX,SAAO,WAAW;AACtB;AACO,SAAS,qBAAqB,KAAK,MAAM;AAC5C,QAAM,QAAQ;AAAA,IACV,SAAS,IAAI,KAAK,MAAM;AAAA,MACpB,GAAG;AAAA,MACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,GAAG;AAAA,IACnD,CAAC;AAAA,IACD,SAAS,IAAI,MAAM,MAAM;AAAA,MACrB,GAAG;AAAA,MACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,GAAG;AAAA,IACnD,CAAC;AAAA,EACL,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACnB,MAAI,wBAAwB,KAAK,WAAW,sBACtC,EAAE,uBAAuB,MAAM,IAC/B;AACN,QAAM,cAAc,CAAC;AAErB,QAAM,QAAQ,CAAC,WAAW;AACtB,QAAI,uBAAuB,MAAM,GAAG;AAChC,kBAAY,KAAK,GAAG,OAAO,KAAK;AAChC,UAAI,OAAO,0BAA0B,QAAW;AAG5C,gCAAwB;AAAA,MAC5B;AAAA,IACJ,OACK;AACD,UAAI,eAAe;AACnB,UAAI,0BAA0B,UAC1B,OAAO,yBAAyB,OAAO;AACvC,cAAM,EAAE,sBAAsB,GAAG,KAAK,IAAI;AAC1C,uBAAe;AAAA,MACnB,OACK;AAED,gCAAwB;AAAA,MAC5B;AACA,kBAAY,KAAK,YAAY;AAAA,IACjC;AAAA,EACJ,CAAC;AACD,SAAO,YAAY,SACb;AAAA,IACE,OAAO;AAAA,IACP,GAAG;AAAA,EACP,IACE;AACV;;;ACnDO,SAAS,gBAAgB,KAAK,MAAM;AACvC,QAAM,aAAa,OAAO,IAAI;AAC9B,MAAI,eAAe,YACf,eAAe,YACf,eAAe,aACf,eAAe,UAAU;AACzB,WAAO;AAAA,MACH,MAAM,MAAM,QAAQ,IAAI,KAAK,IAAI,UAAU;AAAA,IAC/C;AAAA,EACJ;AACA,MAAI,KAAK,WAAW,YAAY;AAC5B,WAAO;AAAA,MACH,MAAM,eAAe,WAAW,YAAY;AAAA,MAC5C,MAAM,CAAC,IAAI,KAAK;AAAA,IACpB;AAAA,EACJ;AACA,SAAO;AAAA,IACH,MAAM,eAAe,WAAW,YAAY;AAAA,IAC5C,OAAO,IAAI;AAAA,EACf;AACJ;;;ACpBA,SAAS,yBAAAC,8BAA8B;;;ACCvC,IAAI,aAAa;AAOV,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA,EAIvB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA;AAAA;AAAA;AAAA,EAIN,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYP,OAAO,MAAM;AACT,QAAI,eAAe,QAAW;AAC1B,mBAAa,OAAO,wDAAwD,GAAG;AAAA,IACnF;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM;AAAA;AAAA;AAAA;AAAA,EAIN,MAAM;AAAA,EACN,UAAU;AAAA;AAAA;AAAA;AAAA,EAIV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,KAAK;AACT;AACO,SAAS,eAAe,KAAK,MAAM;AACtC,QAAM,MAAM;AAAA,IACR,MAAM;AAAA,EACV;AACA,MAAI,IAAI,QAAQ;AACZ,eAAW,SAAS,IAAI,QAAQ;AAC5B,cAAQ,MAAM,MAAM;AAAA,QAChB,KAAK;AACD,oCAA0B,KAAK,aAAa,OAAO,IAAI,cAAc,WAC/D,KAAK,IAAI,IAAI,WAAW,MAAM,KAAK,IACnC,MAAM,OAAO,MAAM,SAAS,IAAI;AACtC;AAAA,QACJ,KAAK;AACD,oCAA0B,KAAK,aAAa,OAAO,IAAI,cAAc,WAC/D,KAAK,IAAI,IAAI,WAAW,MAAM,KAAK,IACnC,MAAM,OAAO,MAAM,SAAS,IAAI;AACtC;AAAA,QACJ,KAAK;AACD,kBAAQ,KAAK,eAAe;AAAA,YACxB,KAAK;AACD,wBAAU,KAAK,SAAS,MAAM,SAAS,IAAI;AAC3C;AAAA,YACJ,KAAK;AACD,wBAAU,KAAK,aAAa,MAAM,SAAS,IAAI;AAC/C;AAAA,YACJ,KAAK;AACD,yBAAW,KAAK,YAAY,OAAO,MAAM,SAAS,IAAI;AACtD;AAAA,UACR;AACA;AAAA,QACJ,KAAK;AACD,oBAAU,KAAK,OAAO,MAAM,SAAS,IAAI;AACzC;AAAA,QACJ,KAAK;AACD,oBAAU,KAAK,QAAQ,MAAM,SAAS,IAAI;AAC1C;AAAA,QACJ,KAAK;AACD,qBAAW,KAAK,MAAM,OAAO,MAAM,SAAS,IAAI;AAChD;AAAA,QACJ,KAAK;AACD,qBAAW,KAAK,YAAY,MAAM,MAAM,SAAS,IAAI;AACrD;AAAA,QACJ,KAAK;AACD,qBAAW,KAAK,YAAY,OAAO,MAAM,SAAS,IAAI;AACtD;AAAA,QACJ,KAAK;AACD,qBAAW,KAAK,OAAO,IAAI,wBAAwB,MAAM,OAAO,IAAI,CAAC,EAAE,GAAG,MAAM,SAAS,IAAI;AAC7F;AAAA,QACJ,KAAK;AACD,qBAAW,KAAK,OAAO,GAAG,wBAAwB,MAAM,OAAO,IAAI,CAAC,GAAG,GAAG,MAAM,SAAS,IAAI;AAC7F;AAAA,QACJ,KAAK;AACD,oBAAU,KAAK,aAAa,MAAM,SAAS,IAAI;AAC/C;AAAA,QACJ,KAAK;AACD,oBAAU,KAAK,QAAQ,MAAM,SAAS,IAAI;AAC1C;AAAA,QACJ,KAAK;AACD,oBAAU,KAAK,QAAQ,MAAM,SAAS,IAAI;AAC1C;AAAA,QACJ,KAAK;AACD,oBAAU,KAAK,YAAY,MAAM,SAAS,IAAI;AAC9C;AAAA,QACJ,KAAK;AACD,oCAA0B,KAAK,aAAa,OAAO,IAAI,cAAc,WAC/D,KAAK,IAAI,IAAI,WAAW,MAAM,KAAK,IACnC,MAAM,OAAO,MAAM,SAAS,IAAI;AACtC,oCAA0B,KAAK,aAAa,OAAO,IAAI,cAAc,WAC/D,KAAK,IAAI,IAAI,WAAW,MAAM,KAAK,IACnC,MAAM,OAAO,MAAM,SAAS,IAAI;AACtC;AAAA,QACJ,KAAK,YAAY;AACb,qBAAW,KAAK,OAAO,wBAAwB,MAAM,OAAO,IAAI,CAAC,GAAG,MAAM,SAAS,IAAI;AACvF;AAAA,QACJ;AAAA,QACA,KAAK,MAAM;AACP,cAAI,MAAM,YAAY,MAAM;AACxB,sBAAU,KAAK,QAAQ,MAAM,SAAS,IAAI;AAAA,UAC9C;AACA,cAAI,MAAM,YAAY,MAAM;AACxB,sBAAU,KAAK,QAAQ,MAAM,SAAS,IAAI;AAAA,UAC9C;AACA;AAAA,QACJ;AAAA,QACA,KAAK;AACD,qBAAW,KAAK,YAAY,WAAW,MAAM,SAAS,IAAI;AAC1D;AAAA,QACJ,KAAK;AACD,qBAAW,KAAK,YAAY,KAAK,MAAM,SAAS,IAAI;AACpD;AAAA,QACJ,KAAK,QAAQ;AACT,cAAI,MAAM,YAAY,MAAM;AACxB,uBAAW,KAAK,YAAY,UAAU,MAAM,SAAS,IAAI;AAAA,UAC7D;AACA,cAAI,MAAM,YAAY,MAAM;AACxB,uBAAW,KAAK,YAAY,UAAU,MAAM,SAAS,IAAI;AAAA,UAC7D;AACA;AAAA,QACJ;AAAA,QACA,KAAK;AACD,qBAAW,KAAK,YAAY,MAAM,GAAG,MAAM,SAAS,IAAI;AACxD;AAAA,QACJ,KAAK,QAAQ;AACT,qBAAW,KAAK,YAAY,MAAM,MAAM,SAAS,IAAI;AACrD;AAAA,QACJ;AAAA,QACA,KAAK,UAAU;AACX,kBAAQ,KAAK,gBAAgB;AAAA,YACzB,KAAK,iBAAiB;AAClB,wBAAU,KAAK,UAAU,MAAM,SAAS,IAAI;AAC5C;AAAA,YACJ;AAAA,YACA,KAAK,0BAA0B;AAC3B,wCAA0B,KAAK,mBAAmB,UAAU,MAAM,SAAS,IAAI;AAC/E;AAAA,YACJ;AAAA,YACA,KAAK,eAAe;AAChB,yBAAW,KAAK,YAAY,QAAQ,MAAM,SAAS,IAAI;AACvD;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,QACJ;AAAA,QACA,KAAK,UAAU;AACX,qBAAW,KAAK,YAAY,QAAQ,MAAM,SAAS,IAAI;AAAA,QAC3D;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD;AAAA,QACJ;AACI,UAAC,kBAAC,MAAM;AAAA,UAAE,GAAG,KAAK;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AACA,SAAS,wBAAwB,SAAS,MAAM;AAC5C,SAAO,KAAK,oBAAoB,WAC1B,sBAAsB,OAAO,IAC7B;AACV;AACA,IAAM,gBAAgB,IAAI,IAAI,8DAA8D;AAC5F,SAAS,sBAAsB,QAAQ;AACnC,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,QAAI,CAAC,cAAc,IAAI,OAAO,CAAC,CAAC,GAAG;AAC/B,gBAAU;AAAA,IACd;AACA,cAAU,OAAO,CAAC;AAAA,EACtB;AACA,SAAO;AACX;AAEA,SAAS,UAAU,QAAQ,OAAO,SAAS,MAAM;AAC7C,MAAI,OAAO,UAAU,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG;AACtD,QAAI,CAAC,OAAO,OAAO;AACf,aAAO,QAAQ,CAAC;AAAA,IACpB;AACA,QAAI,OAAO,QAAQ;AACf,aAAO,MAAM,KAAK;AAAA,QACd,QAAQ,OAAO;AAAA,QACf,GAAI,OAAO,gBACP,KAAK,iBAAiB;AAAA,UACtB,cAAc,EAAE,QAAQ,OAAO,aAAa,OAAO;AAAA,QACvD;AAAA,MACJ,CAAC;AACD,aAAO,OAAO;AACd,UAAI,OAAO,cAAc;AACrB,eAAO,OAAO,aAAa;AAC3B,YAAI,OAAO,KAAK,OAAO,YAAY,EAAE,WAAW,GAAG;AAC/C,iBAAO,OAAO;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,MAAM,KAAK;AAAA,MACd,QAAQ;AAAA,MACR,GAAI,WACA,KAAK,iBAAiB,EAAE,cAAc,EAAE,QAAQ,QAAQ,EAAE;AAAA,IAClE,CAAC;AAAA,EACL,OACK;AACD,8BAA0B,QAAQ,UAAU,OAAO,SAAS,IAAI;AAAA,EACpE;AACJ;AAEA,SAAS,WAAW,QAAQ,OAAO,SAAS,MAAM;AAC9C,MAAI,OAAO,WAAW,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG;AACxD,QAAI,CAAC,OAAO,OAAO;AACf,aAAO,QAAQ,CAAC;AAAA,IACpB;AACA,QAAI,OAAO,SAAS;AAChB,aAAO,MAAM,KAAK;AAAA,QACd,SAAS,OAAO;AAAA,QAChB,GAAI,OAAO,gBACP,KAAK,iBAAiB;AAAA,UACtB,cAAc,EAAE,SAAS,OAAO,aAAa,QAAQ;AAAA,QACzD;AAAA,MACJ,CAAC;AACD,aAAO,OAAO;AACd,UAAI,OAAO,cAAc;AACrB,eAAO,OAAO,aAAa;AAC3B,YAAI,OAAO,KAAK,OAAO,YAAY,EAAE,WAAW,GAAG;AAC/C,iBAAO,OAAO;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,MAAM,KAAK;AAAA,MACd,SAAS,yBAAyB,OAAO,IAAI;AAAA,MAC7C,GAAI,WACA,KAAK,iBAAiB,EAAE,cAAc,EAAE,SAAS,QAAQ,EAAE;AAAA,IACnE,CAAC;AAAA,EACL,OACK;AACD,8BAA0B,QAAQ,WAAW,yBAAyB,OAAO,IAAI,GAAG,SAAS,IAAI;AAAA,EACrG;AACJ;AAEA,SAAS,yBAAyB,OAAO,MAAM;AAC3C,MAAI,CAAC,KAAK,mBAAmB,CAAC,MAAM,OAAO;AACvC,WAAO,MAAM;AAAA,EACjB;AAEA,QAAM,QAAQ;AAAA,IACV,GAAG,MAAM,MAAM,SAAS,GAAG;AAAA,IAC3B,GAAG,MAAM,MAAM,SAAS,GAAG;AAAA,IAC3B,GAAG,MAAM,MAAM,SAAS,GAAG;AAAA;AAAA,EAC/B;AAEA,QAAM,SAAS,MAAM,IAAI,MAAM,OAAO,YAAY,IAAI,MAAM;AAC5D,MAAI,UAAU;AACd,MAAI,YAAY;AAChB,MAAI,cAAc;AAClB,MAAI,cAAc;AAClB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,QAAI,WAAW;AACX,iBAAW,OAAO,CAAC;AACnB,kBAAY;AACZ;AAAA,IACJ;AACA,QAAI,MAAM,GAAG;AACT,UAAI,aAAa;AACb,YAAI,OAAO,CAAC,EAAE,MAAM,OAAO,GAAG;AAC1B,cAAI,aAAa;AACb,uBAAW,OAAO,CAAC;AACnB,uBAAW,GAAG,OAAO,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,YAAY;AACvD,0BAAc;AAAA,UAClB,WACS,OAAO,IAAI,CAAC,MAAM,OAAO,OAAO,IAAI,CAAC,GAAG,MAAM,OAAO,GAAG;AAC7D,uBAAW,OAAO,CAAC;AACnB,0BAAc;AAAA,UAClB,OACK;AACD,uBAAW,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,YAAY,CAAC;AAAA,UACrD;AACA;AAAA,QACJ;AAAA,MACJ,WACS,OAAO,CAAC,EAAE,MAAM,OAAO,GAAG;AAC/B,mBAAW,IAAI,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,YAAY,CAAC;AAClD;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,MAAM,GAAG;AACT,UAAI,OAAO,CAAC,MAAM,KAAK;AACnB,mBAAW;AAAA;AACX;AAAA,MACJ,WACS,OAAO,CAAC,MAAM,KAAK;AACxB,mBAAW;AAAA;AACX;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,MAAM,KAAK,OAAO,CAAC,MAAM,KAAK;AAC9B,iBAAW,cAAc,GAAG,OAAO,CAAC,CAAC;AAAA,IAAS,IAAI,OAAO,CAAC,CAAC;AAAA;AAC3D;AAAA,IACJ;AACA,eAAW,OAAO,CAAC;AACnB,QAAI,OAAO,CAAC,MAAM,MAAM;AACpB,kBAAY;AAAA,IAChB,WACS,eAAe,OAAO,CAAC,MAAM,KAAK;AACvC,oBAAc;AAAA,IAClB,WACS,CAAC,eAAe,OAAO,CAAC,MAAM,KAAK;AACxC,oBAAc;AAAA,IAClB;AAAA,EACJ;AACA,MAAI;AACA,QAAI,OAAO,OAAO;AAAA,EACtB,QACM;AACF,YAAQ,KAAK,sCAAsC,KAAK,YAAY,KAAK,GAAG,CAAC,uEAAuE;AACpJ,WAAO,MAAM;AAAA,EACjB;AACA,SAAO;AACX;;;AD1VO,SAAS,eAAe,KAAK,MAAM;AACtC,MAAI,KAAK,WAAW,UAAU;AAC1B,YAAQ,KAAK,8FAA8F;AAAA,EAC/G;AACA,MAAI,KAAK,WAAW,cAChB,IAAI,SAAS,KAAK,aAAaC,uBAAsB,SAAS;AAC9D,WAAO;AAAA,MACH,MAAM;AAAA,MACN,UAAU,IAAI,QAAQ,KAAK;AAAA,MAC3B,YAAY,IAAI,QAAQ,KAAK,OAAO,OAAO,CAAC,KAAK,SAAS;AAAA,QACtD,GAAG;AAAA,QACH,CAAC,GAAG,GAAG,SAAS,IAAI,UAAU,MAAM;AAAA,UAChC,GAAG;AAAA,UACH,aAAa,CAAC,GAAG,KAAK,aAAa,cAAc,GAAG;AAAA,QACxD,CAAC,KAAK,YAAY,IAAI;AAAA,MAC1B,IAAI,CAAC,CAAC;AAAA,MACN,sBAAsB,KAAK;AAAA,IAC/B;AAAA,EACJ;AACA,QAAM,SAAS;AAAA,IACX,MAAM;AAAA,IACN,sBAAsB,SAAS,IAAI,UAAU,MAAM;AAAA,MAC/C,GAAG;AAAA,MACH,aAAa,CAAC,GAAG,KAAK,aAAa,sBAAsB;AAAA,IAC7D,CAAC,KAAK,KAAK;AAAA,EACf;AACA,MAAI,KAAK,WAAW,YAAY;AAC5B,WAAO;AAAA,EACX;AACA,MAAI,IAAI,SAAS,KAAK,aAAaA,uBAAsB,aACrD,IAAI,QAAQ,KAAK,QAAQ,QAAQ;AACjC,UAAM,EAAE,MAAM,GAAG,QAAQ,IAAI,eAAe,IAAI,QAAQ,MAAM,IAAI;AAClE,WAAO;AAAA,MACH,GAAG;AAAA,MACH,eAAe;AAAA,IACnB;AAAA,EACJ,WACS,IAAI,SAAS,KAAK,aAAaA,uBAAsB,SAAS;AACnE,WAAO;AAAA,MACH,GAAG;AAAA,MACH,eAAe;AAAA,QACX,MAAM,IAAI,QAAQ,KAAK;AAAA,MAC3B;AAAA,IACJ;AAAA,EACJ,WACS,IAAI,SAAS,KAAK,aAAaA,uBAAsB,cAC1D,IAAI,QAAQ,KAAK,KAAK,KAAK,aAAaA,uBAAsB,aAC9D,IAAI,QAAQ,KAAK,KAAK,KAAK,QAAQ,QAAQ;AAC3C,UAAM,EAAE,MAAM,GAAG,QAAQ,IAAI,gBAAgB,IAAI,QAAQ,MAAM,IAAI;AACnE,WAAO;AAAA,MACH,GAAG;AAAA,MACH,eAAe;AAAA,IACnB;AAAA,EACJ;AACA,SAAO;AACX;;;AEzDO,SAAS,YAAY,KAAK,MAAM;AACnC,MAAI,KAAK,gBAAgB,UAAU;AAC/B,WAAO,eAAe,KAAK,IAAI;AAAA,EACnC;AACA,QAAM,OAAO,SAAS,IAAI,QAAQ,MAAM;AAAA,IACpC,GAAG;AAAA,IACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,SAAS,GAAG;AAAA,EAC5D,CAAC,KAAK,YAAY,IAAI;AACtB,QAAM,SAAS,SAAS,IAAI,UAAU,MAAM;AAAA,IACxC,GAAG;AAAA,IACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,SAAS,GAAG;AAAA,EAC5D,CAAC,KAAK,YAAY,IAAI;AACtB,SAAO;AAAA,IACH,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,MACH,MAAM;AAAA,MACN,OAAO,CAAC,MAAM,MAAM;AAAA,MACpB,UAAU;AAAA,MACV,UAAU;AAAA,IACd;AAAA,EACJ;AACJ;;;ACzBO,SAAS,mBAAmB,KAAK;AACpC,QAAM,SAAS,IAAI;AACnB,QAAM,aAAa,OAAO,KAAK,IAAI,MAAM,EAAE,OAAO,CAAC,QAAQ;AACvD,WAAO,OAAO,OAAO,OAAO,GAAG,CAAC,MAAM;AAAA,EAC1C,CAAC;AACD,QAAM,eAAe,WAAW,IAAI,CAAC,QAAQ,OAAO,GAAG,CAAC;AACxD,QAAM,cAAc,MAAM,KAAK,IAAI,IAAI,aAAa,IAAI,CAAC,WAAW,OAAO,MAAM,CAAC,CAAC;AACnF,SAAO;AAAA,IACH,MAAM,YAAY,WAAW,IACvB,YAAY,CAAC,MAAM,WACf,WACA,WACJ,CAAC,UAAU,QAAQ;AAAA,IACzB,MAAM;AAAA,EACV;AACJ;;;ACdO,SAAS,cAAc,MAAM;AAChC,SAAO,KAAK,WAAW,WACjB,SACA;AAAA,IACE,KAAK,YAAY;AAAA,MACb,GAAG;AAAA,MACH,aAAa,CAAC,GAAG,KAAK,aAAa,KAAK;AAAA,IAC5C,CAAC;AAAA,EACL;AACR;;;ACVO,SAAS,aAAa,MAAM;AAC/B,SAAO,KAAK,WAAW,aACjB;AAAA,IACE,MAAM,CAAC,MAAM;AAAA,IACb,UAAU;AAAA,EACd,IACE;AAAA,IACE,MAAM;AAAA,EACV;AACR;;;ACRO,IAAM,oBAAoB;AAAA,EAC7B,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,SAAS;AACb;AACO,SAAS,cAAc,KAAK,MAAM;AACrC,MAAI,KAAK,WAAW;AAChB,WAAO,QAAQ,KAAK,IAAI;AAC5B,QAAM,UAAU,IAAI,mBAAmB,MAAM,MAAM,KAAK,IAAI,QAAQ,OAAO,CAAC,IAAI,IAAI;AAEpF,MAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,YAAY,sBACvC,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,KAAK,OAAO,OAAO,GAAG;AAE5C,UAAM,QAAQ,QAAQ,OAAO,CAACC,QAAO,MAAM;AACvC,YAAM,OAAO,kBAAkB,EAAE,KAAK,QAAQ;AAC9C,aAAO,QAAQ,CAACA,OAAM,SAAS,IAAI,IAAI,CAAC,GAAGA,QAAO,IAAI,IAAIA;AAAA,IAC9D,GAAG,CAAC,CAAC;AACL,WAAO;AAAA,MACH,MAAM,MAAM,SAAS,IAAI,QAAQ,MAAM,CAAC;AAAA,IAC5C;AAAA,EACJ,WACS,QAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,aAAa,gBAAgB,CAAC,EAAE,WAAW,GAAG;AAE/E,UAAM,QAAQ,QAAQ,OAAO,CAAC,KAAK,MAAM;AACrC,YAAM,OAAO,OAAO,EAAE,KAAK;AAC3B,cAAQ,MAAM;AAAA,QACV,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,iBAAO,CAAC,GAAG,KAAK,IAAI;AAAA,QACxB,KAAK;AACD,iBAAO,CAAC,GAAG,KAAK,SAAS;AAAA,QAC7B,KAAK;AACD,cAAI,EAAE,KAAK,UAAU;AACjB,mBAAO,CAAC,GAAG,KAAK,MAAM;AAAA,QAC9B,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AACI,iBAAO;AAAA,MACf;AAAA,IACJ,GAAG,CAAC,CAAC;AACL,QAAI,MAAM,WAAW,QAAQ,QAAQ;AAEjC,YAAM,cAAc,MAAM,OAAO,CAAC,GAAG,GAAG,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAChE,aAAO;AAAA,QACH,MAAM,YAAY,SAAS,IAAI,cAAc,YAAY,CAAC;AAAA,QAC1D,MAAM,QAAQ,OAAO,CAAC,KAAK,MAAM;AAC7B,iBAAO,IAAI,SAAS,EAAE,KAAK,KAAK,IAAI,MAAM,CAAC,GAAG,KAAK,EAAE,KAAK,KAAK;AAAA,QACnE,GAAG,CAAC,CAAC;AAAA,MACT;AAAA,IACJ;AAAA,EACJ,WACS,QAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,aAAa,SAAS,GAAG;AAC1D,WAAO;AAAA,MACH,MAAM;AAAA,MACN,MAAM,QAAQ,OAAO,CAAC,KAAK,MAAM;AAAA,QAC7B,GAAG;AAAA,QACH,GAAG,EAAE,KAAK,OAAO,OAAO,CAACC,OAAM,CAAC,IAAI,SAASA,EAAC,CAAC;AAAA,MACnD,GAAG,CAAC,CAAC;AAAA,IACT;AAAA,EACJ;AACA,SAAO,QAAQ,KAAK,IAAI;AAC5B;AACA,IAAM,UAAU,CAAC,KAAK,SAAS;AAC3B,QAAM,SAAS,IAAI,mBAAmB,MAChC,MAAM,KAAK,IAAI,QAAQ,OAAO,CAAC,IAC/B,IAAI,SACL,IAAI,CAAC,GAAG,MAAM,SAAS,EAAE,MAAM;AAAA,IAChC,GAAG;AAAA,IACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,GAAG,CAAC,EAAE;AAAA,EACtD,CAAC,CAAC,EACG,OAAO,CAAC,MAAM,CAAC,CAAC,MAChB,CAAC,KAAK,gBACF,OAAO,MAAM,YAAY,OAAO,KAAK,CAAC,EAAE,SAAS,EAAG;AAC7D,SAAO,MAAM,SAAS,EAAE,MAAM,IAAI;AACtC;;;AC7EO,SAAS,iBAAiB,KAAK,MAAM;AACxC,MAAI,CAAC,aAAa,aAAa,aAAa,cAAc,SAAS,EAAE,SAAS,IAAI,UAAU,KAAK,QAAQ,MACpG,CAAC,IAAI,UAAU,KAAK,UAAU,CAAC,IAAI,UAAU,KAAK,OAAO,SAAS;AACnE,QAAI,KAAK,WAAW,YAAY;AAC5B,aAAO;AAAA,QACH,MAAM,kBAAkB,IAAI,UAAU,KAAK,QAAQ;AAAA,QACnD,UAAU;AAAA,MACd;AAAA,IACJ;AACA,WAAO;AAAA,MACH,MAAM;AAAA,QACF,kBAAkB,IAAI,UAAU,KAAK,QAAQ;AAAA,QAC7C;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,MAAI,KAAK,WAAW,YAAY;AAC5B,UAAMC,QAAO,SAAS,IAAI,UAAU,MAAM;AAAA,MACtC,GAAG;AAAA,MACH,aAAa,CAAC,GAAG,KAAK,WAAW;AAAA,IACrC,CAAC;AACD,QAAIA,SAAQ,UAAUA;AAClB,aAAO,EAAE,OAAO,CAACA,KAAI,GAAG,UAAU,KAAK;AAC3C,WAAOA,SAAQ,EAAE,GAAGA,OAAM,UAAU,KAAK;AAAA,EAC7C;AACA,QAAM,OAAO,SAAS,IAAI,UAAU,MAAM;AAAA,IACtC,GAAG;AAAA,IACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,GAAG;AAAA,EACnD,CAAC;AACD,SAAO,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,EAAE;AACrD;;;AC/BO,SAAS,eAAe,KAAK,MAAM;AACtC,QAAM,MAAM;AAAA,IACR,MAAM;AAAA,EACV;AACA,MAAI,CAAC,IAAI;AACL,WAAO;AACX,aAAW,SAAS,IAAI,QAAQ;AAC5B,YAAQ,MAAM,MAAM;AAAA,MAChB,KAAK;AACD,YAAI,OAAO;AACX,wBAAgB,KAAK,QAAQ,MAAM,SAAS,IAAI;AAChD;AAAA,MACJ,KAAK;AACD,YAAI,KAAK,WAAW,eAAe;AAC/B,cAAI,MAAM,WAAW;AACjB,sCAA0B,KAAK,WAAW,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,UAC9E,OACK;AACD,sCAA0B,KAAK,oBAAoB,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,UACvF;AAAA,QACJ,OACK;AACD,cAAI,CAAC,MAAM,WAAW;AAClB,gBAAI,mBAAmB;AAAA,UAC3B;AACA,oCAA0B,KAAK,WAAW,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,QAC9E;AACA;AAAA,MACJ,KAAK;AACD,YAAI,KAAK,WAAW,eAAe;AAC/B,cAAI,MAAM,WAAW;AACjB,sCAA0B,KAAK,WAAW,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,UAC9E,OACK;AACD,sCAA0B,KAAK,oBAAoB,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,UACvF;AAAA,QACJ,OACK;AACD,cAAI,CAAC,MAAM,WAAW;AAClB,gBAAI,mBAAmB;AAAA,UAC3B;AACA,oCAA0B,KAAK,WAAW,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,QAC9E;AACA;AAAA,MACJ,KAAK;AACD,kCAA0B,KAAK,cAAc,MAAM,OAAO,MAAM,SAAS,IAAI;AAC7E;AAAA,IACR;AAAA,EACJ;AACA,SAAO;AACX;;;AClDO,SAAS,eAAe,KAAK,MAAM;AACtC,QAAM,4BAA4B,KAAK,WAAW;AAClD,QAAM,SAAS;AAAA,IACX,MAAM;AAAA,IACN,YAAY,CAAC;AAAA,EACjB;AACA,QAAM,WAAW,CAAC;AAClB,QAAM,QAAQ,IAAI,MAAM;AACxB,aAAW,YAAY,OAAO;AAC1B,QAAI,UAAU,MAAM,QAAQ;AAC5B,QAAI,YAAY,UAAa,QAAQ,SAAS,QAAW;AACrD;AAAA,IACJ;AACA,QAAI,eAAe,eAAe,OAAO;AACzC,QAAI,gBAAgB,2BAA2B;AAC3C,UAAI,QAAQ,KAAK,aAAa,eAAe;AACzC,kBAAU,QAAQ,KAAK;AAAA,MAC3B;AACA,UAAI,CAAC,QAAQ,WAAW,GAAG;AACvB,kBAAU,QAAQ,SAAS;AAAA,MAC/B;AACA,qBAAe;AAAA,IACnB;AACA,UAAM,YAAY,SAAS,QAAQ,MAAM;AAAA,MACrC,GAAG;AAAA,MACH,aAAa,CAAC,GAAG,KAAK,aAAa,cAAc,QAAQ;AAAA,MACzD,cAAc,CAAC,GAAG,KAAK,aAAa,cAAc,QAAQ;AAAA,IAC9D,CAAC;AACD,QAAI,cAAc,QAAW;AACzB;AAAA,IACJ;AACA,WAAO,WAAW,QAAQ,IAAI;AAC9B,QAAI,CAAC,cAAc;AACf,eAAS,KAAK,QAAQ;AAAA,IAC1B;AAAA,EACJ;AACA,MAAI,SAAS,QAAQ;AACjB,WAAO,WAAW;AAAA,EACtB;AACA,QAAM,uBAAuB,2BAA2B,KAAK,IAAI;AACjE,MAAI,yBAAyB,QAAW;AACpC,WAAO,uBAAuB;AAAA,EAClC;AACA,SAAO;AACX;AACA,SAAS,2BAA2B,KAAK,MAAM;AAC3C,MAAI,IAAI,SAAS,KAAK,aAAa,YAAY;AAC3C,WAAO,SAAS,IAAI,SAAS,MAAM;AAAA,MAC/B,GAAG;AAAA,MACH,aAAa,CAAC,GAAG,KAAK,aAAa,sBAAsB;AAAA,IAC7D,CAAC;AAAA,EACL;AACA,UAAQ,IAAI,aAAa;AAAA,IACrB,KAAK;AACD,aAAO,KAAK;AAAA,IAChB,KAAK;AACD,aAAO,KAAK;AAAA,IAChB,KAAK;AACD,aAAO,KAAK,6BAA6B,WACnC,KAAK,8BACL,KAAK;AAAA,EACnB;AACJ;AACA,SAAS,eAAe,QAAQ;AAC5B,MAAI;AACA,WAAO,OAAO,WAAW;AAAA,EAC7B,QACM;AACF,WAAO;AAAA,EACX;AACJ;;;ACrEO,IAAM,mBAAmB,CAAC,KAAK,SAAS;AAC3C,MAAI,KAAK,YAAY,SAAS,MAAM,KAAK,cAAc,SAAS,GAAG;AAC/D,WAAO,SAAS,IAAI,UAAU,MAAM,IAAI;AAAA,EAC5C;AACA,QAAM,cAAc,SAAS,IAAI,UAAU,MAAM;AAAA,IAC7C,GAAG;AAAA,IACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,GAAG;AAAA,EACnD,CAAC;AACD,SAAO,cACD;AAAA,IACE,OAAO;AAAA,MACH;AAAA,QACI,KAAK,YAAY,IAAI;AAAA,MACzB;AAAA,MACA;AAAA,IACJ;AAAA,EACJ,IACE,YAAY,IAAI;AAC1B;;;ACnBO,IAAM,mBAAmB,CAAC,KAAK,SAAS;AAC3C,MAAI,KAAK,iBAAiB,SAAS;AAC/B,WAAO,SAAS,IAAI,GAAG,MAAM,IAAI;AAAA,EACrC,WACS,KAAK,iBAAiB,UAAU;AACrC,WAAO,SAAS,IAAI,IAAI,MAAM,IAAI;AAAA,EACtC;AACA,QAAM,IAAI,SAAS,IAAI,GAAG,MAAM;AAAA,IAC5B,GAAG;AAAA,IACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,GAAG;AAAA,EACnD,CAAC;AACD,QAAM,IAAI,SAAS,IAAI,IAAI,MAAM;AAAA,IAC7B,GAAG;AAAA,IACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,IAAI,MAAM,GAAG;AAAA,EAC7D,CAAC;AACD,SAAO;AAAA,IACH,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,MAAM,MAAS;AAAA,EAC/C;AACJ;;;AClBO,SAAS,gBAAgB,KAAK,MAAM;AACvC,SAAO,SAAS,IAAI,KAAK,MAAM,IAAI;AACvC;;;ACDO,SAAS,YAAY,KAAK,MAAM;AACnC,QAAM,QAAQ,SAAS,IAAI,UAAU,MAAM;AAAA,IACvC,GAAG;AAAA,IACH,aAAa,CAAC,GAAG,KAAK,aAAa,OAAO;AAAA,EAC9C,CAAC;AACD,QAAM,SAAS;AAAA,IACX,MAAM;AAAA,IACN,aAAa;AAAA,IACb;AAAA,EACJ;AACA,MAAI,IAAI,SAAS;AACb,8BAA0B,QAAQ,YAAY,IAAI,QAAQ,OAAO,IAAI,QAAQ,SAAS,IAAI;AAAA,EAC9F;AACA,MAAI,IAAI,SAAS;AACb,8BAA0B,QAAQ,YAAY,IAAI,QAAQ,OAAO,IAAI,QAAQ,SAAS,IAAI;AAAA,EAC9F;AACA,SAAO;AACX;;;AClBO,SAAS,cAAc,KAAK,MAAM;AACrC,MAAI,IAAI,MAAM;AACV,WAAO;AAAA,MACH,MAAM;AAAA,MACN,UAAU,IAAI,MAAM;AAAA,MACpB,OAAO,IAAI,MACN,IAAI,CAAC,GAAG,MAAM,SAAS,EAAE,MAAM;AAAA,QAChC,GAAG;AAAA,QACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,GAAG,CAAC,EAAE;AAAA,MACtD,CAAC,CAAC,EACG,OAAO,CAAC,KAAK,MAAO,MAAM,SAAY,MAAM,CAAC,GAAG,KAAK,CAAC,GAAI,CAAC,CAAC;AAAA,MACjE,iBAAiB,SAAS,IAAI,KAAK,MAAM;AAAA,QACrC,GAAG;AAAA,QACH,aAAa,CAAC,GAAG,KAAK,aAAa,iBAAiB;AAAA,MACxD,CAAC;AAAA,IACL;AAAA,EACJ,OACK;AACD,WAAO;AAAA,MACH,MAAM;AAAA,MACN,UAAU,IAAI,MAAM;AAAA,MACpB,UAAU,IAAI,MAAM;AAAA,MACpB,OAAO,IAAI,MACN,IAAI,CAAC,GAAG,MAAM,SAAS,EAAE,MAAM;AAAA,QAChC,GAAG;AAAA,QACH,aAAa,CAAC,GAAG,KAAK,aAAa,SAAS,GAAG,CAAC,EAAE;AAAA,MACtD,CAAC,CAAC,EACG,OAAO,CAAC,KAAK,MAAO,MAAM,SAAY,MAAM,CAAC,GAAG,KAAK,CAAC,GAAI,CAAC,CAAC;AAAA,IACrE;AAAA,EACJ;AACJ;;;AC9BO,SAAS,kBAAkB,MAAM;AACpC,SAAO;AAAA,IACH,KAAK,YAAY,IAAI;AAAA,EACzB;AACJ;;;ACJO,SAAS,gBAAgB,MAAM;AAClC,SAAO,YAAY,IAAI;AAC3B;;;ACFO,IAAM,mBAAmB,CAAC,KAAK,SAAS;AAC3C,SAAO,SAAS,IAAI,UAAU,MAAM,IAAI;AAC5C;;;A9B4BO,IAAM,eAAe,CAAC,KAAK,UAAU,SAAS;AACjD,UAAQ,UAAU;AAAA,IACd,KAAKC,uBAAsB;AACvB,aAAO,eAAe,KAAK,IAAI;AAAA,IACnC,KAAKA,uBAAsB;AACvB,aAAO,eAAe,KAAK,IAAI;AAAA,IACnC,KAAKA,uBAAsB;AACvB,aAAO,eAAe,KAAK,IAAI;AAAA,IACnC,KAAKA,uBAAsB;AACvB,aAAO,eAAe,KAAK,IAAI;AAAA,IACnC,KAAKA,uBAAsB;AACvB,aAAO,gBAAgB;AAAA,IAC3B,KAAKA,uBAAsB;AACvB,aAAO,aAAa,KAAK,IAAI;AAAA,IACjC,KAAKA,uBAAsB;AACvB,aAAO,kBAAkB,IAAI;AAAA,IACjC,KAAKA,uBAAsB;AACvB,aAAO,aAAa,IAAI;AAAA,IAC5B,KAAKA,uBAAsB;AACvB,aAAO,cAAc,KAAK,IAAI;AAAA,IAClC,KAAKA,uBAAsB;AAAA,IAC3B,KAAKA,uBAAsB;AACvB,aAAO,cAAc,KAAK,IAAI;AAAA,IAClC,KAAKA,uBAAsB;AACvB,aAAO,qBAAqB,KAAK,IAAI;AAAA,IACzC,KAAKA,uBAAsB;AACvB,aAAO,cAAc,KAAK,IAAI;AAAA,IAClC,KAAKA,uBAAsB;AACvB,aAAO,eAAe,KAAK,IAAI;AAAA,IACnC,KAAKA,uBAAsB;AACvB,aAAO,gBAAgB,KAAK,IAAI;AAAA,IACpC,KAAKA,uBAAsB;AACvB,aAAO,aAAa,GAAG;AAAA,IAC3B,KAAKA,uBAAsB;AACvB,aAAO,mBAAmB,GAAG;AAAA,IACjC,KAAKA,uBAAsB;AACvB,aAAO,iBAAiB,KAAK,IAAI;AAAA,IACrC,KAAKA,uBAAsB;AACvB,aAAO,iBAAiB,KAAK,IAAI;AAAA,IACrC,KAAKA,uBAAsB;AACvB,aAAO,YAAY,KAAK,IAAI;AAAA,IAChC,KAAKA,uBAAsB;AACvB,aAAO,YAAY,KAAK,IAAI;AAAA,IAChC,KAAKA,uBAAsB;AACvB,aAAO,MAAM,IAAI,OAAO,EAAE;AAAA,IAC9B,KAAKA,uBAAsB;AACvB,aAAO,gBAAgB,KAAK,IAAI;AAAA,IACpC,KAAKA,uBAAsB;AAAA,IAC3B,KAAKA,uBAAsB;AACvB,aAAO,cAAc,IAAI;AAAA,IAC7B,KAAKA,uBAAsB;AACvB,aAAO,gBAAgB,KAAK,IAAI;AAAA,IACpC,KAAKA,uBAAsB;AACvB,aAAO,YAAY,IAAI;AAAA,IAC3B,KAAKA,uBAAsB;AACvB,aAAO,gBAAgB,IAAI;AAAA,IAC/B,KAAKA,uBAAsB;AACvB,aAAO,gBAAgB,KAAK,IAAI;AAAA,IACpC,KAAKA,uBAAsB;AACvB,aAAO,gBAAgB,KAAK,IAAI;AAAA,IACpC,KAAKA,uBAAsB;AACvB,aAAO,iBAAiB,KAAK,IAAI;AAAA,IACrC,KAAKA,uBAAsB;AACvB,aAAO,cAAc,KAAK,IAAI;AAAA,IAClC,KAAKA,uBAAsB;AACvB,aAAO,iBAAiB,KAAK,IAAI;AAAA,IACrC,KAAKA,uBAAsB;AAAA,IAC3B,KAAKA,uBAAsB;AAAA,IAC3B,KAAKA,uBAAsB;AACvB,aAAO;AAAA,IACX;AACI,aAAQ,kBAAC,MAAM,QAAW,QAAQ;AAAA,EAC1C;AACJ;;;A+BpGO,SAAS,SAAS,KAAK,MAAM,kBAAkB,OAAO;AACzD,QAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAClC,MAAI,KAAK,UAAU;AACf,UAAM,iBAAiB,KAAK,WAAW,KAAK,MAAM,UAAU,eAAe;AAC3E,QAAI,mBAAmB,gBAAgB;AACnC,aAAO;AAAA,IACX;AAAA,EACJ;AACA,MAAI,YAAY,CAAC,iBAAiB;AAC9B,UAAM,aAAa,QAAQ,UAAU,IAAI;AACzC,QAAI,eAAe,QAAW;AAC1B,aAAO;AAAA,IACX;AAAA,EACJ;AACA,QAAM,UAAU,EAAE,KAAK,MAAM,KAAK,aAAa,YAAY,OAAU;AACrE,OAAK,KAAK,IAAI,KAAK,OAAO;AAC1B,QAAM,qBAAqB,aAAa,KAAK,IAAI,UAAU,IAAI;AAE/D,QAAM,aAAa,OAAO,uBAAuB,aAC3C,SAAS,mBAAmB,GAAG,IAAI,IACnC;AACN,MAAI,YAAY;AACZ,YAAQ,KAAK,MAAM,UAAU;AAAA,EACjC;AACA,MAAI,KAAK,aAAa;AAClB,UAAM,oBAAoB,KAAK,YAAY,YAAY,KAAK,IAAI;AAChE,YAAQ,aAAa;AACrB,WAAO;AAAA,EACX;AACA,UAAQ,aAAa;AACrB,SAAO;AACX;AACA,IAAM,UAAU,CAAC,MAAM,SAAS;AAC5B,UAAQ,KAAK,cAAc;AAAA,IACvB,KAAK;AACD,aAAO,EAAE,MAAM,KAAK,KAAK,KAAK,GAAG,EAAE;AAAA,IACvC,KAAK;AACD,aAAO,EAAE,MAAM,gBAAgB,KAAK,aAAa,KAAK,IAAI,EAAE;AAAA,IAChE,KAAK;AAAA,IACL,KAAK,QAAQ;AACT,UAAI,KAAK,KAAK,SAAS,KAAK,YAAY,UACpC,KAAK,KAAK,MAAM,CAAC,OAAO,UAAU,KAAK,YAAY,KAAK,MAAM,KAAK,GAAG;AACtE,gBAAQ,KAAK,mCAAmC,KAAK,YAAY,KAAK,GAAG,CAAC,qBAAqB;AAC/F,eAAO,YAAY,IAAI;AAAA,MAC3B;AACA,aAAO,KAAK,iBAAiB,SAAS,YAAY,IAAI,IAAI;AAAA,IAC9D;AAAA,EACJ;AACJ;AACA,IAAM,UAAU,CAAC,KAAK,MAAM,eAAe;AACvC,MAAI,IAAI,aAAa;AACjB,eAAW,cAAc,IAAI;AAC7B,QAAI,KAAK,qBAAqB;AAC1B,iBAAW,sBAAsB,IAAI;AAAA,IACzC;AAAA,EACJ;AACA,SAAO;AACX;;;AC1DA,IAAM,kBAAkB,CAAC,QAAQ,YAAY;AACzC,QAAM,OAAO,QAAQ,OAAO;AAC5B,MAAI,cAAc,OAAO,YAAY,YAAY,QAAQ,cACnD,OAAO,QAAQ,QAAQ,WAAW,EAAE,OAAO,CAAC,KAAK,CAACC,OAAMC,OAAM,OAAO;AAAA,IACnE,GAAG;AAAA,IACH,CAACD,KAAI,GAAG,SAASC,QAAO,MAAM;AAAA,MAC1B,GAAG;AAAA,MACH,aAAa,CAAC,GAAG,KAAK,UAAU,KAAK,gBAAgBD,KAAI;AAAA,IAC7D,GAAG,IAAI,KAAK,YAAY,IAAI;AAAA,EAChC,IAAI,CAAC,CAAC,IACJ;AACN,QAAM,OAAO,OAAO,YAAY,WAC1B,UACA,SAAS,iBAAiB,UACtB,SACA,SAAS;AACnB,QAAM,OAAO,SAAS,OAAO,MAAM,SAAS,SACtC,OACA;AAAA,IACE,GAAG;AAAA,IACH,aAAa,CAAC,GAAG,KAAK,UAAU,KAAK,gBAAgB,IAAI;AAAA,EAC7D,GAAG,KAAK,KAAK,YAAY,IAAI;AACjC,QAAM,QAAQ,OAAO,YAAY,YAC7B,QAAQ,SAAS,UACjB,QAAQ,iBAAiB,UACvB,QAAQ,OACR;AACN,MAAI,UAAU,QAAW;AACrB,SAAK,QAAQ;AAAA,EACjB;AACA,MAAI,KAAK,MAAM,4BAA4B;AACvC,QAAI,CAAC,aAAa;AACd,oBAAc,CAAC;AAAA,IACnB;AACA,QAAI,CAAC,YAAY,KAAK,iBAAiB,GAAG;AACtC,kBAAY,KAAK,iBAAiB,IAAI;AAAA;AAAA,QAElC,MAAM,CAAC,UAAU,UAAU,WAAW,WAAW,SAAS,MAAM;AAAA,QAChE,OAAO;AAAA,UACH,MAAM,KAAK,iBAAiB,aACtB,MACA;AAAA,YACE,GAAG,KAAK;AAAA,YACR,KAAK;AAAA,YACL,KAAK;AAAA,UACT,EAAE,KAAK,GAAG;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,QAAM,WAAW,SAAS,SACpB,cACI;AAAA,IACE,GAAG;AAAA,IACH,CAAC,KAAK,cAAc,GAAG;AAAA,EAC3B,IACE,OACJ;AAAA,IACE,MAAM;AAAA,MACF,GAAI,KAAK,iBAAiB,aAAa,CAAC,IAAI,KAAK;AAAA,MACjD,KAAK;AAAA,MACL;AAAA,IACJ,EAAE,KAAK,GAAG;AAAA,IACV,CAAC,KAAK,cAAc,GAAG;AAAA,MACnB,GAAG;AAAA,MACH,CAAC,IAAI,GAAG;AAAA,IACZ;AAAA,EACJ;AACJ,MAAI,KAAK,WAAW,eAAe;AAC/B,aAAS,UAAU;AAAA,EACvB,WACS,KAAK,WAAW,uBAAuB,KAAK,WAAW,UAAU;AACtE,aAAS,UAAU;AAAA,EACvB;AACA,MAAI,KAAK,WAAW,aACf,WAAW,YACR,WAAW,YACX,WAAW,YACV,UAAU,YAAY,MAAM,QAAQ,SAAS,IAAI,IAAK;AAC3D,YAAQ,KAAK,sGAAsG;AAAA,EACvH;AACA,SAAO;AACX;;;ACnDA,SAAS,aAAa,QAA+B;AAGnD,SAAO,gBAAgB,QAAQ,EAAE,QAAQ,eAAe,cAAc,OAAO,CAAC;AAChF;AAEA,SAAS,eAAe,MAAiD;AACvE,SAAO,KAAK,WAAW,QAAQ,KAAK,OAAO,QAAQ,KAAK,OAAO;AACjE;AAOO,SAAS,oBAAoB,YAAmD;AACrF,QAAM,MAA2B,CAAC;AAClC,QAAM,UAAU,WAAW,SAAS,WAAW,CAAC;AAChD,QAAM,SAAS,WAAW,SAAS,UAAU,CAAC;AAC9C,aAAW,UAAU,SAAS;AAC5B,UAAM,MAAM,iBAAiB,OAAO,KAAK;AACzC,QAAI,CAAC,IAAK;AACV,UAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,IAAI,UAAU,EAAE,SAAS,IAAI,IAAI;AAC9E,QAAI,CAAC,KAAM;AACX,UAAM,MAA0B,CAAC;AACjC,UAAM,QAAQ,eAAe,IAAI;AACjC,QAAI,MAAO,KAAI,QAAQ,aAAa,KAAK;AACzC,QAAI,KAAK,OAAQ,KAAI,SAAS,aAAa,KAAK,MAAM;AACtD,QAAI,OAAO,GAAG,IAAI;AAAA,EACpB;AACA,SAAO;AACT;;;AC9CA,IAAM,eAAe;AACrB,IAAM,mBAAmB,oBAAI,IAAI,CAAC,QAAQ,OAAO,QAAQ,CAAC;AAO1D,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAY;AAAA,EAAY;AAAA,EACpE;AAAA,EAAU;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAW;AAAA,EAAS;AAAA,EAAW;AAAA,EACzE;AAAA,EAAY;AAAA,EAAM;AAAA,EAAU;AAAA,EAAM;AAAA,EAAc;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAU;AAAA,EACzE;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAU;AAAA,EAAO;AAAA,EAAQ;AAAA,EACnE;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAO;AAAA,EAAU;AAAA,EAAS;AAAA,EAAS;AAAA,EAAc;AAAA,EAClE;AAAA,EAAW;AAAA,EAAW;AAAA,EAAa;AACrC,CAAC;AAED,SAAS,cAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAOA,SAAS,oBAAoB,QAA0B;AACrD,MAAI,WAAW,QAAQ,WAAW,OAAW,QAAO;AACpD,MAAI,CAAC,cAAc,MAAM,EAAG,QAAO;AACnC,MAAI,MAAM,QAAQ,OAAO,IAAI,KAAK,WAAW,OAAQ,QAAO;AAC5D,QAAM,YAAa,OAAO,SAAS,OAAO;AAC1C,MAAI,MAAM,QAAQ,SAAS,EAAG,QAAO,UAAU,MAAM,mBAAmB;AACxE,QAAM,OAAO,OAAO;AACpB,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAO,KAAK,MAAM,CAAC,MAAM,oBAAoB,EAAE,GAAG,QAAQ,MAAM,EAAE,CAAC,CAAC;AAAA,EACtE;AACA,MAAI,SAAS,YAAY,SAAS,YAAY,SAAS,aAAa,SAAS,aAAa,SAAS,QAAQ;AACzG,WAAO;AAAA,EACT;AACA,MAAI,SAAS,SAAS;AACpB,WAAO,CAAC,MAAM,QAAQ,OAAO,KAAK,KAAK,oBAAoB,OAAO,KAAK;AAAA,EACzE;AACA,SAAO;AACT;AAEO,SAAS,oBAAoB,YAAsD;AACxF,QAAM,SAAmB,CAAC;AAC1B,QAAM,WAAqB,CAAC;AAC5B,QAAM,WAAW,WAAW;AAC5B,QAAM,UAAU,SAAS,WAAW,CAAC;AACrC,QAAM,SAAS,SAAS,UAAU,CAAC;AACnC,QAAM,WAAW,SAAS;AAE1B,MAAI,QAAQ,WAAW,KAAK,CAAC,YAAY,CAAC,SAAS,YAAY,gBAAgB,QAAQ;AACrF,WAAO,EAAE,QAAQ,SAAS;AAAA,EAC5B;AAEA,QAAM,eAAe,IAAI;AAAA,IACvB,SAAS,YAAY,OAAO,KACzB,OAAO,CAAC,SAAS,KAAK,WAAW,SAAS,CAAC,EAC3C,IAAI,CAAC,SAAS,KAAK,MAAM,UAAU,MAAM,CAAC;AAAA,EAC/C;AAKA,QAAM,YAAY,oBAAI,IAA6B;AACnD,aAAW,SAAS,QAAQ;AAC1B,UAAM,MAAM,GAAG,MAAM,MAAM,IAAI,MAAM,IAAI;AACzC,QAAI,CAAC,UAAU,IAAI,GAAG,EAAG,WAAU,IAAI,KAAK,KAAK;AAAA,EACnD;AAEA,QAAM,WAAW,oBAAI,IAAY;AACjC,QAAM,eAAe,oBAAI,IAAY;AACrC,QAAM,kBAAkB,oBAAI,IAAY;AAExC,aAAW,UAAU,SAAS;AAC5B,UAAM,QAAQ,WAAW,OAAO,GAAG;AAEnC,QAAI,CAAC,cAAc,KAAK,OAAO,GAAG,GAAG;AACnC,aAAO,KAAK,GAAG,KAAK,4BAA4B,aAAa,GAAG;AAAA,IAClE,WAAW,cAAc,IAAI,OAAO,GAAG,GAAG;AACxC,aAAO,KAAK,GAAG,KAAK,qFAAgF;AAAA,IACtG;AACA,QAAI,SAAS,IAAI,OAAO,GAAG,EAAG,QAAO,KAAK,GAAG,KAAK,iBAAiB;AACnE,aAAS,IAAI,OAAO,GAAG;AACvB,QAAI,CAAC,OAAO,SAAS,OAAO,MAAM,KAAK,EAAE,WAAW,GAAG;AACrD,aAAO,KAAK,GAAG,KAAK,qBAAqB;AAAA,IAC3C;AAEA,UAAM,MAAM,iBAAiB,OAAO,KAAK;AACzC,QAAI,CAAC,KAAK;AACR,aAAO,KAAK,GAAG,KAAK,YAAY,OAAO,KAAK,gCAAgC;AAC5E;AAAA,IACF;AACA,UAAM,OAAO,UAAU,IAAI,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,EAAE;AACtD,QAAI,CAAC,MAAM;AACT,aAAO,KAAK,GAAG,KAAK,YAAY,OAAO,KAAK,uCAAuC;AACnF;AAAA,IACF;AACA,QAAI,KAAK,YAAY,YAAY,KAAK,YAAY,UAAU;AAC1D,aAAO;AAAA,QACL,GAAG,KAAK,oBAAoB,KAAK,OAAO;AAAA,MAC1C;AAAA,IACF;AACA,QAAI,OAAO,SAAS,WAAW,KAAK,WAAW,cAAc;AAC3D,aAAO,KAAK,GAAG,KAAK,4CAA4C,KAAK,MAAM,GAAG;AAAA,IAChF;AACA,QAAI,OAAO,SAAS,cAAc,CAAC,iBAAiB,IAAI,KAAK,MAAM,GAAG;AACpE,aAAO,KAAK,GAAG,KAAK,mDAAmD,KAAK,MAAM,GAAG;AAAA,IACvF;AACA,QAAI,QAAQ,OAAO,UAAU,MAAM,QAAQ,KAAK,UAAU,GAAG;AAC3D,aAAO;AAAA,QACL,GAAG,KAAK,sBAAsB,QAAQ,OAAO,UAAU,CAAC,uCAAuC,QAAQ,KAAK,UAAU,CAAC;AAAA,MACzH;AAAA,IACF;AACA,QAAI,OAAO,SAAS,QAAS,cAAa,IAAI,OAAO,GAAG;AACxD,QAAI,OAAO,SAAS,WAAY,iBAAgB,IAAI,OAAO,GAAG;AAE9D,eAAW,QAAQ,OAAO,SAAS,CAAC,GAAG;AACrC,UAAI,CAAC,aAAa,IAAI,IAAI,GAAG;AAC3B,eAAO;AAAA,UACL,GAAG,KAAK,YAAY,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,aAAW,QAAQ,SAAS,YAAY,kBAAkB,CAAC,GAAG;AAC5D,QAAI,CAAC,aAAa,IAAI,IAAI,GAAG;AAC3B,aAAO;AAAA,QACL,+BAA+B,IAAI;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa,oBAAI,IAAY;AACnC,aAAW,UAAU,UAAU,WAAW,CAAC,GAAG;AAC5C,UAAM,QAAQ,oBAAoB,OAAO,GAAG;AAC5C,QAAI,WAAW,IAAI,OAAO,GAAG,EAAG,QAAO,KAAK,GAAG,KAAK,iBAAiB;AACrE,eAAW,IAAI,OAAO,GAAG;AACzB,QAAI,CAAC,aAAa,IAAI,OAAO,UAAU,GAAG;AACxC,aAAO,KAAK,GAAG,KAAK,iBAAiB,OAAO,UAAU,kCAAkC;AAAA,IAC1F;AACA,eAAW,OAAO,OAAO,WAAW,CAAC,GAAG;AACtC,UAAI,CAAC,gBAAgB,IAAI,GAAG,GAAG;AAC7B,eAAO,KAAK,GAAG,KAAK,aAAa,GAAG,qCAAqC;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO,GAAG;AAC3C,QAAI,UAA+C,CAAC;AACpD,QAAI;AACF,gBAAU,oBAAoB,UAAU;AAAA,IAC1C,SAAS,KAAK;AACZ,aAAO,KAAK,oCAAoC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,IACpG;AACA,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,SAAS,QAAS;AAC7B,YAAM,QAAQ,QAAQ,OAAO,GAAG,GAAG;AACnC,UAAI,UAAU,OAAW;AACzB,UAAI,CAAC,cAAc,KAAK,KAAK,MAAM,SAAS,YAAY,CAAC,cAAc,MAAM,UAAU,GAAG;AACxF,eAAO,KAAK,WAAW,OAAO,GAAG,6CAA6C;AAC9E;AAAA,MACF;AACA,iBAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,MAAM,UAAU,GAAG;AACjE,YAAI,CAAC,oBAAoB,UAAU,GAAG;AACpC,iBAAO;AAAA,YACL,WAAW,OAAO,GAAG,4BAA4B,IAAI;AAAA,UACvD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,SAAS;AAC5B;;;ACvKA,SAAS,YAAY,GAAW,GAAmB;AACjD,SAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;AAClC;AAOA,IAAM,mBAAmB,CAAC,KAAa,YACrC,6DAA6D,GAAG,KAAK,OAAO;AAAA;AAAA;AAAA;AAIvE,SAAS,WAAW,OAAuB;AAChD,SAAO,MACJ,MAAM,UAAU,EAChB,OAAO,OAAO,EACd,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,EAAE;AACZ;AAIA,SAASE,eAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,YAAY,OAAwB;AAC3C,MAAI,OAAO,UAAU,SAAU,QAAO,KAAK,UAAU,KAAK;AAC1D,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAW,QAAO,OAAO,KAAK;AAChF,MAAI,UAAU,KAAM,QAAO;AAC3B,SAAO;AACT;AAEA,IAAM,WAAW;AAEjB,SAAS,YAAY,MAAsB;AACzC,SAAO,SAAS,KAAK,IAAI,IAAI,OAAO,KAAK,UAAU,IAAI;AACzD;AAEA,SAAS,OAAO,MAAsB;AACpC,SAAO,KACJ,MAAM,IAAI,EACV,IAAI,CAAC,SAAU,KAAK,SAAS,IAAI,KAAK,IAAI,KAAK,IAAK,EACpD,KAAK,IAAI;AACd;AAQO,SAAS,mBAAmB,QAAyB;AAC1D,MAAI,WAAW,QAAQ,WAAW,OAAW,QAAO;AACpD,MAAI,WAAW,MAAO,QAAO;AAC7B,MAAI,CAACA,eAAc,MAAM,EAAG,QAAO;AAEnC,MAAI,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC9B,WAAO,OAAO,KAAK,IAAI,WAAW,EAAE,KAAK,KAAK,KAAK;AAAA,EACrD;AACA,MAAI,WAAW,OAAQ,QAAO,YAAY,OAAO,KAAK;AAEtD,QAAM,YAAa,OAAO,SAAS,OAAO;AAC1C,MAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,UAAM,QAAQ,UAAU,IAAI,kBAAkB;AAC9C,WAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,KAAK;AAAA,EAC5C;AACA,MAAI,MAAM,QAAQ,OAAO,KAAK,GAAG;AAC/B,UAAM,QAAS,OAAO,MAAoB,IAAI,kBAAkB;AAChE,WAAO,MAAM,KAAK,KAAK,KAAK;AAAA,EAC9B;AAEA,QAAM,OAAO,OAAO;AACpB,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,UAAM,QAAQ,KAAK,IAAI,CAAC,MAAM,mBAAmB,EAAE,GAAG,QAAQ,MAAM,EAAE,CAAC,CAAC;AACxE,WAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,KAAK;AAAA,EAC5C;AAEA,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK,SAAS;AACZ,UAAI,MAAM,QAAQ,OAAO,KAAK,GAAG;AAC/B,cAAM,QAAS,OAAO,MAAoB,IAAI,kBAAkB;AAChE,eAAO,IAAI,MAAM,KAAK,IAAI,CAAC;AAAA,MAC7B;AACA,YAAM,OAAO,mBAAmB,OAAO,KAAK;AAC5C,aAAO,KAAK,SAAS,GAAG,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI;AAAA,IACxD;AAAA,IACA,KAAK,UAAU;AACb,YAAM,QAAQA,eAAc,OAAO,UAAU,IAAI,OAAO,aAAa;AACrE,YAAM,WAAW,IAAI,IAAI,MAAM,QAAQ,OAAO,QAAQ,IAAK,OAAO,WAAwB,CAAC,CAAC;AAC5F,YAAM,QAAkB,CAAC;AACzB,UAAI,OAAO;AACT,mBAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,gBAAM,WAAW,SAAS,IAAI,IAAI,IAAI,KAAK;AAC3C,gBAAM,KAAK,GAAG,YAAY,IAAI,CAAC,GAAG,QAAQ,KAAK,mBAAmB,IAAI,CAAC,GAAG;AAAA,QAC5E;AAAA,MACF;AACA,YAAM,aAAa,OAAO;AAC1B,UAAIA,eAAc,UAAU,KAAK,eAAe,MAAM;AACpD,cAAM,YAAY,eAAe,OAAO,YAAY,mBAAmB,UAAU;AACjF,YAAI,MAAM,WAAW,EAAG,QAAO,kBAAkB,SAAS;AAK1D,cAAM,KAAK,yBAAyB;AAAA,MACtC;AACA,UAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,aAAO;AAAA,EAAM,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC;AAAA;AAAA,IACvC;AAAA,IACA;AACE,aAAO;AAAA,EACX;AACF;AAUA,SAAS,kBAAkB,YAA6C;AACtE,QAAM,UAAU,oBAAoB,UAAU;AAC9C,QAAM,UAAU,CAAC,GAAI,WAAW,SAAS,WAAW,CAAC,CAAE,EAAE;AAAA,IAAK,CAAC,GAAG,MAChE,YAAY,EAAE,KAAK,EAAE,GAAG;AAAA,EAC1B;AACA,SAAO,QACJ,OAAO,CAAC,MAAM,iBAAiB,EAAE,KAAK,MAAM,IAAI,EAChD,IAAI,CAAC,SAAS;AACb,UAAM,MAAM,QAAQ,KAAK,GAAG,KAAK,CAAC;AAClC,WAAO;AAAA,MACL;AAAA,MACA,WAAW,IAAI,UAAU,SAAY,mBAAmB,IAAI,KAAK,IAAI;AAAA,MACrE,YAAY,IAAI,WAAW,SAAY,mBAAmB,IAAI,MAAM,IAAI;AAAA,IAC1E;AAAA,EACF,CAAC;AACL;AAEA,SAAS,UAAU,YAA8B,QAA+B;AAC9E,QAAM,EAAE,KAAK,QAAQ,IAAI,WAAW;AACpC,QAAM,cAAc,GAAG,WAAW,GAAG,CAAC;AACtC,QAAM,QAAkB,CAAC,iBAAiB,KAAK,OAAO,CAAC;AAEvD,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,WAAW,MAAM,KAAK,GAAG;AACtC,QAAI,MAAM,cAAc,MAAM;AAC5B,YAAM,KAAK,eAAe,IAAI,WAAW,MAAM,SAAS,KAAK,EAAE;AAAA,IACjE;AACA,QAAI,MAAM,eAAe,MAAM;AAC7B,YAAM,KAAK,eAAe,IAAI,YAAY,MAAM,UAAU,KAAK,EAAE;AAAA,IACnE;AAAA,EACF;AAEA,QAAM,KAAK,gFAA2E;AACtF,QAAM,KAAK,oBAAoB,WAAW,IAAI;AAC9C,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,WAAW,MAAM,KAAK,GAAG;AACtC,UAAM,QAAQ,MAAM,cAAc,OAAO,GAAG,IAAI,UAAU;AAC1D,UAAM,SAAS,MAAM,eAAe,OAAO,GAAG,IAAI,WAAW;AAC7D,UAAM;AAAA,MACJ,KAAK,YAAY,MAAM,KAAK,GAAG,CAAC,aAAa,KAAK,UAAU,MAAM,KAAK,IAAI,CAAC,YAAY,KAAK,aAAa,MAAM;AAAA,IAClH;AAAA,EACF;AACA,QAAM,KAAK,KAAK,EAAE;AAElB,QAAM,iBAAiB,CAAC,GAAI,WAAW,SAAS,YAAY,kBAAkB,CAAC,CAAE,EAAE,KAAK;AACxF,MAAI,eAAe,SAAS,GAAG;AAC7B,UAAM,aAAa,GAAG,WAAW,GAAG,CAAC;AACrC,UAAM,KAAK,oCAAoC,GAAG,uCAAuC;AACzF,UAAM;AAAA,MACJ,eAAe,UAAU,UAAU,eAAe,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC;AAAA,IAC7F;AACA,UAAM;AAAA,MACJ,eAAe,UAAU,MAAM,eAC5B,IAAI,CAAC,MAAM,WAAW,KAAK,UAAU,CAAC,CAAC,sBAAsB,EAC7D,KAAK,KAAK,CAAC;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,SAAS,WAAW,YAA8B,QAA+B;AAC/E,QAAM,EAAE,KAAK,QAAQ,IAAI,WAAW;AACpC,QAAM,cAAc,GAAG,WAAW,GAAG,CAAC;AACtC,QAAM,QAAkB,CAAC,iBAAiB,KAAK,OAAO,CAAC;AACvD,QAAM,KAAK,iBAAiB,WAAW,yBAAyB,EAAE;AAClE,QAAM,KAAK,6BAA6B,KAAK,UAAU,GAAG,CAAC,GAAG;AAC9D,QAAM,KAAK,8EAA8E;AACzF,QAAM,KAAK,mCAAmC;AAC9C,QAAM,KAAK,KAAK;AAChB,QAAM,KAAK,4EAA4E;AACvF,QAAM,KAAK,gEAAgE;AAC3E,QAAM,KAAK,sEAAsE;AACjF,QAAM,KAAK,KAAK;AAChB,QAAM,KAAK,wCAAwC,KAAK,UAAU,IAAI,OAAO,EAAE,CAAC,KAAK,EAAE;AACvF,QAAM,KAAK,gCAAgC;AAC3C,QAAM,KAAK,4BAA4B;AACvC,QAAM,KAAK,yBAAyB;AACpC,QAAM,KAAK,KAAK,EAAE;AAClB,QAAM,KAAK,KAAK;AAChB,QAAM,KAAK,iFAA4E;AACvF,QAAM,KAAK,4EAA4E;AACvF,QAAM,KAAK,KAAK;AAChB,QAAM,KAAK,+BAA+B;AAC1C,QAAM,KAAK,6BAA6B;AACxC,QAAM;AAAA,IACJ;AAAA,EACF;AACA,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,KAAK,EAAE;AAElB,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,WAAW,MAAM,KAAK,GAAG;AACtC,UAAM,MAAgB,CAAC,MAAM,KAAK,KAAK;AACvC,QAAI,MAAM,KAAK,YAAa,KAAI,KAAK,MAAM,KAAK,WAAW;AAC3D,QAAI,MAAM,KAAK,WAAY,KAAI,KAAK,eAAe,MAAM,KAAK,UAAU,EAAE;AAC1E,UAAM,KAAK,KAAK;AAChB,eAAW,KAAK,IAAK,OAAM,KAAK,MAAM,CAAC,EAAE;AACzC,UAAM,KAAK,KAAK;AAChB,UAAM,SAAS,WAAW,WAAW,IAAI,KAAK,UAAU,MAAM,KAAK,GAAG,CAAC;AACvE,QAAI,MAAM,cAAc,MAAM;AAC5B,YAAM;AAAA,QACJ,mBAAmB,MAAM,KAAK,GAAG,4BAA4B,IAAI,+BAA+B,MAAM;AAAA,MACxG;AACA,YAAM;AAAA,QACJ,qCAAqC,KAAK,UAAU,MAAM,KAAK,GAAG,CAAC;AAAA,MACrE;AAAA,IACF,OAAO;AACL,YAAM,KAAK,mBAAmB,MAAM,KAAK,GAAG,0CAA0C,MAAM,IAAI;AAChG,YAAM;AAAA,QACJ,qCAAqC,KAAK,UAAU,MAAM,KAAK,GAAG,CAAC;AAAA,MACrE;AAAA,IACF;AACA,UAAM,KAAK,KAAK,EAAE;AAAA,EACpB;AAGA,QAAM,aAAa,OAChB,OAAO,CAAC,MAAM,EAAE,cAAc,IAAI,EAClC,IAAI,CAAC,MAAM,GAAG,WAAW,EAAE,KAAK,GAAG,CAAC,OAAO;AAC9C,MAAI,WAAW,SAAS,GAAG;AACzB,UAAM,CAAC,IAAI,iBAAiB,WAAW,KAAK,WAAW,KAAK,IAAI,CAAC;AAAA,EACnE;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,SAAS,YAAY,YAAsC;AACzD,QAAM,EAAE,KAAK,QAAQ,IAAI,WAAW;AACpC,QAAM,cAAc,GAAG,WAAW,GAAG,CAAC;AACtC,SAAO;AAAA,IACL,iBAAiB,KAAK,OAAO;AAAA,IAC7B,iBAAiB,WAAW;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,YAAY,GAAG,CAAC,KAAK,WAAW;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,UAAU,YAAsC;AACvD,QAAM,EAAE,KAAK,QAAQ,IAAI,WAAW;AACpC,SAAO;AAAA,IACL,iBAAiB,KAAK,OAAO;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,gBAAgB,YAA8B,MAAqC;AAC1F,QAAM,EAAE,KAAK,QAAQ,IAAI,WAAW;AACpC,QAAM,MAAM;AAAA,IACV,MAAM,gBAAgB,GAAG;AAAA,IACzB;AAAA,IACA,aAAa,oCAAoC,GAAG;AAAA,IACpD,SAAS;AAAA,IACT,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,IACA,OAAO,CAAC,KAAK;AAAA,IACb,kBAAkB;AAAA,MAChB,uBAAuB,KAAK,gBAAgB;AAAA,IAC9C;AAAA,EACF;AACA,SAAO,GAAG,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC;AAAA;AACxC;AAMO,SAAS,sBACd,YACA,OAA8B,CAAC,GACT;AACtB,QAAM,SAAS,kBAAkB,UAAU;AAC3C,SAAO;AAAA,IACL,gBAAgB,gBAAgB,YAAY,IAAI;AAAA,IAChD,kBAAkB,YAAY,UAAU;AAAA,IACxC,iBAAiB,WAAW,YAAY,MAAM;AAAA,IAC9C,gBAAgB,UAAU,UAAU;AAAA,IACpC,gBAAgB,UAAU,YAAY,MAAM;AAAA,EAC9C;AACF;","names":["ZodFirstPartyTypeKind","ZodFirstPartyTypeKind","ZodFirstPartyTypeKind","types","x","base","ZodFirstPartyTypeKind","name","schema","isPlainObject"]}