@tiangong-lca/cli 0.0.32 → 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +33 -12
- package/assets/import-smoke/simapro.csv +20 -0
- package/bin/tiangong-lca.js +1 -1
- package/dist/src/cli.js +103 -65
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/dataset-bilingual.js.map +1 -1
- package/dist/src/lib/dataset-classification.js.map +1 -1
- package/dist/src/lib/dataset-contract.js.map +1 -1
- package/dist/src/lib/dataset-evidence-search.js.map +1 -1
- package/dist/src/lib/dataset-import-lca.js +302 -131
- package/dist/src/lib/dataset-import-lca.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-apply.js +916 -43
- package/dist/src/lib/dataset-maintenance-apply.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-clear-account.js +10 -4
- package/dist/src/lib/dataset-maintenance-clear-account.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-contract.js +1 -6
- package/dist/src/lib/dataset-maintenance-contract.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-derivatives.js +0 -1
- package/dist/src/lib/dataset-maintenance-derivatives.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-flow-identity-capture.js +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-capture.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-pagination.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-before.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-contract.js +0 -1
- package/dist/src/lib/dataset-maintenance-protected-contract.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-freeze.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-preparation.js +0 -2
- package/dist/src/lib/dataset-maintenance-protected-preparation.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-seal.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-verify.js +0 -3
- package/dist/src/lib/dataset-maintenance-protected-verify.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-remote.js +68 -12
- package/dist/src/lib/dataset-maintenance-remote.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-verify.js +1 -2
- package/dist/src/lib/dataset-maintenance-verify.js.map +1 -1
- package/dist/src/lib/dataset-remote-refresh.js.map +1 -1
- package/dist/src/lib/dataset-remote-verify.js +2 -0
- package/dist/src/lib/dataset-remote-verify.js.map +1 -1
- package/dist/src/lib/dataset-save-draft-run.js +2 -0
- package/dist/src/lib/dataset-save-draft-run.js.map +1 -1
- package/dist/src/lib/flow-build-alias-map.js.map +1 -1
- package/dist/src/lib/flow-fetch-rows.js.map +1 -1
- package/dist/src/lib/flow-get.js.map +1 -1
- package/dist/src/lib/flow-governance.js.map +1 -1
- package/dist/src/lib/flow-list.js +1 -0
- package/dist/src/lib/flow-list.js.map +1 -1
- package/dist/src/lib/flow-payload-validation.js.map +1 -1
- package/dist/src/lib/flow-publish-version.js +1 -0
- package/dist/src/lib/flow-publish-version.js.map +1 -1
- package/dist/src/lib/flow-read.js +1 -0
- package/dist/src/lib/flow-read.js.map +1 -1
- package/dist/src/lib/flow-regen-product.js.map +1 -1
- package/dist/src/lib/flow-remediate.js.map +1 -1
- package/dist/src/lib/identity-preflight.js +4 -10
- package/dist/src/lib/identity-preflight.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-bundle-save.js +1 -0
- package/dist/src/lib/lifecyclemodel-bundle-save.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-orchestrate.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-publish-resulting-process.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-resulting-process.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
- package/dist/src/lib/package-version.js.map +1 -1
- package/dist/src/lib/process-auto-build.js.map +1 -1
- package/dist/src/lib/process-dedup-review.js +14 -7
- package/dist/src/lib/process-dedup-review.js.map +1 -1
- package/dist/src/lib/process-flow-build-plan.js +111 -30
- package/dist/src/lib/process-flow-build-plan.js.map +1 -1
- package/dist/src/lib/process-get.js +1 -0
- package/dist/src/lib/process-get.js.map +1 -1
- package/dist/src/lib/process-list.js +1 -0
- package/dist/src/lib/process-list.js.map +1 -1
- package/dist/src/lib/process-payload-validation.js.map +1 -1
- package/dist/src/lib/process-qa.js.map +1 -1
- package/dist/src/lib/process-refresh-references.js +15 -10
- package/dist/src/lib/process-refresh-references.js.map +1 -1
- package/dist/src/lib/process-save-draft.js +9 -3
- package/dist/src/lib/process-save-draft.js.map +1 -1
- package/dist/src/lib/process-scope-statistics.js +11 -4
- package/dist/src/lib/process-scope-statistics.js.map +1 -1
- package/dist/src/lib/process-verify-rows.js.map +1 -1
- package/dist/src/lib/publish.js.map +1 -1
- package/dist/src/lib/run.js.map +1 -1
- package/dist/src/lib/supabase-client.js +13 -1
- package/dist/src/lib/supabase-client.js.map +1 -1
- package/dist/src/lib/supabase-data-api-contract.js +328 -0
- package/dist/src/lib/supabase-data-api-contract.js.map +1 -0
- package/dist/src/lib/supabase-data-api-replay.js +69 -0
- package/dist/src/lib/supabase-data-api-replay.js.map +1 -0
- package/dist/src/lib/supabase-json-ordered-write.js +2 -0
- package/dist/src/lib/supabase-json-ordered-write.js.map +1 -1
- package/dist/src/lib/supabase-rest.js +1 -0
- package/dist/src/lib/supabase-rest.js.map +1 -1
- package/dist/src/lib/tidas-sdk-package-validator.js +5 -5
- package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
- package/dist/src/lib/validation.js.map +1 -1
- package/dist/src/main.js.map +1 -1
- package/package.json +40 -40
- package/dist/scripts/assert-full-coverage.js +0 -77
- package/dist/scripts/assert-full-coverage.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset-maintenance-apply.js","sourceRoot":"","sources":["../../../src/lib/dataset-maintenance-apply.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { withStateFileLock } from './state-lock.js';\nimport {\n buildAliasBatchRequest,\n buildAliasPlanRequest,\n loadMaintenanceDesiredPayload,\n orderedAliasBatches,\n} from './dataset-maintenance-alias-request.js';\nimport {\n MAINTENANCE_SCAN_TABLES,\n appendStableJsonLine,\n isJsonObject,\n maintenanceRowKey,\n parseMaintenancePlan,\n readJsonFile,\n readJsonLinesIfPresent,\n sha256Json,\n snapshotRemoteRow,\n writeImmutableJson,\n type DatasetMaintenancePlan,\n type DatasetMaintenanceAliasBatchPlan,\n type DatasetMaintenancePlanAction,\n type DatasetMaintenanceProgressEntry,\n type DatasetMaintenanceMutableTable,\n type DatasetMaintenanceRemoteRow,\n type JsonObject,\n} from './dataset-maintenance-contract.js';\nimport {\n buildDerivativePlanRequest,\n derivativePlanAction,\n parseDerivativeSnapshotResponse,\n parseDerivativeSubmitResponse,\n type DatasetMaintenanceDerivativeSubmitProof,\n} from './dataset-maintenance-derivatives.js';\nimport { maintenanceProjectedReferenceFingerprint } from './dataset-maintenance-plan.js';\nimport { isSnapshotCompletenessCompatible } from './dataset-maintenance-pagination.js';\nimport {\n applyMaintenanceAliasPlan,\n applyMaintenanceDerivativeRebuild,\n deleteMaintenanceRow,\n fetchMaintenanceAccountRows,\n fetchMaintenanceDerivativeSnapshot,\n fetchMaintenanceExactRows,\n resolveMaintenanceRemoteContext,\n saveDraftMaintenanceRow,\n type DatasetMaintenanceRemoteContext,\n} from './dataset-maintenance-remote.js';\n\nexport type DatasetMaintenanceApplyReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed' | 'completed_with_failures' | 'accepted';\n task_id: string;\n operation: DatasetMaintenancePlan['operation'];\n operation_id: string;\n target_mode: DatasetMaintenancePlan['target_mode'];\n plan_sha256: string;\n actor: { user_id: string; email: string };\n summary: {\n actions: number;\n success: number;\n failed: number;\n pending: number;\n resumed_successes: number;\n accepted?: number;\n };\n actions: Array<{\n action_id: string;\n action: DatasetMaintenancePlanAction['action'];\n table: DatasetMaintenancePlanAction['table'];\n id: string;\n version: string;\n status: 'success' | 'failed' | 'pending' | 'accepted';\n error: string | null;\n }>;\n artifacts: {\n approval_record: string;\n apply_progress: string;\n commit_report: string;\n attempt_report: string;\n alias_plan_progress?: string;\n alias_batch_progress?: string;\n alias_exchange_progress?: string;\n derivative_submit_progress?: string;\n derivative_admission_attempt?: string;\n };\n database_audit: {\n rpc_transaction_log: 'public.command_audit_log';\n source: 'tiangong-lca dataset maintenance apply';\n correlation_fields: string[];\n };\n alias_plan_proof?: {\n plan_request_sha256: string;\n summary_audit_id: string;\n batch_count: 2;\n row_count: 52;\n exchange_count: 59;\n idempotent_replay: boolean;\n };\n derivative_admission?: DatasetMaintenanceDerivativeSubmitProof & {\n admission: 'accepted';\n };\n};\n\nexport type RunDatasetMaintenanceApplyOptions = {\n planPath: string;\n commit: boolean;\n approvePlan: string;\n confirm: string;\n timeoutMs?: number;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n now?: Date;\n};\n\ntype ProgressState = {\n entries: DatasetMaintenanceProgressEntry[];\n successes: Map<string, DatasetMaintenanceProgressEntry>;\n latestFailures: Map<string, DatasetMaintenanceProgressEntry>;\n};\n\ntype DerivativeSubmitProgressEntry = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n target_mode: 'owner_draft';\n actor: { user_id: string; email: string };\n started_at_utc: string;\n ended_at_utc: string;\n result: 'accepted';\n proof: DatasetMaintenanceDerivativeSubmitProof;\n};\n\ntype DerivativeSubmitProgressState = {\n entries: DerivativeSubmitProgressEntry[];\n latest: DerivativeSubmitProgressEntry | null;\n};\n\ntype DerivativeAdmissionAttempt = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n table: 'processes';\n id: string;\n version: string;\n expected_snapshot_sha256: string;\n actor: { user_id: string; email: string };\n prepared_at_utc: string;\n};\n\ntype AliasBatchProgressEntry = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n batch_id: string;\n target_mode: 'owner_draft';\n dimension: DatasetMaintenanceAliasBatchPlan['dimension'];\n factor: string;\n actor: { user_id: string; email: string };\n started_at_utc: string;\n ended_at_utc: string;\n batch_request_sha256: string;\n idempotent_replay: boolean;\n row_count: number;\n exchange_count: number;\n summary_audit_id: string;\n plan_request_sha256: string;\n plan_summary_audit_id: string;\n result: 'success';\n error: null;\n};\n\ntype AliasPlanBatchProof = {\n batch_id: string;\n dimension: DatasetMaintenanceAliasBatchPlan['dimension'];\n batch_request_sha256: string;\n summary_audit_id: string;\n};\n\ntype AliasPlanProgressEntry = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n target_mode: 'owner_draft';\n actor: { user_id: string; email: string };\n started_at_utc: string;\n ended_at_utc: string;\n plan_request_sha256: string | null;\n idempotent_replay: boolean | null;\n batch_count: 2;\n row_count: 52;\n exchange_count: 59;\n summary_audit_id: string | null;\n batches: AliasPlanBatchProof[];\n result: 'success' | 'failed';\n error: string | null;\n};\n\ntype AliasPlanProgressState = {\n entries: AliasPlanProgressEntry[];\n success: AliasPlanProgressEntry | null;\n latestFailure: AliasPlanProgressEntry | null;\n};\n\ntype AliasBatchProgressState = {\n entries: AliasBatchProgressEntry[];\n successes: Map<string, AliasBatchProgressEntry>;\n};\n\ntype AliasRpcAuditProof = {\n action_id: string;\n table: DatasetMaintenancePlanAction['table'];\n id: string;\n version: string;\n audit_id: string;\n};\n\ntype AliasRpcResult = {\n target_visibility: 'owner_draft';\n batch_request_sha256: string;\n idempotent_replay: boolean;\n exchange_count: number;\n summary_audit_id: string;\n audits: Map<string, AliasRpcAuditProof>;\n raw: JsonObject;\n};\n\ntype AliasPlanRpcResult = {\n target_visibility: 'owner_draft';\n plan_request_sha256: string;\n idempotent_replay: boolean;\n batch_count: 2;\n row_count: 52;\n exchange_count: 59;\n summary_audit_id: string;\n batches: Map<DatasetMaintenanceAliasBatchPlan['dimension'], AliasRpcResult>;\n raw: JsonObject;\n};\n\nconst POSITIVE_INTEGER_TEXT = /^[1-9]\\d*$/u;\n\nfunction clock(options: RunDatasetMaintenanceApplyOptions): string {\n return (options.now ?? new Date()).toISOString();\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction loadDesiredPayload(planDir: string, action: DatasetMaintenancePlanAction): JsonObject {\n return loadMaintenanceDesiredPayload(planDir, action);\n}\n\nfunction parseProgress(plan: DatasetMaintenancePlan, progressPath: string): ProgressState {\n const rawEntries = readJsonLinesIfPresent(progressPath);\n const entries: DatasetMaintenanceProgressEntry[] = [];\n const actionsById = new Map(plan.actions.map((action) => [action.action_id, action]));\n for (const value of rawEntries) {\n const action =\n isJsonObject(value) && typeof value.action_id === 'string'\n ? actionsById.get(value.action_id)\n : null;\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n typeof value.action_id !== 'string' ||\n !action ||\n value.action !== action.action ||\n value.reason_code !== action.reason_code ||\n typeof value.before_sha256 !== 'string' ||\n !isJsonObject(value.audit_context) ||\n value.audit_context.plan_sha256 !== plan.plan_sha256 ||\n value.audit_context.operation_id !== plan.operation_id ||\n value.audit_context.action_id !== action.action_id ||\n value.audit_context.reason_code !== action.reason_code ||\n value.audit_context.source !== 'tiangong-lca dataset maintenance apply' ||\n (action.action === 'update_json_ordered' &&\n (value.target_mode !== 'owner_draft' ||\n value.audit_context.target_mode !== 'owner_draft' ||\n value.batch_id !== action.batch_id ||\n typeof value.batch_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.batch_request_sha256) ||\n typeof value.database_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.database_audit_id) ||\n typeof value.summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) ||\n typeof value.plan_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.plan_request_sha256) ||\n typeof value.plan_summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.plan_summary_audit_id))) ||\n (action.action !== 'update_json_ordered' &&\n ('target_mode' in value ||\n 'target_mode' in value.audit_context ||\n 'batch_id' in value ||\n 'batch_request_sha256' in value ||\n 'database_audit_id' in value ||\n 'summary_audit_id' in value ||\n 'plan_request_sha256' in value ||\n 'plan_summary_audit_id' in value)) ||\n !['success', 'failed'].includes(String(value.result)) ||\n (value.result === 'success' && typeof value.remote_result_sha256 !== 'string') ||\n (value.result === 'failed' && value.remote_result_sha256 !== null)\n ) {\n throw new CliError('Apply progress contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_PROGRESS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n entries.push(value as DatasetMaintenanceProgressEntry);\n }\n const successes = new Map<string, DatasetMaintenanceProgressEntry>();\n const latestFailures = new Map<string, DatasetMaintenanceProgressEntry>();\n for (const entry of entries) {\n if (entry.result === 'success') {\n successes.set(entry.action_id, entry);\n latestFailures.delete(entry.action_id);\n } else if (!successes.has(entry.action_id)) {\n latestFailures.set(entry.action_id, entry);\n }\n }\n return { entries, successes, latestFailures };\n}\n\nfunction derivativeProofIdentity(proof: DatasetMaintenanceDerivativeSubmitProof): string {\n return sha256Json({\n schema_version: proof.schema_version,\n plan_sha256: proof.plan_sha256,\n operation_id: proof.operation_id,\n target_visibility: proof.target_visibility,\n plan_request_sha256: proof.plan_request_sha256,\n action_count: proof.action_count,\n accepted_count: proof.accepted_count,\n summary_audit_id: proof.summary_audit_id,\n request_id: proof.request_id,\n action_request_sha256: proof.action_request_sha256,\n database_audit_id: proof.database_audit_id,\n });\n}\n\nfunction parseDerivativeSubmitProgress(\n plan: DatasetMaintenancePlan,\n progressPath: string,\n): DerivativeSubmitProgressState {\n const action = derivativePlanAction(plan);\n const entries = readJsonLinesIfPresent(progressPath).map((value) => {\n const rawProof = isJsonObject(value) && isJsonObject(value.proof) ? value.proof : null;\n let proof: DatasetMaintenanceDerivativeSubmitProof;\n try {\n proof = parseDerivativeSubmitResponse(\n rawProof\n ? {\n ok: true,\n command: 'cmd_dataset_derivative_rebuild_plan_guarded',\n ...rawProof,\n }\n : null,\n plan,\n );\n } catch (error) {\n throw new CliError('Derivative submit progress contains an invalid RPC proof.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROGRESS_INVALID',\n exitCode: 1,\n details: errorMessage(error),\n });\n }\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n value.action_id !== action.action_id ||\n value.target_mode !== 'owner_draft' ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== plan.account.user_id ||\n value.actor.email !== plan.account.email ||\n typeof value.started_at_utc !== 'string' ||\n typeof value.ended_at_utc !== 'string' ||\n value.result !== 'accepted'\n ) {\n throw new CliError('Derivative submit progress contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROGRESS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return { ...value, proof } as DerivativeSubmitProgressEntry;\n });\n const identities = new Set(entries.map((entry) => derivativeProofIdentity(entry.proof)));\n if (identities.size > 1) {\n throw new CliError('Derivative submit replays do not identify one durable request.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROGRESS_INVALID',\n exitCode: 1,\n });\n }\n return { entries, latest: entries.at(-1) ?? null };\n}\n\nfunction validateDerivativeAdmissionAttempt(options: {\n path: string;\n plan: DatasetMaintenancePlan;\n context: DatasetMaintenanceRemoteContext;\n}): DerivativeAdmissionAttempt | null {\n if (!existsSync(options.path)) return null;\n const value = readJsonFile(options.path, 'Derivative admission attempt');\n const action = derivativePlanAction(options.plan);\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== options.plan.plan_sha256 ||\n value.operation_id !== options.plan.operation_id ||\n value.action_id !== action.action_id ||\n value.table !== 'processes' ||\n value.id !== action.id ||\n value.version !== action.version ||\n value.expected_snapshot_sha256 !== action.derivative_before?.snapshot_sha256 ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== options.context.account.user_id ||\n value.actor.email !== options.context.account.email ||\n typeof value.prepared_at_utc !== 'string' ||\n !Number.isFinite(Date.parse(value.prepared_at_utc))\n ) {\n throw new CliError('Derivative admission attempt is invalid or belongs to another plan.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_ATTEMPT_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return value as DerivativeAdmissionAttempt;\n}\n\nfunction parseAliasBatchProgress(\n plan: DatasetMaintenancePlan,\n progressPath: string,\n): AliasBatchProgressState {\n const batches = new Map(plan.alias_batches!.map((batch) => [batch.batch_id, batch]));\n const entries = readJsonLinesIfPresent(progressPath).map((value) => {\n const batch =\n isJsonObject(value) && typeof value.batch_id === 'string'\n ? batches.get(value.batch_id)\n : null;\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n !batch ||\n value.target_mode !== 'owner_draft' ||\n value.dimension !== batch.dimension ||\n value.factor !== batch.factor ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== plan.account.user_id ||\n value.actor.email !== plan.account.email ||\n typeof value.started_at_utc !== 'string' ||\n typeof value.ended_at_utc !== 'string' ||\n value.row_count !== batch.summary.rows ||\n value.exchange_count !== batch.summary.exchanges ||\n value.result !== 'success' ||\n typeof value.batch_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.batch_request_sha256) ||\n typeof value.idempotent_replay !== 'boolean' ||\n typeof value.summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) ||\n typeof value.plan_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.plan_request_sha256) ||\n typeof value.plan_summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.plan_summary_audit_id) ||\n value.error !== null\n ) {\n throw new CliError('Alias batch progress contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PROGRESS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return value as AliasBatchProgressEntry;\n });\n const successes = new Map<string, AliasBatchProgressEntry>();\n for (const entry of entries) {\n if (successes.has(entry.batch_id)) {\n throw new CliError('Alias batch progress contains duplicate success proof.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PROGRESS_INVALID',\n exitCode: 1,\n details: { batch_id: entry.batch_id },\n });\n }\n successes.set(entry.batch_id, entry);\n }\n return { entries, successes };\n}\n\nfunction parseAliasPlanProgress(\n plan: DatasetMaintenancePlan,\n progressPath: string,\n): AliasPlanProgressState {\n const expectedBatches = orderedAliasBatches(plan);\n const entries = readJsonLinesIfPresent(progressPath).map((value) => {\n const batchProofs = isJsonObject(value) && Array.isArray(value.batches) ? value.batches : [];\n const validBatchProofs =\n batchProofs.length === expectedBatches.length &&\n batchProofs.every((proof, index) => {\n const batch = expectedBatches[index]!;\n return Boolean(\n isJsonObject(proof) &&\n proof.batch_id === batch.batch_id &&\n proof.dimension === batch.dimension &&\n typeof proof.batch_request_sha256 === 'string' &&\n /^[a-f0-9]{64}$/u.test(proof.batch_request_sha256) &&\n typeof proof.summary_audit_id === 'string' &&\n POSITIVE_INTEGER_TEXT.test(proof.summary_audit_id),\n );\n });\n const batchRequestHashes = batchProofs\n .filter(isJsonObject)\n .map((proof) => proof.batch_request_sha256);\n const batchSummaryAuditIds = batchProofs\n .filter(isJsonObject)\n .map((proof) => proof.summary_audit_id);\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n value.target_mode !== 'owner_draft' ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== plan.account.user_id ||\n value.actor.email !== plan.account.email ||\n typeof value.started_at_utc !== 'string' ||\n typeof value.ended_at_utc !== 'string' ||\n value.batch_count !== 2 ||\n value.row_count !== 52 ||\n value.exchange_count !== 59 ||\n !['success', 'failed'].includes(String(value.result)) ||\n (value.result === 'success' &&\n (typeof value.plan_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.plan_request_sha256) ||\n typeof value.idempotent_replay !== 'boolean' ||\n typeof value.summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) ||\n !validBatchProofs ||\n new Set(batchRequestHashes).size !== 2 ||\n new Set(batchSummaryAuditIds).size !== 2 ||\n batchSummaryAuditIds.includes(value.summary_audit_id) ||\n value.error !== null)) ||\n (value.result === 'failed' &&\n (value.plan_request_sha256 !== null ||\n value.idempotent_replay !== null ||\n value.summary_audit_id !== null ||\n batchProofs.length !== 0 ||\n typeof value.error !== 'string'))\n ) {\n throw new CliError('Alias plan progress contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PLAN_PROGRESS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return value as AliasPlanProgressEntry;\n });\n let success: AliasPlanProgressEntry | null = null;\n let latestFailure: AliasPlanProgressEntry | null = null;\n for (const entry of entries) {\n if (entry.result === 'success') {\n if (success) {\n throw new CliError('Alias plan progress contains duplicate success proof.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PLAN_PROGRESS_INVALID',\n exitCode: 1,\n });\n }\n success = entry;\n latestFailure = null;\n } else if (!success) {\n latestFailure = entry;\n }\n }\n return { entries, success, latestFailure };\n}\n\nfunction finalProjectedRows(options: {\n rows: DatasetMaintenanceRemoteRow[];\n plan: DatasetMaintenancePlan;\n planDir: string;\n}): DatasetMaintenanceRemoteRow[] {\n const projected = new Map(options.rows.map((row) => [maintenanceRowKey(row), { ...row }]));\n for (const action of options.plan.actions.filter((entry) =>\n ['save_draft', 'update_json_ordered'].includes(entry.action),\n )) {\n const row = projected.get(maintenanceRowKey(action));\n if (row) {\n projected.set(maintenanceRowKey(action), {\n ...row,\n json_ordered: loadDesiredPayload(options.planDir, action),\n });\n }\n }\n for (const action of options.plan.actions.filter((entry) => entry.action === 'delete')) {\n projected.delete(maintenanceRowKey(action));\n }\n return [...projected.values()].sort((left, right) =>\n maintenanceRowKey(left).localeCompare(maintenanceRowKey(right)),\n );\n}\n\nfunction assertApplyPreconditions(options: {\n plan: DatasetMaintenancePlan;\n planDir: string;\n currentRows: DatasetMaintenanceRemoteRow[];\n progress: ProgressState;\n aliasPlanProgress?: AliasPlanProgressState;\n}): void {\n const current = new Map(options.currentRows.map((row) => [maintenanceRowKey(row), row]));\n const aliasBatchStates = new Map<string, 'before' | 'desired'>();\n for (const batch of options.plan.alias_batches ?? []) {\n const states = batch.action_ids.map((actionId) => {\n const action = options.plan.actions.find((entry) => entry.action_id === actionId)!;\n const row = current.get(maintenanceRowKey(action));\n const snapshot = row ? snapshotRemoteRow(row) : null;\n if (\n row?.state_code === 0 &&\n row.user_id === action.expected_user_id &&\n snapshot?.row_sha256 === action.before?.row_sha256\n ) {\n return 'before' as const;\n }\n if (\n row?.state_code === 0 &&\n row.user_id === action.expected_user_id &&\n snapshot?.payload_sha256 === action.desired_payload?.sha256 &&\n row.model_id === action.before?.model_id &&\n row.rule_verification === action.before?.rule_verification\n ) {\n return 'desired' as const;\n }\n return 'invalid' as const;\n });\n const unique = new Set(states);\n if (unique.size !== 1 || unique.has('invalid')) {\n throw new CliError(`Atomic alias batch row state drifted: ${batch.batch_id}`, {\n code: 'DATASET_MAINTENANCE_ALIAS_BATCH_DRIFT',\n exitCode: 1,\n details: { batch_id: batch.batch_id, states },\n });\n }\n aliasBatchStates.set(batch.batch_id, states[0] as 'before' | 'desired');\n }\n if (aliasBatchStates.size) {\n const planStates = new Set(aliasBatchStates.values());\n if (\n planStates.size !== 1 ||\n (Boolean(options.aliasPlanProgress?.success) && !planStates.has('desired'))\n ) {\n throw new CliError('Atomic alias plan rows are split across dimension states.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PLAN_DRIFT',\n exitCode: 1,\n details: { batches: Object.fromEntries(aliasBatchStates) },\n });\n }\n }\n const baselineKeys = new Set([\n ...options.plan.protected_rows.map(maintenanceRowKey),\n ...options.plan.actions.filter((action) => action.before).map(maintenanceRowKey),\n ]);\n for (const row of options.currentRows) {\n if (!baselineKeys.has(maintenanceRowKey(row))) {\n throw new CliError(`Unexpected current-account row appeared after planning: ${row.id}`, {\n code: 'DATASET_MAINTENANCE_PREFLIGHT_DRIFT',\n exitCode: 1,\n details: { table: row.table, id: row.id, version: row.version },\n });\n }\n }\n for (const protectedRow of options.plan.protected_rows) {\n const currentRow = current.get(maintenanceRowKey(protectedRow));\n if (!currentRow || snapshotRemoteRow(currentRow).row_sha256 !== protectedRow.row_sha256) {\n throw new CliError(`Protected row drifted after planning: ${protectedRow.id}`, {\n code: 'DATASET_MAINTENANCE_PROTECTED_ROW_DRIFT',\n exitCode: 1,\n details: protectedRow,\n });\n }\n }\n for (const action of options.plan.actions) {\n if (!action.before) {\n throw new CliError(`Ready plan action lacks before snapshot: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n const currentRow = current.get(maintenanceRowKey(action));\n const alreadySucceeded = options.progress.successes.has(action.action_id);\n if (alreadySucceeded && action.action === 'delete') {\n if (currentRow) {\n throw new CliError(`Previously deleted row is visible again: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_RESUME_DRIFT',\n exitCode: 1,\n });\n }\n continue;\n }\n if (!currentRow || currentRow.user_id !== action.expected_user_id) {\n throw new CliError(`Action row is missing, non-draft, or not owned: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_ACTION_ROW_DRIFT',\n exitCode: 1,\n });\n }\n const currentSnapshot = snapshotRemoteRow(currentRow);\n if (action.action === 'update_json_ordered') {\n aliasBatchStates.get(action.batch_id!)!;\n continue;\n }\n if (alreadySucceeded) {\n const expectedPayloadSha256 = sha256Json(loadDesiredPayload(options.planDir, action));\n if (\n currentRow.state_code !== 0 ||\n currentSnapshot.payload_sha256 !== expectedPayloadSha256 ||\n currentRow.model_id !== action.before.model_id ||\n currentRow.rule_verification !== action.before.rule_verification\n ) {\n throw new CliError(`Previously saved row payload drifted: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_RESUME_DRIFT',\n exitCode: 1,\n });\n }\n } else if (\n currentRow.state_code !== 0 ||\n currentSnapshot.row_sha256 !== action.before.row_sha256\n ) {\n throw new CliError(`Pending action row drifted after planning: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_ACTION_ROW_DRIFT',\n exitCode: 1,\n });\n }\n }\n const projected = finalProjectedRows({\n rows: options.currentRows,\n plan: options.plan,\n planDir: options.planDir,\n });\n const projectedReferenceSha256 = sha256Json(maintenanceProjectedReferenceFingerprint(projected));\n if (projectedReferenceSha256 !== options.plan.projected_reference_sha256) {\n throw new CliError('Projected reference closure drifted after planning.', {\n code: 'DATASET_MAINTENANCE_REFERENCE_PREFLIGHT_DRIFT',\n exitCode: 1,\n details: {\n expected: options.plan.projected_reference_sha256,\n actual: projectedReferenceSha256,\n },\n });\n }\n}\n\nfunction validateApprovalRecord(options: {\n path: string;\n plan: DatasetMaintenancePlan;\n context: DatasetMaintenanceRemoteContext;\n}): void {\n if (!existsSync(options.path)) {\n return;\n }\n const record = readJsonFile(options.path, 'Maintenance approval record');\n if (\n !isJsonObject(record) ||\n record.plan_sha256 !== options.plan.plan_sha256 ||\n record.target_mode !== options.plan.target_mode ||\n !isJsonObject(record.account) ||\n record.account.user_id !== options.context.account.user_id ||\n record.account.email !== options.context.account.email ||\n !isSnapshotCompletenessCompatible(\n record.snapshot_completeness,\n options.plan.snapshot_completeness,\n MAINTENANCE_SCAN_TABLES,\n )\n ) {\n throw new CliError('Existing approval record does not match this plan and actor.', {\n code: 'DATASET_MAINTENANCE_APPROVAL_RECORD_MISMATCH',\n exitCode: 1,\n });\n }\n}\n\nasync function assertAliasSupportSnapshots(options: {\n plan: DatasetMaintenancePlan;\n context: DatasetMaintenanceRemoteContext;\n}): Promise<void> {\n if (options.plan.target_mode !== 'owner_draft') {\n throw new CliError('Alias apply requires target_mode=owner_draft.', {\n code: 'DATASET_MAINTENANCE_TARGET_MODE_INVALID',\n exitCode: 2,\n });\n }\n for (const batch of options.plan.alias_batches!) {\n const snapshots = [\n batch.target_snapshots.unitgroup!,\n batch.target_snapshots.flowproperty!,\n batch.target_snapshots.source_unitgroup!,\n ];\n for (const snapshot of snapshots) {\n const exact = await fetchMaintenanceExactRows({\n context: options.context,\n table: snapshot.table,\n id: snapshot.id,\n version: snapshot.version,\n });\n const current =\n exact.rows.length === 1 && exact.rows[0] ? snapshotRemoteRow(exact.rows[0]) : null;\n if (\n !current ||\n current.user_id !== options.plan.account.user_id ||\n current.state_code !== 0 ||\n current.row_sha256 !== snapshot.row_sha256\n ) {\n throw new CliError(`Alias support row drifted for batch ${batch.batch_id}.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_SUPPORT_DRIFT',\n exitCode: 1,\n details: { table: snapshot.table, id: snapshot.id, version: snapshot.version },\n });\n }\n }\n }\n}\n\nfunction validateAliasRpcResult(\n value: JsonObject,\n batch: DatasetMaintenanceAliasBatchPlan,\n plan: DatasetMaintenancePlan,\n): AliasRpcResult {\n const audit = Array.isArray(value.audit) ? value.audit : [];\n const proofs = audit.filter(isJsonObject).map((entry) => ({\n action_id: entry.action_id,\n table: entry.table,\n id: entry.id,\n version: entry.version,\n audit_id: entry.audit_id,\n }));\n const proofByAction = new Map(\n proofs\n .filter(\n (entry): entry is AliasRpcAuditProof =>\n typeof entry.action_id === 'string' &&\n typeof entry.table === 'string' &&\n typeof entry.id === 'string' &&\n typeof entry.version === 'string' &&\n typeof entry.audit_id === 'string' &&\n POSITIVE_INTEGER_TEXT.test(entry.audit_id),\n )\n .map((entry) => [entry.action_id, entry]),\n );\n const actionsById = new Map(plan.actions.map((action) => [action.action_id, action]));\n const validProofs =\n proofByAction.size === batch.action_ids.length &&\n batch.action_ids.every((actionId) => {\n const action = actionsById.get(actionId);\n const proof = proofByAction.get(actionId);\n return Boolean(\n action &&\n proof &&\n proof.table === action.table &&\n proof.id === action.id &&\n proof.version === action.version,\n );\n });\n if (\n plan.target_mode !== 'owner_draft' ||\n value.ok !== true ||\n value.command !== 'cmd_dataset_alias_batch_guarded' ||\n value.target_visibility !== 'owner_draft' ||\n value.dimension !== batch.dimension ||\n value.batch_id !== batch.batch_id ||\n value.row_count !== batch.summary.rows ||\n value.exchange_count !== batch.summary.exchanges ||\n typeof value.summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) ||\n typeof value.batch_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.batch_request_sha256) ||\n typeof value.idempotent_replay !== 'boolean' ||\n audit.length !== batch.action_ids.length ||\n !validProofs\n ) {\n throw new CliError(`Alias batch RPC returned invalid proof for ${batch.batch_id}.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_RPC_PROOF_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return {\n target_visibility: 'owner_draft',\n batch_request_sha256: value.batch_request_sha256,\n idempotent_replay: value.idempotent_replay,\n exchange_count: value.exchange_count,\n summary_audit_id: value.summary_audit_id,\n audits: proofByAction,\n raw: value,\n };\n}\n\nfunction validateAliasPlanRpcResult(\n value: JsonObject,\n plan: DatasetMaintenancePlan,\n): AliasPlanRpcResult {\n const batches = orderedAliasBatches(plan);\n const rawBatchResults = Array.isArray(value.batches) ? value.batches : [];\n const parsedBatchResults = rawBatchResults.map((entry, index) =>\n isJsonObject(entry) && batches[index]\n ? validateAliasRpcResult(entry, batches[index], plan)\n : null,\n );\n const validBatchResults = parsedBatchResults.every(\n (entry): entry is AliasRpcResult => entry !== null,\n );\n const batchSummaryAuditIds = validBatchResults\n ? parsedBatchResults.map((entry) => entry.summary_audit_id)\n : [];\n const rowAuditIds = validBatchResults\n ? parsedBatchResults.flatMap((entry) =>\n [...entry.audits.values()].map((proof) => proof.audit_id),\n )\n : [];\n if (\n plan.target_mode !== 'owner_draft' ||\n value.ok !== true ||\n value.command !== 'cmd_dataset_alias_plan_guarded' ||\n value.schema_version !== 'dataset-alias-plan.v1' ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n value.target_visibility !== 'owner_draft' ||\n typeof value.plan_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.plan_request_sha256) ||\n value.batch_count !== 2 ||\n value.row_count !== 52 ||\n value.exchange_count !== 59 ||\n typeof value.summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) ||\n typeof value.idempotent_replay !== 'boolean' ||\n rawBatchResults.length !== 2 ||\n !validBatchResults ||\n parsedBatchResults.some(\n (entry, index) =>\n entry.idempotent_replay !== value.idempotent_replay ||\n entry.exchange_count !== batches[index]!.summary.exchanges,\n ) ||\n new Set(batchSummaryAuditIds).size !== 2 ||\n new Set(rowAuditIds).size !== 52 ||\n batchSummaryAuditIds.includes(value.summary_audit_id) ||\n rowAuditIds.includes(value.summary_audit_id) ||\n rowAuditIds.some((auditId) => batchSummaryAuditIds.includes(auditId))\n ) {\n throw new CliError('Alias plan RPC returned invalid whole-plan proof.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PLAN_RPC_PROOF_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return {\n target_visibility: 'owner_draft',\n plan_request_sha256: value.plan_request_sha256,\n idempotent_replay: value.idempotent_replay,\n batch_count: 2,\n row_count: 52,\n exchange_count: 59,\n summary_audit_id: value.summary_audit_id,\n batches: new Map(\n batches.map((batch, index) => [batch.dimension, parsedBatchResults[index]!] as const),\n ),\n raw: value,\n };\n}\n\nasync function executeAliasPlan(options: {\n plan: DatasetMaintenancePlan;\n planDir: string;\n context: DatasetMaintenanceRemoteContext;\n}): Promise<{\n rpc: AliasPlanRpcResult;\n after_by_action: Map<string, string>;\n}> {\n const request = buildAliasPlanRequest(options);\n const remoteResult = await applyMaintenanceAliasPlan({\n context: options.context,\n plan: request,\n });\n const rpc = validateAliasPlanRpcResult(remoteResult, options.plan);\n const afterByAction = new Map<string, string>();\n for (const action of options.plan.actions) {\n const exact = await fetchMaintenanceExactRows({\n context: options.context,\n table: action.table,\n id: action.id,\n version: action.version,\n });\n const row = exact.rows.length === 1 ? exact.rows[0] : null;\n const snapshot = row ? snapshotRemoteRow(row) : null;\n if (\n !row ||\n row.user_id !== action.expected_user_id ||\n row.state_code !== 0 ||\n snapshot?.payload_sha256 !== action.desired_payload?.sha256 ||\n row.model_id !== action.before?.model_id ||\n row.rule_verification !== action.before?.rule_verification\n ) {\n throw new CliError(`Alias plan readback failed for action ${action.action_id}.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_READBACK_FAILED',\n exitCode: 1,\n });\n }\n afterByAction.set(action.action_id, snapshot!.row_sha256);\n }\n await assertAliasSupportSnapshots({ plan: options.plan, context: options.context });\n return { rpc, after_by_action: afterByAction };\n}\n\nfunction aliasExchangeProgressKey(value: {\n batch_id: string;\n action_id: string;\n exchange_index: number;\n data_set_internal_id: string;\n}): string {\n return `${value.batch_id}\\u0000${value.action_id}\\u0000${value.exchange_index}\\u0000${value.data_set_internal_id}`;\n}\n\nfunction appendAliasSuccessLogs(options: {\n plan: DatasetMaintenancePlan;\n batch: DatasetMaintenanceAliasBatchPlan;\n execution: Awaited<ReturnType<typeof executeAliasPlan>>;\n progress: ProgressState;\n progressPath: string;\n exchangeProgressPath: string;\n context: DatasetMaintenanceRemoteContext;\n startedAt: string;\n endedAt: string;\n}): void {\n const batchRpc = options.execution.rpc.batches.get(options.batch.dimension)!;\n for (const actionId of options.batch.action_ids) {\n const action = options.plan.actions.find((entry) => entry.action_id === actionId)!;\n const proof = batchRpc.audits.get(actionId)!;\n const existingSuccess = options.progress.successes.get(actionId);\n if (existingSuccess) {\n if (\n existingSuccess.target_mode !== 'owner_draft' ||\n existingSuccess.batch_id !== options.batch.batch_id ||\n existingSuccess.batch_request_sha256 !== batchRpc.batch_request_sha256 ||\n existingSuccess.database_audit_id !== proof.audit_id ||\n existingSuccess.summary_audit_id !== batchRpc.summary_audit_id ||\n existingSuccess.plan_request_sha256 !== options.execution.rpc.plan_request_sha256 ||\n existingSuccess.plan_summary_audit_id !== options.execution.rpc.summary_audit_id ||\n existingSuccess.after_sha256 !== options.execution.after_by_action.get(actionId)\n ) {\n throw new CliError('Existing alias row progress does not match replay audit proof.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PROGRESS_INVALID',\n exitCode: 1,\n details: { action_id: actionId },\n });\n }\n continue;\n }\n const entry: DatasetMaintenanceProgressEntry = {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n reason_code: action.reason_code,\n audit_context: {\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: action.action_id,\n reason_code: action.reason_code,\n source: 'tiangong-lca dataset maintenance apply',\n target_mode: 'owner_draft',\n },\n actor: { user_id: options.context.account.user_id, email: options.context.account.email },\n started_at_utc: options.startedAt,\n ended_at_utc: options.endedAt,\n before_sha256: action.before!.row_sha256,\n after_sha256: options.execution.after_by_action.get(actionId)!,\n remote_result_sha256: sha256Json({\n plan_response: options.execution.rpc.raw,\n batch_response: batchRpc.raw,\n audit: proof,\n }),\n result: 'success',\n error: null,\n rollback: action.rollback,\n batch_id: options.batch.batch_id,\n target_mode: 'owner_draft',\n batch_request_sha256: batchRpc.batch_request_sha256,\n database_audit_id: proof.audit_id,\n summary_audit_id: batchRpc.summary_audit_id,\n plan_request_sha256: options.execution.rpc.plan_request_sha256,\n plan_summary_audit_id: options.execution.rpc.summary_audit_id,\n };\n appendStableJsonLine(options.progressPath, entry);\n options.progress.entries.push(entry);\n options.progress.successes.set(actionId, entry);\n options.progress.latestFailures.delete(actionId);\n }\n\n const existing = readJsonLinesIfPresent(options.exchangeProgressPath);\n const existingKeys = new Set<string>();\n const expectedRewrites = new Map(\n options.plan.alias_batches!.flatMap((batch) =>\n batch.exchange_rewrites.map(\n (rewrite) =>\n [\n aliasExchangeProgressKey({ batch_id: batch.batch_id, ...rewrite }),\n { batch, rewrite },\n ] as const,\n ),\n ),\n );\n for (const value of existing) {\n const key =\n isJsonObject(value) &&\n typeof value.batch_id === 'string' &&\n typeof value.action_id === 'string' &&\n typeof value.exchange_index === 'number' &&\n typeof value.data_set_internal_id === 'string'\n ? aliasExchangeProgressKey({\n batch_id: value.batch_id,\n action_id: value.action_id,\n exchange_index: value.exchange_index,\n data_set_internal_id: value.data_set_internal_id,\n })\n : '';\n const expected = expectedRewrites.get(key);\n const rowProof = expected ? options.progress.successes.get(expected.rewrite.action_id) : null;\n if (\n !isJsonObject(value) ||\n !expected ||\n !rowProof ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== options.plan.plan_sha256 ||\n value.operation_id !== options.plan.operation_id ||\n value.target_mode !== 'owner_draft' ||\n value.factor !== expected.batch.factor ||\n value.result !== 'success' ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== options.plan.account.user_id ||\n value.actor.email !== options.plan.account.email ||\n typeof value.logged_at_utc !== 'string' ||\n typeof value.batch_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.batch_request_sha256) ||\n value.batch_request_sha256 !== rowProof.batch_request_sha256 ||\n typeof value.database_audit_id !== 'string' ||\n POSITIVE_INTEGER_TEXT.test(value.database_audit_id) === false ||\n value.database_audit_id !== rowProof.database_audit_id ||\n typeof value.summary_audit_id !== 'string' ||\n POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) === false ||\n value.summary_audit_id !== rowProof.summary_audit_id ||\n typeof value.plan_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.plan_request_sha256) ||\n value.plan_request_sha256 !== rowProof.plan_request_sha256 ||\n typeof value.plan_summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.plan_summary_audit_id) ||\n value.plan_summary_audit_id !== rowProof.plan_summary_audit_id ||\n sha256Json({\n action_id: value.action_id,\n process_id: value.process_id,\n process_version: value.process_version,\n exchange_index: value.exchange_index,\n data_set_internal_id: value.data_set_internal_id,\n flow_id: value.flow_id,\n flow_version: value.flow_version,\n direction: value.direction,\n before_exchange_sha256: value.before_exchange_sha256,\n before_mean_amount: value.before_mean_amount,\n before_resulting_amount: value.before_resulting_amount,\n after_mean_amount: value.after_mean_amount,\n after_resulting_amount: value.after_resulting_amount,\n after_exchange_sha256: value.after_exchange_sha256,\n }) !== sha256Json(expected.rewrite) ||\n existingKeys.has(key)\n ) {\n throw new CliError('Alias exchange progress contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_ALIAS_EXCHANGE_PROGRESS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n existingKeys.add(key);\n }\n for (const rewrite of options.batch.exchange_rewrites) {\n const key = aliasExchangeProgressKey({ batch_id: options.batch.batch_id, ...rewrite });\n if (existingKeys.has(key)) continue;\n const proof = batchRpc.audits.get(rewrite.action_id)!;\n appendStableJsonLine(options.exchangeProgressPath, {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n batch_id: options.batch.batch_id,\n target_mode: 'owner_draft',\n batch_request_sha256: batchRpc.batch_request_sha256,\n factor: options.batch.factor,\n actor: { user_id: options.context.account.user_id, email: options.context.account.email },\n logged_at_utc: options.endedAt,\n database_audit_id: proof.audit_id,\n summary_audit_id: batchRpc.summary_audit_id,\n plan_request_sha256: options.execution.rpc.plan_request_sha256,\n plan_summary_audit_id: options.execution.rpc.summary_audit_id,\n result: 'success',\n ...rewrite,\n });\n existingKeys.add(key);\n }\n}\n\nfunction appendAliasProofProgress(options: {\n plan: DatasetMaintenancePlan;\n execution: Awaited<ReturnType<typeof executeAliasPlan>>;\n planProgress: AliasPlanProgressState;\n batchProgress: AliasBatchProgressState;\n planProgressPath: string;\n batchProgressPath: string;\n context: DatasetMaintenanceRemoteContext;\n startedAt: string;\n endedAt: string;\n}): AliasPlanProgressEntry {\n const batchProofs: AliasPlanBatchProof[] = [];\n for (const batch of orderedAliasBatches(options.plan)) {\n const rpc = options.execution.rpc.batches.get(batch.dimension)!;\n const existing = options.batchProgress.successes.get(batch.batch_id);\n if (\n existing &&\n (existing.batch_request_sha256 !== rpc.batch_request_sha256 ||\n existing.summary_audit_id !== rpc.summary_audit_id ||\n existing.plan_request_sha256 !== options.execution.rpc.plan_request_sha256 ||\n existing.plan_summary_audit_id !== options.execution.rpc.summary_audit_id)\n ) {\n throw new CliError('Existing alias batch proof does not match whole-plan replay.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PROGRESS_INVALID',\n exitCode: 1,\n details: { batch_id: batch.batch_id },\n });\n }\n const proof: AliasPlanBatchProof = {\n batch_id: batch.batch_id,\n dimension: batch.dimension,\n batch_request_sha256: rpc.batch_request_sha256,\n summary_audit_id: rpc.summary_audit_id,\n };\n batchProofs.push(proof);\n if (!existing) {\n const entry: AliasBatchProgressEntry = {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n batch_id: batch.batch_id,\n target_mode: 'owner_draft',\n dimension: batch.dimension,\n factor: batch.factor,\n actor: {\n user_id: options.context.account.user_id,\n email: options.context.account.email,\n },\n started_at_utc: options.startedAt,\n ended_at_utc: options.endedAt,\n batch_request_sha256: rpc.batch_request_sha256,\n idempotent_replay: rpc.idempotent_replay,\n row_count: batch.summary.rows,\n exchange_count: rpc.exchange_count,\n summary_audit_id: rpc.summary_audit_id,\n plan_request_sha256: options.execution.rpc.plan_request_sha256,\n plan_summary_audit_id: options.execution.rpc.summary_audit_id,\n result: 'success',\n error: null,\n };\n appendStableJsonLine(options.batchProgressPath, entry);\n options.batchProgress.entries.push(entry);\n options.batchProgress.successes.set(batch.batch_id, entry);\n }\n }\n const entry: AliasPlanProgressEntry = {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n target_mode: 'owner_draft',\n actor: { user_id: options.context.account.user_id, email: options.context.account.email },\n started_at_utc: options.startedAt,\n ended_at_utc: options.endedAt,\n plan_request_sha256: options.execution.rpc.plan_request_sha256,\n idempotent_replay: options.execution.rpc.idempotent_replay,\n batch_count: 2,\n row_count: 52,\n exchange_count: 59,\n summary_audit_id: options.execution.rpc.summary_audit_id,\n batches: batchProofs,\n result: 'success',\n error: null,\n };\n if (options.planProgress.success) {\n if (\n options.planProgress.success.plan_request_sha256 !== entry.plan_request_sha256 ||\n options.planProgress.success.summary_audit_id !== entry.summary_audit_id ||\n sha256Json(options.planProgress.success.batches) !== sha256Json(entry.batches)\n ) {\n throw new CliError('Existing alias plan proof does not match whole-plan replay.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PLAN_PROGRESS_INVALID',\n exitCode: 1,\n });\n }\n return options.planProgress.success;\n }\n appendStableJsonLine(options.planProgressPath, entry);\n options.planProgress.entries.push(entry);\n options.planProgress.success = entry;\n options.planProgress.latestFailure = null;\n return entry;\n}\n\nasync function executeAction(options: {\n action: DatasetMaintenancePlanAction;\n plan: DatasetMaintenancePlan;\n planDir: string;\n context: DatasetMaintenanceRemoteContext;\n}): Promise<{ afterSha256: string | null; remoteResultSha256: string }> {\n if (options.action.action === 'rebuild_derivatives') {\n throw new CliError(\n 'Derivative rebuild actions may only execute through the guarded whole-plan RPC.',\n {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_SEQUENTIAL_WRITE_FORBIDDEN',\n exitCode: 1,\n },\n );\n }\n if (!options.action.before) {\n throw new CliError(`Action lacks a before snapshot: ${options.action.action_id}`, {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n const justInTime = await fetchMaintenanceExactRows({\n context: options.context,\n table: options.action.table,\n id: options.action.id,\n version: options.action.version,\n });\n const pendingRow = justInTime.rows.length === 1 ? justInTime.rows[0] : null;\n const pendingSnapshot = pendingRow ? snapshotRemoteRow(pendingRow) : null;\n const exactDraft = Boolean(\n pendingRow &&\n pendingRow.state_code === 0 &&\n pendingSnapshot?.row_sha256 === options.action.before.row_sha256,\n );\n if (!pendingRow || pendingRow.user_id !== options.action.expected_user_id || !exactDraft) {\n throw new CliError(`Action row drifted immediately before write: ${options.action.action_id}`, {\n code: 'DATASET_MAINTENANCE_ACTION_JUST_IN_TIME_DRIFT',\n exitCode: 1,\n });\n }\n const audit = {\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: options.action.action_id,\n reason_code: options.action.reason_code,\n source: 'tiangong-lca dataset maintenance apply' as const,\n };\n if (options.action.action === 'save_draft') {\n const remoteResult = await saveDraftMaintenanceRow({\n context: options.context,\n table: options.action.table as DatasetMaintenanceMutableTable,\n id: options.action.id,\n version: options.action.version,\n payload: loadDesiredPayload(options.planDir, options.action),\n modelId: options.action.before?.model_id ?? null,\n ruleVerification: options.action.before?.rule_verification ?? null,\n audit,\n });\n const readback = await fetchMaintenanceExactRows({\n context: options.context,\n table: options.action.table,\n id: options.action.id,\n version: options.action.version,\n });\n const row = readback.rows[0];\n if (readback.rows.length !== 1 || !row) {\n throw new CliError(`save_draft readback failed for ${options.action.action_id}.`, {\n code: 'DATASET_MAINTENANCE_ACTION_READBACK_FAILED',\n exitCode: 1,\n });\n }\n const expectedPayload = options.action.desired_payload?.sha256;\n const readbackSnapshot = snapshotRemoteRow(row);\n if (\n readbackSnapshot.payload_sha256 !== expectedPayload ||\n row.user_id !== options.action.expected_user_id ||\n row.state_code !== 0\n ) {\n throw new CliError(`save_draft readback mismatch for ${options.action.action_id}.`, {\n code: 'DATASET_MAINTENANCE_ACTION_READBACK_FAILED',\n exitCode: 1,\n });\n }\n return {\n afterSha256: readbackSnapshot.row_sha256,\n remoteResultSha256: sha256Json(remoteResult),\n };\n }\n if (options.action.action === 'update_json_ordered') {\n throw new CliError('Atomic alias actions must execute through the whole-plan RPC.', {\n code: 'DATASET_MAINTENANCE_ALIAS_SEQUENTIAL_WRITE_FORBIDDEN',\n exitCode: 1,\n });\n }\n if (options.action.action !== 'delete') {\n throw new CliError(`Unsupported maintenance action: ${options.action.action}`, {\n code: 'DATASET_MAINTENANCE_ACTION_UNSUPPORTED',\n exitCode: 2,\n });\n }\n const remoteResult = await deleteMaintenanceRow({\n context: options.context,\n table: options.action.table as DatasetMaintenanceMutableTable,\n id: options.action.id,\n version: options.action.version,\n audit,\n });\n const readback = await fetchMaintenanceExactRows({\n context: options.context,\n table: options.action.table,\n id: options.action.id,\n version: options.action.version,\n });\n if (readback.rows.length !== 0) {\n throw new CliError(`delete readback failed for ${options.action.action_id}.`, {\n code: 'DATASET_MAINTENANCE_ACTION_READBACK_FAILED',\n exitCode: 1,\n });\n }\n return { afterSha256: null, remoteResultSha256: sha256Json(remoteResult) };\n}\n\nasync function executeDerivativeAdmission(options: {\n plan: DatasetMaintenancePlan;\n context: DatasetMaintenanceRemoteContext;\n replayPossible: boolean;\n attemptPath: string;\n preparedAtUtc: string;\n}): Promise<DatasetMaintenanceDerivativeSubmitProof> {\n const action = derivativePlanAction(options.plan);\n const plannedSnapshot = action.derivative_before!;\n const preflight = parseDerivativeSnapshotResponse(\n await fetchMaintenanceDerivativeSnapshot({\n context: options.context,\n id: action.id,\n version: action.version,\n }),\n { id: action.id, version: action.version, userId: action.expected_user_id },\n );\n if (\n preflight.modified_at !== plannedSnapshot.modified_at ||\n preflight.json_sha256 !== plannedSnapshot.json_sha256 ||\n preflight.json_ordered_sha256 !== plannedSnapshot.json_ordered_sha256 ||\n preflight.extracted_text_sha256 !== plannedSnapshot.extracted_text_sha256\n ) {\n throw new CliError('Derivative action primary preconditions drifted after planning.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PRIMARY_DRIFT',\n exitCode: 1,\n details: {\n expected_snapshot_sha256: plannedSnapshot.snapshot_sha256,\n actual_snapshot_sha256: preflight.snapshot_sha256,\n },\n });\n }\n if (!options.replayPossible && preflight.snapshot_sha256 !== plannedSnapshot.snapshot_sha256) {\n throw new CliError('Derivative action-scoped snapshot drifted before first admission.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_SNAPSHOT_DRIFT',\n exitCode: 1,\n details: {\n expected: plannedSnapshot.snapshot_sha256,\n actual: preflight.snapshot_sha256,\n },\n });\n }\n if (!options.replayPossible) {\n writeImmutableJson(options.attemptPath, {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: action.action_id,\n table: 'processes',\n id: action.id,\n version: action.version,\n expected_snapshot_sha256: plannedSnapshot.snapshot_sha256,\n actor: {\n user_id: options.context.account.user_id,\n email: options.context.account.email,\n },\n prepared_at_utc: options.preparedAtUtc,\n } satisfies DerivativeAdmissionAttempt);\n }\n const result = await applyMaintenanceDerivativeRebuild({\n context: options.context,\n plan: buildDerivativePlanRequest(options.plan),\n });\n return parseDerivativeSubmitResponse(result, options.plan);\n}\n\nfunction nextAttemptPath(planDir: string): string {\n let attempt = 1;\n while (\n existsSync(path.join(planDir, `commit-report.attempt-${String(attempt).padStart(4, '0')}.json`))\n ) {\n attempt += 1;\n }\n return path.join(planDir, `commit-report.attempt-${String(attempt).padStart(4, '0')}.json`);\n}\n\nexport async function runDatasetMaintenanceApply(\n options: RunDatasetMaintenanceApplyOptions,\n): Promise<DatasetMaintenanceApplyReport> {\n if (!options.commit) {\n throw new CliError('Dataset maintenance apply requires commit=true.', {\n code: 'DATASET_MAINTENANCE_COMMIT_REQUIRED',\n exitCode: 2,\n });\n }\n const planPath = path.resolve(options.planPath);\n const planDir = path.dirname(planPath);\n const plan = parseMaintenancePlan(readJsonFile(planPath, 'Maintenance plan'));\n if (options.approvePlan !== plan.plan_sha256) {\n throw new CliError('approvePlan must exactly match the canonical maintenance plan hash.', {\n code: 'DATASET_MAINTENANCE_PLAN_APPROVAL_REQUIRED',\n exitCode: 2,\n });\n }\n if (plan.status !== 'ready' || plan.blockers.length > 0) {\n throw new CliError('Blocked maintenance plan cannot be applied.', {\n code: 'DATASET_MAINTENANCE_PLAN_BLOCKED',\n exitCode: 1,\n details: plan.blockers,\n });\n }\n if (plan.operation === 'merge-support-aliases') {\n throw new CliError(\n 'merge-support-aliases is sealed for dataset maintenance run-protected and cannot use ordinary apply.',\n {\n code: 'DATASET_MAINTENANCE_PROTECTED_RUN_REQUIRED',\n exitCode: 1,\n },\n );\n }\n if (\n plan.operation === 'redo-import' &&\n !plan.source_import_run_id &&\n plan.source_lineage === null\n ) {\n throw new CliError('redo-import apply requires frozen redo source/import lineage.', {\n code: 'DATASET_MAINTENANCE_REDO_NOT_READY',\n exitCode: 1,\n });\n }\n\n const progressPath = path.join(\n planDir,\n plan.operation === 'rebuild-derivatives'\n ? 'derivative-submit-progress.jsonl'\n : 'apply-progress.jsonl',\n );\n return withStateFileLock(\n progressPath,\n { reason: `dataset_maintenance_apply_${plan.operation_id}` },\n async () => {\n const context = await resolveMaintenanceRemoteContext({\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n if (\n context.account.user_id !== plan.account.user_id ||\n context.account.email !== plan.account.email\n ) {\n throw new CliError('Current authenticated account does not match the maintenance plan.', {\n code: 'DATASET_MAINTENANCE_ACCOUNT_MISMATCH',\n exitCode: 1,\n });\n }\n if (options.confirm !== context.account.email) {\n throw new CliError('confirm must exactly match the current authenticated account email.', {\n code: 'DATASET_MAINTENANCE_CONFIRMATION_REQUIRED',\n exitCode: 2,\n });\n }\n const derivativeProgress: DerivativeSubmitProgressState =\n plan.operation === 'rebuild-derivatives'\n ? parseDerivativeSubmitProgress(plan, progressPath)\n : { entries: [], latest: null };\n const progress: ProgressState =\n plan.operation === 'rebuild-derivatives'\n ? { entries: [], successes: new Map(), latestFailures: new Map() }\n : parseProgress(plan, progressPath);\n const resumedSuccesses = progress.successes.size;\n const current = await fetchMaintenanceAccountRows({\n context,\n userId: plan.account.user_id,\n });\n assertApplyPreconditions({\n plan,\n planDir,\n currentRows: current.rows,\n progress,\n aliasPlanProgress: { entries: [], success: null, latestFailure: null },\n });\n\n const approvalPath = path.join(planDir, 'approval-record.json');\n const approvalAlreadyExisted = existsSync(approvalPath);\n validateApprovalRecord({ path: approvalPath, plan, context });\n if (!approvalAlreadyExisted) {\n writeImmutableJson(approvalPath, {\n schema_version: 1,\n approved_at_utc: clock(options),\n plan_path: planPath,\n plan_sha256: plan.plan_sha256,\n task_id: plan.task_id,\n operation: plan.operation,\n target_mode: plan.target_mode,\n operation_id: plan.operation_id,\n account: {\n user_id: context.account.user_id,\n email: context.account.email,\n },\n confirmed_email: options.confirm,\n row_counts: plan.summary,\n snapshot_completeness: current.completeness,\n redo_rows_ready:\n plan.operation === 'redo-import'\n ? Boolean(plan.source_import_run_id || plan.source_lineage !== null)\n : null,\n });\n }\n\n if (plan.operation === 'rebuild-derivatives') {\n const startedAt = clock(options);\n const derivativeAttemptPath = path.join(planDir, 'derivative-admission-attempt.json');\n const derivativeAttempt = validateDerivativeAdmissionAttempt({\n path: derivativeAttemptPath,\n plan,\n context,\n });\n const proof = await executeDerivativeAdmission({\n plan,\n context,\n replayPossible: derivativeAttempt !== null,\n attemptPath: derivativeAttemptPath,\n preparedAtUtc: startedAt,\n });\n if (\n derivativeProgress.latest &&\n derivativeProofIdentity(derivativeProgress.latest.proof) !==\n derivativeProofIdentity(proof)\n ) {\n throw new CliError('Derivative guarded-RPC replay returned a different request proof.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_REPLAY_MISMATCH',\n exitCode: 1,\n });\n }\n const action = derivativePlanAction(plan);\n const entry: DerivativeSubmitProgressEntry = {\n schema_version: 1,\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n target_mode: 'owner_draft',\n actor: { user_id: context.account.user_id, email: context.account.email },\n started_at_utc: startedAt,\n ended_at_utc: clock(options),\n result: 'accepted',\n proof,\n };\n appendStableJsonLine(progressPath, entry);\n const attemptPath = nextAttemptPath(planDir);\n const report: DatasetMaintenanceApplyReport = {\n schema_version: 1,\n generated_at_utc: clock(options),\n status: 'accepted',\n task_id: plan.task_id,\n operation: plan.operation,\n operation_id: plan.operation_id,\n target_mode: plan.target_mode,\n plan_sha256: plan.plan_sha256,\n actor: { user_id: context.account.user_id, email: context.account.email },\n summary: {\n actions: 1,\n success: 0,\n failed: 0,\n pending: 1,\n resumed_successes: 0,\n accepted: 1,\n },\n actions: [\n {\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n status: 'accepted',\n error: null,\n },\n ],\n artifacts: {\n approval_record: approvalPath,\n apply_progress: progressPath,\n derivative_submit_progress: progressPath,\n derivative_admission_attempt: derivativeAttemptPath,\n commit_report: path.join(planDir, 'commit-report.json'),\n attempt_report: attemptPath,\n },\n database_audit: {\n rpc_transaction_log: 'public.command_audit_log',\n source: 'tiangong-lca dataset maintenance apply',\n correlation_fields: [\n 'plan_sha256',\n 'operation_id',\n 'action_id',\n 'target_visibility',\n 'plan_request_sha256',\n 'action_request_sha256',\n 'request_id',\n ],\n },\n derivative_admission: { ...proof, admission: 'accepted' },\n };\n writeImmutableJson(attemptPath, report);\n writeJsonArtifact(report.artifacts.commit_report, report);\n return report;\n }\n\n const ordered = [...plan.actions].sort((left, right) => {\n const rank = {\n save_draft: 0,\n update_json_ordered: 0,\n rebuild_derivatives: 0,\n delete: 1,\n } as const;\n const actionOrder = rank[left.action] - rank[right.action];\n return actionOrder || left.ordinal - right.ordinal;\n });\n for (const action of ordered) {\n if (progress.successes.has(action.action_id)) {\n continue;\n }\n const startedAt = clock(options);\n try {\n const actionResult = await executeAction({ action, plan, planDir, context });\n const entry: DatasetMaintenanceProgressEntry = {\n schema_version: 1,\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n reason_code: action.reason_code,\n audit_context: {\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n reason_code: action.reason_code,\n source: 'tiangong-lca dataset maintenance apply',\n },\n actor: { user_id: context.account.user_id, email: context.account.email },\n started_at_utc: startedAt,\n ended_at_utc: clock(options),\n before_sha256: action.before!.row_sha256,\n after_sha256: actionResult.afterSha256,\n remote_result_sha256: actionResult.remoteResultSha256,\n result: 'success',\n error: null,\n rollback: action.rollback,\n };\n appendStableJsonLine(progressPath, entry);\n progress.entries.push(entry);\n progress.successes.set(action.action_id, entry);\n progress.latestFailures.delete(action.action_id);\n } catch (error) {\n const entry: DatasetMaintenanceProgressEntry = {\n schema_version: 1,\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n reason_code: action.reason_code,\n audit_context: {\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n reason_code: action.reason_code,\n source: 'tiangong-lca dataset maintenance apply',\n },\n actor: { user_id: context.account.user_id, email: context.account.email },\n started_at_utc: startedAt,\n ended_at_utc: clock(options),\n before_sha256: action.before!.row_sha256,\n after_sha256: null,\n remote_result_sha256: null,\n result: 'failed',\n error: errorMessage(error),\n rollback: action.rollback,\n };\n appendStableJsonLine(progressPath, entry);\n progress.entries.push(entry);\n progress.latestFailures.set(action.action_id, entry);\n break;\n }\n }\n\n const actions = plan.actions.map((action) => {\n const success = progress.successes.get(action.action_id);\n const failure = progress.latestFailures.get(action.action_id);\n return {\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n status: success\n ? ('success' as const)\n : failure\n ? ('failed' as const)\n : ('pending' as const),\n error: failure?.error ?? null,\n };\n });\n const successCount = actions.filter((action) => action.status === 'success').length;\n const failureCount = actions.filter((action) => action.status === 'failed').length;\n const attemptPath = nextAttemptPath(planDir);\n const report: DatasetMaintenanceApplyReport = {\n schema_version: 1,\n generated_at_utc: clock(options),\n status: successCount === actions.length ? 'completed' : 'completed_with_failures',\n task_id: plan.task_id,\n operation: plan.operation,\n operation_id: plan.operation_id,\n target_mode: plan.target_mode,\n plan_sha256: plan.plan_sha256,\n actor: { user_id: context.account.user_id, email: context.account.email },\n summary: {\n actions: actions.length,\n success: successCount,\n failed: failureCount,\n pending: actions.length - successCount - failureCount,\n resumed_successes: resumedSuccesses,\n },\n actions,\n artifacts: {\n approval_record: approvalPath,\n apply_progress: progressPath,\n commit_report: path.join(planDir, 'commit-report.json'),\n attempt_report: attemptPath,\n },\n database_audit: {\n rpc_transaction_log: 'public.command_audit_log',\n source: 'tiangong-lca dataset maintenance apply',\n correlation_fields: ['plan_sha256', 'operation_id', 'action_id', 'reason_code'],\n },\n };\n writeImmutableJson(attemptPath, report);\n writeJsonArtifact(report.artifacts.commit_report, report);\n return report;\n },\n );\n}\n\nexport const __testInternals = {\n aliasExchangeProgressKey,\n appendAliasSuccessLogs,\n appendAliasProofProgress,\n assertApplyPreconditions,\n assertAliasSupportSnapshots,\n buildAliasBatchRequest,\n buildAliasPlanRequest,\n clock,\n errorMessage,\n executeDerivativeAdmission,\n executeAliasPlan,\n executeAction,\n finalProjectedRows,\n loadDesiredPayload,\n nextAttemptPath,\n parseDerivativeSubmitProgress,\n validateDerivativeAdmissionAttempt,\n parseAliasBatchProgress,\n parseAliasPlanProgress,\n parseProgress,\n validateAliasRpcResult,\n validateAliasPlanRpcResult,\n validateApprovalRecord,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"dataset-maintenance-apply.js","sourceRoot":"","sources":["../../../src/lib/dataset-maintenance-apply.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,kBAAkB,GAQnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,+BAA+B,EAC/B,6BAA6B,GAE9B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,wCAAwC,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,gCAAgC,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EACL,iCAAiC,EACjC,oBAAoB,EACpB,2BAA2B,EAC3B,kCAAkC,EAClC,yBAAyB,EACzB,gCAAgC,EAChC,+BAA+B,EAC/B,uBAAuB,GAExB,MAAM,iCAAiC,CAAC;AA6EzC,gFAAgF;AAChF,8EAA8E;AAC9E,kFAAkF;AAClF,MAAM,yCAAyC,GAAG,GAAG,CAAC;AACtD,MAAM,+BAA+B,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AACxD,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAoNzC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAE5C,SAAS,KAAK,CAAC,OAA0C;IACvD,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,sBAAsB,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;AAE9C,SAAS,2BAA2B,CAAC,MAAoC;IACvE,OAAO,UAAU,CAAC;QAChB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAyB;IAChE,MAAM,UAAU,GAAG,KAAK,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,QAAQ,CAAC,gDAAgD,EAAE;YACnE,IAAI,EAAE,0CAA0C;YAChD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,wBAAwB,CAAC,IAA4B;IAC5D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IACE,IAAI,CAAC,SAAS,KAAK,QAAQ;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC;QACrF,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM;QAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,CAAC;QAC7B,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC,KAAK,CAAC;QAC7C,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,yBAAyB,KAAK,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,2BAA2B,KAAK,CAAC,EAC9C,CAAC;QACD,MAAM,IAAI,QAAQ,CAChB,iIAAiI,EACjI;YACE,IAAI,EAAE,mDAAmD;YACzD,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,SAAS,MAAM,CAAC,EAAE,SAAS,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1E,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,QAAQ,CAAC,mEAAmE,EAAE;gBACtF,IAAI,EAAE,sDAAsD;gBAC5D,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;aACzE,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,iCAAiC,CAAC,IAA4B;IACrE,OAAO,UAAU,CACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnC,KAAK;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,IAAI;KACjD,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAe,EAAE,OAAiB;IACnE,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE;QAC1B,IAAI,EAAE,kDAAkD;QACxD,QAAQ,EAAE,CAAC;QACX,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mCAAmC,CAAC,OAI5C;IACC,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAChG,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,MAAM,IAAI,QAAQ,CAChB,sFAAsF,EACtF;YACE,IAAI,EAAE,6DAA6D;YACnE,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC5D,MAAM,IAAI,QAAQ,CAChB,wFAAwF,EACxF;YACE,IAAI,EAAE,uDAAuD;YAC7D,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,YAAa,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,QAAQ,CAAC,6DAA6D,EAAE;YAChF,IAAI,EAAE,2DAA2D;YACjE,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,wCAAwC,CAAC,OAMjD;IACC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,yBAAyB,CAAC,6CAA6C,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACH,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yBAAyB,CAAC,8CAA8C,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,WAAW,GAAG,UAAU,CAAC,SAAU,CAAC,CAAC;IAC3C,IAAI,WAAW,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC;QACzC,yBAAyB,CAAC,4DAA4D,EAAE;YACtF,QAAQ,EAAE,OAAO,CAAC,YAAY;YAC9B,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yBAAyB,CAAC,yCAAyC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,yBAAyB,CAAC,6CAA6C,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,eAAe,GAAG,iCAAiC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,UAAU,GACd,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACtF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,aAAa,GAAG,KAAK,GAAG,UAAU,CAAC;IACzC,MAAM,mBAAmB,GAAG,CAAC,SAAkB,EAAuB,EAAE,CACtE,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3D,IACE,KAAK,CAAC,cAAc,KAAK,6CAA6C;QACtE,KAAK,CAAC,MAAM,KAAK,sCAAsC;QACvD,KAAK,CAAC,cAAc,KAAK,QAAQ;QACjC,KAAK,CAAC,MAAM,KAAK,8BAA8B;QAC/C,KAAK,CAAC,aAAa,KAAK,0CAA0C;QAClE,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,aAAa,GAAG,CAAC,MAAM;QACvB,aAAa,GAAG,+BAA+B;QAC/C,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW;QACjD,KAAK,CAAC,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;QACvD,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,WAAW;QAC9C,KAAK,CAAC,SAAS,KAAK,QAAQ;QAC5B,KAAK,CAAC,YAAY,KAAK,OAAO;QAC9B,KAAK,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;QAClD,KAAK,CAAC,qBAAqB,KAAK,eAAe;QAC/C,CAAC,mBAAmB,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAC/C,CAAC,mBAAmB,CAAC,KAAK,CAAC,oBAAoB,CAAC;QAChD,KAAK,CAAC,iBAAiB,KAAK,CAAC;QAC7B,KAAK,CAAC,gCAAgC,KAAK,CAAC;QAC5C,KAAK,CAAC,+BAA+B,KAAK,CAAC;QAC3C,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EACzB,CAAC;QACD,yBAAyB,CAAC,kEAAkE,EAAE;YAC5F,oBAAoB,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW;YACjD,sBAAsB,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;YACvD,oBAAoB,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;YAC9C,qBAAqB,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YAClD,8BAA8B,EAAE,eAAe;SAChD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,yBAAyB,CAAC,mDAAmD,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,eAAe,GACnB,OAAO,QAAQ,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5F,MAAM,UAAU,GAAG,KAAK,GAAG,eAAe,CAAC;QAC3C,IACE,QAAQ,CAAC,KAAK,KAAK,KAAK;YACxB,QAAQ,CAAC,KAAK,KAAK,aAAa;YAChC,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa;YAC/C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YAC5D,QAAQ,CAAC,YAAY,KAAK,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,aAAa;YACxE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjC,UAAU,GAAG,CAAC,MAAM;YACpB,UAAU,GAAG,+BAA+B;YAC5C,QAAQ,CAAC,iBAAiB,KAAK,CAAC;YAChC,QAAQ,CAAC,gCAAgC,KAAK,CAAC;YAC/C,QAAQ,CAAC,+BAA+B,KAAK,CAAC;YAC9C,QAAQ,CAAC,mBAAmB,KAAK,CAAC;YAClC,QAAQ,CAAC,cAAc,KAAK,CAAC;YAC7B,QAAQ,CAAC,uBAAuB,KAAK,CAAC;YACtC,QAAQ,CAAC,mBAAmB,KAAK,CAAC;YAClC,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ;YACvC,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EACzC,CAAC;YACD,yBAAyB,CAAC,+DAA+D,EAAE;gBACzF,KAAK;gBACL,cAAc,EAAE,aAAa;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAClD,yBAAyB,CAAC,+DAA+D,EAAE;YACzF,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YACzC,UAAU,EAAE,aAAa;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,GAAI,KAA+E;QACnF,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,YAAY,EAAE,WAAW;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,IAA4B,EAC5B,gBAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,OAAO,GAAmC,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0C,CAAC;IACnE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,sBAAsB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC7D,MAAM,MAAM,GACV,YAAY,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACxD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC;QACrF,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACzD,MAAM,YAAY,GAChB,YAAY,CAAC,KAAK,CAAC;YACnB,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI;gBACtB,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxF,MAAM,eAAe,GACnB,YAAY,CAAC,KAAK,CAAC;YACnB,CAAC,KAAK,CAAC,oBAAoB,KAAK,IAAI;gBAClC,CAAC,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ;oBAC7C,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,wBAAwB,GAC5B,YAAY,CAAC,KAAK,CAAC;YACnB,OAAO,KAAK,CAAC,gBAAgB,KAAK,SAAS;YAC3C,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS;YACpC,CAAC,KAAK,CAAC,eAAe,KAAK,IAAI;gBAC7B,CAAC,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ;oBACxC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YACnD,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;QAC5D,MAAM,iBAAiB,GACrB,YAAY,CAAC,KAAK,CAAC;YACnB,CAAC,CAAC,MAAM,KAAK,UAAU;gBACrB,KAAK,CAAC,gBAAgB,KAAK,KAAK;gBAChC,KAAK,CAAC,SAAS,KAAK,KAAK;gBACzB,KAAK,CAAC,QAAQ,KAAK,IAAI;gBACvB,KAAK,CAAC,eAAe,KAAK,IAAI;gBAC9B,KAAK,CAAC,oBAAoB,KAAK,IAAI;gBACnC,KAAK,CAAC,KAAK,KAAK,IAAI;gBACpB,CAAC,eAAe;gBAChB,CAAC,cAAc,CAAC;gBAChB,CAAC,MAAM,KAAK,YAAY;oBACtB,KAAK,CAAC,gBAAgB,KAAK,IAAI;oBAC/B,KAAK,CAAC,SAAS,KAAK,KAAK;oBACzB,KAAK,CAAC,QAAQ,KAAK,IAAI;oBACvB,KAAK,CAAC,eAAe,KAAK,IAAI;oBAC9B,KAAK,CAAC,oBAAoB,KAAK,IAAI;oBACnC,KAAK,CAAC,KAAK,KAAK,IAAI;oBACpB,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC;oBAC1D,CAAC,eAAe;oBAChB,CAAC,cAAc,CAAC;gBAClB,CAAC,MAAM,KAAK,SAAS;oBACnB,KAAK,CAAC,gBAAgB,KAAK,IAAI;oBAC/B,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;oBAC/B,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBACtB,eAAe;oBACf,CAAC,cAAc,CAAC;gBAClB,CAAC,MAAM,KAAK,WAAW;oBACrB,KAAK,CAAC,gBAAgB,KAAK,IAAI;oBAC/B,KAAK,CAAC,eAAe,KAAK,sBAAsB;oBAChD,KAAK,CAAC,KAAK,KAAK,IAAI;oBACpB,eAAe;oBACf,CAAC,cAAc,CAAC,CAAC,CAAC;QACxB,IACE,CAAC,YAAY,CAAC,KAAK,CAAC;YACpB,KAAK,CAAC,cAAc,KAAK,CAAC;YAC1B,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;YACtC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;YACxC,CAAC,MAAM;YACP,MAAM,CAAC,MAAM,KAAK,QAAQ;YAC1B,MAAM,CAAC,KAAK,KAAK,OAAO;YACxB,KAAK,CAAC,WAAW,KAAK,GAAG,MAAM,CAAC,SAAS,IAAI,eAAe,EAAE;YAC9D,KAAK,CAAC,MAAM,KAAK,QAAQ;YACzB,KAAK,CAAC,KAAK,KAAK,OAAO;YACvB,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;YACtB,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;YAChC,KAAK,CAAC,cAAc,KAAK,eAAe;YACxC,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU;YACjD,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1B,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;YAC5C,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK;YACxC,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;YAClC,KAAK,CAAC,aAAa,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;YACpD,KAAK,CAAC,aAAa,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;YACtD,KAAK,CAAC,aAAa,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;YAClD,KAAK,CAAC,aAAa,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW;YACtD,KAAK,CAAC,aAAa,CAAC,MAAM,KAAK,wCAAwC;YACvE,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ;YACzC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC,YAAY;YACb,CAAC,eAAe;YAChB,CAAC,wBAAwB;YACzB,CAAC,iBAAiB,EAClB,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,qEAAqE,EAAE;gBACxF,IAAI,EAAE,iDAAiD;gBACvD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,KAAqC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY;YAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;YAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,kCAAkC,CAAC,OAa3C;IACC,MAAM,aAAa,GAAG,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,KAAK,GAAiC;QAC1C,cAAc,EAAE,CAAC;QACjB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;QACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;QACvC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;QACnC,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,aAAa,EAAE;QAC3D,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,OAAO;QACd,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;QACrB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;QAC/B,cAAc,EAAE,aAAa;QAC7B,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,MAAO,CAAC,UAAU;QAChD,KAAK,EAAE;YACL,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;YACxC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK;SACrC;QACD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,eAAe,EAAE,OAAO,CAAC,aAAa;QACtC,gBAAgB,EAAE,OAAO,CAAC,MAAM,KAAK,UAAU;QAC/C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;QACrC,aAAa,EAAE;YACb,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;YACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;YACvC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;YACnC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;YACvC,MAAM,EAAE,wCAAwC;SACjD;QACD,QAAQ,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;QACjC,eAAe,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;QAC/C,oBAAoB,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI;QACxD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;KAC7B,CAAC;IACF,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC9B,aAAa,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChE,SAAS,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACjF,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY;QAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1F,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,uCAAuC,CAAC,OAGhD;IACC,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,SAAS,MAAM,CAAC,OAAO,EAAE,CAAC,CAC5E,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI;SAC7B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW,IAAI,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC;SACvE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,YAAY,EAAE,GAAG,CAAC,YAA0B;KAC7C,CAAC,CAAC,CAAC;IACN,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC,MAAM,CAC5D,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,IAAI,KAAK,WAAW;QAC9B,SAAS,CAAC,KAAK,KAAK,OAAO;QAC3B,OAAO,SAAS,CAAC,EAAE,KAAK,QAAQ,CACnC,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAC9C,SAAS,CAAC,OAAO;QACf,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,SAAS,SAAS,CAAC,OAAO,EAAE,CAAC;QAC1D,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAG,CAAC,CACjC,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,QAAQ,CAAC,0EAA0E,EAAE;YAC7F,IAAI,EAAE,wDAAwD;YAC9D,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,aAAa,EAAE,OAAO,CAAC,MAAM;gBAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aAC5B;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,YAAY,EAAE,WAAW,CAAC,MAAM;QAChC,kBAAkB,EAAE,UAAU,CAAC,MAAM;QACrC,eAAe,EAAE,UAAU,CACzB,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,cAAc,EAAE,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC;SAC7C,CAAC,CAAC,CACJ;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe,EAAE,MAAoC;IAC/E,OAAO,6BAA6B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,aAAa,CAAC,IAA4B,EAAE,YAAoB;IACvE,MAAM,UAAU,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,OAAO,GAAsC,EAAE,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACtF,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,MAAM,GACV,YAAY,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACxD,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC;QACX,IACE,CAAC,YAAY,CAAC,KAAK,CAAC;YACpB,KAAK,CAAC,cAAc,KAAK,CAAC;YAC1B,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;YACtC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;YACxC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACnC,CAAC,MAAM;YACP,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAC9B,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW;YACxC,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;YACvC,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;YAClC,KAAK,CAAC,aAAa,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;YACpD,KAAK,CAAC,aAAa,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;YACtD,KAAK,CAAC,aAAa,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;YAClD,KAAK,CAAC,aAAa,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW;YACtD,KAAK,CAAC,aAAa,CAAC,MAAM,KAAK,wCAAwC;YACvE,CAAC,MAAM,CAAC,MAAM,KAAK,qBAAqB;gBACtC,CAAC,KAAK,CAAC,WAAW,KAAK,aAAa;oBAClC,KAAK,CAAC,aAAa,CAAC,WAAW,KAAK,aAAa;oBACjD,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;oBAClC,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ;oBAC9C,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;oBACnD,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ;oBAC3C,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;oBACpD,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ;oBAC1C,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;oBACnD,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ;oBAC7C,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;oBAClD,OAAO,KAAK,CAAC,qBAAqB,KAAK,QAAQ;oBAC/C,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC9D,CAAC,MAAM,CAAC,MAAM,KAAK,qBAAqB;gBACtC,CAAC,aAAa,IAAI,KAAK;oBACrB,aAAa,IAAI,KAAK,CAAC,aAAa;oBACpC,UAAU,IAAI,KAAK;oBACnB,sBAAsB,IAAI,KAAK;oBAC/B,mBAAmB,IAAI,KAAK;oBAC5B,kBAAkB,IAAI,KAAK;oBAC3B,qBAAqB,IAAI,KAAK;oBAC9B,uBAAuB,IAAI,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ,CAAC;YAC9E,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,oBAAoB,KAAK,IAAI,CAAC,EAClE,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,sDAAsD,EAAE;gBACzE,IAAI,EAAE,sCAAsC;gBAC5C,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,KAAwC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2C,CAAC;IACrE,MAAM,cAAc,GAAG,IAAI,GAAG,EAA2C,CAAC;IAC1E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACtC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,uBAAuB,CAAC,KAA8C;IAC7E,OAAO,UAAU,CAAC;QAChB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;QAClD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;KAC3C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,6BAA6B,CACpC,IAA4B,EAC5B,YAAoB;IAEpB,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACjE,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,IAAI,KAA8C,CAAC;QACnD,IAAI,CAAC;YACH,KAAK,GAAG,6BAA6B,CACnC,QAAQ;gBACN,CAAC,CAAC;oBACE,EAAE,EAAE,IAAI;oBACR,OAAO,EAAE,6CAA6C;oBACtD,GAAG,QAAQ;iBACZ;gBACH,CAAC,CAAC,IAAI,EACR,IAAI,CACL,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,QAAQ,CAAC,2DAA2D,EAAE;gBAC9E,IAAI,EAAE,iDAAiD;gBACvD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,IACE,CAAC,YAAY,CAAC,KAAK,CAAC;YACpB,KAAK,CAAC,cAAc,KAAK,CAAC;YAC1B,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;YACtC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;YACxC,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;YACpC,KAAK,CAAC,WAAW,KAAK,aAAa;YACnC,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1B,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;YAC5C,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK;YACxC,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;YACxC,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;YACtC,KAAK,CAAC,MAAM,KAAK,UAAU,EAC3B,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,kEAAkE,EAAE;gBACrF,IAAI,EAAE,iDAAiD;gBACvD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAmC,CAAC;IAC9D,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzF,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,QAAQ,CAAC,gEAAgE,EAAE;YACnF,IAAI,EAAE,iDAAiD;YACvD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,kCAAkC,CAAC,OAI3C;IACC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,IACE,CAAC,YAAY,CAAC,KAAK,CAAC;QACpB,KAAK,CAAC,cAAc,KAAK,CAAC;QAC1B,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,WAAW;QAC9C,KAAK,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,YAAY;QAChD,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;QACpC,KAAK,CAAC,KAAK,KAAK,WAAW;QAC3B,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;QACtB,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;QAChC,KAAK,CAAC,wBAAwB,KAAK,MAAM,CAAC,iBAAiB,EAAE,eAAe;QAC5E,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;QACvD,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK;QACnD,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ;QACzC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EACnD,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,qEAAqE,EAAE;YACxF,IAAI,EAAE,gDAAgD;YACtD,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAmC,CAAC;AAC7C,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAA4B,EAC5B,YAAoB;IAEpB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACjE,MAAM,KAAK,GACT,YAAY,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;YACvD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC;QACX,IACE,CAAC,YAAY,CAAC,KAAK,CAAC;YACpB,KAAK,CAAC,cAAc,KAAK,CAAC;YAC1B,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;YACtC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;YACxC,CAAC,KAAK;YACN,KAAK,CAAC,WAAW,KAAK,aAAa;YACnC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;YACnC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAC7B,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1B,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;YAC5C,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK;YACxC,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;YACxC,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;YACtC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI;YACtC,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,OAAO,CAAC,SAAS;YAChD,KAAK,CAAC,MAAM,KAAK,SAAS;YAC1B,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ;YAC9C,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;YACnD,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS;YAC5C,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ;YAC1C,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;YACnD,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ;YAC7C,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;YAClD,OAAO,KAAK,CAAC,qBAAqB,KAAK,QAAQ;YAC/C,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;YACxD,KAAK,CAAC,KAAK,KAAK,IAAI,EACpB,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,4DAA4D,EAAE;gBAC/E,IAAI,EAAE,4CAA4C;gBAClD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAgC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,QAAQ,CAAC,wDAAwD,EAAE;gBAC3E,IAAI,EAAE,4CAA4C;gBAClD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;aACtC,CAAC,CAAC;QACL,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAA4B,EAC5B,YAAoB;IAEpB,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACjE,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,gBAAgB,GACpB,WAAW,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM;YAC7C,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACjC,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAE,CAAC;gBACtC,OAAO,OAAO,CACZ,YAAY,CAAC,KAAK,CAAC;oBACnB,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;oBACjC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;oBACnC,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ;oBAC9C,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;oBAClD,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ;oBAC1C,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CACnD,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,MAAM,kBAAkB,GAAG,WAAW;aACnC,MAAM,CAAC,YAAY,CAAC;aACpB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC9C,MAAM,oBAAoB,GAAG,WAAW;aACrC,MAAM,CAAC,YAAY,CAAC;aACpB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC1C,IACE,CAAC,YAAY,CAAC,KAAK,CAAC;YACpB,KAAK,CAAC,cAAc,KAAK,CAAC;YAC1B,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;YACtC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;YACxC,KAAK,CAAC,WAAW,KAAK,aAAa;YACnC,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1B,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;YAC5C,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK;YACxC,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;YACxC,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;YACtC,KAAK,CAAC,WAAW,KAAK,CAAC;YACvB,KAAK,CAAC,SAAS,KAAK,EAAE;YACtB,KAAK,CAAC,cAAc,KAAK,EAAE;YAC3B,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;gBACzB,CAAC,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ;oBAC5C,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;oBAClD,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS;oBAC5C,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ;oBAC1C,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;oBACnD,CAAC,gBAAgB;oBACjB,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,KAAK,CAAC;oBACtC,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,KAAK,CAAC;oBACxC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC;oBACrD,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;YAC1B,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ;gBACxB,CAAC,KAAK,CAAC,mBAAmB,KAAK,IAAI;oBACjC,KAAK,CAAC,iBAAiB,KAAK,IAAI;oBAChC,KAAK,CAAC,gBAAgB,KAAK,IAAI;oBAC/B,WAAW,CAAC,MAAM,KAAK,CAAC;oBACxB,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,EACrC,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,2DAA2D,EAAE;gBAC9E,IAAI,EAAE,iDAAiD;gBACvD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAA+B,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,GAAkC,IAAI,CAAC;IAClD,IAAI,aAAa,GAAkC,IAAI,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,IAAI,QAAQ,CAAC,uDAAuD,EAAE;oBAC1E,IAAI,EAAE,iDAAiD;oBACvD,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;YACL,CAAC;YACD,OAAO,GAAG,KAAK,CAAC;YAChB,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,kBAAkB,CAAC,OAI3B;IACC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3F,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACzD,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAC7D,EAAE,CAAC;QACF,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,IAAI,GAAG,EAAE,CAAC;YACR,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;gBACvC,GAAG,GAAG;gBACN,YAAY,EAAE,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;aAC1D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;QACvF,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAClD,iBAAiB,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAChE,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,OAOjC;IACC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAgC,CAAC;IACjE,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAE,CAAC;YACnF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrD,IACE,GAAG,EAAE,UAAU,KAAK,CAAC;gBACrB,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,gBAAgB;gBACvC,QAAQ,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,EAClD,CAAC;gBACD,OAAO,QAAiB,CAAC;YAC3B,CAAC;YACD,IACE,GAAG,EAAE,UAAU,KAAK,CAAC;gBACrB,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,gBAAgB;gBACvC,QAAQ,EAAE,cAAc,KAAK,MAAM,CAAC,eAAe,EAAE,MAAM;gBAC3D,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ;gBACxC,GAAG,CAAC,iBAAiB,KAAK,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAC1D,CAAC;gBACD,OAAO,SAAkB,CAAC;YAC5B,CAAC;YACD,OAAO,SAAkB,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,QAAQ,CAAC,yCAAyC,KAAK,CAAC,QAAQ,EAAE,EAAE;gBAC5E,IAAI,EAAE,uCAAuC;gBAC7C,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;aAC9C,CAAC,CAAC;QACL,CAAC;QACD,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAyB,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,IACE,UAAU,CAAC,IAAI,KAAK,CAAC;YACrB,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAC3E,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,2DAA2D,EAAE;gBAC9E,IAAI,EAAE,sCAAsC;gBAC5C,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE;aAC3D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;QAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACrD,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC;KACjF,CAAC,CAAC;IACH,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,QAAQ,CAAC,2DAA2D,GAAG,CAAC,EAAE,EAAE,EAAE;gBACtF,IAAI,EAAE,qCAAqC;gBAC3C,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,KAAK,MAAM,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC,UAAU,KAAK,YAAY,CAAC,UAAU,EAAE,CAAC;YACxF,MAAM,IAAI,QAAQ,CAAC,yCAAyC,YAAY,CAAC,EAAE,EAAE,EAAE;gBAC7E,IAAI,EAAE,yCAAyC;gBAC/C,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,YAAY;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,QAAQ,CAAC,4CAA4C,MAAM,CAAC,SAAS,EAAE,EAAE;gBACjF,IAAI,EAAE,kCAAkC;gBACxC,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,IAAI,QAAQ,CAAC,4CAA4C,MAAM,CAAC,SAAS,EAAE,EAAE;oBACjF,IAAI,EAAE,kCAAkC;oBACxC,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1F,uEAAuE;YACvE,0EAA0E;YAC1E,uEAAuE;YACvE,oBAAoB;YACpB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,OAAO,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAClE,MAAM,IAAI,QAAQ,CAAC,mDAAmD,MAAM,CAAC,SAAS,EAAE,EAAE;gBACxF,IAAI,EAAE,sCAAsC;gBAC5C,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,eAAe,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;YAC5C,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAS,CAAE,CAAC;YACxC,SAAS;QACX,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,qBAAqB,GAAG,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACtF,IACE,UAAU,CAAC,UAAU,KAAK,CAAC;gBAC3B,eAAe,CAAC,cAAc,KAAK,qBAAqB;gBACxD,UAAU,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ;gBAC9C,UAAU,CAAC,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAChE,CAAC;gBACD,MAAM,IAAI,QAAQ,CAAC,yCAAyC,MAAM,CAAC,SAAS,EAAE,EAAE;oBAC9E,IAAI,EAAE,kCAAkC;oBACxC,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,IACL,UAAU,CAAC,UAAU,KAAK,CAAC;YAC3B,eAAe,CAAC,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,EACvD,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,8CAA8C,MAAM,CAAC,SAAS,EAAE,EAAE;gBACnF,IAAI,EAAE,sCAAsC;gBAC5C,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,kBAAkB,CAAC;QACnC,IAAI,EAAE,OAAO,CAAC,WAAW;QACzB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IACH,MAAM,wBAAwB,GAAG,UAAU,CAAC,wCAAwC,CAAC,SAAS,CAAC,CAAC,CAAC;IACjG,IAAI,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACzE,MAAM,IAAI,QAAQ,CAAC,qDAAqD,EAAE;YACxE,IAAI,EAAE,+CAA+C;YACrD,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,0BAA0B;gBACjD,MAAM,EAAE,wBAAwB;aACjC;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,OAI/B;IACC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;IACzE,IACE,CAAC,YAAY,CAAC,MAAM,CAAC;QACrB,MAAM,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,WAAW;QAC/C,MAAM,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,WAAW;QAC/C,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B,MAAM,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;QAC1D,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK;QACtD,CAAC,gCAAgC,CAC/B,MAAM,CAAC,qBAAqB,EAC5B,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAClC,uBAAuB,CACxB,EACD,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,8DAA8D,EAAE;YACjF,IAAI,EAAE,8CAA8C;YACpD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,OAG1C;IACC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,aAAa,EAAE,CAAC;QAC/C,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE;YAClE,IAAI,EAAE,yCAAyC;YAC/C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,aAAc,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG;YAChB,KAAK,CAAC,gBAAgB,CAAC,SAAU;YACjC,KAAK,CAAC,gBAAgB,CAAC,YAAa;YACpC,KAAK,CAAC,gBAAgB,CAAC,gBAAiB;SACzC,CAAC;QACF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC;gBAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAC;YACH,MAAM,OAAO,GACX,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrF,IACE,CAAC,OAAO;gBACR,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;gBAChD,OAAO,CAAC,UAAU,KAAK,CAAC;gBACxB,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,EAC1C,CAAC;gBACD,MAAM,IAAI,QAAQ,CAAC,uCAAuC,KAAK,CAAC,QAAQ,GAAG,EAAE;oBAC3E,IAAI,EAAE,yCAAyC;oBAC/C,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;iBAC/E,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAiB,EACjB,KAAuC,EACvC,IAA4B;IAE5B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxD,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC,CAAC;IACJ,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,MAAM;SACH,MAAM,CACL,CAAC,KAAK,EAA+B,EAAE,CACrC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAClC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC7C;SACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAC5C,CAAC;IACF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,WAAW,GACf,aAAa,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,MAAM;QAC9C,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE;YAClC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,OAAO,OAAO,CACZ,MAAM;gBACN,KAAK;gBACL,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;gBAC5B,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;gBACtB,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CACjC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,IACE,IAAI,CAAC,WAAW,KAAK,aAAa;QAClC,KAAK,CAAC,EAAE,KAAK,IAAI;QACjB,KAAK,CAAC,OAAO,KAAK,iCAAiC;QACnD,KAAK,CAAC,iBAAiB,KAAK,aAAa;QACzC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;QACnC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;QACjC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI;QACtC,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,OAAO,CAAC,SAAS;QAChD,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ;QAC1C,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACnD,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ;QAC9C,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;QACnD,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS;QAC5C,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU,CAAC,MAAM;QACxC,CAAC,WAAW,EACZ,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,8CAA8C,KAAK,CAAC,QAAQ,GAAG,EAAE;YAClF,IAAI,EAAE,6CAA6C;YACnD,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,iBAAiB,EAAE,aAAa;QAChC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,MAAM,EAAE,aAAa;QACrB,GAAG,EAAE,KAAK;KACX,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAiB,EACjB,IAA4B;IAE5B,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,kBAAkB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC9D,YAAY,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC;QACnC,CAAC,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;QACrD,CAAC,CAAC,IAAI,CACT,CAAC;IACF,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,CAChD,CAAC,KAAK,EAA2B,EAAE,CAAC,KAAK,KAAK,IAAI,CACnD,CAAC;IACF,MAAM,oBAAoB,GAAG,iBAAiB;QAC5C,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,iBAAiB;QACnC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACnC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC1D;QACH,CAAC,CAAC,EAAE,CAAC;IACP,IACE,IAAI,CAAC,WAAW,KAAK,aAAa;QAClC,KAAK,CAAC,EAAE,KAAK,IAAI;QACjB,KAAK,CAAC,OAAO,KAAK,gCAAgC;QAClD,KAAK,CAAC,cAAc,KAAK,uBAAuB;QAChD,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;QACtC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;QACxC,KAAK,CAAC,iBAAiB,KAAK,aAAa;QACzC,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ;QAC7C,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAClD,KAAK,CAAC,WAAW,KAAK,CAAC;QACvB,KAAK,CAAC,SAAS,KAAK,EAAE;QACtB,KAAK,CAAC,cAAc,KAAK,EAAE;QAC3B,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ;QAC1C,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACnD,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS;QAC5C,eAAe,CAAC,MAAM,KAAK,CAAC;QAC5B,CAAC,iBAAiB;QAClB,kBAAkB,CAAC,IAAI,CACrB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,iBAAiB;YACnD,KAAK,CAAC,cAAc,KAAK,OAAO,CAAC,KAAK,CAAE,CAAC,OAAO,CAAC,SAAS,CAC7D;QACD,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,KAAK,CAAC;QACxC,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,EAAE;QAChC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACrD,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC5C,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EACrE,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,mDAAmD,EAAE;YACtE,IAAI,EAAE,kDAAkD;YACxD,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,iBAAiB,EAAE,aAAa;QAChC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,EAAE;QACb,cAAc,EAAE,EAAE;QAClB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,OAAO,EAAE,IAAI,GAAG,CACd,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAE,CAAU,CAAC,CACtF;QACD,GAAG,EAAE,KAAK;KACX,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,KAKjC;IACC,OAAO,GAAG,KAAK,CAAC,QAAQ,SAAS,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,cAAc,SAAS,KAAK,CAAC,oBAAoB,EAAE,CAAC;AACrH,CAAC;AAED,SAAS,sBAAsB,CAAC,OAU/B;IACC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAE,CAAC;IAC7E,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAE,CAAC;QACnF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,eAAe,EAAE,CAAC;YACpB,IACE,eAAe,CAAC,WAAW,KAAK,aAAa;gBAC7C,eAAe,CAAC,QAAQ,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ;gBACnD,eAAe,CAAC,oBAAoB,KAAK,QAAQ,CAAC,oBAAoB;gBACtE,eAAe,CAAC,iBAAiB,KAAK,KAAK,CAAC,QAAQ;gBACpD,eAAe,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB;gBAC9D,eAAe,CAAC,mBAAmB,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB;gBACjF,eAAe,CAAC,qBAAqB,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB;gBAChF,eAAe,CAAC,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAChF,CAAC;gBACD,MAAM,IAAI,QAAQ,CAAC,gEAAgE,EAAE;oBACnF,IAAI,EAAE,4CAA4C;oBAClD,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;iBACjC,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAoC;YAC7C,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;YACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;YACvC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE;gBACb,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;gBACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;gBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,wCAAwC;gBAChD,WAAW,EAAE,aAAa;aAC3B;YACD,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;YACzF,cAAc,EAAE,OAAO,CAAC,SAAS;YACjC,YAAY,EAAE,OAAO,CAAC,OAAO;YAC7B,aAAa,EAAE,MAAM,CAAC,MAAO,CAAC,UAAU;YACxC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAE;YAC9D,oBAAoB,EAAE,UAAU,CAAC;gBAC/B,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG;gBACxC,cAAc,EAAE,QAAQ,CAAC,GAAG;gBAC5B,KAAK,EAAE,KAAK;aACb,CAAC;YACF,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;YAChC,WAAW,EAAE,aAAa;YAC1B,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;YACnD,iBAAiB,EAAE,KAAK,CAAC,QAAQ;YACjC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,mBAAmB,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB;YAC9D,qBAAqB,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB;SAC9D,CAAC;QACF,oBAAoB,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,OAAO,CAAC,IAAI,CAAC,aAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5C,KAAK,CAAC,iBAAiB,CAAC,GAAG,CACzB,CAAC,OAAO,EAAE,EAAE,CACV;QACE,wBAAwB,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;QAClE,EAAE,KAAK,EAAE,OAAO,EAAE;KACV,CACb,CACF,CACF,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,GAAG,GACP,YAAY,CAAC,KAAK,CAAC;YACnB,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;YAClC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACnC,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;YACxC,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ;YAC5C,CAAC,CAAC,wBAAwB,CAAC;gBACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;aACjD,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9F,IACE,CAAC,YAAY,CAAC,KAAK,CAAC;YACpB,CAAC,QAAQ;YACT,CAAC,QAAQ;YACT,KAAK,CAAC,cAAc,KAAK,CAAC;YAC1B,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,WAAW;YAC9C,KAAK,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,YAAY;YAChD,KAAK,CAAC,WAAW,KAAK,aAAa;YACnC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,MAAM;YACtC,KAAK,CAAC,MAAM,KAAK,SAAS;YAC1B,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1B,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YACpD,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;YAChD,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;YACvC,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ;YAC9C,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;YACnD,KAAK,CAAC,oBAAoB,KAAK,QAAQ,CAAC,oBAAoB;YAC5D,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ;YAC3C,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,KAAK;YAC7D,KAAK,CAAC,iBAAiB,KAAK,QAAQ,CAAC,iBAAiB;YACtD,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ;YAC1C,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,KAAK;YAC5D,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB;YACpD,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ;YAC7C,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;YAClD,KAAK,CAAC,mBAAmB,KAAK,QAAQ,CAAC,mBAAmB;YAC1D,OAAO,KAAK,CAAC,qBAAqB,KAAK,QAAQ;YAC/C,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;YACxD,KAAK,CAAC,qBAAqB,KAAK,QAAQ,CAAC,qBAAqB;YAC9D,UAAU,CAAC;gBACT,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;gBAChD,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;gBACpD,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;gBAC5C,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;gBACtD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;gBACpD,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;aACnD,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;YACnC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EACrB,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,+DAA+D,EAAE;gBAClF,IAAI,EAAE,qDAAqD;gBAC3D,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,wBAAwB,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QACvF,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAE,CAAC;QACtD,oBAAoB,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACjD,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;YACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;YACvC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;YAChC,WAAW,EAAE,aAAa;YAC1B,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;YACnD,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;YACzF,aAAa,EAAE,OAAO,CAAC,OAAO;YAC9B,iBAAiB,EAAE,KAAK,CAAC,QAAQ;YACjC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,mBAAmB,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB;YAC9D,qBAAqB,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB;YAC7D,MAAM,EAAE,SAAS;YACjB,GAAG,OAAO;SACX,CAAC,CAAC;QACH,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,OAUjC;IACC,MAAM,WAAW,GAA0B,EAAE,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrE,IACE,QAAQ;YACR,CAAC,QAAQ,CAAC,oBAAoB,KAAK,GAAG,CAAC,oBAAoB;gBACzD,QAAQ,CAAC,gBAAgB,KAAK,GAAG,CAAC,gBAAgB;gBAClD,QAAQ,CAAC,mBAAmB,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB;gBAC1E,QAAQ,CAAC,qBAAqB,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAC5E,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,8DAA8D,EAAE;gBACjF,IAAI,EAAE,4CAA4C;gBAClD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;aACtC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAwB;YACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;YAC9C,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;SACvC,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,KAAK,GAA4B;gBACrC,cAAc,EAAE,CAAC;gBACjB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;gBACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;gBACvC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,aAAa;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE;oBACL,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;oBACxC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK;iBACrC;gBACD,cAAc,EAAE,OAAO,CAAC,SAAS;gBACjC,YAAY,EAAE,OAAO,CAAC,OAAO;gBAC7B,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;gBAC9C,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;gBACxC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;gBAC7B,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;gBACtC,mBAAmB,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB;gBAC9D,qBAAqB,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB;gBAC7D,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,IAAI;aACZ,CAAC;YACF,oBAAoB,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAA2B;QACpC,cAAc,EAAE,CAAC;QACjB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;QACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;QACvC,WAAW,EAAE,aAAa;QAC1B,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;QACzF,cAAc,EAAE,OAAO,CAAC,SAAS;QACjC,YAAY,EAAE,OAAO,CAAC,OAAO;QAC7B,mBAAmB,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB;QAC9D,iBAAiB,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB;QAC1D,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,EAAE;QACb,cAAc,EAAE,EAAE;QAClB,gBAAgB,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB;QACxD,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,IAAI;KACZ,CAAC;IACF,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACjC,IACE,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,KAAK,KAAK,CAAC,mBAAmB;YAC9E,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,KAAK,KAAK,CAAC,gBAAgB;YACxE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAC9E,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,6DAA6D,EAAE;gBAChF,IAAI,EAAE,iDAAiD;gBACvD,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;IACtC,CAAC;IACD,oBAAoB,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACtD,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;IACrC,OAAO,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAK5B;IACC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;QACpD,MAAM,IAAI,QAAQ,CAChB,iFAAiF,EACjF;YACE,IAAI,EAAE,2DAA2D;YACjE,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,QAAQ,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE;YAChF,IAAI,EAAE,kCAAkC;YACxC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC;QACjD,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;QAC3B,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;QACrB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;KAChC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,UAAU,GAAG,OAAO,CACxB,UAAU;QACV,UAAU,CAAC,UAAU,KAAK,CAAC;QAC3B,eAAe,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CACjE,CAAC;IACF,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,UAAU,EAAE,CAAC;QACzF,MAAM,IAAI,QAAQ,CAAC,gDAAgD,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE;YAC7F,IAAI,EAAE,+CAA+C;YACrD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;QACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;QACvC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;QACnC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;QACvC,MAAM,EAAE,wCAAiD;KAC1D,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC;YACjD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAuC;YAC7D,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;YACrB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;YAC/B,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;YAC5D,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI;YAChD,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,IAAI,IAAI;YAClE,KAAK;SACN,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC;YAC/C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;YAC3B,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;YACrB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;SAChC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACvC,MAAM,IAAI,QAAQ,CAAC,kCAAkC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE;gBAChF,IAAI,EAAE,4CAA4C;gBAClD,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC;QAC/D,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChD,IACE,gBAAgB,CAAC,cAAc,KAAK,eAAe;YACnD,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,gBAAgB;YAC/C,GAAG,CAAC,UAAU,KAAK,CAAC,EACpB,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,oCAAoC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE;gBAClF,IAAI,EAAE,4CAA4C;gBAClD,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,WAAW,EAAE,gBAAgB,CAAC,UAAU;YACxC,kBAAkB,EAAE,UAAU,CAAC,YAAY,CAAC;SAC7C,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;QACpD,MAAM,IAAI,QAAQ,CAAC,+DAA+D,EAAE;YAClF,IAAI,EAAE,sDAAsD;YAC5D,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,QAAQ,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;YAC7E,IAAI,EAAE,wCAAwC;YAC9C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC;QAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAuC;QAC7D,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;QACrB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;QAC/B,KAAK;KACN,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC;QAC/C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;QAC3B,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;QACrB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;KAChC,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,QAAQ,CAAC,8BAA8B,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE;YAC5E,IAAI,EAAE,4CAA4C;YAClD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,4BAA4B,CAAC,OAWrC;IACC,MAAM,KAAK,GAAoC;QAC7C,cAAc,EAAE,CAAC;QACjB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;QACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;QACvC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;QACnC,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;QAC3B,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;QACrB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;QAC/B,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;QACvC,aAAa,EAAE;YACb,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;YACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;YACvC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;YACnC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;YACvC,MAAM,EAAE,wCAAwC;SACjD;QACD,KAAK,EAAE;YACL,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;YACxC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK;SACrC;QACD,cAAc,EAAE,OAAO,CAAC,YAAY;QACpC,YAAY,EAAE,OAAO,CAAC,UAAU;QAChC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,MAAO,CAAC,UAAU;QAChD,YAAY,EAAE,IAAI;QAClB,oBAAoB,EAAE,OAAO,CAAC,kBAAkB;QAChD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;KAClC,CAAC;IACF,oBAAoB,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;IACjC,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACnG,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,OAGtC;IACC,OAAO,CACL,MAAM,yBAAyB,CAAC;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;QAC3B,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;QACrB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;KAChC,CAAC,CACH,CAAC,IAAI,CAAC;AACT,CAAC;AAED,SAAS,yBAAyB,CAAC,OAGlC;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,OAAO,CACZ,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QACzB,GAAG;QACH,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,gBAAgB;QAC/C,GAAG,CAAC,UAAU,KAAK,CAAC;QACpB,iBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CACxE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,OASxC;IACC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4C,CAAC;IAErE,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAoC,EAAiB,EAAE;QACrF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,IAAmC,CAAC;QACxC,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,uBAAuB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC1C,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;gBACnF,kCAAkC,CAAC;oBACjC,IAAI,EAAE,OAAO,CAAC,gBAAgB;oBAC9B,KAAK,EAAE,OAAO,CAAC,SAAS;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,MAAM;oBACN,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,SAAS;oBACjB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;oBAC5B,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,8BAA8B,YAAY,CAAC,KAAK,CAAC,EAAE;iBAC3D,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACzE,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,kCAAkC,CAAC;oBACjC,IAAI,EAAE,OAAO,CAAC,gBAAgB;oBAC9B,KAAK,EAAE,OAAO,CAAC,SAAS;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,MAAM;oBACN,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,WAAW;oBACnB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;oBAC5B,SAAS,EAAE,IAAI;oBACf,cAAc,EAAE,sBAAsB;iBACvC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtD,4BAA4B,CAAC;oBAC3B,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,MAAM;oBACN,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,YAAY,EAAE,SAAS;oBACvB,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;oBACzB,MAAM,EAAE,SAAS;oBACjB,kBAAkB,EAAE,UAAU,CAAC;wBAC7B,QAAQ,EAAE,gBAAgB;wBAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,cAAc,EAAE,2BAA2B,CAAC,MAAM,CAAC;qBACpD,CAAC;oBACF,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;YACL,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACzD,CAAC,CAAC,+GAA+G;YACjH,CAAC,CAAC,wEAAwE,CAAC;QAC7E,IACE,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;YAClD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,EAC9E,CAAC;YACD,kCAAkC,CAAC;gBACjC,IAAI,EAAE,OAAO,CAAC,gBAAgB;gBAC9B,KAAK,EAAE,OAAO,CAAC,SAAS;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM,EAAE,SAAS;gBACjB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;gBAC5B,SAAS,EAAE,IAAI;gBACf,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBACvD,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,4BAA4B,CAAC;gBAC3B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,SAAS;gBACvB,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;gBACzB,MAAM,EAAE,QAAQ;gBAChB,kBAAkB,EAAE,IAAI;gBACxB,KAAK,EAAE,YAAY,OAAO,EAAE;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,EAAE,MAAoC,EAAiB,EAAE;QAC/E,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,IAAmC,CAAC;QACxC,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,uBAAuB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,QAAQ,CAAC,gDAAgD,MAAM,CAAC,SAAS,EAAE,EAAE;oBACrF,IAAI,EAAE,+CAA+C;oBACrD,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4BAA4B,CAAC;gBAC3B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,SAAS;gBACvB,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;gBACzB,MAAM,EAAE,QAAQ;gBAChB,kBAAkB,EAAE,IAAI;gBACxB,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;aAC3B,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,kCAAkC,CAAC;YACjC,IAAI,EAAE,OAAO,CAAC,gBAAgB;YAC9B,KAAK,EAAE,OAAO,CAAC,SAAS;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,UAAU;YAClB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;SAC7B,CAAC,CAAC;QACH,kCAAkC,CAAC;YACjC,IAAI,EAAE,OAAO,CAAC,gBAAgB;YAC9B,KAAK,EAAE,OAAO,CAAC,SAAS;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,YAAY;YACpB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;SAC7B,CAAC,CAAC;QAEH,IAAI,YAAY,GAAsB,IAAI,CAAC;QAC3C,IAAI,aAAa,GAAY,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,oBAAoB,CAAC;gBACxC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,MAAM,CAAC,KAAuC;gBACrD,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE;oBACL,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;oBACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;oBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,cAAc,EAAE,2BAA2B,CAAC,MAAM,CAAC;oBACnD,MAAM,EAAE,wCAAwC;iBACjD;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,YAAY,GAAyC,IAAI,CAAC;QAC9D,IAAI,aAAa,GAAY,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,uBAAuB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;QACD,IAAI,YAAY,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,kBAAkB,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1E,kCAAkC,CAAC;gBACjC,IAAI,EAAE,OAAO,CAAC,gBAAgB;gBAC9B,KAAK,EAAE,OAAO,CAAC,SAAS;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM,EAAE,WAAW;gBACnB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;gBAC5B,SAAS,EAAE,aAAa,KAAK,IAAI;gBACjC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC1D,cAAc,EAAE,sBAAsB;gBACtC,kBAAkB;aACnB,CAAC,CAAC;YACH,4BAA4B,CAAC;gBAC3B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,SAAS;gBACvB,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;gBACzB,MAAM,EAAE,SAAS;gBACjB,kBAAkB,EAChB,kBAAkB;oBAClB,UAAU,CAAC;wBACT,QAAQ,EAAE,gBAAgB;wBAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,cAAc,EAAE,2BAA2B,CAAC,MAAM,CAAC;qBACpD,CAAC;gBACJ,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,aAAa;YACzB,CAAC,CAAC,mCAAmC,YAAY,CAAC,aAAa,CAAC,EAAE;YAClE,CAAC,CAAC,aAAa;gBACb,CAAC,CAAC,oEAAoE,YAAY,CAAC,aAAa,CAAC,EAAE;gBACnG,CAAC,CAAC,iEAAiE,CAAC;QACxE,kCAAkC,CAAC;YACjC,IAAI,EAAE,OAAO,CAAC,gBAAgB;YAC9B,KAAK,EAAE,OAAO,CAAC,SAAS;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,SAAS;YACjB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;YAC5B,SAAS,EAAE,aAAa,KAAK,IAAI;YACjC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;YAC1D,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YACrF,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;YAClE,KAAK;SACN,CAAC,CAAC;QACH,4BAA4B,CAAC;YAC3B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,SAAS;YACvB,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;YACzB,MAAM,EAAE,QAAQ;YAChB,kBAAkB,EAAE,IAAI;YACxB,KAAK,EAAE,YAAY,KAAK,EAAE;SAC3B,CAAC,CAAC;QACH,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,UAAU,GAAY,IAAI,CAAC;IAC/B,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE;QACvC,OAAO,UAAU,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,SAAS,CAAC;YACxB,SAAS,IAAI,CAAC,CAAC;YACf,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAO;YACjD,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,UAAU,KAAK,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CACtF,MAAM,EAAE,CACT,CACF,CAAC;IACF,IAAI,UAAU,KAAK,IAAI;QAAE,MAAM,UAAU,CAAC;IAC1C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,OAMzC;IACC,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAkB,CAAC;IAClD,MAAM,SAAS,GAAG,+BAA+B,CAC/C,MAAM,kCAAkC,CAAC;QACvC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAC5E,CAAC;IACF,IACE,SAAS,CAAC,WAAW,KAAK,eAAe,CAAC,WAAW;QACrD,SAAS,CAAC,WAAW,KAAK,eAAe,CAAC,WAAW;QACrD,SAAS,CAAC,mBAAmB,KAAK,eAAe,CAAC,mBAAmB,EACrE,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,iEAAiE,EAAE;YACpF,IAAI,EAAE,8CAA8C;YACpD,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,wBAAwB,EAAE,eAAe,CAAC,eAAe;gBACzD,sBAAsB,EAAE,SAAS,CAAC,eAAe;aAClD;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC,eAAe,KAAK,eAAe,CAAC,eAAe,EAAE,CAAC;QAC7F,MAAM,IAAI,QAAQ,CAAC,mEAAmE,EAAE;YACtF,IAAI,EAAE,+CAA+C;YACrD,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,QAAQ,EAAE,eAAe,CAAC,eAAe;gBACzC,MAAM,EAAE,SAAS,CAAC,eAAe;aAClC;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5B,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE;YACtC,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;YACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;YACvC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,WAAW;YAClB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,wBAAwB,EAAE,eAAe,CAAC,eAAe;YACzD,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;gBACxC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK;aACrC;YACD,eAAe,EAAE,OAAO,CAAC,aAAa;SACF,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC;QACrD,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC;KAC/C,CAAC,CAAC;IACH,OAAO,6BAA6B,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OACE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,EAChG,CAAC;QACD,OAAO,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,oCAAoC,CAAC,OAAe;IAC3D,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OACE,UAAU,CACR,IAAI,CAAC,IAAI,CACP,OAAO,EACP,2CAA2C,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CACnF,CACF,EACD,CAAC;QACD,OAAO,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CACd,OAAO,EACP,2CAA2C,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CACnF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA0C;IAE1C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,iDAAiD,EAAE;YACpE,IAAI,EAAE,qCAAqC;YAC3C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,oBAAoB,CAAC,YAAY,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC9E,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC;IAC7D,MAAM,WAAW,GAAG,+BAA+B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzE,mCAAmC,CAAC;QAClC,kBAAkB;QAClB,SAAS,EAAE,OAAO,CAAC,sBAAsB;QACzC,YAAY,EAAE,OAAO,CAAC,yBAAyB;KAChD,CAAC,CAAC;IACH,IAAI,kBAAkB,EAAE,CAAC;QACvB,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,IAAI,QAAQ,CAAC,qEAAqE,EAAE;YACxF,IAAI,EAAE,4CAA4C;YAClD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,QAAQ,CAAC,6CAA6C,EAAE;YAChE,IAAI,EAAE,kCAAkC;YACxC,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,KAAK,uBAAuB,EAAE,CAAC;QAC/C,MAAM,IAAI,QAAQ,CAChB,sGAAsG,EACtG;YACE,IAAI,EAAE,4CAA4C;YAClD,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IACD,IACE,IAAI,CAAC,SAAS,KAAK,aAAa;QAChC,CAAC,IAAI,CAAC,oBAAoB;QAC1B,IAAI,CAAC,cAAc,KAAK,IAAI,EAC5B,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,+DAA+D,EAAE;YAClF,IAAI,EAAE,oCAAoC;YAC1C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,OAAO,EACP,IAAI,CAAC,SAAS,KAAK,qBAAqB;QACtC,CAAC,CAAC,kCAAkC;QACpC,CAAC,CAAC,sBAAsB,CAC3B,CAAC;IACF,OAAO,iBAAiB,CACtB,YAAY,EACZ,EAAE,MAAM,EAAE,6BAA6B,IAAI,CAAC,YAAY,EAAE,EAAE,EAC5D,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,MAAM,+BAA+B,CAAC;YACpD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QACH,IACE,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;YAChD,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAC5C,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,oEAAoE,EAAE;gBACvF,IAAI,EAAE,sCAAsC;gBAC5C,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9C,MAAM,IAAI,QAAQ,CAAC,qEAAqE,EAAE;gBACxF,IAAI,EAAE,2CAA2C;gBACjD,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,kBAAkB,GAAG,kBAAkB;YAC3C,CAAC,CAAC,wCAAwC,CAAC;gBACvC,SAAS,EAAE,OAAO,CAAC,sBAAsB;gBACzC,YAAY,EAAE,OAAO,CAAC,yBAAyB;gBAC/C,IAAI;gBACJ,OAAO;gBACP,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;aAC/B,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,kBAAkB,GACtB,IAAI,CAAC,SAAS,KAAK,qBAAqB;YACtC,CAAC,CAAC,6BAA6B,CAAC,IAAI,EAAE,YAAY,CAAC;YACnD,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACpC,MAAM,QAAQ,GACZ,IAAI,CAAC,SAAS,KAAK,qBAAqB;YACtC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE;YAClE,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACxC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QACzE,MAAM,uBAAuB,GAAiC,kBAAkB;YAC9E,CAAC,CAAC,+BAA+B,CAAC,IAAI,EAAE,gBAAgB,CAAC;YACzD,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QACtF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;QACjD,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpD,2BAA2B,CAAC;gBAC1B,OAAO;gBACP,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;aAC7B,CAAC;YACF,kBAAkB,IAAI,CAAC,kBAAkB;gBACvC,CAAC,CAAC,gCAAgC,CAAC;oBAC/B,OAAO;oBACP,KAAK,EAAE,WAAW;oBAClB,QAAQ,EAAE,yCAAyC;iBACpD,CAAC;gBACJ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;SAC1B,CAAC,CAAC;QACH,wBAAwB,CAAC;YACvB,IAAI;YACJ,OAAO;YACP,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,QAAQ;YACR,iBAAiB,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;YACtE,wBAAwB,EAAE,uBAAuB,CAAC,UAAU;SAC7D,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,oCAAoC,CAAC,OAAO,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,kBAAkB;YACvC,CAAC,CAAC;gBACE,YAAY,EAAE,kBAAkB,CAAC,mBAAmB;gBACpD,kBAAkB,EAAE,kBAAkB,CAAC,oBAAoB;gBAC3D,eAAe,EAAE,kBAAkB,CAAC,YAAY;aACjD;YACH,CAAC,CAAC,kBAAkB,IAAI,gBAAgB;gBACtC,CAAC,CAAC,uCAAuC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC;gBAChF,CAAC,CAAC,IAAI,CAAC;QACX,IAAI,cAAc,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,EAAE,CAAC;YAC/D,kBAAkB,CAAC,kBAAkB,EAAE;gBACrC,cAAc,EAAE,CAAC;gBACjB,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC;gBAChC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;gBACzE,YAAY,EAAE,OAAO;gBACrB,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBACjC,uBAAuB,EAAE,CAAC;gBAC1B,GAAG,cAAc;gBACjB,YAAY,EAAE,kBAAkB;oBAC9B,CAAC,CAAC;wBACE,MAAM,EAAE,UAAU;wBAClB,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,kDAAkD;wBAC5D,cAAc,EAAE,kBAAkB,CAAC,cAAc;wBACjD,aAAa,EAAE,kBAAkB,CAAC,aAAa;wBAC/C,UAAU,EAAE,kBAAkB,CAAC,UAAU;wBACzC,YAAY,EAAE,kBAAkB,CAAC,YAAY;wBAC7C,eAAe,EAAE,kBAAkB,CAAC,eAAe;wBACnD,qBAAqB,EAAE,kBAAkB,CAAC,qBAAqB;wBAC/D,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,MAAM;wBAC7C,mBAAmB,EAAE,kBAAkB,CAAC,mBAAmB;wBAC3D,oBAAoB,EAAE,kBAAkB,CAAC,oBAAoB;wBAC7D,iBAAiB,EAAE,kBAAkB,CAAC,iBAAiB;qBACxD;oBACH,CAAC,CAAC,gBAAiB,CAAC,YAAY;aACnC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAChE,MAAM,sBAAsB,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QACxD,sBAAsB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,kBAAkB,CAAC,YAAY,EAAE;gBAC/B,cAAc,EAAE,CAAC;gBACjB,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC;gBAC/B,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,OAAO,EAAE;oBACP,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;oBAChC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;iBAC7B;gBACD,eAAe,EAAE,OAAO,CAAC,OAAO;gBAChC,UAAU,EAAE,IAAI,CAAC,OAAO;gBACxB,qBAAqB,EAAE,OAAO,CAAC,YAAY;gBAC3C,eAAe,EACb,IAAI,CAAC,SAAS,KAAK,aAAa;oBAC9B,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;oBACpE,CAAC,CAAC,IAAI;aACX,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,qBAAqB,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mCAAmC,CAAC,CAAC;YACtF,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;gBAC3D,IAAI,EAAE,qBAAqB;gBAC3B,IAAI;gBACJ,OAAO;aACR,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC;gBAC7C,IAAI;gBACJ,OAAO;gBACP,cAAc,EAAE,iBAAiB,KAAK,IAAI;gBAC1C,WAAW,EAAE,qBAAqB;gBAClC,aAAa,EAAE,SAAS;aACzB,CAAC,CAAC;YACH,IACE,kBAAkB,CAAC,MAAM;gBACzB,uBAAuB,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC;oBACtD,uBAAuB,CAAC,KAAK,CAAC,EAChC,CAAC;gBACD,MAAM,IAAI,QAAQ,CAAC,mEAAmE,EAAE;oBACtF,IAAI,EAAE,gDAAgD;oBACtD,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;YACL,CAAC;YACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAkC;gBAC3C,cAAc,EAAE,CAAC;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,WAAW,EAAE,aAAa;gBAC1B,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;gBACzE,cAAc,EAAE,SAAS;gBACzB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;gBAC5B,MAAM,EAAE,UAAU;gBAClB,KAAK;aACN,CAAC;YACF,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAkC;gBAC5C,cAAc,EAAE,CAAC;gBACjB,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC;gBAChC,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;gBACzE,OAAO,EAAE;oBACP,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,CAAC;oBACV,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,CAAC;oBACV,iBAAiB,EAAE,CAAC;oBACpB,QAAQ,EAAE,CAAC;iBACZ;gBACD,OAAO,EAAE;oBACP;wBACE,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,EAAE,EAAE,MAAM,CAAC,EAAE;wBACb,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,MAAM,EAAE,UAAU;wBAClB,KAAK,EAAE,IAAI;qBACZ;iBACF;gBACD,SAAS,EAAE;oBACT,eAAe,EAAE,YAAY;oBAC7B,cAAc,EAAE,YAAY;oBAC5B,0BAA0B,EAAE,YAAY;oBACxC,4BAA4B,EAAE,qBAAqB;oBACnD,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;oBACvD,cAAc,EAAE,WAAW;iBAC5B;gBACD,cAAc,EAAE;oBACd,mBAAmB,EAAE,0BAA0B;oBAC/C,MAAM,EAAE,wCAAwC;oBAChD,kBAAkB,EAAE;wBAClB,aAAa;wBACb,cAAc;wBACd,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB,uBAAuB;wBACvB,YAAY;qBACb;iBACF;gBACD,oBAAoB,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE;aAC1D,CAAC;YACF,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACxC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAC1D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,iBAAiB,GAAG,MAAM,yBAAyB,CAAC;gBACxD,IAAI;gBACJ,OAAO;gBACP,QAAQ;gBACR,YAAY;gBACZ,gBAAgB;gBAChB,SAAS,EAAE,uBAAuB;gBAClC,WAAW;gBACX,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;aAC1B,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAGxC,CAAC;gBACd,OAAO;oBACL,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM;oBACN,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,IAAI;iBACpE,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YACpF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;YACnF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YACpF,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAkC;gBAC5C,cAAc,EAAE,CAAC;gBACjB,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC;gBAChC,MAAM,EACJ,YAAY,GAAG,CAAC;oBACd,CAAC,CAAC,yBAAyB;oBAC3B,CAAC,CAAC,YAAY,KAAK,OAAO,CAAC,MAAM;wBAC/B,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,yBAAyB;gBACjC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;gBACzE,OAAO,EAAE;oBACP,OAAO,EAAE,OAAO,CAAC,MAAM;oBACvB,OAAO,EAAE,YAAY;oBACrB,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE,YAAY;oBACrB,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY;oBACpE,iBAAiB,EAAE,gBAAgB;iBACpC;gBACD,OAAO;gBACP,SAAS,EAAE;oBACT,eAAe,EAAE,YAAY;oBAC7B,cAAc,EAAE,YAAY;oBAC5B,aAAa,EAAE,gBAAgB;oBAC/B,yBAAyB,EAAE,kBAAkB;oBAC7C,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;oBACvD,cAAc,EAAE,WAAW;iBAC5B;gBACD,cAAc,EAAE;oBACd,mBAAmB,EAAE,0BAA0B;oBAC/C,MAAM,EAAE,wCAAwC;oBAChD,kBAAkB,EAAE;wBAClB,aAAa;wBACb,cAAc;wBACd,WAAW;wBACX,aAAa;wBACb,gBAAgB;qBACjB;iBACF;aACF,CAAC;YACF,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACxC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAC1D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACrD,MAAM,IAAI,GAAG;gBACX,UAAU,EAAE,CAAC;gBACb,mBAAmB,EAAE,CAAC;gBACtB,mBAAmB,EAAE,CAAC;gBACtB,MAAM,EAAE,CAAC;aACD,CAAC;YACX,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3D,OAAO,WAAW,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC7E,MAAM,KAAK,GAAoC;oBAC7C,cAAc,EAAE,CAAC;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,aAAa,EAAE;wBACb,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,MAAM,EAAE,wCAAwC;qBACjD;oBACD,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;oBACzE,cAAc,EAAE,SAAS;oBACzB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;oBAC5B,aAAa,EAAE,MAAM,CAAC,MAAO,CAAC,UAAU;oBACxC,YAAY,EAAE,YAAY,CAAC,WAAW;oBACtC,oBAAoB,EAAE,YAAY,CAAC,kBAAkB;oBACrD,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC;gBACF,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBAC1C,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAChD,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,KAAK,GAAoC;oBAC7C,cAAc,EAAE,CAAC;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,aAAa,EAAE;wBACb,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,MAAM,EAAE,wCAAwC;qBACjD;oBACD,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;oBACzE,cAAc,EAAE,SAAS;oBACzB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;oBAC5B,aAAa,EAAE,MAAM,CAAC,MAAO,CAAC,UAAU;oBACxC,YAAY,EAAE,IAAI;oBAClB,oBAAoB,EAAE,IAAI;oBAC1B,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;oBAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC;gBACF,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBAC1C,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACrD,MAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9D,OAAO;gBACL,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,OAAO;oBACb,CAAC,CAAE,SAAmB;oBACtB,CAAC,CAAC,OAAO;wBACP,CAAC,CAAE,QAAkB;wBACrB,CAAC,CAAE,SAAmB;gBAC1B,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;aAC9B,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QACpF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;QACnF,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAkC;YAC5C,cAAc,EAAE,CAAC;YACjB,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC;YAChC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,yBAAyB;YACjF,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;YACzE,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,YAAY,GAAG,YAAY;gBACrD,iBAAiB,EAAE,gBAAgB;aACpC;YACD,OAAO;YACP,SAAS,EAAE;gBACT,eAAe,EAAE,YAAY;gBAC7B,cAAc,EAAE,YAAY;gBAC5B,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;gBACvD,cAAc,EAAE,WAAW;aAC5B;YACD,cAAc,EAAE;gBACd,mBAAmB,EAAE,0BAA0B;gBAC/C,MAAM,EAAE,wCAAwC;gBAChD,kBAAkB,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,CAAC;aAChF;SACF,CAAC;QACF,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACxC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,wBAAwB;IACxB,sBAAsB;IACtB,wBAAwB;IACxB,kCAAkC;IAClC,uCAAuC;IACvC,wBAAwB;IACxB,2BAA2B;IAC3B,mCAAmC;IACnC,wBAAwB;IACxB,sBAAsB;IACtB,qBAAqB;IACrB,KAAK;IACL,YAAY;IACZ,0BAA0B;IAC1B,aAAa;IACb,yBAAyB;IACzB,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,oCAAoC;IACpC,+BAA+B;IAC/B,2BAA2B;IAC3B,iCAAiC;IACjC,6BAA6B;IAC7B,kCAAkC;IAClC,uBAAuB;IACvB,sBAAsB;IACtB,aAAa;IACb,+BAA+B;IAC/B,aAAa;IACb,sBAAsB;IACtB,0BAA0B;IAC1B,sBAAsB;IACtB,wCAAwC;CACzC,CAAC","sourcesContent":["import {\n closeSync,\n existsSync,\n fchmodSync,\n fsyncSync,\n openSync,\n readFileSync,\n writeFileSync,\n} from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact } from './artifacts.js';\nimport { collectRemoteReferences } from './dataset-remote-verify.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { withStateFileLock } from './state-lock.js';\nimport {\n buildAliasBatchRequest,\n buildAliasPlanRequest,\n loadMaintenanceDesiredPayload,\n orderedAliasBatches,\n} from './dataset-maintenance-alias-request.js';\nimport {\n MAINTENANCE_SCAN_TABLES,\n appendStableJsonLine,\n isJsonObject,\n maintenanceRowKey,\n parseMaintenancePlan,\n readJsonFile,\n readJsonLinesIfPresent,\n sha256Json,\n sha256Text,\n snapshotRemoteRow,\n stableJsonText,\n writeImmutableJson,\n type DatasetMaintenancePlan,\n type DatasetMaintenanceAliasBatchPlan,\n type DatasetMaintenancePlanAction,\n type DatasetMaintenanceProgressEntry,\n type DatasetMaintenanceMutableTable,\n type DatasetMaintenanceRemoteRow,\n type JsonObject,\n} from './dataset-maintenance-contract.js';\nimport {\n buildDerivativePlanRequest,\n derivativePlanAction,\n parseDerivativeSnapshotResponse,\n parseDerivativeSubmitResponse,\n type DatasetMaintenanceDerivativeSubmitProof,\n} from './dataset-maintenance-derivatives.js';\nimport { maintenanceProjectedReferenceFingerprint } from './dataset-maintenance-plan.js';\nimport { isSnapshotCompletenessCompatible } from './dataset-maintenance-pagination.js';\nimport {\n applyMaintenanceDerivativeRebuild,\n deleteMaintenanceRow,\n fetchMaintenanceAccountRows,\n fetchMaintenanceDerivativeSnapshot,\n fetchMaintenanceExactRows,\n fetchMaintenanceVisibleTableRows,\n resolveMaintenanceRemoteContext,\n saveDraftMaintenanceRow,\n type DatasetMaintenanceRemoteContext,\n} from './dataset-maintenance-remote.js';\n\nexport type DatasetMaintenanceApplyReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed' | 'completed_with_failures' | 'completed_with_unknowns' | 'accepted';\n task_id: string;\n operation: DatasetMaintenancePlan['operation'];\n operation_id: string;\n target_mode: DatasetMaintenancePlan['target_mode'];\n plan_sha256: string;\n actor: { user_id: string; email: string };\n summary: {\n actions: number;\n success: number;\n failed: number;\n unknown?: number;\n pending: number;\n resumed_successes: number;\n accepted?: number;\n };\n actions: Array<{\n action_id: string;\n action: DatasetMaintenancePlanAction['action'];\n table: DatasetMaintenancePlanAction['table'];\n id: string;\n version: string;\n status: 'success' | 'failed' | 'unknown' | 'pending' | 'accepted';\n error: string | null;\n }>;\n artifacts: {\n approval_record: string;\n apply_progress: string;\n commit_report: string;\n attempt_report: string;\n alias_plan_progress?: string;\n alias_batch_progress?: string;\n alias_exchange_progress?: string;\n derivative_submit_progress?: string;\n derivative_admission_attempt?: string;\n execution_log?: string;\n inbound_reference_barrier?: string;\n };\n database_audit: {\n rpc_transaction_log: 'public.command_audit_log';\n source: 'tiangong-lca dataset maintenance apply';\n correlation_fields: string[];\n };\n alias_plan_proof?: {\n plan_request_sha256: string;\n summary_audit_id: string;\n batch_count: 2;\n row_count: 52;\n exchange_count: 59;\n idempotent_replay: boolean;\n };\n derivative_admission?: DatasetMaintenanceDerivativeSubmitProof & {\n admission: 'accepted';\n };\n};\n\nexport type RunDatasetMaintenanceApplyOptions = {\n planPath: string;\n commit: boolean;\n approvePlan: string;\n confirm: string;\n timeoutMs?: number;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n now?: Date;\n maxParallel?: number;\n globalInboundProofPath?: string;\n approveGlobalInboundProof?: string;\n};\n\ntype ParallelDeleteExecutionStatus = 'PREPARED' | 'DISPATCHED' | 'COMMITTED' | 'UNKNOWN';\n\n// Process payloads can be large enough for the default 1,000-row page to exceed\n// the database statement timeout. Keep the destructive all-visible RLS fence,\n// but bound each SELECT-only page so admission can complete without weakening it.\nconst PARALLEL_DELETE_VISIBLE_PROCESS_PAGE_SIZE = 250;\nconst GLOBAL_INBOUND_PROOF_MAX_AGE_MS = 30 * 60 * 1_000;\nconst SHA256_PATTERN = /^[0-9a-f]{64}$/u;\n\ntype ParallelDeleteGlobalInboundProofChunk = {\n index: number;\n start: number;\n end_exclusive: number;\n target_count: number;\n captured_at_utc: string;\n inbound_exchanges: 0;\n old_flow_identities_with_inbound: 0;\n process_identities_with_inbound: 0;\n owner_draft_inbound: 0;\n public_inbound: 0;\n foreign_private_inbound: 0;\n other_state_inbound: 0;\n sql_sha256: string;\n};\n\ntype ParallelDeleteGlobalInboundProof = {\n schema_version: 'dataset-maintenance-global-inbound-proof.v1';\n status: 'PASS_GLOBAL_ALL_PROCESS_INBOUND_ZERO';\n statement_kind: 'SELECT';\n source: 'supabase_select_only_raw_sql';\n process_scope: 'all_process_rows_without_rls_restriction';\n captured_at_utc: string;\n project_ref: string;\n actor_user_id: string;\n plan_sha256: string;\n operation: 'delete';\n target_table: 'flows';\n target_count: number;\n target_binding_sha256: string;\n global_process_rows: number;\n global_exchange_rows: number;\n inbound_exchanges: 0;\n old_flow_identities_with_inbound: 0;\n process_identities_with_inbound: 0;\n chunks: ParallelDeleteGlobalInboundProofChunk[];\n p0: 0;\n p1: 0;\n proof_path: string;\n proof_sha256: string;\n};\n\ntype ParallelDeleteExecutionEntry = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n attempt_key: string;\n action: 'delete';\n table: 'flows';\n id: string;\n version: string;\n desired_sha256: string;\n before_sha256: string;\n actor: { user_id: string; email: string };\n status: ParallelDeleteExecutionStatus;\n recorded_at_utc: string;\n attempt_consumed: boolean;\n recovered: boolean;\n audit_context: {\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n reason_code: string;\n source: 'tiangong-lca dataset maintenance apply';\n };\n audit_id: string | null;\n readback_sha256: string | null;\n remote_result_sha256: string | null;\n error: string | null;\n};\n\ntype ParallelDeleteExecutionState = {\n entries: ParallelDeleteExecutionEntry[];\n byAction: Map<string, ParallelDeleteExecutionEntry[]>;\n dispatched: Set<string>;\n committed: Set<string>;\n};\n\ntype ProgressState = {\n entries: DatasetMaintenanceProgressEntry[];\n successes: Map<string, DatasetMaintenanceProgressEntry>;\n latestFailures: Map<string, DatasetMaintenanceProgressEntry>;\n};\n\ntype DerivativeSubmitProgressEntry = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n target_mode: 'owner_draft';\n actor: { user_id: string; email: string };\n started_at_utc: string;\n ended_at_utc: string;\n result: 'accepted';\n proof: DatasetMaintenanceDerivativeSubmitProof;\n};\n\ntype DerivativeSubmitProgressState = {\n entries: DerivativeSubmitProgressEntry[];\n latest: DerivativeSubmitProgressEntry | null;\n};\n\ntype DerivativeAdmissionAttempt = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n table: 'processes';\n id: string;\n version: string;\n expected_snapshot_sha256: string;\n actor: { user_id: string; email: string };\n prepared_at_utc: string;\n};\n\ntype AliasBatchProgressEntry = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n batch_id: string;\n target_mode: 'owner_draft';\n dimension: DatasetMaintenanceAliasBatchPlan['dimension'];\n factor: string;\n actor: { user_id: string; email: string };\n started_at_utc: string;\n ended_at_utc: string;\n batch_request_sha256: string;\n idempotent_replay: boolean;\n row_count: number;\n exchange_count: number;\n summary_audit_id: string;\n plan_request_sha256: string;\n plan_summary_audit_id: string;\n result: 'success';\n error: null;\n};\n\ntype AliasPlanBatchProof = {\n batch_id: string;\n dimension: DatasetMaintenanceAliasBatchPlan['dimension'];\n batch_request_sha256: string;\n summary_audit_id: string;\n};\n\ntype AliasPlanProgressEntry = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n target_mode: 'owner_draft';\n actor: { user_id: string; email: string };\n started_at_utc: string;\n ended_at_utc: string;\n plan_request_sha256: string | null;\n idempotent_replay: boolean | null;\n batch_count: 2;\n row_count: 52;\n exchange_count: 59;\n summary_audit_id: string | null;\n batches: AliasPlanBatchProof[];\n result: 'success' | 'failed';\n error: string | null;\n};\n\ntype AliasPlanProgressState = {\n entries: AliasPlanProgressEntry[];\n success: AliasPlanProgressEntry | null;\n latestFailure: AliasPlanProgressEntry | null;\n};\n\ntype AliasBatchProgressState = {\n entries: AliasBatchProgressEntry[];\n successes: Map<string, AliasBatchProgressEntry>;\n};\n\ntype AliasRpcAuditProof = {\n action_id: string;\n table: DatasetMaintenancePlanAction['table'];\n id: string;\n version: string;\n audit_id: string;\n};\n\ntype AliasRpcResult = {\n target_visibility: 'owner_draft';\n batch_request_sha256: string;\n idempotent_replay: boolean;\n exchange_count: number;\n summary_audit_id: string;\n audits: Map<string, AliasRpcAuditProof>;\n raw: JsonObject;\n};\n\ntype AliasPlanRpcResult = {\n target_visibility: 'owner_draft';\n plan_request_sha256: string;\n idempotent_replay: boolean;\n batch_count: 2;\n row_count: 52;\n exchange_count: 59;\n summary_audit_id: string;\n batches: Map<DatasetMaintenanceAliasBatchPlan['dimension'], AliasRpcResult>;\n raw: JsonObject;\n};\n\ntype RetiredAliasExecutionProof = {\n rpc: AliasPlanRpcResult;\n after_by_action: Map<string, string>;\n};\n\nconst POSITIVE_INTEGER_TEXT = /^[1-9]\\d*$/u;\n\nfunction clock(options: RunDatasetMaintenanceApplyOptions): string {\n return (options.now ?? new Date()).toISOString();\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nconst ABSENT_READBACK_SHA256 = sha256Json([]);\n\nfunction parallelDeleteDesiredSha256(action: DatasetMaintenancePlanAction): string {\n return sha256Json({\n action: 'delete',\n table: action.table,\n id: action.id,\n version: action.version,\n desired: 'absent',\n });\n}\n\nfunction normalizeMaintenanceMaxParallel(value: number | undefined): number {\n const normalized = value ?? 1;\n if (!Number.isInteger(normalized) || normalized < 1 || normalized > 8) {\n throw new CliError('--max-parallel must be an integer from 1 to 8.', {\n code: 'DATASET_MAINTENANCE_MAX_PARALLEL_INVALID',\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction assertParallelDeletePlan(plan: DatasetMaintenancePlan): void {\n const targets = new Set<string>();\n if (\n plan.operation !== 'delete' ||\n plan.actions.length === 0 ||\n plan.actions.some((action) => action.action !== 'delete' || action.table !== 'flows') ||\n plan.summary.delete !== plan.actions.length ||\n plan.summary.save_draft !== 0 ||\n (plan.summary.update_json_ordered ?? 0) !== 0 ||\n (plan.summary.rebuild_derivatives ?? 0) !== 0 ||\n plan.summary.current_reference_impacts !== 0 ||\n plan.summary.projected_reference_impacts !== 0\n ) {\n throw new CliError(\n '--max-parallel maintenance apply requires a non-empty flow delete-only plan with zero current and projected inbound references.',\n {\n code: 'DATASET_MAINTENANCE_PARALLEL_DELETE_PLAN_REQUIRED',\n exitCode: 1,\n },\n );\n }\n for (const action of plan.actions) {\n const target = `${action.table}\\u0000${action.id}\\u0000${action.version}`;\n if (targets.has(target)) {\n throw new CliError('Parallel delete plan contains a repeated table/id/version target.', {\n code: 'DATASET_MAINTENANCE_PARALLEL_DELETE_TARGET_DUPLICATE',\n exitCode: 1,\n details: { table: action.table, id: action.id, version: action.version },\n });\n }\n targets.add(target);\n }\n}\n\nfunction parallelDeleteTargetBindingSha256(plan: DatasetMaintenancePlan): string {\n return sha256Json(\n plan.actions.map((action, index) => ({\n index,\n ordinal: action.ordinal,\n action_id: action.action_id,\n table: action.table,\n id: action.id,\n version: action.version,\n expected_user_id: action.expected_user_id,\n expected_state_code: action.expected_state_code,\n before_sha256: action.before?.row_sha256 ?? null,\n })),\n );\n}\n\nfunction invalidGlobalInboundProof(message: string, details?: unknown): never {\n throw new CliError(message, {\n code: 'DATASET_MAINTENANCE_GLOBAL_INBOUND_PROOF_INVALID',\n exitCode: 1,\n details,\n });\n}\n\nfunction assertGlobalInboundProofOptionShape(options: {\n parallelDeleteMode: boolean;\n proofPath?: string;\n approveProof?: string;\n}): void {\n const hasPath = typeof options.proofPath === 'string' && options.proofPath.length > 0;\n const hasApproval = typeof options.approveProof === 'string' && options.approveProof.length > 0;\n if (hasPath !== hasApproval) {\n throw new CliError(\n '--global-inbound-proof and --approve-global-inbound-proof must be provided together.',\n {\n code: 'DATASET_MAINTENANCE_GLOBAL_INBOUND_PROOF_OPTIONS_INCOMPLETE',\n exitCode: 2,\n },\n );\n }\n if ((hasPath || hasApproval) && !options.parallelDeleteMode) {\n throw new CliError(\n 'A global inbound proof is allowed only with --max-parallel flow delete-only execution.',\n {\n code: 'DATASET_MAINTENANCE_GLOBAL_INBOUND_PROOF_MODE_INVALID',\n exitCode: 2,\n },\n );\n }\n if (hasApproval && !SHA256_PATTERN.test(options.approveProof!)) {\n throw new CliError('--approve-global-inbound-proof must be a lowercase SHA-256.', {\n code: 'DATASET_MAINTENANCE_GLOBAL_INBOUND_PROOF_APPROVAL_INVALID',\n exitCode: 2,\n });\n }\n}\n\nfunction validateParallelDeleteGlobalInboundProof(options: {\n proofPath: string | undefined;\n approveProof: string | undefined;\n plan: DatasetMaintenancePlan;\n context: DatasetMaintenanceRemoteContext;\n now: Date;\n}): ParallelDeleteGlobalInboundProof | null {\n if (!options.proofPath || !options.approveProof) return null;\n if (!path.isAbsolute(options.proofPath)) {\n invalidGlobalInboundProof('Global inbound proof path must be absolute.');\n }\n\n let proofText: string;\n try {\n proofText = readFileSync(options.proofPath, 'utf8');\n } catch (error) {\n invalidGlobalInboundProof('Global inbound proof file could not be read.', errorMessage(error));\n }\n const proofSha256 = sha256Text(proofText!);\n if (proofSha256 !== options.approveProof) {\n invalidGlobalInboundProof('Global inbound proof file SHA-256 does not match approval.', {\n expected: options.approveProof,\n actual: proofSha256,\n });\n }\n\n let value: unknown;\n try {\n value = JSON.parse(proofText!);\n } catch (error) {\n invalidGlobalInboundProof('Global inbound proof is not valid JSON.', errorMessage(error));\n }\n if (!isJsonObject(value)) {\n invalidGlobalInboundProof('Global inbound proof must be a JSON object.');\n }\n\n const expectedBinding = parallelDeleteTargetBindingSha256(options.plan);\n const capturedAt =\n typeof value.captured_at_utc === 'string' ? Date.parse(value.captured_at_utc) : NaN;\n const nowMs = options.now.getTime();\n const capturedAgeMs = nowMs - capturedAt;\n const safePositiveInteger = (candidate: unknown): candidate is number =>\n Number.isSafeInteger(candidate) && Number(candidate) > 0;\n if (\n value.schema_version !== 'dataset-maintenance-global-inbound-proof.v1' ||\n value.status !== 'PASS_GLOBAL_ALL_PROCESS_INBOUND_ZERO' ||\n value.statement_kind !== 'SELECT' ||\n value.source !== 'supabase_select_only_raw_sql' ||\n value.process_scope !== 'all_process_rows_without_rls_restriction' ||\n !Number.isFinite(capturedAt) ||\n capturedAgeMs < -30_000 ||\n capturedAgeMs > GLOBAL_INBOUND_PROOF_MAX_AGE_MS ||\n value.project_ref !== options.context.project_ref ||\n value.actor_user_id !== options.context.account.user_id ||\n value.plan_sha256 !== options.plan.plan_sha256 ||\n value.operation !== 'delete' ||\n value.target_table !== 'flows' ||\n value.target_count !== options.plan.actions.length ||\n value.target_binding_sha256 !== expectedBinding ||\n !safePositiveInteger(value.global_process_rows) ||\n !safePositiveInteger(value.global_exchange_rows) ||\n value.inbound_exchanges !== 0 ||\n value.old_flow_identities_with_inbound !== 0 ||\n value.process_identities_with_inbound !== 0 ||\n value.p0 !== 0 ||\n value.p1 !== 0 ||\n !Array.isArray(value.chunks) ||\n value.chunks.length === 0\n ) {\n invalidGlobalInboundProof('Global inbound proof metadata or zero-inbound result is invalid.', {\n expected_project_ref: options.context.project_ref,\n expected_actor_user_id: options.context.account.user_id,\n expected_plan_sha256: options.plan.plan_sha256,\n expected_target_count: options.plan.actions.length,\n expected_target_binding_sha256: expectedBinding,\n });\n }\n\n let expectedStart = 0;\n for (const [index, rawChunk] of value.chunks.entries()) {\n if (!isJsonObject(rawChunk)) {\n invalidGlobalInboundProof('Global inbound proof contains a non-object chunk.', { index });\n }\n const chunkCapturedAt =\n typeof rawChunk.captured_at_utc === 'string' ? Date.parse(rawChunk.captured_at_utc) : NaN;\n const chunkAgeMs = nowMs - chunkCapturedAt;\n if (\n rawChunk.index !== index ||\n rawChunk.start !== expectedStart ||\n !Number.isSafeInteger(rawChunk.end_exclusive) ||\n Number(rawChunk.end_exclusive) <= expectedStart ||\n Number(rawChunk.end_exclusive) > options.plan.actions.length ||\n rawChunk.target_count !== Number(rawChunk.end_exclusive) - expectedStart ||\n !Number.isFinite(chunkCapturedAt) ||\n chunkAgeMs < -30_000 ||\n chunkAgeMs > GLOBAL_INBOUND_PROOF_MAX_AGE_MS ||\n rawChunk.inbound_exchanges !== 0 ||\n rawChunk.old_flow_identities_with_inbound !== 0 ||\n rawChunk.process_identities_with_inbound !== 0 ||\n rawChunk.owner_draft_inbound !== 0 ||\n rawChunk.public_inbound !== 0 ||\n rawChunk.foreign_private_inbound !== 0 ||\n rawChunk.other_state_inbound !== 0 ||\n typeof rawChunk.sql_sha256 !== 'string' ||\n !SHA256_PATTERN.test(rawChunk.sql_sha256)\n ) {\n invalidGlobalInboundProof('Global inbound proof contains an invalid or incomplete chunk.', {\n index,\n expected_start: expectedStart,\n });\n }\n expectedStart = Number(rawChunk.end_exclusive);\n }\n if (expectedStart !== options.plan.actions.length) {\n invalidGlobalInboundProof('Global inbound proof chunks do not cover every delete target.', {\n expected_end: options.plan.actions.length,\n actual_end: expectedStart,\n });\n }\n\n return {\n ...(value as Omit<ParallelDeleteGlobalInboundProof, 'proof_path' | 'proof_sha256'>),\n proof_path: options.proofPath,\n proof_sha256: proofSha256,\n };\n}\n\nfunction parseParallelDeleteExecutionLog(\n plan: DatasetMaintenancePlan,\n executionLogPath: string,\n): ParallelDeleteExecutionState {\n const actions = new Map(plan.actions.map((action) => [action.action_id, action]));\n const entries: ParallelDeleteExecutionEntry[] = [];\n const byAction = new Map<string, ParallelDeleteExecutionEntry[]>();\n const dispatched = new Set<string>();\n const committed = new Set<string>();\n for (const value of readJsonLinesIfPresent(executionLogPath)) {\n const action =\n isJsonObject(value) && typeof value.action_id === 'string'\n ? actions.get(value.action_id)\n : null;\n const expectedDesired = action ? parallelDeleteDesiredSha256(action) : null;\n const actionEntries = action ? (byAction.get(action.action_id) ?? []) : [];\n const priorDispatched = actionEntries.some((entry) => entry.status === 'DISPATCHED');\n const priorCommitted = actionEntries.some((entry) => entry.status === 'COMMITTED');\n const status = isJsonObject(value) ? value.status : null;\n const auditIdValid =\n isJsonObject(value) &&\n (value.audit_id === null ||\n (typeof value.audit_id === 'string' && POSITIVE_INTEGER_TEXT.test(value.audit_id)));\n const remoteHashValid =\n isJsonObject(value) &&\n (value.remote_result_sha256 === null ||\n (typeof value.remote_result_sha256 === 'string' &&\n /^[a-f0-9]{64}$/u.test(value.remote_result_sha256)));\n const commonOutcomeFieldsValid =\n isJsonObject(value) &&\n typeof value.attempt_consumed === 'boolean' &&\n typeof value.recovered === 'boolean' &&\n (value.readback_sha256 === null ||\n (typeof value.readback_sha256 === 'string' &&\n /^[a-f0-9]{64}$/u.test(value.readback_sha256))) &&\n (value.error === null || typeof value.error === 'string');\n const statusFieldsValid =\n isJsonObject(value) &&\n ((status === 'PREPARED' &&\n value.attempt_consumed === false &&\n value.recovered === false &&\n value.audit_id === null &&\n value.readback_sha256 === null &&\n value.remote_result_sha256 === null &&\n value.error === null &&\n !priorDispatched &&\n !priorCommitted) ||\n (status === 'DISPATCHED' &&\n value.attempt_consumed === true &&\n value.recovered === false &&\n value.audit_id === null &&\n value.readback_sha256 === null &&\n value.remote_result_sha256 === null &&\n value.error === null &&\n actionEntries.some((entry) => entry.status === 'PREPARED') &&\n !priorDispatched &&\n !priorCommitted) ||\n (status === 'UNKNOWN' &&\n value.attempt_consumed === true &&\n typeof value.error === 'string' &&\n value.error.length > 0 &&\n priorDispatched &&\n !priorCommitted) ||\n (status === 'COMMITTED' &&\n value.attempt_consumed === true &&\n value.readback_sha256 === ABSENT_READBACK_SHA256 &&\n value.error === null &&\n priorDispatched &&\n !priorCommitted));\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n !action ||\n action.action !== 'delete' ||\n action.table !== 'flows' ||\n value.attempt_key !== `${action.action_id}@${expectedDesired}` ||\n value.action !== 'delete' ||\n value.table !== 'flows' ||\n value.id !== action.id ||\n value.version !== action.version ||\n value.desired_sha256 !== expectedDesired ||\n value.before_sha256 !== action.before?.row_sha256 ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== plan.account.user_id ||\n value.actor.email !== plan.account.email ||\n !isJsonObject(value.audit_context) ||\n value.audit_context.plan_sha256 !== plan.plan_sha256 ||\n value.audit_context.operation_id !== plan.operation_id ||\n value.audit_context.action_id !== action.action_id ||\n value.audit_context.reason_code !== action.reason_code ||\n value.audit_context.source !== 'tiangong-lca dataset maintenance apply' ||\n typeof value.recorded_at_utc !== 'string' ||\n !Number.isFinite(Date.parse(value.recorded_at_utc)) ||\n !auditIdValid ||\n !remoteHashValid ||\n !commonOutcomeFieldsValid ||\n !statusFieldsValid\n ) {\n throw new CliError('Parallel delete execution log contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_PARALLEL_DELETE_LOG_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n const entry = value as ParallelDeleteExecutionEntry;\n entries.push(entry);\n actionEntries.push(entry);\n byAction.set(action.action_id, actionEntries);\n if (entry.status === 'DISPATCHED') dispatched.add(action.action_id);\n if (entry.status === 'COMMITTED') committed.add(action.action_id);\n }\n return { entries, byAction, dispatched, committed };\n}\n\nfunction appendParallelDeleteExecutionEntry(options: {\n path: string;\n state: ParallelDeleteExecutionState;\n plan: DatasetMaintenancePlan;\n action: DatasetMaintenancePlanAction;\n context: DatasetMaintenanceRemoteContext;\n status: ParallelDeleteExecutionStatus;\n recordedAtUtc: string;\n recovered?: boolean;\n auditId?: string | null;\n readbackSha256?: string | null;\n remoteResultSha256?: string | null;\n error?: string | null;\n}): ParallelDeleteExecutionEntry {\n const desiredSha256 = parallelDeleteDesiredSha256(options.action);\n const entry: ParallelDeleteExecutionEntry = {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: options.action.action_id,\n attempt_key: `${options.action.action_id}@${desiredSha256}`,\n action: 'delete',\n table: 'flows',\n id: options.action.id,\n version: options.action.version,\n desired_sha256: desiredSha256,\n before_sha256: options.action.before!.row_sha256,\n actor: {\n user_id: options.context.account.user_id,\n email: options.context.account.email,\n },\n status: options.status,\n recorded_at_utc: options.recordedAtUtc,\n attempt_consumed: options.status !== 'PREPARED',\n recovered: options.recovered ?? false,\n audit_context: {\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: options.action.action_id,\n reason_code: options.action.reason_code,\n source: 'tiangong-lca dataset maintenance apply',\n },\n audit_id: options.auditId ?? null,\n readback_sha256: options.readbackSha256 ?? null,\n remote_result_sha256: options.remoteResultSha256 ?? null,\n error: options.error ?? null,\n };\n const descriptor = openSync(options.path, 'a', 0o600);\n try {\n fchmodSync(descriptor, 0o600);\n writeFileSync(descriptor, `${stableJsonText(entry)}\\n`, 'utf8');\n fsyncSync(descriptor);\n } finally {\n closeSync(descriptor);\n }\n options.state.entries.push(entry);\n const actionEntries = options.state.byAction.get(options.action.action_id) ?? [];\n actionEntries.push(entry);\n options.state.byAction.set(options.action.action_id, actionEntries);\n if (entry.status === 'DISPATCHED') options.state.dispatched.add(options.action.action_id);\n if (entry.status === 'COMMITTED') options.state.committed.add(options.action.action_id);\n return entry;\n}\n\nfunction assertNoVisibleProcessInboundReferences(options: {\n plan: DatasetMaintenancePlan;\n rows: DatasetMaintenanceRemoteRow[];\n}): { process_rows: number; process_references: number; snapshot_sha256: string } {\n const targets = new Set(\n options.plan.actions.map((action) => `${action.id}\\u0000${action.version}`),\n );\n const targetIds = new Set(options.plan.actions.map((action) => action.id));\n const payloadRows = options.rows\n .filter((row) => row.table === 'processes' && row.json_ordered !== null)\n .map((row) => ({\n table: row.table,\n id: row.id,\n version: row.version,\n json_ordered: row.json_ordered as JsonObject,\n }));\n const references = collectRemoteReferences(payloadRows).filter(\n (reference) =>\n reference.role === 'reference' &&\n reference.table === 'flows' &&\n typeof reference.id === 'string',\n );\n const inbound = references.filter((reference) =>\n reference.version\n ? targets.has(`${reference.id}\\u0000${reference.version}`)\n : targetIds.has(reference.id!),\n );\n if (inbound.length > 0) {\n throw new CliError('Parallel flow delete admission found visible process inbound references.', {\n code: 'DATASET_MAINTENANCE_PARALLEL_DELETE_INBOUND_REFERENCES',\n exitCode: 1,\n details: {\n inbound_count: inbound.length,\n first: inbound.slice(0, 20),\n },\n });\n }\n return {\n process_rows: payloadRows.length,\n process_references: references.length,\n snapshot_sha256: sha256Json(\n payloadRows.map((row) => ({\n table: row.table,\n id: row.id,\n version: row.version,\n payload_sha256: sha256Json(row.json_ordered),\n })),\n ),\n };\n}\n\nfunction loadDesiredPayload(planDir: string, action: DatasetMaintenancePlanAction): JsonObject {\n return loadMaintenanceDesiredPayload(planDir, action);\n}\n\nfunction parseProgress(plan: DatasetMaintenancePlan, progressPath: string): ProgressState {\n const rawEntries = readJsonLinesIfPresent(progressPath);\n const entries: DatasetMaintenanceProgressEntry[] = [];\n const actionsById = new Map(plan.actions.map((action) => [action.action_id, action]));\n for (const value of rawEntries) {\n const action =\n isJsonObject(value) && typeof value.action_id === 'string'\n ? actionsById.get(value.action_id)\n : null;\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n typeof value.action_id !== 'string' ||\n !action ||\n value.action !== action.action ||\n value.reason_code !== action.reason_code ||\n typeof value.before_sha256 !== 'string' ||\n !isJsonObject(value.audit_context) ||\n value.audit_context.plan_sha256 !== plan.plan_sha256 ||\n value.audit_context.operation_id !== plan.operation_id ||\n value.audit_context.action_id !== action.action_id ||\n value.audit_context.reason_code !== action.reason_code ||\n value.audit_context.source !== 'tiangong-lca dataset maintenance apply' ||\n (action.action === 'update_json_ordered' &&\n (value.target_mode !== 'owner_draft' ||\n value.audit_context.target_mode !== 'owner_draft' ||\n value.batch_id !== action.batch_id ||\n typeof value.batch_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.batch_request_sha256) ||\n typeof value.database_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.database_audit_id) ||\n typeof value.summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) ||\n typeof value.plan_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.plan_request_sha256) ||\n typeof value.plan_summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.plan_summary_audit_id))) ||\n (action.action !== 'update_json_ordered' &&\n ('target_mode' in value ||\n 'target_mode' in value.audit_context ||\n 'batch_id' in value ||\n 'batch_request_sha256' in value ||\n 'database_audit_id' in value ||\n 'summary_audit_id' in value ||\n 'plan_request_sha256' in value ||\n 'plan_summary_audit_id' in value)) ||\n !['success', 'failed'].includes(String(value.result)) ||\n (value.result === 'success' && typeof value.remote_result_sha256 !== 'string') ||\n (value.result === 'failed' && value.remote_result_sha256 !== null)\n ) {\n throw new CliError('Apply progress contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_PROGRESS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n entries.push(value as DatasetMaintenanceProgressEntry);\n }\n const successes = new Map<string, DatasetMaintenanceProgressEntry>();\n const latestFailures = new Map<string, DatasetMaintenanceProgressEntry>();\n for (const entry of entries) {\n if (entry.result === 'success') {\n successes.set(entry.action_id, entry);\n latestFailures.delete(entry.action_id);\n } else if (!successes.has(entry.action_id)) {\n latestFailures.set(entry.action_id, entry);\n }\n }\n return { entries, successes, latestFailures };\n}\n\nfunction derivativeProofIdentity(proof: DatasetMaintenanceDerivativeSubmitProof): string {\n return sha256Json({\n schema_version: proof.schema_version,\n plan_sha256: proof.plan_sha256,\n operation_id: proof.operation_id,\n target_visibility: proof.target_visibility,\n plan_request_sha256: proof.plan_request_sha256,\n action_count: proof.action_count,\n accepted_count: proof.accepted_count,\n summary_audit_id: proof.summary_audit_id,\n request_id: proof.request_id,\n action_request_sha256: proof.action_request_sha256,\n database_audit_id: proof.database_audit_id,\n });\n}\n\nfunction parseDerivativeSubmitProgress(\n plan: DatasetMaintenancePlan,\n progressPath: string,\n): DerivativeSubmitProgressState {\n const action = derivativePlanAction(plan);\n const entries = readJsonLinesIfPresent(progressPath).map((value) => {\n const rawProof = isJsonObject(value) && isJsonObject(value.proof) ? value.proof : null;\n let proof: DatasetMaintenanceDerivativeSubmitProof;\n try {\n proof = parseDerivativeSubmitResponse(\n rawProof\n ? {\n ok: true,\n command: 'cmd_dataset_derivative_rebuild_plan_guarded',\n ...rawProof,\n }\n : null,\n plan,\n );\n } catch (error) {\n throw new CliError('Derivative submit progress contains an invalid RPC proof.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROGRESS_INVALID',\n exitCode: 1,\n details: errorMessage(error),\n });\n }\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n value.action_id !== action.action_id ||\n value.target_mode !== 'owner_draft' ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== plan.account.user_id ||\n value.actor.email !== plan.account.email ||\n typeof value.started_at_utc !== 'string' ||\n typeof value.ended_at_utc !== 'string' ||\n value.result !== 'accepted'\n ) {\n throw new CliError('Derivative submit progress contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROGRESS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return { ...value, proof } as DerivativeSubmitProgressEntry;\n });\n const identities = new Set(entries.map((entry) => derivativeProofIdentity(entry.proof)));\n if (identities.size > 1) {\n throw new CliError('Derivative submit replays do not identify one durable request.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROGRESS_INVALID',\n exitCode: 1,\n });\n }\n return { entries, latest: entries.at(-1) ?? null };\n}\n\nfunction validateDerivativeAdmissionAttempt(options: {\n path: string;\n plan: DatasetMaintenancePlan;\n context: DatasetMaintenanceRemoteContext;\n}): DerivativeAdmissionAttempt | null {\n if (!existsSync(options.path)) return null;\n const value = readJsonFile(options.path, 'Derivative admission attempt');\n const action = derivativePlanAction(options.plan);\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== options.plan.plan_sha256 ||\n value.operation_id !== options.plan.operation_id ||\n value.action_id !== action.action_id ||\n value.table !== 'processes' ||\n value.id !== action.id ||\n value.version !== action.version ||\n value.expected_snapshot_sha256 !== action.derivative_before?.snapshot_sha256 ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== options.context.account.user_id ||\n value.actor.email !== options.context.account.email ||\n typeof value.prepared_at_utc !== 'string' ||\n !Number.isFinite(Date.parse(value.prepared_at_utc))\n ) {\n throw new CliError('Derivative admission attempt is invalid or belongs to another plan.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_ATTEMPT_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return value as DerivativeAdmissionAttempt;\n}\n\nfunction parseAliasBatchProgress(\n plan: DatasetMaintenancePlan,\n progressPath: string,\n): AliasBatchProgressState {\n const batches = new Map(plan.alias_batches!.map((batch) => [batch.batch_id, batch]));\n const entries = readJsonLinesIfPresent(progressPath).map((value) => {\n const batch =\n isJsonObject(value) && typeof value.batch_id === 'string'\n ? batches.get(value.batch_id)\n : null;\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n !batch ||\n value.target_mode !== 'owner_draft' ||\n value.dimension !== batch.dimension ||\n value.factor !== batch.factor ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== plan.account.user_id ||\n value.actor.email !== plan.account.email ||\n typeof value.started_at_utc !== 'string' ||\n typeof value.ended_at_utc !== 'string' ||\n value.row_count !== batch.summary.rows ||\n value.exchange_count !== batch.summary.exchanges ||\n value.result !== 'success' ||\n typeof value.batch_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.batch_request_sha256) ||\n typeof value.idempotent_replay !== 'boolean' ||\n typeof value.summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) ||\n typeof value.plan_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.plan_request_sha256) ||\n typeof value.plan_summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.plan_summary_audit_id) ||\n value.error !== null\n ) {\n throw new CliError('Alias batch progress contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PROGRESS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return value as AliasBatchProgressEntry;\n });\n const successes = new Map<string, AliasBatchProgressEntry>();\n for (const entry of entries) {\n if (successes.has(entry.batch_id)) {\n throw new CliError('Alias batch progress contains duplicate success proof.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PROGRESS_INVALID',\n exitCode: 1,\n details: { batch_id: entry.batch_id },\n });\n }\n successes.set(entry.batch_id, entry);\n }\n return { entries, successes };\n}\n\nfunction parseAliasPlanProgress(\n plan: DatasetMaintenancePlan,\n progressPath: string,\n): AliasPlanProgressState {\n const expectedBatches = orderedAliasBatches(plan);\n const entries = readJsonLinesIfPresent(progressPath).map((value) => {\n const batchProofs = isJsonObject(value) && Array.isArray(value.batches) ? value.batches : [];\n const validBatchProofs =\n batchProofs.length === expectedBatches.length &&\n batchProofs.every((proof, index) => {\n const batch = expectedBatches[index]!;\n return Boolean(\n isJsonObject(proof) &&\n proof.batch_id === batch.batch_id &&\n proof.dimension === batch.dimension &&\n typeof proof.batch_request_sha256 === 'string' &&\n /^[a-f0-9]{64}$/u.test(proof.batch_request_sha256) &&\n typeof proof.summary_audit_id === 'string' &&\n POSITIVE_INTEGER_TEXT.test(proof.summary_audit_id),\n );\n });\n const batchRequestHashes = batchProofs\n .filter(isJsonObject)\n .map((proof) => proof.batch_request_sha256);\n const batchSummaryAuditIds = batchProofs\n .filter(isJsonObject)\n .map((proof) => proof.summary_audit_id);\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n value.target_mode !== 'owner_draft' ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== plan.account.user_id ||\n value.actor.email !== plan.account.email ||\n typeof value.started_at_utc !== 'string' ||\n typeof value.ended_at_utc !== 'string' ||\n value.batch_count !== 2 ||\n value.row_count !== 52 ||\n value.exchange_count !== 59 ||\n !['success', 'failed'].includes(String(value.result)) ||\n (value.result === 'success' &&\n (typeof value.plan_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.plan_request_sha256) ||\n typeof value.idempotent_replay !== 'boolean' ||\n typeof value.summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) ||\n !validBatchProofs ||\n new Set(batchRequestHashes).size !== 2 ||\n new Set(batchSummaryAuditIds).size !== 2 ||\n batchSummaryAuditIds.includes(value.summary_audit_id) ||\n value.error !== null)) ||\n (value.result === 'failed' &&\n (value.plan_request_sha256 !== null ||\n value.idempotent_replay !== null ||\n value.summary_audit_id !== null ||\n batchProofs.length !== 0 ||\n typeof value.error !== 'string'))\n ) {\n throw new CliError('Alias plan progress contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PLAN_PROGRESS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return value as AliasPlanProgressEntry;\n });\n let success: AliasPlanProgressEntry | null = null;\n let latestFailure: AliasPlanProgressEntry | null = null;\n for (const entry of entries) {\n if (entry.result === 'success') {\n if (success) {\n throw new CliError('Alias plan progress contains duplicate success proof.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PLAN_PROGRESS_INVALID',\n exitCode: 1,\n });\n }\n success = entry;\n latestFailure = null;\n } else if (!success) {\n latestFailure = entry;\n }\n }\n return { entries, success, latestFailure };\n}\n\nfunction finalProjectedRows(options: {\n rows: DatasetMaintenanceRemoteRow[];\n plan: DatasetMaintenancePlan;\n planDir: string;\n}): DatasetMaintenanceRemoteRow[] {\n const projected = new Map(options.rows.map((row) => [maintenanceRowKey(row), { ...row }]));\n for (const action of options.plan.actions.filter((entry) =>\n ['save_draft', 'update_json_ordered'].includes(entry.action),\n )) {\n const row = projected.get(maintenanceRowKey(action));\n if (row) {\n projected.set(maintenanceRowKey(action), {\n ...row,\n json_ordered: loadDesiredPayload(options.planDir, action),\n });\n }\n }\n for (const action of options.plan.actions.filter((entry) => entry.action === 'delete')) {\n projected.delete(maintenanceRowKey(action));\n }\n return [...projected.values()].sort((left, right) =>\n maintenanceRowKey(left).localeCompare(maintenanceRowKey(right)),\n );\n}\n\nfunction assertApplyPreconditions(options: {\n plan: DatasetMaintenancePlan;\n planDir: string;\n currentRows: DatasetMaintenanceRemoteRow[];\n progress: ProgressState;\n aliasPlanProgress?: AliasPlanProgressState;\n attemptedDeleteActionIds?: Set<string>;\n}): void {\n const current = new Map(options.currentRows.map((row) => [maintenanceRowKey(row), row]));\n const aliasBatchStates = new Map<string, 'before' | 'desired'>();\n for (const batch of options.plan.alias_batches ?? []) {\n const states = batch.action_ids.map((actionId) => {\n const action = options.plan.actions.find((entry) => entry.action_id === actionId)!;\n const row = current.get(maintenanceRowKey(action));\n const snapshot = row ? snapshotRemoteRow(row) : null;\n if (\n row?.state_code === 0 &&\n row.user_id === action.expected_user_id &&\n snapshot?.row_sha256 === action.before?.row_sha256\n ) {\n return 'before' as const;\n }\n if (\n row?.state_code === 0 &&\n row.user_id === action.expected_user_id &&\n snapshot?.payload_sha256 === action.desired_payload?.sha256 &&\n row.model_id === action.before?.model_id &&\n row.rule_verification === action.before?.rule_verification\n ) {\n return 'desired' as const;\n }\n return 'invalid' as const;\n });\n const unique = new Set(states);\n if (unique.size !== 1 || unique.has('invalid')) {\n throw new CliError(`Atomic alias batch row state drifted: ${batch.batch_id}`, {\n code: 'DATASET_MAINTENANCE_ALIAS_BATCH_DRIFT',\n exitCode: 1,\n details: { batch_id: batch.batch_id, states },\n });\n }\n aliasBatchStates.set(batch.batch_id, states[0] as 'before' | 'desired');\n }\n if (aliasBatchStates.size) {\n const planStates = new Set(aliasBatchStates.values());\n if (\n planStates.size !== 1 ||\n (Boolean(options.aliasPlanProgress?.success) && !planStates.has('desired'))\n ) {\n throw new CliError('Atomic alias plan rows are split across dimension states.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PLAN_DRIFT',\n exitCode: 1,\n details: { batches: Object.fromEntries(aliasBatchStates) },\n });\n }\n }\n const baselineKeys = new Set([\n ...options.plan.protected_rows.map(maintenanceRowKey),\n ...options.plan.actions.filter((action) => action.before).map(maintenanceRowKey),\n ]);\n for (const row of options.currentRows) {\n if (!baselineKeys.has(maintenanceRowKey(row))) {\n throw new CliError(`Unexpected current-account row appeared after planning: ${row.id}`, {\n code: 'DATASET_MAINTENANCE_PREFLIGHT_DRIFT',\n exitCode: 1,\n details: { table: row.table, id: row.id, version: row.version },\n });\n }\n }\n for (const protectedRow of options.plan.protected_rows) {\n const currentRow = current.get(maintenanceRowKey(protectedRow));\n if (!currentRow || snapshotRemoteRow(currentRow).row_sha256 !== protectedRow.row_sha256) {\n throw new CliError(`Protected row drifted after planning: ${protectedRow.id}`, {\n code: 'DATASET_MAINTENANCE_PROTECTED_ROW_DRIFT',\n exitCode: 1,\n details: protectedRow,\n });\n }\n }\n for (const action of options.plan.actions) {\n if (!action.before) {\n throw new CliError(`Ready plan action lacks before snapshot: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n const currentRow = current.get(maintenanceRowKey(action));\n const alreadySucceeded = options.progress.successes.has(action.action_id);\n if (alreadySucceeded && action.action === 'delete') {\n if (currentRow) {\n throw new CliError(`Previously deleted row is visible again: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_RESUME_DRIFT',\n exitCode: 1,\n });\n }\n continue;\n }\n if (action.action === 'delete' && options.attemptedDeleteActionIds?.has(action.action_id)) {\n // A request may have committed before its response or progress row was\n // persisted, or the target may have drifted after dispatch. The execution\n // ledger owns both cases and permits only read-only recovery, never an\n // automatic replay.\n continue;\n }\n if (!currentRow || currentRow.user_id !== action.expected_user_id) {\n throw new CliError(`Action row is missing, non-draft, or not owned: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_ACTION_ROW_DRIFT',\n exitCode: 1,\n });\n }\n const currentSnapshot = snapshotRemoteRow(currentRow);\n if (action.action === 'update_json_ordered') {\n aliasBatchStates.get(action.batch_id!)!;\n continue;\n }\n if (alreadySucceeded) {\n const expectedPayloadSha256 = sha256Json(loadDesiredPayload(options.planDir, action));\n if (\n currentRow.state_code !== 0 ||\n currentSnapshot.payload_sha256 !== expectedPayloadSha256 ||\n currentRow.model_id !== action.before.model_id ||\n currentRow.rule_verification !== action.before.rule_verification\n ) {\n throw new CliError(`Previously saved row payload drifted: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_RESUME_DRIFT',\n exitCode: 1,\n });\n }\n } else if (\n currentRow.state_code !== 0 ||\n currentSnapshot.row_sha256 !== action.before.row_sha256\n ) {\n throw new CliError(`Pending action row drifted after planning: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_ACTION_ROW_DRIFT',\n exitCode: 1,\n });\n }\n }\n const projected = finalProjectedRows({\n rows: options.currentRows,\n plan: options.plan,\n planDir: options.planDir,\n });\n const projectedReferenceSha256 = sha256Json(maintenanceProjectedReferenceFingerprint(projected));\n if (projectedReferenceSha256 !== options.plan.projected_reference_sha256) {\n throw new CliError('Projected reference closure drifted after planning.', {\n code: 'DATASET_MAINTENANCE_REFERENCE_PREFLIGHT_DRIFT',\n exitCode: 1,\n details: {\n expected: options.plan.projected_reference_sha256,\n actual: projectedReferenceSha256,\n },\n });\n }\n}\n\nfunction validateApprovalRecord(options: {\n path: string;\n plan: DatasetMaintenancePlan;\n context: DatasetMaintenanceRemoteContext;\n}): void {\n if (!existsSync(options.path)) {\n return;\n }\n const record = readJsonFile(options.path, 'Maintenance approval record');\n if (\n !isJsonObject(record) ||\n record.plan_sha256 !== options.plan.plan_sha256 ||\n record.target_mode !== options.plan.target_mode ||\n !isJsonObject(record.account) ||\n record.account.user_id !== options.context.account.user_id ||\n record.account.email !== options.context.account.email ||\n !isSnapshotCompletenessCompatible(\n record.snapshot_completeness,\n options.plan.snapshot_completeness,\n MAINTENANCE_SCAN_TABLES,\n )\n ) {\n throw new CliError('Existing approval record does not match this plan and actor.', {\n code: 'DATASET_MAINTENANCE_APPROVAL_RECORD_MISMATCH',\n exitCode: 1,\n });\n }\n}\n\nasync function assertAliasSupportSnapshots(options: {\n plan: DatasetMaintenancePlan;\n context: DatasetMaintenanceRemoteContext;\n}): Promise<void> {\n if (options.plan.target_mode !== 'owner_draft') {\n throw new CliError('Alias apply requires target_mode=owner_draft.', {\n code: 'DATASET_MAINTENANCE_TARGET_MODE_INVALID',\n exitCode: 2,\n });\n }\n for (const batch of options.plan.alias_batches!) {\n const snapshots = [\n batch.target_snapshots.unitgroup!,\n batch.target_snapshots.flowproperty!,\n batch.target_snapshots.source_unitgroup!,\n ];\n for (const snapshot of snapshots) {\n const exact = await fetchMaintenanceExactRows({\n context: options.context,\n table: snapshot.table,\n id: snapshot.id,\n version: snapshot.version,\n });\n const current =\n exact.rows.length === 1 && exact.rows[0] ? snapshotRemoteRow(exact.rows[0]) : null;\n if (\n !current ||\n current.user_id !== options.plan.account.user_id ||\n current.state_code !== 0 ||\n current.row_sha256 !== snapshot.row_sha256\n ) {\n throw new CliError(`Alias support row drifted for batch ${batch.batch_id}.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_SUPPORT_DRIFT',\n exitCode: 1,\n details: { table: snapshot.table, id: snapshot.id, version: snapshot.version },\n });\n }\n }\n }\n}\n\nfunction validateAliasRpcResult(\n value: JsonObject,\n batch: DatasetMaintenanceAliasBatchPlan,\n plan: DatasetMaintenancePlan,\n): AliasRpcResult {\n const audit = Array.isArray(value.audit) ? value.audit : [];\n const proofs = audit.filter(isJsonObject).map((entry) => ({\n action_id: entry.action_id,\n table: entry.table,\n id: entry.id,\n version: entry.version,\n audit_id: entry.audit_id,\n }));\n const proofByAction = new Map(\n proofs\n .filter(\n (entry): entry is AliasRpcAuditProof =>\n typeof entry.action_id === 'string' &&\n typeof entry.table === 'string' &&\n typeof entry.id === 'string' &&\n typeof entry.version === 'string' &&\n typeof entry.audit_id === 'string' &&\n POSITIVE_INTEGER_TEXT.test(entry.audit_id),\n )\n .map((entry) => [entry.action_id, entry]),\n );\n const actionsById = new Map(plan.actions.map((action) => [action.action_id, action]));\n const validProofs =\n proofByAction.size === batch.action_ids.length &&\n batch.action_ids.every((actionId) => {\n const action = actionsById.get(actionId);\n const proof = proofByAction.get(actionId);\n return Boolean(\n action &&\n proof &&\n proof.table === action.table &&\n proof.id === action.id &&\n proof.version === action.version,\n );\n });\n if (\n plan.target_mode !== 'owner_draft' ||\n value.ok !== true ||\n value.command !== 'cmd_dataset_alias_batch_guarded' ||\n value.target_visibility !== 'owner_draft' ||\n value.dimension !== batch.dimension ||\n value.batch_id !== batch.batch_id ||\n value.row_count !== batch.summary.rows ||\n value.exchange_count !== batch.summary.exchanges ||\n typeof value.summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) ||\n typeof value.batch_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.batch_request_sha256) ||\n typeof value.idempotent_replay !== 'boolean' ||\n audit.length !== batch.action_ids.length ||\n !validProofs\n ) {\n throw new CliError(`Alias batch RPC returned invalid proof for ${batch.batch_id}.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_RPC_PROOF_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return {\n target_visibility: 'owner_draft',\n batch_request_sha256: value.batch_request_sha256,\n idempotent_replay: value.idempotent_replay,\n exchange_count: value.exchange_count,\n summary_audit_id: value.summary_audit_id,\n audits: proofByAction,\n raw: value,\n };\n}\n\nfunction validateAliasPlanRpcResult(\n value: JsonObject,\n plan: DatasetMaintenancePlan,\n): AliasPlanRpcResult {\n const batches = orderedAliasBatches(plan);\n const rawBatchResults = Array.isArray(value.batches) ? value.batches : [];\n const parsedBatchResults = rawBatchResults.map((entry, index) =>\n isJsonObject(entry) && batches[index]\n ? validateAliasRpcResult(entry, batches[index], plan)\n : null,\n );\n const validBatchResults = parsedBatchResults.every(\n (entry): entry is AliasRpcResult => entry !== null,\n );\n const batchSummaryAuditIds = validBatchResults\n ? parsedBatchResults.map((entry) => entry.summary_audit_id)\n : [];\n const rowAuditIds = validBatchResults\n ? parsedBatchResults.flatMap((entry) =>\n [...entry.audits.values()].map((proof) => proof.audit_id),\n )\n : [];\n if (\n plan.target_mode !== 'owner_draft' ||\n value.ok !== true ||\n value.command !== 'cmd_dataset_alias_plan_guarded' ||\n value.schema_version !== 'dataset-alias-plan.v1' ||\n value.plan_sha256 !== plan.plan_sha256 ||\n value.operation_id !== plan.operation_id ||\n value.target_visibility !== 'owner_draft' ||\n typeof value.plan_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.plan_request_sha256) ||\n value.batch_count !== 2 ||\n value.row_count !== 52 ||\n value.exchange_count !== 59 ||\n typeof value.summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) ||\n typeof value.idempotent_replay !== 'boolean' ||\n rawBatchResults.length !== 2 ||\n !validBatchResults ||\n parsedBatchResults.some(\n (entry, index) =>\n entry.idempotent_replay !== value.idempotent_replay ||\n entry.exchange_count !== batches[index]!.summary.exchanges,\n ) ||\n new Set(batchSummaryAuditIds).size !== 2 ||\n new Set(rowAuditIds).size !== 52 ||\n batchSummaryAuditIds.includes(value.summary_audit_id) ||\n rowAuditIds.includes(value.summary_audit_id) ||\n rowAuditIds.some((auditId) => batchSummaryAuditIds.includes(auditId))\n ) {\n throw new CliError('Alias plan RPC returned invalid whole-plan proof.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PLAN_RPC_PROOF_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return {\n target_visibility: 'owner_draft',\n plan_request_sha256: value.plan_request_sha256,\n idempotent_replay: value.idempotent_replay,\n batch_count: 2,\n row_count: 52,\n exchange_count: 59,\n summary_audit_id: value.summary_audit_id,\n batches: new Map(\n batches.map((batch, index) => [batch.dimension, parsedBatchResults[index]!] as const),\n ),\n raw: value,\n };\n}\n\nfunction aliasExchangeProgressKey(value: {\n batch_id: string;\n action_id: string;\n exchange_index: number;\n data_set_internal_id: string;\n}): string {\n return `${value.batch_id}\\u0000${value.action_id}\\u0000${value.exchange_index}\\u0000${value.data_set_internal_id}`;\n}\n\nfunction appendAliasSuccessLogs(options: {\n plan: DatasetMaintenancePlan;\n batch: DatasetMaintenanceAliasBatchPlan;\n execution: RetiredAliasExecutionProof;\n progress: ProgressState;\n progressPath: string;\n exchangeProgressPath: string;\n context: DatasetMaintenanceRemoteContext;\n startedAt: string;\n endedAt: string;\n}): void {\n const batchRpc = options.execution.rpc.batches.get(options.batch.dimension)!;\n for (const actionId of options.batch.action_ids) {\n const action = options.plan.actions.find((entry) => entry.action_id === actionId)!;\n const proof = batchRpc.audits.get(actionId)!;\n const existingSuccess = options.progress.successes.get(actionId);\n if (existingSuccess) {\n if (\n existingSuccess.target_mode !== 'owner_draft' ||\n existingSuccess.batch_id !== options.batch.batch_id ||\n existingSuccess.batch_request_sha256 !== batchRpc.batch_request_sha256 ||\n existingSuccess.database_audit_id !== proof.audit_id ||\n existingSuccess.summary_audit_id !== batchRpc.summary_audit_id ||\n existingSuccess.plan_request_sha256 !== options.execution.rpc.plan_request_sha256 ||\n existingSuccess.plan_summary_audit_id !== options.execution.rpc.summary_audit_id ||\n existingSuccess.after_sha256 !== options.execution.after_by_action.get(actionId)\n ) {\n throw new CliError('Existing alias row progress does not match replay audit proof.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PROGRESS_INVALID',\n exitCode: 1,\n details: { action_id: actionId },\n });\n }\n continue;\n }\n const entry: DatasetMaintenanceProgressEntry = {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n reason_code: action.reason_code,\n audit_context: {\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: action.action_id,\n reason_code: action.reason_code,\n source: 'tiangong-lca dataset maintenance apply',\n target_mode: 'owner_draft',\n },\n actor: { user_id: options.context.account.user_id, email: options.context.account.email },\n started_at_utc: options.startedAt,\n ended_at_utc: options.endedAt,\n before_sha256: action.before!.row_sha256,\n after_sha256: options.execution.after_by_action.get(actionId)!,\n remote_result_sha256: sha256Json({\n plan_response: options.execution.rpc.raw,\n batch_response: batchRpc.raw,\n audit: proof,\n }),\n result: 'success',\n error: null,\n rollback: action.rollback,\n batch_id: options.batch.batch_id,\n target_mode: 'owner_draft',\n batch_request_sha256: batchRpc.batch_request_sha256,\n database_audit_id: proof.audit_id,\n summary_audit_id: batchRpc.summary_audit_id,\n plan_request_sha256: options.execution.rpc.plan_request_sha256,\n plan_summary_audit_id: options.execution.rpc.summary_audit_id,\n };\n appendStableJsonLine(options.progressPath, entry);\n options.progress.entries.push(entry);\n options.progress.successes.set(actionId, entry);\n options.progress.latestFailures.delete(actionId);\n }\n\n const existing = readJsonLinesIfPresent(options.exchangeProgressPath);\n const existingKeys = new Set<string>();\n const expectedRewrites = new Map(\n options.plan.alias_batches!.flatMap((batch) =>\n batch.exchange_rewrites.map(\n (rewrite) =>\n [\n aliasExchangeProgressKey({ batch_id: batch.batch_id, ...rewrite }),\n { batch, rewrite },\n ] as const,\n ),\n ),\n );\n for (const value of existing) {\n const key =\n isJsonObject(value) &&\n typeof value.batch_id === 'string' &&\n typeof value.action_id === 'string' &&\n typeof value.exchange_index === 'number' &&\n typeof value.data_set_internal_id === 'string'\n ? aliasExchangeProgressKey({\n batch_id: value.batch_id,\n action_id: value.action_id,\n exchange_index: value.exchange_index,\n data_set_internal_id: value.data_set_internal_id,\n })\n : '';\n const expected = expectedRewrites.get(key);\n const rowProof = expected ? options.progress.successes.get(expected.rewrite.action_id) : null;\n if (\n !isJsonObject(value) ||\n !expected ||\n !rowProof ||\n value.schema_version !== 1 ||\n value.plan_sha256 !== options.plan.plan_sha256 ||\n value.operation_id !== options.plan.operation_id ||\n value.target_mode !== 'owner_draft' ||\n value.factor !== expected.batch.factor ||\n value.result !== 'success' ||\n !isJsonObject(value.actor) ||\n value.actor.user_id !== options.plan.account.user_id ||\n value.actor.email !== options.plan.account.email ||\n typeof value.logged_at_utc !== 'string' ||\n typeof value.batch_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.batch_request_sha256) ||\n value.batch_request_sha256 !== rowProof.batch_request_sha256 ||\n typeof value.database_audit_id !== 'string' ||\n POSITIVE_INTEGER_TEXT.test(value.database_audit_id) === false ||\n value.database_audit_id !== rowProof.database_audit_id ||\n typeof value.summary_audit_id !== 'string' ||\n POSITIVE_INTEGER_TEXT.test(value.summary_audit_id) === false ||\n value.summary_audit_id !== rowProof.summary_audit_id ||\n typeof value.plan_request_sha256 !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(value.plan_request_sha256) ||\n value.plan_request_sha256 !== rowProof.plan_request_sha256 ||\n typeof value.plan_summary_audit_id !== 'string' ||\n !POSITIVE_INTEGER_TEXT.test(value.plan_summary_audit_id) ||\n value.plan_summary_audit_id !== rowProof.plan_summary_audit_id ||\n sha256Json({\n action_id: value.action_id,\n process_id: value.process_id,\n process_version: value.process_version,\n exchange_index: value.exchange_index,\n data_set_internal_id: value.data_set_internal_id,\n flow_id: value.flow_id,\n flow_version: value.flow_version,\n direction: value.direction,\n before_exchange_sha256: value.before_exchange_sha256,\n before_mean_amount: value.before_mean_amount,\n before_resulting_amount: value.before_resulting_amount,\n after_mean_amount: value.after_mean_amount,\n after_resulting_amount: value.after_resulting_amount,\n after_exchange_sha256: value.after_exchange_sha256,\n }) !== sha256Json(expected.rewrite) ||\n existingKeys.has(key)\n ) {\n throw new CliError('Alias exchange progress contains an invalid or foreign entry.', {\n code: 'DATASET_MAINTENANCE_ALIAS_EXCHANGE_PROGRESS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n existingKeys.add(key);\n }\n for (const rewrite of options.batch.exchange_rewrites) {\n const key = aliasExchangeProgressKey({ batch_id: options.batch.batch_id, ...rewrite });\n if (existingKeys.has(key)) continue;\n const proof = batchRpc.audits.get(rewrite.action_id)!;\n appendStableJsonLine(options.exchangeProgressPath, {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n batch_id: options.batch.batch_id,\n target_mode: 'owner_draft',\n batch_request_sha256: batchRpc.batch_request_sha256,\n factor: options.batch.factor,\n actor: { user_id: options.context.account.user_id, email: options.context.account.email },\n logged_at_utc: options.endedAt,\n database_audit_id: proof.audit_id,\n summary_audit_id: batchRpc.summary_audit_id,\n plan_request_sha256: options.execution.rpc.plan_request_sha256,\n plan_summary_audit_id: options.execution.rpc.summary_audit_id,\n result: 'success',\n ...rewrite,\n });\n existingKeys.add(key);\n }\n}\n\nfunction appendAliasProofProgress(options: {\n plan: DatasetMaintenancePlan;\n execution: RetiredAliasExecutionProof;\n planProgress: AliasPlanProgressState;\n batchProgress: AliasBatchProgressState;\n planProgressPath: string;\n batchProgressPath: string;\n context: DatasetMaintenanceRemoteContext;\n startedAt: string;\n endedAt: string;\n}): AliasPlanProgressEntry {\n const batchProofs: AliasPlanBatchProof[] = [];\n for (const batch of orderedAliasBatches(options.plan)) {\n const rpc = options.execution.rpc.batches.get(batch.dimension)!;\n const existing = options.batchProgress.successes.get(batch.batch_id);\n if (\n existing &&\n (existing.batch_request_sha256 !== rpc.batch_request_sha256 ||\n existing.summary_audit_id !== rpc.summary_audit_id ||\n existing.plan_request_sha256 !== options.execution.rpc.plan_request_sha256 ||\n existing.plan_summary_audit_id !== options.execution.rpc.summary_audit_id)\n ) {\n throw new CliError('Existing alias batch proof does not match whole-plan replay.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PROGRESS_INVALID',\n exitCode: 1,\n details: { batch_id: batch.batch_id },\n });\n }\n const proof: AliasPlanBatchProof = {\n batch_id: batch.batch_id,\n dimension: batch.dimension,\n batch_request_sha256: rpc.batch_request_sha256,\n summary_audit_id: rpc.summary_audit_id,\n };\n batchProofs.push(proof);\n if (!existing) {\n const entry: AliasBatchProgressEntry = {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n batch_id: batch.batch_id,\n target_mode: 'owner_draft',\n dimension: batch.dimension,\n factor: batch.factor,\n actor: {\n user_id: options.context.account.user_id,\n email: options.context.account.email,\n },\n started_at_utc: options.startedAt,\n ended_at_utc: options.endedAt,\n batch_request_sha256: rpc.batch_request_sha256,\n idempotent_replay: rpc.idempotent_replay,\n row_count: batch.summary.rows,\n exchange_count: rpc.exchange_count,\n summary_audit_id: rpc.summary_audit_id,\n plan_request_sha256: options.execution.rpc.plan_request_sha256,\n plan_summary_audit_id: options.execution.rpc.summary_audit_id,\n result: 'success',\n error: null,\n };\n appendStableJsonLine(options.batchProgressPath, entry);\n options.batchProgress.entries.push(entry);\n options.batchProgress.successes.set(batch.batch_id, entry);\n }\n }\n const entry: AliasPlanProgressEntry = {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n target_mode: 'owner_draft',\n actor: { user_id: options.context.account.user_id, email: options.context.account.email },\n started_at_utc: options.startedAt,\n ended_at_utc: options.endedAt,\n plan_request_sha256: options.execution.rpc.plan_request_sha256,\n idempotent_replay: options.execution.rpc.idempotent_replay,\n batch_count: 2,\n row_count: 52,\n exchange_count: 59,\n summary_audit_id: options.execution.rpc.summary_audit_id,\n batches: batchProofs,\n result: 'success',\n error: null,\n };\n if (options.planProgress.success) {\n if (\n options.planProgress.success.plan_request_sha256 !== entry.plan_request_sha256 ||\n options.planProgress.success.summary_audit_id !== entry.summary_audit_id ||\n sha256Json(options.planProgress.success.batches) !== sha256Json(entry.batches)\n ) {\n throw new CliError('Existing alias plan proof does not match whole-plan replay.', {\n code: 'DATASET_MAINTENANCE_ALIAS_PLAN_PROGRESS_INVALID',\n exitCode: 1,\n });\n }\n return options.planProgress.success;\n }\n appendStableJsonLine(options.planProgressPath, entry);\n options.planProgress.entries.push(entry);\n options.planProgress.success = entry;\n options.planProgress.latestFailure = null;\n return entry;\n}\n\nasync function executeAction(options: {\n action: DatasetMaintenancePlanAction;\n plan: DatasetMaintenancePlan;\n planDir: string;\n context: DatasetMaintenanceRemoteContext;\n}): Promise<{ afterSha256: string | null; remoteResultSha256: string }> {\n if (options.action.action === 'rebuild_derivatives') {\n throw new CliError(\n 'Derivative rebuild actions may only execute through the guarded whole-plan RPC.',\n {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_SEQUENTIAL_WRITE_FORBIDDEN',\n exitCode: 1,\n },\n );\n }\n if (!options.action.before) {\n throw new CliError(`Action lacks a before snapshot: ${options.action.action_id}`, {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n const justInTime = await fetchMaintenanceExactRows({\n context: options.context,\n table: options.action.table,\n id: options.action.id,\n version: options.action.version,\n });\n const pendingRow = justInTime.rows.length === 1 ? justInTime.rows[0] : null;\n const pendingSnapshot = pendingRow ? snapshotRemoteRow(pendingRow) : null;\n const exactDraft = Boolean(\n pendingRow &&\n pendingRow.state_code === 0 &&\n pendingSnapshot?.row_sha256 === options.action.before.row_sha256,\n );\n if (!pendingRow || pendingRow.user_id !== options.action.expected_user_id || !exactDraft) {\n throw new CliError(`Action row drifted immediately before write: ${options.action.action_id}`, {\n code: 'DATASET_MAINTENANCE_ACTION_JUST_IN_TIME_DRIFT',\n exitCode: 1,\n });\n }\n const audit = {\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: options.action.action_id,\n reason_code: options.action.reason_code,\n source: 'tiangong-lca dataset maintenance apply' as const,\n };\n if (options.action.action === 'save_draft') {\n const remoteResult = await saveDraftMaintenanceRow({\n context: options.context,\n table: options.action.table as DatasetMaintenanceMutableTable,\n id: options.action.id,\n version: options.action.version,\n payload: loadDesiredPayload(options.planDir, options.action),\n modelId: options.action.before?.model_id ?? null,\n ruleVerification: options.action.before?.rule_verification ?? null,\n audit,\n });\n const readback = await fetchMaintenanceExactRows({\n context: options.context,\n table: options.action.table,\n id: options.action.id,\n version: options.action.version,\n });\n const row = readback.rows[0];\n if (readback.rows.length !== 1 || !row) {\n throw new CliError(`save_draft readback failed for ${options.action.action_id}.`, {\n code: 'DATASET_MAINTENANCE_ACTION_READBACK_FAILED',\n exitCode: 1,\n });\n }\n const expectedPayload = options.action.desired_payload?.sha256;\n const readbackSnapshot = snapshotRemoteRow(row);\n if (\n readbackSnapshot.payload_sha256 !== expectedPayload ||\n row.user_id !== options.action.expected_user_id ||\n row.state_code !== 0\n ) {\n throw new CliError(`save_draft readback mismatch for ${options.action.action_id}.`, {\n code: 'DATASET_MAINTENANCE_ACTION_READBACK_FAILED',\n exitCode: 1,\n });\n }\n return {\n afterSha256: readbackSnapshot.row_sha256,\n remoteResultSha256: sha256Json(remoteResult),\n };\n }\n if (options.action.action === 'update_json_ordered') {\n throw new CliError('Atomic alias actions must execute through the whole-plan RPC.', {\n code: 'DATASET_MAINTENANCE_ALIAS_SEQUENTIAL_WRITE_FORBIDDEN',\n exitCode: 1,\n });\n }\n if (options.action.action !== 'delete') {\n throw new CliError(`Unsupported maintenance action: ${options.action.action}`, {\n code: 'DATASET_MAINTENANCE_ACTION_UNSUPPORTED',\n exitCode: 2,\n });\n }\n const remoteResult = await deleteMaintenanceRow({\n context: options.context,\n table: options.action.table as DatasetMaintenanceMutableTable,\n id: options.action.id,\n version: options.action.version,\n audit,\n });\n const readback = await fetchMaintenanceExactRows({\n context: options.context,\n table: options.action.table,\n id: options.action.id,\n version: options.action.version,\n });\n if (readback.rows.length !== 0) {\n throw new CliError(`delete readback failed for ${options.action.action_id}.`, {\n code: 'DATASET_MAINTENANCE_ACTION_READBACK_FAILED',\n exitCode: 1,\n });\n }\n return { afterSha256: null, remoteResultSha256: sha256Json(remoteResult) };\n}\n\nfunction appendParallelDeleteProgress(options: {\n progressPath: string;\n progress: ProgressState;\n plan: DatasetMaintenancePlan;\n action: DatasetMaintenancePlanAction;\n context: DatasetMaintenanceRemoteContext;\n startedAtUtc: string;\n endedAtUtc: string;\n result: 'success' | 'failed';\n remoteResultSha256: string | null;\n error: string | null;\n}): DatasetMaintenanceProgressEntry {\n const entry: DatasetMaintenanceProgressEntry = {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: options.action.action_id,\n action: 'delete',\n table: options.action.table,\n id: options.action.id,\n version: options.action.version,\n reason_code: options.action.reason_code,\n audit_context: {\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: options.action.action_id,\n reason_code: options.action.reason_code,\n source: 'tiangong-lca dataset maintenance apply',\n },\n actor: {\n user_id: options.context.account.user_id,\n email: options.context.account.email,\n },\n started_at_utc: options.startedAtUtc,\n ended_at_utc: options.endedAtUtc,\n before_sha256: options.action.before!.row_sha256,\n after_sha256: null,\n remote_result_sha256: options.remoteResultSha256,\n result: options.result,\n error: options.error,\n rollback: options.action.rollback,\n };\n appendStableJsonLine(options.progressPath, entry);\n options.progress.entries.push(entry);\n if (entry.result === 'success') {\n options.progress.successes.set(entry.action_id, entry);\n options.progress.latestFailures.delete(entry.action_id);\n } else if (!options.progress.successes.has(entry.action_id)) {\n options.progress.latestFailures.set(entry.action_id, entry);\n }\n return entry;\n}\n\nfunction remoteAuditId(value: JsonObject): string | null {\n const candidate = value.audit_id;\n return typeof candidate === 'string' && POSITIVE_INTEGER_TEXT.test(candidate) ? candidate : null;\n}\n\nasync function exactParallelDeleteRows(options: {\n context: DatasetMaintenanceRemoteContext;\n action: DatasetMaintenancePlanAction;\n}): Promise<DatasetMaintenanceRemoteRow[]> {\n return (\n await fetchMaintenanceExactRows({\n context: options.context,\n table: options.action.table,\n id: options.action.id,\n version: options.action.version,\n })\n ).rows;\n}\n\nfunction exactParallelDeleteBefore(options: {\n rows: DatasetMaintenanceRemoteRow[];\n action: DatasetMaintenancePlanAction;\n}): boolean {\n const row = options.rows[0];\n return Boolean(\n options.rows.length === 1 &&\n row &&\n row.user_id === options.action.expected_user_id &&\n row.state_code === 0 &&\n snapshotRemoteRow(row).row_sha256 === options.action.before?.row_sha256,\n );\n}\n\nasync function executeParallelDeletePlan(options: {\n plan: DatasetMaintenancePlan;\n context: DatasetMaintenanceRemoteContext;\n progress: ProgressState;\n progressPath: string;\n executionLogPath: string;\n execution: ParallelDeleteExecutionState;\n maxParallel: number;\n now: () => string;\n}): Promise<Map<string, 'success' | 'failed' | 'unknown'>> {\n const statuses = new Map<string, 'success' | 'failed' | 'unknown'>();\n\n const recoverAttempted = async (action: DatasetMaintenancePlanAction): Promise<void> => {\n const startedAt = options.now();\n let rows: DatasetMaintenanceRemoteRow[];\n try {\n rows = await exactParallelDeleteRows({ context: options.context, action });\n } catch (error) {\n statuses.set(action.action_id, 'unknown');\n if (options.execution.byAction.get(action.action_id)?.at(-1)?.status !== 'UNKNOWN') {\n appendParallelDeleteExecutionEntry({\n path: options.executionLogPath,\n state: options.execution,\n plan: options.plan,\n action,\n context: options.context,\n status: 'UNKNOWN',\n recordedAtUtc: options.now(),\n recovered: true,\n error: `Read-only recovery failed: ${errorMessage(error)}`,\n });\n }\n return;\n }\n if (rows.length === 0) {\n const priorCommitted = options.execution.committed.has(action.action_id);\n if (!priorCommitted) {\n appendParallelDeleteExecutionEntry({\n path: options.executionLogPath,\n state: options.execution,\n plan: options.plan,\n action,\n context: options.context,\n status: 'COMMITTED',\n recordedAtUtc: options.now(),\n recovered: true,\n readbackSha256: ABSENT_READBACK_SHA256,\n });\n }\n if (!options.progress.successes.has(action.action_id)) {\n appendParallelDeleteProgress({\n progressPath: options.progressPath,\n progress: options.progress,\n plan: options.plan,\n action,\n context: options.context,\n startedAtUtc: startedAt,\n endedAtUtc: options.now(),\n result: 'success',\n remoteResultSha256: sha256Json({\n recovery: 'desired_absent',\n action_id: action.action_id,\n desired_sha256: parallelDeleteDesiredSha256(action),\n }),\n error: null,\n });\n }\n statuses.set(action.action_id, 'success');\n return;\n }\n const message = exactParallelDeleteBefore({ rows, action })\n ? 'Prior dispatch has exact-before readback but no zero-dispatch/zero-mutation audit proof; replay is forbidden.'\n : 'Prior dispatch has ambiguous or drifted readback; replay is forbidden.';\n if (\n !options.execution.committed.has(action.action_id) &&\n options.execution.byAction.get(action.action_id)?.at(-1)?.status !== 'UNKNOWN'\n ) {\n appendParallelDeleteExecutionEntry({\n path: options.executionLogPath,\n state: options.execution,\n plan: options.plan,\n action,\n context: options.context,\n status: 'UNKNOWN',\n recordedAtUtc: options.now(),\n recovered: true,\n readbackSha256: sha256Json(rows.map(snapshotRemoteRow)),\n error: message,\n });\n }\n if (!options.progress.successes.has(action.action_id)) {\n appendParallelDeleteProgress({\n progressPath: options.progressPath,\n progress: options.progress,\n plan: options.plan,\n action,\n context: options.context,\n startedAtUtc: startedAt,\n endedAtUtc: options.now(),\n result: 'failed',\n remoteResultSha256: null,\n error: `UNKNOWN: ${message}`,\n });\n }\n statuses.set(action.action_id, 'unknown');\n };\n\n const executeOne = async (action: DatasetMaintenancePlanAction): Promise<void> => {\n if (options.progress.successes.has(action.action_id)) {\n statuses.set(action.action_id, 'success');\n return;\n }\n if (options.execution.dispatched.has(action.action_id)) {\n await recoverAttempted(action);\n return;\n }\n\n const startedAt = options.now();\n let rows: DatasetMaintenanceRemoteRow[];\n try {\n rows = await exactParallelDeleteRows({ context: options.context, action });\n if (!exactParallelDeleteBefore({ rows, action })) {\n throw new CliError(`Action row drifted immediately before write: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_ACTION_JUST_IN_TIME_DRIFT',\n exitCode: 1,\n });\n }\n } catch (error) {\n appendParallelDeleteProgress({\n progressPath: options.progressPath,\n progress: options.progress,\n plan: options.plan,\n action,\n context: options.context,\n startedAtUtc: startedAt,\n endedAtUtc: options.now(),\n result: 'failed',\n remoteResultSha256: null,\n error: errorMessage(error),\n });\n statuses.set(action.action_id, 'failed');\n return;\n }\n\n appendParallelDeleteExecutionEntry({\n path: options.executionLogPath,\n state: options.execution,\n plan: options.plan,\n action,\n context: options.context,\n status: 'PREPARED',\n recordedAtUtc: options.now(),\n });\n appendParallelDeleteExecutionEntry({\n path: options.executionLogPath,\n state: options.execution,\n plan: options.plan,\n action,\n context: options.context,\n status: 'DISPATCHED',\n recordedAtUtc: options.now(),\n });\n\n let remoteResult: JsonObject | null = null;\n let dispatchError: unknown = null;\n try {\n remoteResult = await deleteMaintenanceRow({\n context: options.context,\n table: action.table as DatasetMaintenanceMutableTable,\n id: action.id,\n version: action.version,\n audit: {\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: action.action_id,\n reason_code: action.reason_code,\n desired_sha256: parallelDeleteDesiredSha256(action),\n source: 'tiangong-lca dataset maintenance apply',\n },\n });\n } catch (error) {\n dispatchError = error;\n }\n\n let readbackRows: DatasetMaintenanceRemoteRow[] | null = null;\n let readbackError: unknown = null;\n try {\n readbackRows = await exactParallelDeleteRows({ context: options.context, action });\n } catch (error) {\n readbackError = error;\n }\n if (readbackRows?.length === 0) {\n const remoteResultSha256 = remoteResult ? sha256Json(remoteResult) : null;\n appendParallelDeleteExecutionEntry({\n path: options.executionLogPath,\n state: options.execution,\n plan: options.plan,\n action,\n context: options.context,\n status: 'COMMITTED',\n recordedAtUtc: options.now(),\n recovered: dispatchError !== null,\n auditId: remoteResult ? remoteAuditId(remoteResult) : null,\n readbackSha256: ABSENT_READBACK_SHA256,\n remoteResultSha256,\n });\n appendParallelDeleteProgress({\n progressPath: options.progressPath,\n progress: options.progress,\n plan: options.plan,\n action,\n context: options.context,\n startedAtUtc: startedAt,\n endedAtUtc: options.now(),\n result: 'success',\n remoteResultSha256:\n remoteResultSha256 ??\n sha256Json({\n recovery: 'desired_absent',\n action_id: action.action_id,\n desired_sha256: parallelDeleteDesiredSha256(action),\n }),\n error: null,\n });\n statuses.set(action.action_id, 'success');\n return;\n }\n\n const error = readbackError\n ? `Readback failed after dispatch: ${errorMessage(readbackError)}`\n : dispatchError\n ? `Dispatch outcome ambiguous and desired absence was not observed: ${errorMessage(dispatchError)}`\n : 'Delete RPC returned but exact absent readback was not observed.';\n appendParallelDeleteExecutionEntry({\n path: options.executionLogPath,\n state: options.execution,\n plan: options.plan,\n action,\n context: options.context,\n status: 'UNKNOWN',\n recordedAtUtc: options.now(),\n recovered: dispatchError !== null,\n auditId: remoteResult ? remoteAuditId(remoteResult) : null,\n readbackSha256: readbackRows ? sha256Json(readbackRows.map(snapshotRemoteRow)) : null,\n remoteResultSha256: remoteResult ? sha256Json(remoteResult) : null,\n error,\n });\n appendParallelDeleteProgress({\n progressPath: options.progressPath,\n progress: options.progress,\n plan: options.plan,\n action,\n context: options.context,\n startedAtUtc: startedAt,\n endedAtUtc: options.now(),\n result: 'failed',\n remoteResultSha256: null,\n error: `UNKNOWN: ${error}`,\n });\n statuses.set(action.action_id, 'unknown');\n };\n\n let nextIndex = 0;\n let fatalError: unknown = null;\n const worker = async (): Promise<void> => {\n while (fatalError === null) {\n const index = nextIndex;\n nextIndex += 1;\n if (index >= options.plan.actions.length) return;\n try {\n await executeOne(options.plan.actions[index]!);\n } catch (error) {\n fatalError ??= error;\n }\n }\n };\n await Promise.all(\n Array.from({ length: Math.min(options.maxParallel, options.plan.actions.length) }, () =>\n worker(),\n ),\n );\n if (fatalError !== null) throw fatalError;\n return statuses;\n}\n\nasync function executeDerivativeAdmission(options: {\n plan: DatasetMaintenancePlan;\n context: DatasetMaintenanceRemoteContext;\n replayPossible: boolean;\n attemptPath: string;\n preparedAtUtc: string;\n}): Promise<DatasetMaintenanceDerivativeSubmitProof> {\n const action = derivativePlanAction(options.plan);\n const plannedSnapshot = action.derivative_before!;\n const preflight = parseDerivativeSnapshotResponse(\n await fetchMaintenanceDerivativeSnapshot({\n context: options.context,\n id: action.id,\n version: action.version,\n }),\n { id: action.id, version: action.version, userId: action.expected_user_id },\n );\n if (\n preflight.modified_at !== plannedSnapshot.modified_at ||\n preflight.json_sha256 !== plannedSnapshot.json_sha256 ||\n preflight.json_ordered_sha256 !== plannedSnapshot.json_ordered_sha256\n ) {\n throw new CliError('Derivative action primary preconditions drifted after planning.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PRIMARY_DRIFT',\n exitCode: 1,\n details: {\n expected_snapshot_sha256: plannedSnapshot.snapshot_sha256,\n actual_snapshot_sha256: preflight.snapshot_sha256,\n },\n });\n }\n if (!options.replayPossible && preflight.snapshot_sha256 !== plannedSnapshot.snapshot_sha256) {\n throw new CliError('Derivative action-scoped snapshot drifted before first admission.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_SNAPSHOT_DRIFT',\n exitCode: 1,\n details: {\n expected: plannedSnapshot.snapshot_sha256,\n actual: preflight.snapshot_sha256,\n },\n });\n }\n if (!options.replayPossible) {\n writeImmutableJson(options.attemptPath, {\n schema_version: 1,\n plan_sha256: options.plan.plan_sha256,\n operation_id: options.plan.operation_id,\n action_id: action.action_id,\n table: 'processes',\n id: action.id,\n version: action.version,\n expected_snapshot_sha256: plannedSnapshot.snapshot_sha256,\n actor: {\n user_id: options.context.account.user_id,\n email: options.context.account.email,\n },\n prepared_at_utc: options.preparedAtUtc,\n } satisfies DerivativeAdmissionAttempt);\n }\n const result = await applyMaintenanceDerivativeRebuild({\n context: options.context,\n plan: buildDerivativePlanRequest(options.plan),\n });\n return parseDerivativeSubmitResponse(result, options.plan);\n}\n\nfunction nextAttemptPath(planDir: string): string {\n let attempt = 1;\n while (\n existsSync(path.join(planDir, `commit-report.attempt-${String(attempt).padStart(4, '0')}.json`))\n ) {\n attempt += 1;\n }\n return path.join(planDir, `commit-report.attempt-${String(attempt).padStart(4, '0')}.json`);\n}\n\nfunction nextParallelDeleteInboundBarrierPath(planDir: string): string {\n let attempt = 1;\n while (\n existsSync(\n path.join(\n planDir,\n `parallel-delete-inbound-barrier.attempt-${String(attempt).padStart(4, '0')}.json`,\n ),\n )\n ) {\n attempt += 1;\n }\n return path.join(\n planDir,\n `parallel-delete-inbound-barrier.attempt-${String(attempt).padStart(4, '0')}.json`,\n );\n}\n\nexport async function runDatasetMaintenanceApply(\n options: RunDatasetMaintenanceApplyOptions,\n): Promise<DatasetMaintenanceApplyReport> {\n if (!options.commit) {\n throw new CliError('Dataset maintenance apply requires commit=true.', {\n code: 'DATASET_MAINTENANCE_COMMIT_REQUIRED',\n exitCode: 2,\n });\n }\n const planPath = path.resolve(options.planPath);\n const planDir = path.dirname(planPath);\n const plan = parseMaintenancePlan(readJsonFile(planPath, 'Maintenance plan'));\n const parallelDeleteMode = options.maxParallel !== undefined;\n const maxParallel = normalizeMaintenanceMaxParallel(options.maxParallel);\n assertGlobalInboundProofOptionShape({\n parallelDeleteMode,\n proofPath: options.globalInboundProofPath,\n approveProof: options.approveGlobalInboundProof,\n });\n if (parallelDeleteMode) {\n assertParallelDeletePlan(plan);\n }\n if (options.approvePlan !== plan.plan_sha256) {\n throw new CliError('approvePlan must exactly match the canonical maintenance plan hash.', {\n code: 'DATASET_MAINTENANCE_PLAN_APPROVAL_REQUIRED',\n exitCode: 2,\n });\n }\n if (plan.status !== 'ready' || plan.blockers.length > 0) {\n throw new CliError('Blocked maintenance plan cannot be applied.', {\n code: 'DATASET_MAINTENANCE_PLAN_BLOCKED',\n exitCode: 1,\n details: plan.blockers,\n });\n }\n if (plan.operation === 'merge-support-aliases') {\n throw new CliError(\n 'merge-support-aliases is sealed for dataset maintenance run-protected and cannot use ordinary apply.',\n {\n code: 'DATASET_MAINTENANCE_PROTECTED_RUN_REQUIRED',\n exitCode: 1,\n },\n );\n }\n if (\n plan.operation === 'redo-import' &&\n !plan.source_import_run_id &&\n plan.source_lineage === null\n ) {\n throw new CliError('redo-import apply requires frozen redo source/import lineage.', {\n code: 'DATASET_MAINTENANCE_REDO_NOT_READY',\n exitCode: 1,\n });\n }\n\n const progressPath = path.join(\n planDir,\n plan.operation === 'rebuild-derivatives'\n ? 'derivative-submit-progress.jsonl'\n : 'apply-progress.jsonl',\n );\n return withStateFileLock(\n progressPath,\n { reason: `dataset_maintenance_apply_${plan.operation_id}` },\n async () => {\n const context = await resolveMaintenanceRemoteContext({\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n if (\n context.account.user_id !== plan.account.user_id ||\n context.account.email !== plan.account.email\n ) {\n throw new CliError('Current authenticated account does not match the maintenance plan.', {\n code: 'DATASET_MAINTENANCE_ACCOUNT_MISMATCH',\n exitCode: 1,\n });\n }\n if (options.confirm !== context.account.email) {\n throw new CliError('confirm must exactly match the current authenticated account email.', {\n code: 'DATASET_MAINTENANCE_CONFIRMATION_REQUIRED',\n exitCode: 2,\n });\n }\n const globalInboundProof = parallelDeleteMode\n ? validateParallelDeleteGlobalInboundProof({\n proofPath: options.globalInboundProofPath,\n approveProof: options.approveGlobalInboundProof,\n plan,\n context,\n now: options.now ?? new Date(),\n })\n : null;\n const derivativeProgress: DerivativeSubmitProgressState =\n plan.operation === 'rebuild-derivatives'\n ? parseDerivativeSubmitProgress(plan, progressPath)\n : { entries: [], latest: null };\n const progress: ProgressState =\n plan.operation === 'rebuild-derivatives'\n ? { entries: [], successes: new Map(), latestFailures: new Map() }\n : parseProgress(plan, progressPath);\n const executionLogPath = path.join(planDir, 'apply-execution-log.jsonl');\n const parallelDeleteExecution: ParallelDeleteExecutionState = parallelDeleteMode\n ? parseParallelDeleteExecutionLog(plan, executionLogPath)\n : { entries: [], byAction: new Map(), dispatched: new Set(), committed: new Set() };\n const resumedSuccesses = progress.successes.size;\n const [current, visibleProcesses] = await Promise.all([\n fetchMaintenanceAccountRows({\n context,\n userId: plan.account.user_id,\n }),\n parallelDeleteMode && !globalInboundProof\n ? fetchMaintenanceVisibleTableRows({\n context,\n table: 'processes',\n pageSize: PARALLEL_DELETE_VISIBLE_PROCESS_PAGE_SIZE,\n })\n : Promise.resolve(null),\n ]);\n assertApplyPreconditions({\n plan,\n planDir,\n currentRows: current.rows,\n progress,\n aliasPlanProgress: { entries: [], success: null, latestFailure: null },\n attemptedDeleteActionIds: parallelDeleteExecution.dispatched,\n });\n\n const inboundBarrierPath = nextParallelDeleteInboundBarrierPath(planDir);\n const inboundBarrier = globalInboundProof\n ? {\n process_rows: globalInboundProof.global_process_rows,\n process_references: globalInboundProof.global_exchange_rows,\n snapshot_sha256: globalInboundProof.proof_sha256,\n }\n : parallelDeleteMode && visibleProcesses\n ? assertNoVisibleProcessInboundReferences({ plan, rows: visibleProcesses.rows })\n : null;\n if (inboundBarrier && (visibleProcesses || globalInboundProof)) {\n writeImmutableJson(inboundBarrierPath, {\n schema_version: 1,\n generated_at_utc: clock(options),\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n actor: { user_id: context.account.user_id, email: context.account.email },\n target_table: 'flows',\n target_count: plan.actions.length,\n inbound_reference_count: 0,\n ...inboundBarrier,\n completeness: globalInboundProof\n ? {\n status: 'complete',\n complete: true,\n strategy: 'sha256_approved_global_select_only_all_processes',\n statement_kind: globalInboundProof.statement_kind,\n process_scope: globalInboundProof.process_scope,\n proof_path: globalInboundProof.proof_path,\n proof_sha256: globalInboundProof.proof_sha256,\n captured_at_utc: globalInboundProof.captured_at_utc,\n target_binding_sha256: globalInboundProof.target_binding_sha256,\n chunk_count: globalInboundProof.chunks.length,\n global_process_rows: globalInboundProof.global_process_rows,\n global_exchange_rows: globalInboundProof.global_exchange_rows,\n inbound_exchanges: globalInboundProof.inbound_exchanges,\n }\n : visibleProcesses!.completeness,\n });\n }\n\n const approvalPath = path.join(planDir, 'approval-record.json');\n const approvalAlreadyExisted = existsSync(approvalPath);\n validateApprovalRecord({ path: approvalPath, plan, context });\n if (!approvalAlreadyExisted) {\n writeImmutableJson(approvalPath, {\n schema_version: 1,\n approved_at_utc: clock(options),\n plan_path: planPath,\n plan_sha256: plan.plan_sha256,\n task_id: plan.task_id,\n operation: plan.operation,\n target_mode: plan.target_mode,\n operation_id: plan.operation_id,\n account: {\n user_id: context.account.user_id,\n email: context.account.email,\n },\n confirmed_email: options.confirm,\n row_counts: plan.summary,\n snapshot_completeness: current.completeness,\n redo_rows_ready:\n plan.operation === 'redo-import'\n ? Boolean(plan.source_import_run_id || plan.source_lineage !== null)\n : null,\n });\n }\n\n if (plan.operation === 'rebuild-derivatives') {\n const startedAt = clock(options);\n const derivativeAttemptPath = path.join(planDir, 'derivative-admission-attempt.json');\n const derivativeAttempt = validateDerivativeAdmissionAttempt({\n path: derivativeAttemptPath,\n plan,\n context,\n });\n const proof = await executeDerivativeAdmission({\n plan,\n context,\n replayPossible: derivativeAttempt !== null,\n attemptPath: derivativeAttemptPath,\n preparedAtUtc: startedAt,\n });\n if (\n derivativeProgress.latest &&\n derivativeProofIdentity(derivativeProgress.latest.proof) !==\n derivativeProofIdentity(proof)\n ) {\n throw new CliError('Derivative guarded-RPC replay returned a different request proof.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_REPLAY_MISMATCH',\n exitCode: 1,\n });\n }\n const action = derivativePlanAction(plan);\n const entry: DerivativeSubmitProgressEntry = {\n schema_version: 1,\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n target_mode: 'owner_draft',\n actor: { user_id: context.account.user_id, email: context.account.email },\n started_at_utc: startedAt,\n ended_at_utc: clock(options),\n result: 'accepted',\n proof,\n };\n appendStableJsonLine(progressPath, entry);\n const attemptPath = nextAttemptPath(planDir);\n const report: DatasetMaintenanceApplyReport = {\n schema_version: 1,\n generated_at_utc: clock(options),\n status: 'accepted',\n task_id: plan.task_id,\n operation: plan.operation,\n operation_id: plan.operation_id,\n target_mode: plan.target_mode,\n plan_sha256: plan.plan_sha256,\n actor: { user_id: context.account.user_id, email: context.account.email },\n summary: {\n actions: 1,\n success: 0,\n failed: 0,\n pending: 1,\n resumed_successes: 0,\n accepted: 1,\n },\n actions: [\n {\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n status: 'accepted',\n error: null,\n },\n ],\n artifacts: {\n approval_record: approvalPath,\n apply_progress: progressPath,\n derivative_submit_progress: progressPath,\n derivative_admission_attempt: derivativeAttemptPath,\n commit_report: path.join(planDir, 'commit-report.json'),\n attempt_report: attemptPath,\n },\n database_audit: {\n rpc_transaction_log: 'public.command_audit_log',\n source: 'tiangong-lca dataset maintenance apply',\n correlation_fields: [\n 'plan_sha256',\n 'operation_id',\n 'action_id',\n 'target_visibility',\n 'plan_request_sha256',\n 'action_request_sha256',\n 'request_id',\n ],\n },\n derivative_admission: { ...proof, admission: 'accepted' },\n };\n writeImmutableJson(attemptPath, report);\n writeJsonArtifact(report.artifacts.commit_report, report);\n return report;\n }\n\n if (parallelDeleteMode) {\n const executionStatuses = await executeParallelDeletePlan({\n plan,\n context,\n progress,\n progressPath,\n executionLogPath,\n execution: parallelDeleteExecution,\n maxParallel,\n now: () => clock(options),\n });\n const actions = plan.actions.map((action) => {\n const status = executionStatuses.get(action.action_id) as\n | 'success'\n | 'failed'\n | 'unknown';\n return {\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n status,\n error: progress.latestFailures.get(action.action_id)?.error ?? null,\n };\n });\n const successCount = actions.filter((action) => action.status === 'success').length;\n const failureCount = actions.filter((action) => action.status === 'failed').length;\n const unknownCount = actions.filter((action) => action.status === 'unknown').length;\n const attemptPath = nextAttemptPath(planDir);\n const report: DatasetMaintenanceApplyReport = {\n schema_version: 1,\n generated_at_utc: clock(options),\n status:\n unknownCount > 0\n ? 'completed_with_unknowns'\n : successCount === actions.length\n ? 'completed'\n : 'completed_with_failures',\n task_id: plan.task_id,\n operation: plan.operation,\n operation_id: plan.operation_id,\n target_mode: plan.target_mode,\n plan_sha256: plan.plan_sha256,\n actor: { user_id: context.account.user_id, email: context.account.email },\n summary: {\n actions: actions.length,\n success: successCount,\n failed: failureCount,\n unknown: unknownCount,\n pending: actions.length - successCount - failureCount - unknownCount,\n resumed_successes: resumedSuccesses,\n },\n actions,\n artifacts: {\n approval_record: approvalPath,\n apply_progress: progressPath,\n execution_log: executionLogPath,\n inbound_reference_barrier: inboundBarrierPath,\n commit_report: path.join(planDir, 'commit-report.json'),\n attempt_report: attemptPath,\n },\n database_audit: {\n rpc_transaction_log: 'public.command_audit_log',\n source: 'tiangong-lca dataset maintenance apply',\n correlation_fields: [\n 'plan_sha256',\n 'operation_id',\n 'action_id',\n 'reason_code',\n 'desired_sha256',\n ],\n },\n };\n writeImmutableJson(attemptPath, report);\n writeJsonArtifact(report.artifacts.commit_report, report);\n return report;\n }\n\n const ordered = [...plan.actions].sort((left, right) => {\n const rank = {\n save_draft: 0,\n update_json_ordered: 0,\n rebuild_derivatives: 0,\n delete: 1,\n } as const;\n const actionOrder = rank[left.action] - rank[right.action];\n return actionOrder || left.ordinal - right.ordinal;\n });\n for (const action of ordered) {\n if (progress.successes.has(action.action_id)) {\n continue;\n }\n const startedAt = clock(options);\n try {\n const actionResult = await executeAction({ action, plan, planDir, context });\n const entry: DatasetMaintenanceProgressEntry = {\n schema_version: 1,\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n reason_code: action.reason_code,\n audit_context: {\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n reason_code: action.reason_code,\n source: 'tiangong-lca dataset maintenance apply',\n },\n actor: { user_id: context.account.user_id, email: context.account.email },\n started_at_utc: startedAt,\n ended_at_utc: clock(options),\n before_sha256: action.before!.row_sha256,\n after_sha256: actionResult.afterSha256,\n remote_result_sha256: actionResult.remoteResultSha256,\n result: 'success',\n error: null,\n rollback: action.rollback,\n };\n appendStableJsonLine(progressPath, entry);\n progress.entries.push(entry);\n progress.successes.set(action.action_id, entry);\n progress.latestFailures.delete(action.action_id);\n } catch (error) {\n const entry: DatasetMaintenanceProgressEntry = {\n schema_version: 1,\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n reason_code: action.reason_code,\n audit_context: {\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n reason_code: action.reason_code,\n source: 'tiangong-lca dataset maintenance apply',\n },\n actor: { user_id: context.account.user_id, email: context.account.email },\n started_at_utc: startedAt,\n ended_at_utc: clock(options),\n before_sha256: action.before!.row_sha256,\n after_sha256: null,\n remote_result_sha256: null,\n result: 'failed',\n error: errorMessage(error),\n rollback: action.rollback,\n };\n appendStableJsonLine(progressPath, entry);\n progress.entries.push(entry);\n progress.latestFailures.set(action.action_id, entry);\n break;\n }\n }\n\n const actions = plan.actions.map((action) => {\n const success = progress.successes.get(action.action_id);\n const failure = progress.latestFailures.get(action.action_id);\n return {\n action_id: action.action_id,\n action: action.action,\n table: action.table,\n id: action.id,\n version: action.version,\n status: success\n ? ('success' as const)\n : failure\n ? ('failed' as const)\n : ('pending' as const),\n error: failure?.error ?? null,\n };\n });\n const successCount = actions.filter((action) => action.status === 'success').length;\n const failureCount = actions.filter((action) => action.status === 'failed').length;\n const attemptPath = nextAttemptPath(planDir);\n const report: DatasetMaintenanceApplyReport = {\n schema_version: 1,\n generated_at_utc: clock(options),\n status: successCount === actions.length ? 'completed' : 'completed_with_failures',\n task_id: plan.task_id,\n operation: plan.operation,\n operation_id: plan.operation_id,\n target_mode: plan.target_mode,\n plan_sha256: plan.plan_sha256,\n actor: { user_id: context.account.user_id, email: context.account.email },\n summary: {\n actions: actions.length,\n success: successCount,\n failed: failureCount,\n pending: actions.length - successCount - failureCount,\n resumed_successes: resumedSuccesses,\n },\n actions,\n artifacts: {\n approval_record: approvalPath,\n apply_progress: progressPath,\n commit_report: path.join(planDir, 'commit-report.json'),\n attempt_report: attemptPath,\n },\n database_audit: {\n rpc_transaction_log: 'public.command_audit_log',\n source: 'tiangong-lca dataset maintenance apply',\n correlation_fields: ['plan_sha256', 'operation_id', 'action_id', 'reason_code'],\n },\n };\n writeImmutableJson(attemptPath, report);\n writeJsonArtifact(report.artifacts.commit_report, report);\n return report;\n },\n );\n}\n\nexport const __testInternals = {\n aliasExchangeProgressKey,\n appendAliasSuccessLogs,\n appendAliasProofProgress,\n appendParallelDeleteExecutionEntry,\n assertNoVisibleProcessInboundReferences,\n assertApplyPreconditions,\n assertAliasSupportSnapshots,\n assertGlobalInboundProofOptionShape,\n assertParallelDeletePlan,\n buildAliasBatchRequest,\n buildAliasPlanRequest,\n clock,\n errorMessage,\n executeDerivativeAdmission,\n executeAction,\n executeParallelDeletePlan,\n finalProjectedRows,\n loadDesiredPayload,\n nextAttemptPath,\n nextParallelDeleteInboundBarrierPath,\n normalizeMaintenanceMaxParallel,\n parallelDeleteDesiredSha256,\n parallelDeleteTargetBindingSha256,\n parseDerivativeSubmitProgress,\n validateDerivativeAdmissionAttempt,\n parseAliasBatchProgress,\n parseAliasPlanProgress,\n parseProgress,\n parseParallelDeleteExecutionLog,\n remoteAuditId,\n validateAliasRpcResult,\n validateAliasPlanRpcResult,\n validateApprovalRecord,\n validateParallelDeleteGlobalInboundProof,\n};\n"]}
|