@namehash/ens-referrals 1.5.0 → 1.6.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/dist/index.cjs +1077 -182
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +406 -112
- package/dist/index.d.ts +406 -112
- package/dist/index.js +1080 -185
- package/dist/index.js.map +1 -1
- package/dist/v1/index.cjs +18553 -0
- package/dist/v1/index.cjs.map +1 -0
- package/dist/v1/index.d.cts +1879 -0
- package/dist/v1/index.d.ts +1879 -0
- package/dist/v1/index.js +18530 -0
- package/dist/v1/index.js.map +1 -0
- package/package.json +22 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/v1/index.ts","../../src/v1/address.ts","../../src/v1/api/deserialize.ts","../../src/v1/api/zod-schemas.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/spec.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/utils.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/chain.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/account.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/assetName.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/assetType.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/assetId.ts","../../../ensnode-sdk/src/shared/zod-schemas.ts","../../../datasources/src/abis/ensv2/EnhancedAccessControl.ts","../../../datasources/src/abis/ensv2/ETHRegistrar.ts","../../../datasources/src/abis/ensv2/Registry.ts","../../../datasources/src/abis/root/UniversalResolver.ts","../../../datasources/src/abis/shared/StandaloneReverseRegistrar.ts","../../../datasources/src/abis/threedns/ThreeDNSToken.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/getLogsRetryHelper.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/mergeAbis.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/loadBalance.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/rateLimit.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/utils/promiseWithResolvers.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/utils/queue.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/replaceBigInts.ts","../../../datasources/src/abis/basenames/BaseRegistrar.ts","../../../datasources/src/abis/lineanames/BaseRegistrar.ts","../../../datasources/src/abis/root/BaseRegistrar.ts","../../../datasources/src/abis/basenames/EARegistrarController.ts","../../../datasources/src/abis/basenames/RegistrarController.ts","../../../datasources/src/abis/basenames/UpgradeableRegistrarController.ts","../../../datasources/src/abis/lineanames/EthRegistrarController.ts","../../../datasources/src/abis/root/LegacyEthRegistrarController.ts","../../../datasources/src/abis/root/UnwrappedEthRegistrarController.ts","../../../datasources/src/abis/root/WrappedEthRegistrarController.ts","../../../datasources/src/lib/chains.ts","../../../datasources/src/abis/shared/AbstractReverseResolver.ts","../../../datasources/src/abis/shared/LegacyPublicResolver.ts","../../../datasources/src/abis/shared/Resolver.ts","../../../datasources/src/lib/ResolverABI.ts","../../../datasources/src/lib/types.ts","../../../datasources/src/ens-test-env.ts","../../../datasources/src/abis/root/NameWrapper.ts","../../../datasources/src/abis/root/Registry.ts","../../../datasources/src/abis/root/UniversalRegistrarRenewalWithReferrer.ts","../../../datasources/src/mainnet.ts","../../../datasources/src/abis/basenames/Registry.ts","../../../datasources/src/abis/lineanames/NameWrapper.ts","../../../datasources/src/abis/lineanames/Registry.ts","../../../datasources/src/abis/seaport/Seaport1.5.ts","../../../datasources/src/sepolia.ts","../../../datasources/src/sepolia-v2.ts","../../../datasources/src/namespaces.ts","../../../ensnode-sdk/src/shared/address.ts","../../../ensnode-sdk/src/shared/currencies.ts","../../../ensnode-sdk/src/shared/numbers.ts","../../../ensnode-sdk/src/shared/serialize.ts","../../../ensnode-sdk/src/registrars/ethnames-subregistry.ts","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructFrom.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/toDate.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getUnixTime.js","../../../ensnode-sdk/src/shared/deserialize.ts","../../../ensnode-sdk/src/shared/datetime.ts","../../src/v1/award-models/pie-split/api/zod-schemas.ts","../../src/v1/award-models/shared/api/zod-schemas.ts","../../src/v1/status.ts","../../src/v1/number.ts","../../src/v1/award-models/shared/leaderboard-page.ts","../../src/v1/award-models/shared/edition-metrics.ts","../../src/v1/time.ts","../../src/v1/award-models/shared/rules.ts","../../src/v1/award-models/rev-share-limit/api/zod-schemas.ts","../../src/v1/api/types.ts","../../src/v1/award-models/pie-split/api/serialize.ts","../../src/v1/award-models/rev-share-limit/api/serialize.ts","../../src/v1/api/serialize.ts","../../src/v1/award-models/shared/score.ts","../../src/v1/award-models/pie-split/aggregations.ts","../../src/v1/award-models/shared/leaderboard-guards.ts","../../src/v1/award-models/shared/rank.ts","../../src/v1/referrer-metrics.ts","../../src/v1/award-models/pie-split/score.ts","../../src/v1/award-models/pie-split/rank.ts","../../src/v1/award-models/pie-split/metrics.ts","../../src/v1/award-models/pie-split/leaderboard.ts","../../src/v1/award-models/pie-split/leaderboard-page.ts","../../src/v1/award-models/pie-split/rules.ts","../../src/v1/award-models/rev-share-limit/aggregations.ts","../../src/v1/award-models/rev-share-limit/checkpoint.ts","../../src/v1/award-models/rev-share-limit/rules.ts","../../src/v1/award-models/rev-share-limit/metrics.ts","../../src/v1/award-models/rev-share-limit/leaderboard.ts","../../src/v1/award-models/rev-share-limit/leaderboard-page.ts","../../src/v1/edition.ts","../../src/v1/client.ts","../../src/v1/edition-defaults.ts","../../src/v1/edition-metrics.ts","../../src/v1/leaderboard-page.ts","../../src/v1/link.ts"],"sourcesContent":["export * from \"./address\";\nexport * from \"./api\";\nexport * from \"./award-models/pie-split/aggregations\";\nexport * from \"./award-models/pie-split/api/serialized-types\";\nexport * from \"./award-models/pie-split/edition-metrics\";\nexport * from \"./award-models/pie-split/leaderboard\";\nexport * from \"./award-models/pie-split/leaderboard-page\";\nexport * from \"./award-models/pie-split/metrics\";\nexport * from \"./award-models/pie-split/rules\";\nexport * from \"./award-models/pie-split/score\";\nexport * from \"./award-models/rev-share-limit/aggregations\";\nexport * from \"./award-models/rev-share-limit/api/serialized-types\";\nexport * from \"./award-models/rev-share-limit/edition-metrics\";\nexport * from \"./award-models/rev-share-limit/leaderboard\";\nexport * from \"./award-models/rev-share-limit/leaderboard-page\";\nexport * from \"./award-models/rev-share-limit/metrics\";\nexport * from \"./award-models/rev-share-limit/referral-event\";\nexport * from \"./award-models/rev-share-limit/rules\";\nexport * from \"./award-models/shared/edition-metrics\";\nexport * from \"./award-models/shared/leaderboard-page\";\nexport * from \"./award-models/shared/rank\";\nexport * from \"./award-models/shared/rules\";\nexport * from \"./award-models/shared/score\";\nexport * from \"./client\";\nexport * from \"./edition\";\nexport * from \"./edition-defaults\";\nexport * from \"./edition-metrics\";\nexport * from \"./leaderboard\";\nexport * from \"./leaderboard-page\";\nexport * from \"./link\";\nexport * from \"./number\";\nexport * from \"./referrer-metrics\";\nexport * from \"./rules\";\nexport * from \"./status\";\nexport * from \"./time\";\n","import { type Address, isAddress } from \"viem\";\n\nexport const validateLowercaseAddress = (address: Address): void => {\n if (!isAddress(address, { strict: false })) {\n throw new Error(`Invalid address: ${address}. Address must be a valid EVM address.`);\n }\n\n if (address !== address.toLowerCase()) {\n throw new Error(`Invalid address: ${address}. Address must be in lowercase format.`);\n }\n};\n\nexport const normalizeAddress = (address: Address): Address => {\n return address.toLowerCase() as Address;\n};\n","import { prettifyError } from \"zod/v4\";\n\nimport type { ReferralProgramEditionConfig } from \"../edition\";\nimport type {\n SerializedReferralProgramEditionConfigSetResponse,\n SerializedReferrerLeaderboardPageResponse,\n SerializedReferrerMetricsEditionsResponse,\n} from \"./serialized-types\";\nimport type {\n ReferralProgramEditionConfigSetResponse,\n ReferrerLeaderboardPageResponse,\n ReferrerMetricsEditionsResponse,\n} from \"./types\";\nimport {\n makeReferralProgramEditionConfigSetArraySchema,\n makeReferralProgramEditionConfigSetResponseSchema,\n makeReferrerLeaderboardPageResponseSchema,\n makeReferrerMetricsEditionsResponseSchema,\n} from \"./zod-schemas\";\n\n/**\n * Deserialize a {@link ReferrerLeaderboardPageResponse} object.\n */\nexport function deserializeReferrerLeaderboardPageResponse(\n maybeResponse: SerializedReferrerLeaderboardPageResponse,\n valueLabel?: string,\n): ReferrerLeaderboardPageResponse {\n const schema = makeReferrerLeaderboardPageResponseSchema(valueLabel);\n const parsed = schema.safeParse(maybeResponse);\n\n if (parsed.error) {\n throw new Error(\n `Cannot deserialize SerializedReferrerLeaderboardPageResponse:\\n${prettifyError(parsed.error)}\\n`,\n );\n }\n\n return parsed.data;\n}\n\n/**\n * Deserialize a {@link ReferrerMetricsEditionsResponse} object.\n */\nexport function deserializeReferrerMetricsEditionsResponse(\n maybeResponse: SerializedReferrerMetricsEditionsResponse,\n valueLabel?: string,\n): ReferrerMetricsEditionsResponse {\n const schema = makeReferrerMetricsEditionsResponseSchema(valueLabel);\n const parsed = schema.safeParse(maybeResponse);\n\n if (parsed.error) {\n throw new Error(\n `Cannot deserialize ReferrerMetricsEditionsResponse:\\n${prettifyError(parsed.error)}\\n`,\n );\n }\n\n return parsed.data;\n}\n\n/**\n * Deserializes an array of {@link ReferralProgramEditionConfig} objects.\n */\nexport function deserializeReferralProgramEditionConfigSetArray(\n maybeArray: unknown,\n valueLabel?: string,\n): ReferralProgramEditionConfig[] {\n const schema = makeReferralProgramEditionConfigSetArraySchema(valueLabel);\n const parsed = schema.safeParse(maybeArray);\n\n if (parsed.error) {\n throw new Error(\n `Cannot deserialize ReferralProgramEditionConfigSetArray:\\n${prettifyError(parsed.error)}\\n`,\n );\n }\n\n return parsed.data;\n}\n\n/**\n * Deserialize a {@link ReferralProgramEditionConfigSetResponse} object.\n */\nexport function deserializeReferralProgramEditionConfigSetResponse(\n maybeResponse: SerializedReferralProgramEditionConfigSetResponse,\n valueLabel?: string,\n): ReferralProgramEditionConfigSetResponse {\n const schema = makeReferralProgramEditionConfigSetResponseSchema(valueLabel);\n const parsed = schema.safeParse(maybeResponse);\n\n if (parsed.error) {\n throw new Error(\n `Cannot deserialize ReferralProgramEditionConfigSetResponse:\\n${prettifyError(parsed.error)}\\n`,\n );\n }\n\n return parsed.data;\n}\n","/**\n * All zod schemas we define must remain internal implementation details.\n * We want the freedom to move away from zod in the future without impacting\n * any users of the ensnode-sdk package.\n *\n * The only way to share Zod schemas is to re-export them from\n * `./src/internal.ts` file.\n */\n\nimport z from \"zod/v4\";\n\nimport { makeLowercaseAddressSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport {\n makeReferralProgramRulesPieSplitSchema,\n makeReferrerEditionMetricsPieSplitSchema,\n makeReferrerLeaderboardPagePieSplitSchema,\n} from \"../award-models/pie-split/api/zod-schemas\";\nimport {\n makeReferralProgramRulesRevShareLimitSchema,\n makeReferrerEditionMetricsRevShareLimitSchema,\n makeReferrerLeaderboardPageRevShareLimitSchema,\n} from \"../award-models/rev-share-limit/api/zod-schemas\";\nimport { makeBaseReferralProgramRulesSchema } from \"../award-models/shared/api/zod-schemas\";\nimport type { ReferralProgramRulesUnrecognized } from \"../award-models/shared/rules\";\nimport { ReferralProgramAwardModels } from \"../award-models/shared/rules\";\nimport type { ReferralProgramEditionConfig } from \"../edition\";\nimport {\n MAX_EDITIONS_PER_REQUEST,\n ReferralProgramEditionConfigSetResponseCodes,\n ReferrerLeaderboardPageResponseCodes,\n ReferrerMetricsEditionsResponseCodes,\n} from \"./types\";\n\n/**\n * Schema for {@link ReferralProgramRules}\n */\nexport const makeReferralProgramRulesSchema = (valueLabel: string = \"ReferralProgramRules\") =>\n z.discriminatedUnion(\"awardModel\", [\n makeReferralProgramRulesPieSplitSchema(valueLabel),\n makeReferralProgramRulesRevShareLimitSchema(valueLabel),\n ]);\n\n/**\n * Schema for {@link ReferrerLeaderboardPage}\n */\nexport const makeReferrerLeaderboardPageSchema = (valueLabel: string = \"ReferrerLeaderboardPage\") =>\n z.discriminatedUnion(\"awardModel\", [\n makeReferrerLeaderboardPagePieSplitSchema(valueLabel),\n makeReferrerLeaderboardPageRevShareLimitSchema(valueLabel),\n ]);\n\n/**\n * Schema for {@link ReferrerLeaderboardPageResponseOk}\n */\nexport const makeReferrerLeaderboardPageResponseOkSchema = (\n valueLabel: string = \"ReferrerLeaderboardPageResponseOk\",\n) =>\n z.object({\n responseCode: z.literal(ReferrerLeaderboardPageResponseCodes.Ok),\n data: makeReferrerLeaderboardPageSchema(`${valueLabel}.data`),\n });\n\n/**\n * Schema for {@link ReferrerLeaderboardPageResponseError}\n */\nexport const makeReferrerLeaderboardPageResponseErrorSchema = (\n _valueLabel: string = \"ReferrerLeaderboardPageResponseError\",\n) =>\n z.object({\n responseCode: z.literal(ReferrerLeaderboardPageResponseCodes.Error),\n error: z.string(),\n errorMessage: z.string(),\n });\n\n/**\n * Schema for {@link ReferrerLeaderboardPageResponse}\n */\nexport const makeReferrerLeaderboardPageResponseSchema = (\n valueLabel: string = \"ReferrerLeaderboardPageResponse\",\n) =>\n z.discriminatedUnion(\"responseCode\", [\n makeReferrerLeaderboardPageResponseOkSchema(valueLabel),\n makeReferrerLeaderboardPageResponseErrorSchema(valueLabel),\n ]);\n\n/**\n * Schema for {@link ReferrerEditionMetrics} (discriminated union of all ranked and unranked model variants).\n */\nexport const makeReferrerEditionMetricsSchema = (valueLabel: string = \"ReferrerEditionMetrics\") =>\n z.discriminatedUnion(\"awardModel\", [\n makeReferrerEditionMetricsPieSplitSchema(valueLabel),\n makeReferrerEditionMetricsRevShareLimitSchema(valueLabel),\n ]);\n\n/**\n * Schema for validating a {@link ReferralProgramEditionSlug}.\n *\n * Enforces the slug format invariant: lowercase letters (a-z), digits (0-9),\n * and hyphens (-) only. Must not start or end with a hyphen.\n *\n * Runtime validation against configured editions happens at the business logic level.\n */\nexport const makeReferralProgramEditionSlugSchema = (\n valueLabel: string = \"ReferralProgramEditionSlug\",\n) =>\n z\n .string()\n .min(1, `${valueLabel} must not be empty`)\n .regex(\n /^[a-z0-9]+(-[a-z0-9]+)*$/,\n `${valueLabel} must contain only lowercase letters, digits, and hyphens. Must not start or end with a hyphen.`,\n );\n\n/**\n * Schema for validating editions array (min 1, max {@link MAX_EDITIONS_PER_REQUEST}, distinct values).\n */\nexport const makeReferrerMetricsEditionsArraySchema = (\n valueLabel: string = \"ReferrerMetricsEditionsArray\",\n) =>\n z\n .array(makeReferralProgramEditionSlugSchema(`${valueLabel}[edition]`))\n .min(1, `${valueLabel} must contain at least 1 edition`)\n .max(\n MAX_EDITIONS_PER_REQUEST,\n `${valueLabel} must not contain more than ${MAX_EDITIONS_PER_REQUEST} editions`,\n )\n .refine(\n (editions) => {\n const uniqueEditions = new Set(editions);\n return uniqueEditions.size === editions.length;\n },\n { message: `${valueLabel} must not contain duplicate edition slugs` },\n );\n\n/**\n * Schema for {@link ReferrerMetricsEditionsRequest}\n */\nexport const makeReferrerMetricsEditionsRequestSchema = (\n valueLabel: string = \"ReferrerMetricsEditionsRequest\",\n) =>\n z.object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n editions: makeReferrerMetricsEditionsArraySchema(`${valueLabel}.editions`),\n });\n\n/**\n * Schema for {@link ReferrerMetricsEditionsResponseOk}\n */\nexport const makeReferrerMetricsEditionsResponseOkSchema = (\n valueLabel: string = \"ReferrerMetricsEditionsResponseOk\",\n) =>\n z.object({\n responseCode: z.literal(ReferrerMetricsEditionsResponseCodes.Ok),\n data: z.record(\n makeReferralProgramEditionSlugSchema(`${valueLabel}.data[edition]`),\n makeReferrerEditionMetricsSchema(`${valueLabel}.data[edition]`),\n ),\n });\n\n/**\n * Schema for {@link ReferrerMetricsEditionsResponseError}\n */\nexport const makeReferrerMetricsEditionsResponseErrorSchema = (\n _valueLabel: string = \"ReferrerMetricsEditionsResponseError\",\n) =>\n z.object({\n responseCode: z.literal(ReferrerMetricsEditionsResponseCodes.Error),\n error: z.string(),\n errorMessage: z.string(),\n });\n\n/**\n * Schema for {@link ReferrerMetricsEditionsResponse}\n */\nexport const makeReferrerMetricsEditionsResponseSchema = (\n valueLabel: string = \"ReferrerMetricsEditionsResponse\",\n) =>\n z.discriminatedUnion(\"responseCode\", [\n makeReferrerMetricsEditionsResponseOkSchema(valueLabel),\n makeReferrerMetricsEditionsResponseErrorSchema(valueLabel),\n ]);\n\n/**\n * Schema for the shared base fields of a {@link ReferralProgramEditionConfig}.\n */\nconst makeReferralProgramEditionConfigBaseSchema = (valueLabel: string) =>\n z.object({\n slug: makeReferralProgramEditionSlugSchema(`${valueLabel}.slug`),\n displayName: z.string().min(1, `${valueLabel}.displayName must not be empty`),\n rules: makeBaseReferralProgramRulesSchema(`${valueLabel}.rules`),\n });\n\n/**\n * Schema for validating a {@link ReferralProgramEditionConfig}.\n */\nexport const makeReferralProgramEditionConfigSchema = (\n valueLabel: string = \"ReferralProgramEditionConfig\",\n) =>\n makeReferralProgramEditionConfigBaseSchema(valueLabel).safeExtend({\n rules: makeReferralProgramRulesSchema(`${valueLabel}.rules`),\n });\n\n/**\n * Schema for validating referral program edition config set array.\n *\n * Editions whose `rules.awardModel` is not recognized by this client version are preserved as\n * {@link ReferralProgramRulesUnrecognized} for forward compatibility — nothing is silently dropped.\n * Downstream code (e.g., leaderboard cache setup) is responsible for skipping unrecognized\n * editions with a warning log rather than crashing.\n *\n * The list must not be empty after processing all items. Duplicate slugs are not allowed.\n *\n * Two-pass approach:\n * 1. Each item is loosely parsed (based on `rules.awardModel` field).\n * - Known award models are fully validated with {@link makeReferralProgramEditionConfigSchema}.\n * - Unknown award models are parsed with {@link makeBaseReferralProgramRulesSchema} and wrapped as\n * `ReferralProgramRulesUnrecognized`.\n * 2. After processing all items, the result must be non-empty and have no duplicate slugs.\n */\nexport const makeReferralProgramEditionConfigSetArraySchema = (\n valueLabel: string = \"ReferralProgramEditionConfigSetArray\",\n) => {\n const knownAwardModels = Object.values(ReferralProgramAwardModels).filter(\n (m) => m !== ReferralProgramAwardModels.Unrecognized,\n ) as string[];\n const configSchema = makeReferralProgramEditionConfigSchema(`${valueLabel}[edition]`);\n\n // Loose schema used only to peek at rules.awardModel before full validation.\n const looseItemSchema = z\n .object({ rules: z.object({ awardModel: z.string() }).passthrough() })\n .passthrough();\n\n // Schema for extracting base fields from an unrecognized edition.\n const unrecognizedBaseSchema = makeReferralProgramEditionConfigBaseSchema(\n `${valueLabel}[edition]`,\n );\n\n return z.array(looseItemSchema).transform((items, ctx): ReferralProgramEditionConfig[] => {\n const result: ReferralProgramEditionConfig[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n\n if (knownAwardModels.includes(item.rules.awardModel)) {\n // Known award model — fully validate.\n const parsed = configSchema.safeParse(item);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: \"custom\",\n path: [i, ...(issue.path as PropertyKey[])],\n message: issue.message,\n });\n }\n } else {\n result.push(parsed.data);\n }\n } else {\n // Unknown award model — preserve as ReferralProgramRulesUnrecognized using base fields.\n const parsed = unrecognizedBaseSchema.safeParse(item);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: \"custom\",\n path: [i, ...(issue.path as PropertyKey[])],\n message: issue.message,\n });\n }\n continue;\n }\n\n result.push({\n ...parsed.data,\n rules: {\n ...parsed.data.rules,\n awardModel: ReferralProgramAwardModels.Unrecognized,\n originalAwardModel: item.rules.awardModel,\n } satisfies ReferralProgramRulesUnrecognized,\n });\n }\n }\n\n if (result.length === 0) {\n ctx.addIssue({\n code: \"custom\",\n message: `${valueLabel} must contain at least one edition`,\n });\n // Issue above causes the overall parse to fail; this value is never used.\n return [];\n }\n\n const slugs = new Set<string>();\n for (const edition of result) {\n if (slugs.has(edition.slug)) {\n ctx.addIssue({\n code: \"custom\",\n message: `${valueLabel} must not contain duplicate edition slugs`,\n });\n // Issue above causes the overall parse to fail; this value is never used.\n return [];\n }\n slugs.add(edition.slug);\n }\n\n return result;\n });\n};\n\n/**\n * Schema for {@link ReferralProgramEditionConfigSetData}.\n */\nexport const makeReferralProgramEditionConfigSetDataSchema = (\n valueLabel: string = \"ReferralProgramEditionConfigSetData\",\n) =>\n z.object({\n editions: makeReferralProgramEditionConfigSetArraySchema(`${valueLabel}.editions`),\n });\n\n/**\n * Schema for {@link ReferralProgramEditionConfigSetResponseOk}.\n */\nexport const makeReferralProgramEditionConfigSetResponseOkSchema = (\n valueLabel: string = \"ReferralProgramEditionConfigSetResponseOk\",\n) =>\n z.object({\n responseCode: z.literal(ReferralProgramEditionConfigSetResponseCodes.Ok),\n data: makeReferralProgramEditionConfigSetDataSchema(`${valueLabel}.data`),\n });\n\n/**\n * Schema for {@link ReferralProgramEditionConfigSetResponseError}.\n */\nexport const makeReferralProgramEditionConfigSetResponseErrorSchema = (\n _valueLabel: string = \"ReferralProgramEditionConfigSetResponseError\",\n) =>\n z.object({\n responseCode: z.literal(ReferralProgramEditionConfigSetResponseCodes.Error),\n error: z.string(),\n errorMessage: z.string(),\n });\n\n/**\n * Schema for {@link ReferralProgramEditionConfigSetResponse}.\n */\nexport const makeReferralProgramEditionConfigSetResponseSchema = (\n valueLabel: string = \"ReferralProgramEditionConfigSetResponse\",\n) =>\n z.discriminatedUnion(\"responseCode\", [\n makeReferralProgramEditionConfigSetResponseOkSchema(valueLabel),\n makeReferralProgramEditionConfigSetResponseErrorSchema(valueLabel),\n ]);\n","import { IdentifierSpec } from \"./types\";\n\nconst CAIP2: IdentifierSpec = {\n name: \"chainId\",\n regex: \"[-:a-zA-Z0-9]{5,41}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"[-a-z0-9]{3,8}\",\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{1,32}\",\n },\n },\n },\n};\n\nconst CAIP10: IdentifierSpec = {\n name: \"accountId\",\n regex: \"[-:a-zA-Z0-9]{7,106}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"[-a-z0-9]{3,8}\",\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{1,32}\",\n },\n 2: {\n name: \"address\",\n regex: \"[a-zA-Z0-9]{1,64}\",\n },\n },\n },\n};\n\n// represents namespace:reference in CAIP-19\nconst AssetName: IdentifierSpec = {\n name: \"assetName\",\n regex: \"[-:a-zA-Z0-9]{5,73}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"[-a-z0-9]{3,8}\",\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{1,64}\",\n },\n },\n },\n};\n\nconst CAIP19AssetType: IdentifierSpec = {\n name: \"assetType\",\n regex: \"[-:a-zA-Z0-9]{11,115}\",\n parameters: {\n delimiter: \"/\",\n values: {\n 0: CAIP2,\n 1: AssetName,\n },\n },\n};\n\nconst CAIP19AssetId: IdentifierSpec = {\n name: \"assetId\",\n regex: \"[-:a-zA-Z0-9]{13,148}\",\n parameters: {\n delimiter: \"/\",\n values: {\n 0: CAIP2,\n 1: AssetName,\n 2: {\n name: \"tokenId\",\n regex: \"[-a-zA-Z0-9]{1,32}\",\n },\n },\n },\n};\n\nexport const CAIP = {\n \"2\": CAIP2,\n \"10\": CAIP10,\n \"19\": {\n assetName: AssetName,\n assetType: CAIP19AssetType,\n assetId: CAIP19AssetId,\n },\n};\n","import { IdentifierSpec, Params } from \"./types\";\n\nexport function splitParams(id: string, spec: IdentifierSpec): string[] {\n return id.split(spec.parameters.delimiter);\n}\n\nexport function getParams<T>(id: string, spec: IdentifierSpec): T {\n const arr = splitParams(id, spec);\n const params = {};\n arr.forEach((value, index) => {\n params[spec.parameters.values[index].name] = value;\n });\n return params as T;\n}\n\nexport function joinParams(params: Params, spec: IdentifierSpec): string {\n return Object.values(spec.parameters.values)\n .map(parameter => {\n const param = params[parameter.name];\n return typeof param === \"string\"\n ? param\n : joinParams(param, parameter as IdentifierSpec);\n })\n .join(spec.parameters.delimiter);\n}\n\nexport function isValidId(id: string, spec: IdentifierSpec): boolean {\n // console.log(\"id\", id);\n // console.log(\"spec\", spec);\n // console.log(\"before regex\");\n if (!new RegExp(spec.regex).test(id)) return false;\n // console.log(\"after regex\");\n // console.log(\"before split\");\n const params = splitParams(id, spec);\n // console.log(\"after split\");\n // console.log(\"params\", params);\n // console.log(\"before length\");\n if (params.length !== Object.keys(spec.parameters.values).length)\n return false;\n // console.log(\"after length\");\n // console.log(\"before matches\");\n const matches = params\n .map((param, index) =>\n new RegExp(spec.parameters.values[index].regex).test(param)\n )\n .filter(x => !!x);\n if (matches.length !== params.length) return false;\n // console.log(\"after matches\");\n return true;\n}\n","import { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface ChainIdParams {\n namespace: string;\n reference: string;\n}\n\nexport class ChainId {\n public static spec: IdentifierSpec = CAIP[\"2\"];\n\n public static parse(id: string): ChainIdParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n return new ChainId(getParams<ChainIdParams>(id, this.spec)).toJSON();\n }\n\n public static format(params: ChainIdParams): string {\n return joinParams(params as any, this.spec);\n }\n\n public namespace: string;\n public reference: string;\n\n constructor(params: ChainIdParams | string) {\n if (typeof params === \"string\") {\n params = ChainId.parse(params);\n }\n\n this.namespace = params.namespace;\n this.reference = params.reference;\n }\n\n public toString(): string {\n return ChainId.format(this.toJSON());\n }\n\n public toJSON(): ChainIdParams {\n return {\n namespace: this.namespace,\n reference: this.reference,\n };\n }\n}\n","import { ChainId, ChainIdParams } from \"./chain\";\nimport { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AccountIdSplitParams extends ChainIdParams {\n address: string;\n}\nexport interface AccountIdParams {\n chainId: string | ChainIdParams;\n address: string;\n}\n\nexport class AccountId {\n public static spec: IdentifierSpec = CAIP[\"10\"];\n\n public static parse(id: string): AccountIdParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n const { namespace, reference, address } = getParams<AccountIdSplitParams>(\n id,\n this.spec\n );\n const chainId = new ChainId({ namespace, reference });\n return new AccountId({ chainId, address }).toJSON();\n }\n\n public static format(params: AccountIdParams): string {\n const chainId = new ChainId(params.chainId);\n const splitParams: AccountIdSplitParams = {\n ...chainId.toJSON(),\n address: params.address,\n };\n return joinParams(splitParams as any, this.spec);\n }\n\n public chainId: ChainId;\n public address: string;\n\n constructor(params: AccountIdParams | string) {\n if (typeof params === \"string\") {\n params = AccountId.parse(params);\n }\n\n this.chainId = new ChainId(params.chainId);\n this.address = params.address;\n }\n\n public toString(): string {\n return AccountId.format(this.toJSON());\n }\n\n public toJSON(): AccountIdParams {\n return {\n chainId: this.chainId.toJSON(),\n address: this.address,\n };\n }\n}\n","import { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AssetNameParams {\n namespace: string;\n reference: string;\n}\n\nexport class AssetName {\n public static spec: IdentifierSpec = CAIP[\"19\"].assetName;\n\n public static parse(id: string): AssetNameParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n return new AssetName(getParams<AssetNameParams>(id, this.spec)).toJSON();\n }\n\n public static format(params: AssetNameParams): string {\n return joinParams(params as any, this.spec);\n }\n\n public namespace: string;\n public reference: string;\n\n constructor(params: AssetNameParams | string) {\n if (typeof params === \"string\") {\n params = AssetName.parse(params);\n }\n\n this.namespace = params.namespace;\n this.reference = params.reference;\n }\n\n public toString(): string {\n return AssetName.format(this.toJSON());\n }\n\n public toJSON(): AssetNameParams {\n return {\n namespace: this.namespace,\n reference: this.reference,\n };\n }\n}\n","import { AssetName, AssetNameParams } from \"./assetName\";\nimport { ChainId, ChainIdParams } from \"./chain\";\nimport { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AssetTypeParams {\n chainId: string | ChainIdParams;\n assetName: string | AssetNameParams;\n}\n\nexport class AssetType {\n public static spec: IdentifierSpec = CAIP[\"19\"].assetType;\n\n public static parse(id: string): AssetTypeParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n return new AssetType(getParams<AssetTypeParams>(id, this.spec)).toJSON();\n }\n\n public static format(params: AssetTypeParams): string {\n return joinParams(params as any, this.spec);\n }\n\n public chainId: ChainId;\n public assetName: AssetName;\n\n constructor(params: AssetTypeParams | string) {\n if (typeof params === \"string\") {\n params = AssetType.parse(params);\n }\n\n this.chainId = new ChainId(params.chainId);\n this.assetName = new AssetName(params.assetName);\n }\n\n public toString(): string {\n return AssetType.format(this.toJSON());\n }\n\n public toJSON(): AssetTypeParams {\n return {\n chainId: this.chainId.toJSON(),\n assetName: this.assetName,\n };\n }\n}\n","import { AssetName, AssetNameParams } from \"./assetName\";\nimport { ChainId, ChainIdParams } from \"./chain\";\nimport { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AssetIdParams {\n chainId: string | ChainIdParams;\n assetName: string | AssetNameParams;\n tokenId: string;\n}\n\nexport class AssetId {\n public static spec: IdentifierSpec = CAIP[\"19\"].assetId;\n\n public static parse(id: string): AssetIdParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n return new AssetId(getParams<AssetIdParams>(id, this.spec)).toJSON();\n }\n\n public static format(params: AssetIdParams): string {\n return joinParams(params as any, this.spec);\n }\n\n public chainId: ChainId;\n public assetName: AssetName;\n public tokenId: string;\n\n constructor(params: AssetIdParams | string) {\n if (typeof params === \"string\") {\n params = AssetId.parse(params);\n }\n\n this.chainId = new ChainId(params.chainId);\n this.assetName = new AssetName(params.assetName);\n this.tokenId = params.tokenId;\n }\n\n public toString(): string {\n return AssetId.format(this.toJSON());\n }\n\n public toJSON(): AssetIdParams {\n return {\n chainId: this.chainId.toJSON(),\n assetName: this.assetName.toJSON(),\n tokenId: this.tokenId,\n };\n }\n}\n","import type { CoinType } from \"@ensdomains/address-encoder\";\nimport { AccountId as CaipAccountId } from \"caip\";\nimport { type Address, type Hex, isAddress, isHex, size } from \"viem\";\n/**\n * All zod schemas we define must remain internal implementation details.\n * We want the freedom to move away from zod in the future without impacting\n * any users of the ensnode-sdk package.\n *\n * The only way to share Zod schemas is to re-export them from\n * `./src/internal.ts` file.\n */\nimport { z } from \"zod/v4\";\n\nimport { ENSNamespaceIds, type InterpretedName, type Node } from \"../ens\";\nimport { asLowerCaseAddress } from \"./address\";\nimport {\n type CurrencyId,\n CurrencyIds,\n type PriceDai,\n type PriceEth,\n type PriceUsdc,\n} from \"./currencies\";\nimport { reinterpretName } from \"./interpretation/reinterpretation\";\nimport type { AccountIdString } from \"./serialized-types\";\nimport type {\n AccountId,\n BlockRef,\n ChainId,\n Datetime,\n DefaultableChainId,\n Duration,\n UnixTimestamp,\n} from \"./types\";\n\n/**\n * Parses a string value as a boolean.\n */\nexport const makeBooleanStringSchema = (valueLabel: string = \"Value\") =>\n z\n .string()\n .pipe(\n z.enum([\"true\", \"false\"], {\n error: `${valueLabel} must be 'true' or 'false'.`,\n }),\n )\n .transform((val) => val === \"true\");\n\n/**\n * Parses a numeric value as a finite non-negative number.\n */\nexport const makeFiniteNonNegativeNumberSchema = (valueLabel: string = \"Value\") =>\n z\n .number({\n // NOTE: Zod's implementation of `number` automatically rejects NaN and Infinity values.\n // and therefore the finite check is implicit.\n error: `${valueLabel} must be a finite number.`,\n })\n .nonnegative({\n error: `${valueLabel} must be a non-negative number (>=0).`,\n });\n\n/**\n * Parses a numeric value as an integer.\n */\nexport const makeIntegerSchema = (valueLabel: string = \"Value\") =>\n z.int({\n error: `${valueLabel} must be an integer.`,\n });\n\n/**\n * Parses a numeric value as a positive integer.\n */\nexport const makePositiveIntegerSchema = (valueLabel: string = \"Value\") =>\n makeIntegerSchema(valueLabel).positive({\n error: `${valueLabel} must be a positive integer (>0).`,\n });\n\n/**\n * Parses a numeric value as a non-negative integer.\n */\nexport const makeNonNegativeIntegerSchema = (valueLabel: string = \"Value\") =>\n makeIntegerSchema(valueLabel).nonnegative({\n error: `${valueLabel} must be a non-negative integer (>=0).`,\n });\n\n/**\n * Parses a numeric value as {@link Duration}\n */\nexport const makeDurationSchema = (valueLabel: string = \"Value\") =>\n z\n .number({\n error: `${valueLabel} must be a number.`,\n })\n .pipe(makeNonNegativeIntegerSchema(valueLabel));\n\n/**\n * Parses Chain ID\n *\n * {@link ChainId}\n */\nexport const makeChainIdSchema = (valueLabel: string = \"Chain ID\") =>\n makePositiveIntegerSchema(valueLabel).transform((val) => val as ChainId);\n\n/**\n * Parses a serialized representation of {@link ChainId}.\n */\nexport const makeChainIdStringSchema = (valueLabel: string = \"Chain ID String\") =>\n z\n .string({ error: `${valueLabel} must be a string representing a chain ID.` })\n .pipe(z.coerce.number({ error: `${valueLabel} must represent a positive integer (>0).` }))\n .pipe(makeChainIdSchema(`The numeric value represented by ${valueLabel}`));\n\n/**\n * Parses Defaultable Chain ID\n *\n * {@link DefaultableChainId}\n */\nexport const makeDefaultableChainIdSchema = (valueLabel: string = \"Defaultable Chain ID\") =>\n makeNonNegativeIntegerSchema(valueLabel).transform((val) => val as DefaultableChainId);\n\n/**\n * Parses a serialized representation of {@link DefaultableChainId}.\n */\nexport const makeDefaultableChainIdStringSchema = (\n valueLabel: string = \"Defaultable Chain ID String\",\n) =>\n z\n .string({ error: `${valueLabel} must be a string representing a chain ID.` })\n .pipe(z.coerce.number({ error: `${valueLabel} must represent a non-negative integer (>=0).` }))\n .pipe(makeDefaultableChainIdSchema(`The numeric value represented by ${valueLabel}`));\n\n/**\n * Parses {@link CoinType}.\n */\nexport const makeCoinTypeSchema = (valueLabel: string = \"Coin Type\") =>\n z\n .number({ error: `${valueLabel} must be a number.` })\n .int({ error: `${valueLabel} must be an integer.` })\n .nonnegative({ error: `${valueLabel} must be a non-negative integer (>=0).` })\n .transform((val) => val as CoinType);\n\n/**\n * Parses a serialized representation of {@link CoinType}.\n */\nexport const makeCoinTypeStringSchema = (valueLabel: string = \"Coin Type String\") =>\n z\n .string({ error: `${valueLabel} must be a string representing a coin type.` })\n .pipe(z.coerce.number({ error: `${valueLabel} must represent a non-negative integer (>=0).` }))\n .pipe(makeCoinTypeSchema(`The numeric value represented by ${valueLabel}`));\n\n/**\n * Parses a serialized representation of an EVM address into a lowercase Address.\n */\nexport const makeLowercaseAddressSchema = (valueLabel: string = \"EVM address\") =>\n z\n .string()\n .check((ctx) => {\n if (!isAddress(ctx.value)) {\n ctx.issues.push({\n code: \"custom\",\n message: `${valueLabel} must be a valid EVM address`,\n input: ctx.value,\n });\n }\n })\n .transform((val) => asLowerCaseAddress(val as Address));\n\n/**\n * Parses an ISO 8601 string representations of {@link Datetime}\n */\nexport const makeDatetimeSchema = (valueLabel: string = \"Datetime string\") =>\n z.iso\n .datetime({ error: `${valueLabel} must be a string in ISO 8601 format.` })\n .transform((v) => new Date(v));\n\n/**\n * Parses value as {@link UnixTimestamp}.\n */\nexport const makeUnixTimestampSchema = (valueLabel: string = \"Timestamp\") =>\n makeIntegerSchema(valueLabel);\n\n/**\n * Parses a string representations of {@link URL}\n */\nexport const makeUrlSchema = (valueLabel: string = \"Value\") =>\n z\n .url({\n error: `${valueLabel} must be a valid URL string (e.g., http://localhost:8080 or https://example.com).`,\n abort: true,\n })\n .transform((v) => new URL(v));\n\n/**\n * Parses a serialized representation of a comma separated list.\n */\nexport const makeCommaSeparatedList = (valueLabel: string = \"Value\") =>\n z\n .string({ error: `${valueLabel} must be a comma separated list.` })\n .transform((val) => val.split(\",\").filter(Boolean))\n .refine((val) => val.length > 0, {\n error: `${valueLabel} must be a comma separated list with at least one value.`,\n });\n\n/**\n * Parses a numeric value as a block number.\n */\nexport const makeBlockNumberSchema = (valueLabel: string = \"Block number\") =>\n makeNonNegativeIntegerSchema(valueLabel);\n\n/**\n * Parses an object value as the {@link BlockRef} object.\n */\nexport const makeBlockRefSchema = (valueLabel: string = \"Value\") =>\n z.strictObject(\n {\n timestamp: makeUnixTimestampSchema(`${valueLabel}.timestamp`),\n number: makeBlockNumberSchema(`${valueLabel}.number`),\n },\n {\n error: `${valueLabel} must be a valid BlockRef object.`,\n },\n );\n\n/**\n * Parses a string value as ENSNamespaceId.\n */\nexport const makeENSNamespaceIdSchema = (valueLabel: string = \"ENSNamespaceId\") =>\n z.enum(ENSNamespaceIds, {\n error() {\n return `Invalid ${valueLabel}. Supported ENS namespace IDs are: ${Object.keys(ENSNamespaceIds).join(\", \")}`;\n },\n });\n\nconst makePriceAmountSchema = (valueLabel: string = \"Amount\") =>\n z.coerce\n .bigint({\n error: `${valueLabel} must represent a bigint.`,\n })\n .nonnegative({\n error: `${valueLabel} must not be negative.`,\n });\n\nexport const makePriceCurrencySchema = (\n currency: CurrencyId,\n valueLabel: string = \"Price Currency\",\n) =>\n z.strictObject({\n amount: makePriceAmountSchema(`${valueLabel} amount`),\n\n currency: z.literal(currency, {\n error: `${valueLabel} currency must be set to '${currency}'.`,\n }),\n });\n\n/**\n * Schema for {@link Price} type.\n */\nexport const makePriceSchema = (valueLabel: string = \"Price\") =>\n z.discriminatedUnion(\n \"currency\",\n [\n makePriceCurrencySchema(CurrencyIds.ETH, valueLabel),\n makePriceCurrencySchema(CurrencyIds.USDC, valueLabel),\n makePriceCurrencySchema(CurrencyIds.DAI, valueLabel),\n ],\n { error: `${valueLabel} currency must be one of ${Object.values(CurrencyIds).join(\", \")}` },\n );\n\n/**\n * Schema for {@link PriceEth} type.\n */\nexport const makePriceEthSchema = (valueLabel: string = \"Price ETH\") =>\n makePriceCurrencySchema(CurrencyIds.ETH, valueLabel).transform((v) => v as PriceEth);\n\n/**\n * Schema for {@link PriceUsdc} type.\n */\nexport const makePriceUsdcSchema = (valueLabel: string = \"Price USDC\") =>\n makePriceCurrencySchema(CurrencyIds.USDC, valueLabel).transform((v) => v as PriceUsdc);\n\n/**\n * Schema for {@link PriceDai} type.\n */\nexport const makePriceDaiSchema = (valueLabel: string = \"Price DAI\") =>\n makePriceCurrencySchema(CurrencyIds.DAI, valueLabel).transform((v) => v as PriceDai);\n\n/**\n * Schema for {@link AccountId} type.\n */\nexport const makeAccountIdSchema = (valueLabel: string = \"AccountId\") =>\n z.strictObject({\n chainId: makeChainIdSchema(`${valueLabel} chain ID`),\n address: makeLowercaseAddressSchema(`${valueLabel} address`),\n });\n\n/**\n * Schema for {@link AccountIdString} type.\n */\nexport const makeAccountIdStringSchema = (valueLabel: string = \"Account ID String\") =>\n z.coerce\n .string()\n .transform((v) => {\n const result = new CaipAccountId(v);\n\n return {\n chainId: Number(result.chainId.reference),\n address: result.address,\n };\n })\n .pipe(makeAccountIdSchema(valueLabel));\n\n/**\n * Make a schema for {@link Hex} representation of bytes array.\n *\n * @param {number} options.bytesCount expected count of bytes to be hex-encoded\n */\nexport const makeHexStringSchema = (\n options: { bytesCount: number },\n valueLabel: string = \"String representation of bytes array\",\n) =>\n z\n .string()\n .check(function invariant_isHexEncoded(ctx) {\n if (!isHex(ctx.value)) {\n ctx.issues.push({\n code: \"custom\",\n input: ctx.value,\n message: `${valueLabel} must be a hexadecimal value which starts with '0x'.`,\n });\n }\n })\n .transform((v) => v as Hex)\n .check(function invariant_encodesRequiredBytesCount(ctx) {\n const expectedBytesCount = options.bytesCount;\n const actualBytesCount = size(ctx.value);\n\n if (actualBytesCount !== expectedBytesCount) {\n ctx.issues.push({\n code: \"custom\",\n input: ctx.value,\n message: `${valueLabel} must represent exactly ${expectedBytesCount} bytes. Currently represented bytes count: ${actualBytesCount}.`,\n });\n }\n });\n\n/**\n * Make schema for {@link Node}.\n */\nexport const makeNodeSchema = (valueLabel: string = \"Node\") =>\n makeHexStringSchema({ bytesCount: 32 }, valueLabel);\n\n/**\n * Make schema for Transaction Hash\n */\nexport const makeTransactionHashSchema = (valueLabel: string = \"Transaction hash\") =>\n makeHexStringSchema({ bytesCount: 32 }, valueLabel);\n\n/**\n * Make schema for {@link ReinterpretedName}.\n */\nexport const makeReinterpretedNameSchema = (valueLabel: string = \"Reinterpreted Name\") =>\n z\n .string()\n .transform((v) => v as InterpretedName)\n .check((ctx) => {\n try {\n reinterpretName(ctx.value);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n\n ctx.issues.push({\n code: \"custom\",\n input: ctx.value,\n message: `${valueLabel} cannot be reinterpreted: ${errorMessage}`,\n });\n }\n })\n .transform(reinterpretName);\n","export const EnhancedAccessControl = [\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"EACCannotGrantRoles\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"EACCannotRevokeRoles\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"EACInvalidAccount\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"EACInvalidRoleBitmap\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"role\",\n type: \"uint256\",\n },\n ],\n name: \"EACMaxAssignees\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"role\",\n type: \"uint256\",\n },\n ],\n name: \"EACMinAssignees\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"EACRootResourceNotAllowed\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"EACUnauthorizedAccountRoles\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oldRoleBitmap\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newRoleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"EACRolesChanged\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"ROOT_RESOURCE\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"getAssigneeCount\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"counts\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"mask\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRootRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"hasAssignees\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"rolesBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"hasRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"rolesBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"hasRootRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRootRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n ],\n name: \"roleCount\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"roles\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","export const ETHRegistrar = [\n {\n inputs: [],\n name: \"REGISTRY\",\n outputs: [\n {\n internalType: \"contract IPermissionedRegistry\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint64\",\n name: \"validFrom\",\n type: \"uint64\",\n },\n {\n internalType: \"uint64\",\n name: \"blockTimestamp\",\n type: \"uint64\",\n },\n ],\n name: \"CommitmentTooNew\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint64\",\n name: \"validTo\",\n type: \"uint64\",\n },\n {\n internalType: \"uint64\",\n name: \"blockTimestamp\",\n type: \"uint64\",\n },\n ],\n name: \"CommitmentTooOld\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n internalType: \"uint64\",\n name: \"minDuration\",\n type: \"uint64\",\n },\n ],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MaxCommitmentAgeTooLow\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"NameAlreadyRegistered\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"NameNotRegistered\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"NotValid\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n ],\n name: \"PaymentTokenNotSupported\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"UnexpiredCommitmentExists\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"CommitmentMade\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"contract IRegistry\",\n name: \"subregistry\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"base\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"newExpiry\",\n type: \"uint64\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"base\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n ],\n name: \"PaymentTokenAdded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n ],\n name: \"PaymentTokenRemoved\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"commit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"commitmentAt\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"isAvailable\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n ],\n name: \"isPaymentToken\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"isValid\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IRegistry\",\n name: \"subregistry\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"makeCommitment\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IRegistry\",\n name: \"subregistry\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"register\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"base\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","export const Registry = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"newExpiry\",\n type: \"uint64\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"changedBy\",\n type: \"address\",\n },\n ],\n name: \"ExpiryUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"registeredBy\",\n type: \"address\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"ResolverUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"contract IRegistry\",\n name: \"subregistry\",\n type: \"address\",\n },\n ],\n name: \"SubregistryUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"oldTokenId\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"newTokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n ],\n name: \"TokenRegenerated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"values\",\n type: \"uint256[]\",\n },\n ],\n name: \"TransferBatch\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"TransferSingle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"URI\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"accounts\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n ],\n name: \"balanceOfBatch\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"getResolver\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"getSubregistry\",\n outputs: [\n {\n internalType: \"contract IRegistry\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"ownerOf\",\n outputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"values\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeBatchTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","export const UniversalResolver = [\n {\n inputs: [\n {\n internalType: \"contract IRegistry\",\n name: \"root\",\n type: \"address\",\n },\n {\n internalType: \"contract IGatewayProvider\",\n name: \"batchGatewayProvider\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"dns\",\n type: \"bytes\",\n },\n ],\n name: \"DNSDecodingFailed\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"ens\",\n type: \"string\",\n },\n ],\n name: \"DNSEncodingFailed\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"EmptyAddress\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"status\",\n type: \"uint16\",\n },\n {\n internalType: \"string\",\n name: \"message\",\n type: \"string\",\n },\n ],\n name: \"HttpError\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidBatchGatewayResponse\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"string[]\",\n name: \"urls\",\n type: \"string[]\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes4\",\n name: \"callbackFunction\",\n type: \"bytes4\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"OffchainLookup\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"length\",\n type: \"uint256\",\n },\n ],\n name: \"OffsetOutOfBoundsError\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"errorData\",\n type: \"bytes\",\n },\n ],\n name: \"ResolverError\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"ResolverNotContract\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"ResolverNotFound\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"bytes\",\n name: \"primaryAddress\",\n type: \"bytes\",\n },\n ],\n name: \"ReverseAddressMismatch\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"UnsupportedResolverProfile\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ROOT_REGISTRY\",\n outputs: [\n {\n internalType: \"contract IRegistry\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"batchGatewayProvider\",\n outputs: [\n {\n internalType: \"contract IGatewayProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"call\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"flags\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct CCIPBatcher.Lookup[]\",\n name: \"lookups\",\n type: \"tuple[]\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n internalType: \"struct CCIPBatcher.Batch\",\n name: \"batch\",\n type: \"tuple\",\n },\n ],\n name: \"ccipBatch\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"call\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"flags\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct CCIPBatcher.Lookup[]\",\n name: \"lookups\",\n type: \"tuple[]\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n internalType: \"struct CCIPBatcher.Batch\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"ccipBatchCallback\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"call\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"flags\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct CCIPBatcher.Lookup[]\",\n name: \"lookups\",\n type: \"tuple[]\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n internalType: \"struct CCIPBatcher.Batch\",\n name: \"batch\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"ccipReadCallback\",\n outputs: [],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"findRegistries\",\n outputs: [\n {\n internalType: \"contract IRegistry[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"findResolver\",\n outputs: [\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"offset\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"requireResolver\",\n outputs: [\n {\n components: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"extended\",\n type: \"bool\",\n },\n ],\n internalType: \"struct AbstractUniversalResolver.ResolverInfo\",\n name: \"info\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"resolve\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"resolveBatchCallback\",\n outputs: [],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"resolveCallback\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"resolveDirectCallback\",\n outputs: [],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n name: \"resolveDirectCallbackError\",\n outputs: [],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n name: \"resolveWithGateways\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"result\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n name: \"resolveWithResolver\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"lookupAddress\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n ],\n name: \"reverse\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"reverseAddressCallback\",\n outputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"reverseResolver\",\n type: \"address\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"reverseNameCallback\",\n outputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"lookupAddress\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n name: \"reverseWithGateways\",\n outputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"reverseResolver\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","export const StandaloneReverseRegistrar = [\n {\n type: \"event\",\n name: \"NameForAddrChanged\",\n inputs: [\n { indexed: true, internalType: \"address\", name: \"addr\", type: \"address\" },\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n ],\n },\n] as const;\n","export const ThreeDNSToken = [\n {\n type: \"event\",\n name: \"NewOwner\",\n inputs: [\n { type: \"bytes32\", name: \"node\", indexed: true },\n { type: \"bytes32\", name: \"label\", indexed: true },\n { type: \"address\", name: \"owner\", indexed: false },\n ],\n },\n {\n type: \"event\",\n name: \"RegistrationCreated\",\n inputs: [\n { type: \"bytes32\", name: \"node\", indexed: true },\n { type: \"bytes32\", name: \"tld\", indexed: true },\n { type: \"bytes\", name: \"fqdn\", indexed: false },\n { type: \"address\", name: \"registrant\", indexed: false },\n { type: \"uint32\", name: \"controlBitmap\", indexed: false },\n { type: \"uint64\", name: \"expiry\", indexed: false },\n ],\n },\n {\n type: \"event\",\n name: \"RegistrationExtended\",\n inputs: [\n { type: \"bytes32\", name: \"node\", indexed: true },\n { type: \"uint64\", name: \"duration\", indexed: true },\n { type: \"uint64\", name: \"newExpiry\", indexed: true },\n ],\n },\n {\n type: \"event\",\n name: \"RegistrationTransferred\",\n inputs: [\n { type: \"bytes32\", name: \"node\", indexed: true },\n { type: \"address\", name: \"newOwner\", indexed: true },\n { type: \"address\", name: \"operator\", indexed: true },\n ],\n },\n {\n type: \"event\",\n name: \"RegistrationBurned\",\n inputs: [\n { type: \"bytes32\", name: \"node\", indexed: true },\n { type: \"address\", name: \"burner\", indexed: true },\n ],\n },\n {\n type: \"function\",\n name: \"uri\",\n inputs: [{ type: \"uint256\", name: \"tokenId_\" }],\n outputs: [{ type: \"string\", name: \"\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"resolver\",\n inputs: [{ type: \"bytes32\", name: \"node\" }],\n outputs: [{ type: \"address\", name: \"\" }],\n stateMutability: \"view\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"TransferSingle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"values\",\n type: \"uint256[]\",\n },\n ],\n name: \"TransferBatch\",\n type: \"event\",\n },\n] as const;\n","import {\n type Address,\n type Hex,\n type LogTopic,\n type RpcError,\n hexToBigInt,\n numberToHex,\n} from \"viem\";\n\nexport type GetLogsRetryHelperParameters = {\n error: RpcError;\n params: [\n {\n address?: Address | Address[];\n topics?: LogTopic[];\n fromBlock: Hex;\n toBlock: Hex;\n },\n ];\n};\n\nexport type GetLogsRetryHelperReturnType =\n | {\n shouldRetry: true;\n /** `true` if the error message suggested to use this range on retry. */\n isSuggestedRange: boolean;\n /** Suggested values to use for (fromBlock, toBlock) in follow-up eth_getLogs requests. */\n ranges: { fromBlock: Hex; toBlock: Hex }[];\n }\n | {\n shouldRetry: false;\n /** Suggested values to use for (fromBlock, toBlock) in follow-up eth_getLogs requests. */\n ranges?: never;\n };\n\nexport const getLogsRetryHelper = ({\n params,\n error,\n}: GetLogsRetryHelperParameters): GetLogsRetryHelperReturnType => {\n const sError = JSON.stringify(error);\n let match: RegExpMatchArray | null;\n\n // avalanche\n match = sError.match(\n /requested too many blocks from (\\d+) to (\\d+), maximum is set to (\\d+)/,\n );\n if (match !== null) {\n const ranges = chunk({ params, range: BigInt(match[3]!) - 1n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // Cloudflare\n match = sError.match(/Max range: (\\d+)/);\n if (match !== null) {\n const ranges = chunk({ params, range: BigInt(match[1]!) - 1n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // thirdweb\n match = sError.match(/Maximum allowed number of requested blocks is ([\\d]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // infura, zksync\n match = sError.match(\n /Try with this block range \\[0x([0-9a-fA-F]+),\\s*0x([0-9a-fA-F]+)\\]/,\n )!;\n if (match !== null) {\n const start = hexToBigInt(`0x${match[1]}`);\n const end = hexToBigInt(`0x${match[2]}`);\n const range = end - start;\n\n const ranges = chunk({ params, range });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // ankr\n match = sError.match(\"block range is too wide\");\n if (match !== null && error.code === -32600) {\n const ranges = chunk({ params, range: 3000n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // alchemy\n match = sError.match(\n /this block range should work: \\[0x([0-9a-fA-F]+),\\s*0x([0-9a-fA-F]+)\\]/,\n );\n if (match !== null) {\n const start = hexToBigInt(`0x${match[1]}`);\n const end = hexToBigInt(`0x${match[2]}`);\n const range = end - start;\n\n const ranges = chunk({ params, range });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // quicknode, 1rpc, blast\n match = sError.match(/limited to a ([\\d,.]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // blockpi\n match = sError.match(/limited to ([\\d,.]+) block/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // blast (paid)\n match = sError.match(\n /exceeds the range allowed for your plan \\(\\d+ > (\\d+)\\)/,\n );\n if (match !== null) {\n const ranges = chunk({ params, range: BigInt(match[1]!) });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // chainstack\n match = sError.match(/Block range limit exceeded./);\n if (match !== null) {\n const prevRange =\n hexToBigInt(params[0].toBlock) - hexToBigInt(params[0].fromBlock);\n\n // chainstack has different limits for free and paid plans.\n const ranges =\n prevRange < 10_000n\n ? chunk({ params, range: 100n })\n : chunk({ params, range: 10_000n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // coinbase\n match = sError.match(/please limit the query to at most ([\\d,.]+) blocks/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")) - 1n,\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // publicnode\n match = sError.match(/maximum block range: ([\\d,.]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // hyperliquid\n match = sError.match(/query exceeds max block range ([\\d,.]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // swell\n match = sError.match(/block range greater than ([\\d,.]+) max/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // somnia\n match = sError.match(/block range exceeds ([\\d,.]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // merkle 10k\n match = sError.match(/eth_getLogs range is too large, max is 10k blocks/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: 10_000n,\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // merkle 1k\n match = sError.match(/eth_getLogs range is too large, max is 1k blocks/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: 1_000n,\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // harmony\n match = sError.match(/query must be smaller than size ([\\d,.]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // moonriver\n match = sError.match(/block range is too wide \\(maximum (\\d+)\\)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // aurora\n match = sError.match(/up to a ([\\d,.]+) block range/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // ankr (tac)\n match = sError.match(/maximum \\[from, to\\] blocks distance: (\\d+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // tron\n match = sError.match(/exceed max block range: (\\d+)/);\n if (match !== null) {\n const ranges = chunk({ params, range: BigInt(match[1]!) - 1n });\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n };\n }\n }\n\n // catch-all\n if (\n // valtitude\n sError.includes(\"allowed block range threshold exceeded\") ||\n // erpc\n sError.includes(\"exceeded max allowed\") ||\n // erpc\n sError.includes(\"range threshold exceeded\") ||\n // base\n sError.includes(\"no backend is currently healthy to serve traffic\") ||\n // base, monad\n sError.includes(\"block range too large\") ||\n // optimism\n sError.includes(\"Block range is too large\") ||\n // optimism\n sError.includes(\"backend response too large\") ||\n // llamarpc, ankr, altitude\n sError.includes(\"query exceeds max results\") ||\n // arbitrum\n /logs matched by query exceeds limit of \\d+/.test(sError) ||\n // zkevm\n /query returned more than \\d+ results/.test(sError) ||\n // 1rpc\n /response size should not greater than \\d+ bytes/.test(sError)\n ) {\n const ranges = chunk({\n params,\n range:\n (hexToBigInt(params[0].toBlock) - hexToBigInt(params[0].fromBlock)) /\n 2n,\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n ranges,\n shouldRetry: true,\n isSuggestedRange: false,\n } as const;\n }\n }\n\n // No match found\n return { shouldRetry: false } as const;\n};\n\nconst isRangeUnchanged = (\n params: GetLogsRetryHelperParameters[\"params\"],\n ranges: Extract<\n GetLogsRetryHelperReturnType,\n { shouldRetry: true }\n >[\"ranges\"],\n) => {\n return (\n ranges.length === 0 ||\n (ranges.length === 1 &&\n ranges[0]!.fromBlock === params[0].fromBlock &&\n ranges[0]!.toBlock === params[0].toBlock)\n );\n};\n\nconst chunk = ({\n params,\n range,\n}: { params: GetLogsRetryHelperParameters[\"params\"]; range: bigint }) => {\n const ranges: { fromBlock: Hex; toBlock: Hex }[] = [];\n\n const fromBlock = hexToBigInt(params[0].fromBlock);\n const toBlock = hexToBigInt(params[0].toBlock);\n\n for (let start = fromBlock; start <= toBlock; start += range + 1n) {\n const end = start + range > toBlock ? toBlock : start + range;\n\n ranges.push({\n fromBlock: numberToHex(start),\n toBlock: numberToHex(end),\n });\n }\n\n return ranges;\n};\n","import type { Abi, AbiItem } from \"viem\";\nimport { formatAbiItem } from \"viem/utils\";\n\ntype MergeAbi<\n TBase extends Abi,\n TInsert extends Abi,\n> = TInsert extends readonly [\n infer First extends AbiItem,\n ...infer Rest extends Abi,\n]\n ? Extract<TBase[number], First> extends never\n ? First[\"type\"] extends \"constructor\" | \"receive\" | \"fallback\"\n ? MergeAbi<TBase, Rest>\n : MergeAbi<readonly [...TBase, First], Rest>\n : MergeAbi<TBase, Rest>\n : TBase;\n\nexport type MergeAbis<\n TAbis extends readonly Abi[],\n TMerged extends Abi = [],\n> = TAbis extends readonly [\n infer First extends Abi,\n ...infer Rest extends readonly Abi[],\n]\n ? MergeAbis<Rest, MergeAbi<TMerged, First>>\n : TMerged;\n\nconst isAbiItemEqual = (a: AbiItem, b: AbiItem): boolean =>\n formatAbiItem(a) === formatAbiItem(b);\n\n/**\n * Combine multiple ABIs into one, removing duplicates if necessary.\n */\nexport const mergeAbis = <const TAbis extends readonly Abi[]>(abis: TAbis) => {\n let merged: Abi = [];\n\n for (const abi of abis) {\n for (const item of abi) {\n // Don't add a duplicate items\n // if item is constructor, receive, fallback, or already in merged, don't add it\n if (\n item.type !== \"constructor\" &&\n item.type !== \"receive\" &&\n item.type !== \"fallback\" &&\n !merged.some((m) => isAbiItemEqual(m, item))\n ) {\n merged = [...merged, item];\n }\n }\n }\n\n return merged as MergeAbis<TAbis>;\n};\n","import { type Transport, type TransportConfig, createTransport } from \"viem\";\n\n/**\n * @description Creates a load balanced transport that spreads requests between child transports using a round robin algorithm.\n */\nexport const loadBalance = (_transports: Transport[]): Transport => {\n return ({ chain, retryCount, timeout }) => {\n const transports = _transports.map((t) =>\n chain === undefined\n ? t({ retryCount: 0, timeout })\n : t({ chain, retryCount: 0, timeout }),\n );\n\n let index = 0;\n\n return createTransport({\n key: \"loadBalance\",\n name: \"Load Balance\",\n request: (body) => {\n const response = transports[index++]!.request(body);\n if (index === transports.length) index = 0;\n\n return response;\n },\n retryCount,\n timeout,\n type: \"loadBalance\",\n } as TransportConfig);\n };\n};\n","import { type Transport, type TransportConfig, createTransport } from \"viem\";\nimport { createQueue } from \"./utils/queue.js\";\n\n/**\n * @description Creates a rate limited transport that throttles request throughput.\n */\nexport const rateLimit = (\n _transport: Transport,\n {\n requestsPerSecond,\n browser = true,\n }: { requestsPerSecond: number; browser?: boolean },\n): Transport => {\n return ({ chain, retryCount, timeout }) => {\n const transport =\n chain === undefined\n ? _transport({ retryCount: 0, timeout })\n : _transport({ chain, retryCount: 0, timeout });\n\n const queue = createQueue({\n frequency: requestsPerSecond,\n concurrency: Math.ceil(requestsPerSecond / 4),\n initialStart: true,\n browser,\n worker: (body: {\n method: string;\n params?: unknown;\n }) => {\n return transport.request(body);\n },\n });\n\n return createTransport({\n key: \"rateLimit\",\n name: \"Rate Limit\",\n request: (body) => {\n return queue.add(body);\n },\n retryCount,\n type: \"rateLimit\",\n } as TransportConfig);\n };\n};\n","export type PromiseWithResolvers<TPromise> = {\n resolve: (arg: TPromise) => void;\n reject: (error: Error) => void;\n promise: Promise<TPromise>;\n};\n\n/**\n * @description Application level polyfill.\n */\nexport const promiseWithResolvers = <\n TPromise,\n>(): PromiseWithResolvers<TPromise> => {\n let resolve: (arg: TPromise) => void;\n let reject: (error: Error) => void;\n const promise = new Promise<TPromise>((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n return { resolve: resolve!, reject: reject!, promise };\n};\n","import {\n type PromiseWithResolvers,\n promiseWithResolvers,\n} from \"./promiseWithResolvers.js\";\n\nexport type InnerQueue<returnType, taskType> = {\n task: taskType;\n resolve: (arg: returnType) => void;\n reject: (error: Error) => void;\n}[];\n\nexport type Queue<returnType, taskType> = {\n size: () => number;\n pending: () => Promise<number>;\n add: (task: taskType) => Promise<returnType>;\n clear: () => void;\n isStarted: () => boolean;\n start: () => Promise<void>;\n pause: () => void;\n onIdle: () => Promise<void>;\n onEmpty: () => Promise<void>;\n setParameters: (\n parameters: Pick<\n CreateQueueParameters<unknown, unknown>,\n \"frequency\" | \"concurrency\"\n >,\n ) => void;\n};\n\nexport type CreateQueueParameters<returnType, taskType> = {\n worker: (task: taskType) => Promise<returnType>;\n initialStart?: boolean;\n browser?: boolean;\n} & (\n | {\n concurrency: number;\n frequency: number;\n }\n | { concurrency: number; frequency?: undefined }\n | { concurrency?: undefined; frequency: number }\n);\n\nconst validateParameters = ({\n concurrency,\n frequency,\n}: Pick<\n CreateQueueParameters<unknown, unknown>,\n \"frequency\" | \"concurrency\"\n>) => {\n if (concurrency === undefined && frequency === undefined) {\n throw new Error(\n \"Invalid queue configuration, must specify either 'concurrency' or 'frequency'.\",\n );\n }\n\n if (concurrency !== undefined && concurrency <= 0) {\n throw new Error(\n `Invalid value for queue 'concurrency' option. Got ${concurrency}, expected a number greater than zero.`,\n );\n }\n\n if (frequency !== undefined && frequency <= 0) {\n throw new Error(\n `Invalid value for queue 'frequency' option. Got ${frequency}, expected a number greater than zero.`,\n );\n }\n};\n\nexport const createQueue = <returnType, taskType = void>({\n worker,\n initialStart = false,\n browser = true,\n ..._parameters\n}: CreateQueueParameters<returnType, taskType>): Queue<\n returnType,\n taskType\n> => {\n validateParameters(_parameters);\n\n const parameters: Pick<\n CreateQueueParameters<unknown, unknown>,\n \"frequency\" | \"concurrency\"\n > = _parameters;\n let queue = new Array<InnerQueue<returnType, taskType>[number]>();\n let pending = 0;\n let timestamp = 0;\n let requests = 0;\n let isStarted = initialStart;\n\n let timer: NodeJS.Timeout | undefined;\n\n let emptyPromiseWithResolvers:\n | (PromiseWithResolvers<void> & { completed: boolean })\n | undefined = undefined;\n let idlePromiseWithResolvers:\n | (PromiseWithResolvers<void> & { completed: boolean })\n | undefined = undefined;\n\n const next = () => {\n if (!isStarted) return;\n\n const _timestamp = Date.now();\n\n if (Math.floor(_timestamp / 1_000) !== timestamp) {\n requests = 0;\n timestamp = Math.floor(_timestamp / 1_000);\n }\n\n if (timer) return;\n\n while (\n (parameters.frequency !== undefined\n ? requests < parameters.frequency\n : true) &&\n (parameters.concurrency !== undefined\n ? pending < parameters.concurrency\n : true) &&\n queue.length > 0\n ) {\n const { task, resolve, reject } = queue.shift()!;\n\n requests++;\n pending++;\n\n worker(task)\n .then(resolve)\n .catch(reject)\n .finally(() => {\n pending--;\n\n if (\n idlePromiseWithResolvers !== undefined &&\n queue.length === 0 &&\n pending === 0\n ) {\n idlePromiseWithResolvers.resolve();\n idlePromiseWithResolvers.completed = true;\n }\n\n browser ? next() : process.nextTick(next);\n });\n\n if (emptyPromiseWithResolvers !== undefined && queue.length === 0) {\n emptyPromiseWithResolvers.resolve();\n emptyPromiseWithResolvers.completed = true;\n }\n }\n\n if (\n parameters.frequency !== undefined &&\n requests >= parameters.frequency\n ) {\n timer = setTimeout(\n () => {\n timer = undefined;\n next();\n },\n 1_000 - (_timestamp % 1_000),\n );\n return;\n }\n };\n\n return {\n size: () => queue.length,\n pending: () => {\n if (browser) {\n return new Promise<number>((resolve) =>\n setTimeout(() => resolve(pending)),\n );\n } else {\n return new Promise<number>((resolve) =>\n setImmediate(() => resolve(pending)),\n );\n }\n },\n add: (task: taskType) => {\n const { promise, resolve, reject } = promiseWithResolvers<returnType>();\n queue.push({ task, resolve, reject });\n\n next();\n\n return promise.catch((error) => {\n Error.captureStackTrace(error);\n throw error;\n });\n },\n clear: () => {\n queue = new Array<InnerQueue<returnType, taskType>[number]>();\n clearTimeout(timer);\n timer = undefined;\n },\n isStarted: () => isStarted,\n start: () => {\n if (browser) {\n return new Promise<number>((resolve) =>\n setTimeout(() => resolve(pending)),\n ).then(() => {\n isStarted = true;\n next();\n });\n } else {\n return new Promise<number>((resolve) =>\n process.nextTick(() => resolve(pending)),\n ).then(() => {\n isStarted = true;\n next();\n });\n }\n },\n pause: () => {\n isStarted = false;\n },\n onIdle: () => {\n if (\n idlePromiseWithResolvers === undefined ||\n idlePromiseWithResolvers.completed\n ) {\n if (queue.length === 0 && pending === 0) return Promise.resolve();\n\n idlePromiseWithResolvers = {\n ...promiseWithResolvers<void>(),\n completed: false,\n };\n }\n return idlePromiseWithResolvers.promise;\n },\n onEmpty: () => {\n if (\n emptyPromiseWithResolvers === undefined ||\n emptyPromiseWithResolvers.completed\n ) {\n if (queue.length === 0) return Promise.resolve();\n\n emptyPromiseWithResolvers = {\n ...promiseWithResolvers<void>(),\n completed: false,\n };\n }\n return emptyPromiseWithResolvers.promise;\n },\n setParameters: (_parameters) => {\n validateParameters(_parameters);\n\n if (\"frequency\" in _parameters) {\n parameters.frequency = _parameters.frequency;\n }\n if (\"concurrency\" in _parameters) {\n parameters.concurrency = _parameters.concurrency;\n }\n },\n } as Queue<returnType, taskType>;\n};\n","type _ReplaceBigInts<\n arr extends readonly unknown[],\n type,\n result extends readonly unknown[] = [],\n> = arr extends [infer first, ...infer rest]\n ? _ReplaceBigInts<\n rest,\n type,\n readonly [...result, first extends bigint ? type : first]\n >\n : result;\n\nexport type ReplaceBigInts<obj, type> = obj extends bigint\n ? type\n : obj extends unknown[]\n ? _ReplaceBigInts<Readonly<obj>, type>\n : obj extends readonly []\n ? _ReplaceBigInts<obj, type>\n : obj extends object\n ? { [key in keyof obj]: ReplaceBigInts<obj[key], type> }\n : obj;\n\nexport const replaceBigInts = <const T, const type>(\n obj: T,\n replacer: (x: bigint) => type,\n): ReplaceBigInts<T, type> => {\n if (typeof obj === \"bigint\") return replacer(obj) as ReplaceBigInts<T, type>;\n if (Array.isArray(obj))\n return obj.map((x) => replaceBigInts(x, replacer)) as ReplaceBigInts<\n T,\n type\n >;\n if (obj && typeof obj === \"object\")\n return Object.fromEntries(\n Object.entries(obj).map(([k, v]) => [k, replaceBigInts(v, replacer)]),\n ) as ReplaceBigInts<T, type>;\n return obj as ReplaceBigInts<T, type>;\n};\n","export const BaseRegistrar = [\n {\n inputs: [\n { internalType: \"contract ENS\", name: \"registry_\", type: \"address\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"bytes32\", name: \"baseNode_\", type: \"bytes32\" },\n { internalType: \"string\", name: \"baseURI_\", type: \"string\" },\n { internalType: \"string\", name: \"collectionURI_\", type: \"string\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n { inputs: [], name: \"AccountBalanceOverflow\", type: \"error\" },\n { inputs: [], name: \"AlreadyInitialized\", type: \"error\" },\n { inputs: [], name: \"BalanceQueryForZeroAddress\", type: \"error\" },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"Expired\",\n type: \"error\",\n },\n { inputs: [], name: \"NewOwnerIsZeroAddress\", type: \"error\" },\n { inputs: [], name: \"NoHandoverRequest\", type: \"error\" },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"NonexistentToken\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n { internalType: \"address\", name: \"sender\", type: \"address\" },\n ],\n name: \"NotApprovedOwner\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"NotAvailable\",\n type: \"error\",\n },\n { inputs: [], name: \"NotOwnerNorApproved\", type: \"error\" },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"NotRegisteredOrInGrace\",\n type: \"error\",\n },\n { inputs: [], name: \"OnlyController\", type: \"error\" },\n { inputs: [], name: \"RegistrarNotLive\", type: \"error\" },\n { inputs: [], name: \"TokenAlreadyExists\", type: \"error\" },\n { inputs: [], name: \"TokenDoesNotExist\", type: \"error\" },\n { inputs: [], name: \"TransferFromIncorrectOwner\", type: \"error\" },\n { inputs: [], name: \"TransferToNonERC721ReceiverImplementer\", type: \"error\" },\n { inputs: [], name: \"TransferToZeroAddress\", type: \"error\" },\n { inputs: [], name: \"Unauthorized\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"isApproved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"_fromTokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"_toTokenId\",\n type: \"uint256\",\n },\n ],\n name: \"BatchMetadataUpdate\",\n type: \"event\",\n },\n { anonymous: false, inputs: [], name: \"ContractURIUpdated\", type: \"event\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"ControllerAdded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"ControllerRemoved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n { indexed: false, internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"NameRegisteredWithRecord\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverCanceled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverRequested\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"oldOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"controller\", type: \"address\" }],\n name: \"addController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"account\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ internalType: \"uint256\", name: \"result\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"cancelOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"completeOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"contractURI\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"controller\", type: \"address\" }],\n name: \"controllers\",\n outputs: [{ internalType: \"bool\", name: \"isApproved\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"getApproved\",\n outputs: [{ internalType: \"address\", name: \"result\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ internalType: \"bool\", name: \"result\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"isAvailable\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"nameExpires\",\n outputs: [{ internalType: \"uint256\", name: \"expiry\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"result\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"ownerOf\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"ownershipHandoverExpiresAt\",\n outputs: [{ internalType: \"uint256\", name: \"result\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n ],\n name: \"reclaim\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"register\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"registerOnly\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"registerWithRecord\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"registry\",\n outputs: [{ internalType: \"contract ENS\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"controller\", type: \"address\" }],\n name: \"removeController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"requestOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n { internalType: \"bool\", name: \"isApproved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"baseURI_\", type: \"string\" }],\n name: \"setBaseTokenURI\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"collectionURI_\", type: \"string\" }],\n name: \"setContractURI\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"resolver\", type: \"address\" }],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes4\", name: \"interfaceID\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"tokenURI\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n","export const BaseRegistrar = [\n {\n inputs: [\n { internalType: \"contract ENS\", name: \"_ens\", type: \"address\" },\n { internalType: \"bytes32\", name: \"_baseNode\", type: \"bytes32\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"approved\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: false, internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"ControllerAdded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"ControllerRemoved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameMigrated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"GRACE_PERIOD\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"controller\", type: \"address\" }],\n name: \"addController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"available\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"controllers\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ens\",\n outputs: [{ internalType: \"contract ENS\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"getApproved\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"nameExpires\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"ownerOf\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n ],\n name: \"reclaim\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"register\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"registerOnly\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"controller\", type: \"address\" }],\n name: \"removeController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n { internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"resolver\", type: \"address\" }],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes4\", name: \"interfaceID\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"tokenURI\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","export const BaseRegistrar = [\n {\n constant: true,\n inputs: [{ name: \"interfaceID\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"tokenId\", type: \"uint256\" }],\n name: \"getApproved\",\n outputs: [{ name: \"\", type: \"address\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"to\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"id\", type: \"uint256\" },\n { name: \"owner\", type: \"address\" },\n ],\n name: \"reclaim\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"ens\",\n outputs: [{ name: \"\", type: \"address\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"transferPeriodEnds\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [{ name: \"resolver\", type: \"address\" }],\n name: \"setResolver\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"tokenId\", type: \"uint256\" }],\n name: \"ownerOf\",\n outputs: [{ name: \"\", type: \"address\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"MIGRATION_LOCK_PERIOD\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"owner\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"owner\",\n outputs: [{ name: \"\", type: \"address\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"isOwner\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"id\", type: \"uint256\" }],\n name: \"available\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"to\", type: \"address\" },\n { name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [{ name: \"controller\", type: \"address\" }],\n name: \"addController\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"previousRegistrar\",\n outputs: [{ name: \"\", type: \"address\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"_data\", type: \"bytes\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"GRACE_PERIOD\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"id\", type: \"uint256\" },\n { name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"id\", type: \"uint256\" }],\n name: \"nameExpires\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"\", type: \"address\" }],\n name: \"controllers\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"baseNode\",\n outputs: [{ name: \"\", type: \"bytes32\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"label\", type: \"bytes32\" },\n { name: \"deed\", type: \"address\" },\n { name: \"\", type: \"uint256\" },\n ],\n name: \"acceptRegistrarTransfer\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [{ name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [{ name: \"controller\", type: \"address\" }],\n name: \"removeController\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"id\", type: \"uint256\" },\n { name: \"owner\", type: \"address\" },\n { name: \"duration\", type: \"uint256\" },\n ],\n name: \"register\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"_ens\", type: \"address\" },\n { name: \"_previousRegistrar\", type: \"address\" },\n { name: \"_baseNode\", type: \"bytes32\" },\n { name: \"_transferPeriodEnds\", type: \"uint256\" },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: true, name: \"controller\", type: \"address\" }],\n name: \"ControllerAdded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: true, name: \"controller\", type: \"address\" }],\n name: \"ControllerRemoved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"id\", type: \"uint256\" },\n { indexed: true, name: \"owner\", type: \"address\" },\n { indexed: false, name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameMigrated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"id\", type: \"uint256\" },\n { indexed: true, name: \"owner\", type: \"address\" },\n { indexed: false, name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"id\", type: \"uint256\" },\n { indexed: false, name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"previousOwner\", type: \"address\" },\n { indexed: true, name: \"newOwner\", type: \"address\" },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"from\", type: \"address\" },\n { indexed: true, name: \"to\", type: \"address\" },\n { indexed: true, name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"owner\", type: \"address\" },\n { indexed: true, name: \"approved\", type: \"address\" },\n { indexed: true, name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"owner\", type: \"address\" },\n { indexed: true, name: \"operator\", type: \"address\" },\n { indexed: false, name: \"approved\", type: \"bool\" },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n] as const;\n","export const EarlyAccessRegistrarController = [\n {\n inputs: [\n {\n internalType: \"contract BaseRegistrar\",\n name: \"base_\",\n type: \"address\",\n },\n {\n internalType: \"contract IPriceOracle\",\n name: \"prices_\",\n type: \"address\",\n },\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"reverseRegistrar_\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"bytes32\", name: \"rootNode_\", type: \"bytes32\" },\n { internalType: \"string\", name: \"rootName_\", type: \"string\" },\n { internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"target\", type: \"address\" }],\n name: \"AddressEmptyCode\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"AddressInsufficientBalance\",\n type: \"error\",\n },\n { inputs: [], name: \"AlreadyInitialized\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"sender\", type: \"address\" }],\n name: \"AlreadyRegisteredWithDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"duration\", type: \"uint256\" }],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n { inputs: [], name: \"FailedInnerCall\", type: \"error\" },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InactiveDiscount\",\n type: \"error\",\n },\n { inputs: [], name: \"InsufficientValue\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"InvalidDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InvalidDiscountAmount\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidPaymentReceiver\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"address\", name: \"validator\", type: \"address\" },\n ],\n name: \"InvalidValidator\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n { inputs: [], name: \"NewOwnerIsZeroAddress\", type: \"error\" },\n { inputs: [], name: \"NoHandoverRequest\", type: \"error\" },\n { inputs: [], name: \"ResolverRequiredWhenDataSupplied\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"token\", type: \"address\" }],\n name: \"SafeERC20FailedOperation\",\n type: \"error\",\n },\n { inputs: [], name: \"TransferFailed\", type: \"error\" },\n { inputs: [], name: \"Unauthorized\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"registrant\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"discountKey\",\n type: \"bytes32\",\n },\n ],\n name: \"DiscountApplied\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"discountKey\",\n type: \"bytes32\",\n },\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct EARegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"DiscountUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"payee\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"price\",\n type: \"uint256\",\n },\n ],\n name: \"ETHPaymentProcessed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverCanceled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverRequested\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"oldOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPaymentReceiver\",\n type: \"address\",\n },\n ],\n name: \"PaymentReceiverUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPrices\",\n type: \"address\",\n },\n ],\n name: \"PriceOracleUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newReverseRegistrar\",\n type: \"address\",\n },\n ],\n name: \"ReverseRegistrarUpdated\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MIN_NAME_LENGTH\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"available\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"cancelOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"completeOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n ],\n internalType: \"struct EARegistrarController.RegisterRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"validationData\", type: \"bytes\" },\n ],\n name: \"discountedRegister\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n ],\n name: \"discountedRegisterPrice\",\n outputs: [{ internalType: \"uint256\", name: \"price\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"registrant\", type: \"address\" }],\n name: \"discountedRegistrants\",\n outputs: [{ internalType: \"bool\", name: \"hasRegisteredWithDiscount\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"discounts\",\n outputs: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActiveDiscounts\",\n outputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct EARegistrarController.DiscountDetails[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address[]\", name: \"addresses\", type: \"address[]\" }],\n name: \"hasRegisteredWithDiscount\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"result\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"ownershipHandoverExpiresAt\",\n outputs: [{ internalType: \"uint256\", name: \"result\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paymentReceiver\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [{ internalType: \"contract IPriceOracle\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_token\", type: \"address\" },\n { internalType: \"address\", name: \"_to\", type: \"address\" },\n { internalType: \"uint256\", name: \"_amount\", type: \"uint256\" },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"registerPrice\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"base\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"premium\", type: \"uint256\" },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"requestOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [{ internalType: \"contract IReverseRegistrar\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rootName\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rootNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct EARegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"setDiscountDetails\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" }],\n name: \"setPaymentReceiver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IPriceOracle\",\n name: \"prices_\",\n type: \"address\",\n },\n ],\n name: \"setPriceOracle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"reverse_\",\n type: \"address\",\n },\n ],\n name: \"setReverseRegistrar\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"valid\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdrawETH\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","export const RegistrarController = [\n {\n inputs: [\n {\n internalType: \"contract BaseRegistrar\",\n name: \"base_\",\n type: \"address\",\n },\n {\n internalType: \"contract IPriceOracle\",\n name: \"prices_\",\n type: \"address\",\n },\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"reverseRegistrar_\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"bytes32\", name: \"rootNode_\", type: \"bytes32\" },\n { internalType: \"string\", name: \"rootName_\", type: \"string\" },\n { internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"target\", type: \"address\" }],\n name: \"AddressEmptyCode\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"AddressInsufficientBalance\",\n type: \"error\",\n },\n { inputs: [], name: \"AlreadyInitialized\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"sender\", type: \"address\" }],\n name: \"AlreadyRegisteredWithDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"duration\", type: \"uint256\" }],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n { inputs: [], name: \"FailedInnerCall\", type: \"error\" },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InactiveDiscount\",\n type: \"error\",\n },\n { inputs: [], name: \"InsufficientValue\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"InvalidDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InvalidDiscountAmount\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidPaymentReceiver\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"address\", name: \"validator\", type: \"address\" },\n ],\n name: \"InvalidValidator\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n { inputs: [], name: \"NewOwnerIsZeroAddress\", type: \"error\" },\n { inputs: [], name: \"NoHandoverRequest\", type: \"error\" },\n { inputs: [], name: \"ResolverRequiredWhenDataSupplied\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"token\", type: \"address\" }],\n name: \"SafeERC20FailedOperation\",\n type: \"error\",\n },\n { inputs: [], name: \"TransferFailed\", type: \"error\" },\n { inputs: [], name: \"Unauthorized\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"registrant\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"discountKey\",\n type: \"bytes32\",\n },\n ],\n name: \"DiscountApplied\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"discountKey\",\n type: \"bytes32\",\n },\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct RegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"DiscountUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"payee\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"price\",\n type: \"uint256\",\n },\n ],\n name: \"ETHPaymentProcessed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverCanceled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverRequested\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"oldOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPaymentReceiver\",\n type: \"address\",\n },\n ],\n name: \"PaymentReceiverUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPrices\",\n type: \"address\",\n },\n ],\n name: \"PriceOracleUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newReverseRegistrar\",\n type: \"address\",\n },\n ],\n name: \"ReverseRegistrarUpdated\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MIN_NAME_LENGTH\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"available\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"cancelOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"completeOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n ],\n internalType: \"struct RegistrarController.RegisterRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"validationData\", type: \"bytes\" },\n ],\n name: \"discountedRegister\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n ],\n name: \"discountedRegisterPrice\",\n outputs: [{ internalType: \"uint256\", name: \"price\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"registrant\", type: \"address\" }],\n name: \"discountedRegistrants\",\n outputs: [{ internalType: \"bool\", name: \"hasRegisteredWithDiscount\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"discounts\",\n outputs: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActiveDiscounts\",\n outputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct RegistrarController.DiscountDetails[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address[]\", name: \"addresses\", type: \"address[]\" }],\n name: \"hasRegisteredWithDiscount\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"launchTime\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"result\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"ownershipHandoverExpiresAt\",\n outputs: [{ internalType: \"uint256\", name: \"result\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paymentReceiver\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [{ internalType: \"contract IPriceOracle\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_token\", type: \"address\" },\n { internalType: \"address\", name: \"_to\", type: \"address\" },\n { internalType: \"uint256\", name: \"_amount\", type: \"uint256\" },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n ],\n internalType: \"struct RegistrarController.RegisterRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"register\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"registerPrice\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"base\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"premium\", type: \"uint256\" },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"requestOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [{ internalType: \"contract IReverseRegistrar\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rootName\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rootNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct RegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"setDiscountDetails\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"launchTime_\", type: \"uint256\" }],\n name: \"setLaunchTime\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" }],\n name: \"setPaymentReceiver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IPriceOracle\",\n name: \"prices_\",\n type: \"address\",\n },\n ],\n name: \"setPriceOracle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"reverse_\",\n type: \"address\",\n },\n ],\n name: \"setReverseRegistrar\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"valid\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdrawETH\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","export const UpgradeableRegistrarController = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n inputs: [{ internalType: \"address\", name: \"sender\", type: \"address\" }],\n name: \"AlreadyRegisteredWithDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"duration\", type: \"uint256\" }],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InactiveDiscount\",\n type: \"error\",\n },\n { inputs: [], name: \"InsufficientValue\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"InvalidDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InvalidDiscountAmount\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidInitialization\", type: \"error\" },\n { inputs: [], name: \"InvalidPaymentReceiver\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"address\", name: \"validator\", type: \"address\" },\n ],\n name: \"InvalidValidator\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"NameNotValid\",\n type: \"error\",\n },\n { inputs: [], name: \"NotInitializing\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"OwnableInvalidOwner\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"OwnableUnauthorizedAccount\",\n type: \"error\",\n },\n { inputs: [], name: \"ResolverRequiredWhenDataSupplied\", type: \"error\" },\n { inputs: [], name: \"TransferFailed\", type: \"error\" },\n { inputs: [], name: \"ZeroAddress\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"registrant\", type: \"address\" },\n { indexed: true, internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n ],\n name: \"DiscountApplied\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct UpgradeableRegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"DiscountUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"payee\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"price\", type: \"uint256\" },\n ],\n name: \"ETHPaymentProcessed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"uint64\", name: \"version\", type: \"uint64\" }],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"address\", name: \"newL2ReverseRegistrar\", type: \"address\" },\n ],\n name: \"L2ReverseRegistrarUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n { indexed: true, internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { indexed: true, internalType: \"address\", name: \"owner\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n { indexed: true, internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { indexed: false, internalType: \"uint256\", name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"previousOwner\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newOwner\", type: \"address\" },\n ],\n name: \"OwnershipTransferStarted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"previousOwner\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newOwner\", type: \"address\" },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"address\", name: \"newPaymentReceiver\", type: \"address\" },\n ],\n name: \"PaymentReceiverUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"address\", name: \"newPrices\", type: \"address\" }],\n name: \"PriceOracleUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"address\", name: \"newReverseRegistrar\", type: \"address\" },\n ],\n name: \"ReverseRegistrarUpdated\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MIN_NAME_LENGTH\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"acceptOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"available\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n { internalType: \"uint256[]\", name: \"coinTypes\", type: \"uint256[]\" },\n { internalType: \"uint256\", name: \"signatureExpiry\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct UpgradeableRegistrarController.RegisterRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"validationData\", type: \"bytes\" },\n ],\n name: \"discountedRegister\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n ],\n name: \"discountedRegisterPrice\",\n outputs: [{ internalType: \"uint256\", name: \"price\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" }],\n name: \"discounts\",\n outputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct UpgradeableRegistrarController.DiscountDetails\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActiveDiscounts\",\n outputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct UpgradeableRegistrarController.DiscountDetails[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address[]\", name: \"addresses\", type: \"address[]\" }],\n name: \"hasRegisteredWithDiscount\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"contract IBaseRegistrar\", name: \"base_\", type: \"address\" },\n { internalType: \"contract IPriceOracle\", name: \"prices_\", type: \"address\" },\n { internalType: \"contract IReverseRegistrar\", name: \"reverseRegistrar_\", type: \"address\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"bytes32\", name: \"rootNode_\", type: \"bytes32\" },\n { internalType: \"string\", name: \"rootName_\", type: \"string\" },\n { internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" },\n { internalType: \"address\", name: \"legacyRegistrarController_\", type: \"address\" },\n { internalType: \"address\", name: \"legacyL2Resolver_\", type: \"address\" },\n { internalType: \"address\", name: \"l2ReverseRegistrar_\", type: \"address\" },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paymentReceiver\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pendingOwner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [{ internalType: \"contract IPriceOracle\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n { internalType: \"uint256[]\", name: \"coinTypes\", type: \"uint256[]\" },\n { internalType: \"uint256\", name: \"signatureExpiry\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct UpgradeableRegistrarController.RegisterRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"register\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"registerPrice\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"base\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"premium\", type: \"uint256\" },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [{ internalType: \"contract IReverseRegistrar\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct UpgradeableRegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"setDiscountDetails\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"l2ReverseRegistrar_\", type: \"address\" }],\n name: \"setL2ReverseRegistrar\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" }],\n name: \"setPaymentReceiver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"contract IPriceOracle\", name: \"prices_\", type: \"address\" }],\n name: \"setPriceOracle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"signatureExpiry\", type: \"uint256\" },\n { internalType: \"uint256[]\", name: \"coinTypes\", type: \"uint256[]\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"setReverseRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"contract IReverseRegistrar\", name: \"reverse_\", type: \"address\" }],\n name: \"setReverseRegistrar\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"valid\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n { inputs: [], name: \"withdrawETH\", outputs: [], stateMutability: \"nonpayable\", type: \"function\" },\n] as const;\n","export const EthRegistrarController = [\n {\n inputs: [\n {\n internalType: \"contract BaseRegistrarImplementation\",\n name: \"_base\",\n type: \"address\",\n },\n {\n internalType: \"contract IPriceOracle\",\n name: \"_prices\",\n type: \"address\",\n },\n { internalType: \"uint256\", name: \"_minCommitmentAge\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"_maxCommitmentAge\", type: \"uint256\" },\n {\n internalType: \"contract ReverseRegistrar\",\n name: \"_reverseRegistrar\",\n type: \"address\",\n },\n {\n internalType: \"contract INameWrapper\",\n name: \"_nameWrapper\",\n type: \"address\",\n },\n { internalType: \"contract ENS\", name: \"_ens\", type: \"address\" },\n {\n internalType: \"contract PohVerifier\",\n name: \"_pohVerifier\",\n type: \"address\",\n },\n {\n internalType: \"contract PohRegistrationManager\",\n name: \"_pohRegistrationManager\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"_baseNode\", type: \"bytes32\" },\n { internalType: \"string\", name: \"_baseDomain\", type: \"string\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n { inputs: [], name: \"BaseNodeAsETHNodeOrROOTNodeNotAllowed\", type: \"error\" },\n {\n inputs: [{ internalType: \"bytes32\", name: \"commitment\", type: \"bytes32\" }],\n name: \"CommitmentTooNew\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"commitment\", type: \"bytes32\" }],\n name: \"CommitmentTooOld\",\n type: \"error\",\n },\n { inputs: [], name: \"DifferentBaseDomainBaseNode\", type: \"error\" },\n {\n inputs: [{ internalType: \"uint256\", name: \"duration\", type: \"uint256\" }],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n { inputs: [], name: \"EmptyStringNotAllowed\", type: \"error\" },\n { inputs: [], name: \"InsufficientValue\", type: \"error\" },\n { inputs: [], name: \"MaxCommitmentAgeTooHigh\", type: \"error\" },\n { inputs: [], name: \"MaxCommitmentAgeTooLow\", type: \"error\" },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"OwnerAlreadyRegistered\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"PohVerificationFailed\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"currentTime\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"renewTimeStart\", type: \"uint256\" },\n ],\n name: \"RenewPOHNotStarted\",\n type: \"error\",\n },\n { inputs: [], name: \"ResolverRequiredWhenDataSupplied\", type: \"error\" },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"sender\", type: \"address\" },\n ],\n name: \"SenderNotOwner\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"commitment\", type: \"bytes32\" }],\n name: \"UnexpiredCommitmentExists\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"duration\", type: \"uint256\" }],\n name: \"WrongPohRegistrationDuration\",\n type: \"error\",\n },\n { inputs: [], name: \"ZeroAddressNotAllowed\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"baseCost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"cost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewedPoh\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"OwnerNameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"PohNameRegistered\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"GRACE_PERIOD\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"POH_REGISTRATION_DURATION\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"available\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseDomain\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"commitment\", type: \"bytes32\" }],\n name: \"commit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n name: \"commitments\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"secret\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n ],\n name: \"makeCommitment\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"maxCommitmentAge\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"minCommitmentAge\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nameWrapper\",\n outputs: [{ internalType: \"contract INameWrapper\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n ],\n name: \"ownerRegister\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pohRegistrationManager\",\n outputs: [\n {\n internalType: \"contract PohRegistrationManager\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pohVerifier\",\n outputs: [{ internalType: \"contract PohVerifier\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [{ internalType: \"contract IPriceOracle\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_token\", type: \"address\" },\n { internalType: \"address\", name: \"_to\", type: \"address\" },\n { internalType: \"uint256\", name: \"_amount\", type: \"uint256\" },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_address\", type: \"address\" }],\n name: \"redeemed\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"secret\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n ],\n name: \"register\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"secret\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"registerPoh\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"renewPoh\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"base\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"premium\", type: \"uint256\" },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [{ internalType: \"contract ReverseRegistrar\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes4\", name: \"interfaceID\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"valid\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdraw\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","export const LegacyEthRegistrarController = [\n {\n constant: true,\n inputs: [{ name: \"interfaceID\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [],\n name: \"withdraw\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [{ name: \"_prices\", type: \"address\" }],\n name: \"setPriceOracle\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_minCommitmentAge\", type: \"uint256\" },\n { name: \"_maxCommitmentAge\", type: \"uint256\" },\n ],\n name: \"setCommitmentAges\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"\", type: \"bytes32\" }],\n name: \"commitments\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n { name: \"name\", type: \"string\" },\n { name: \"duration\", type: \"uint256\" },\n ],\n name: \"rentPrice\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"name\", type: \"string\" },\n { name: \"owner\", type: \"address\" },\n { name: \"duration\", type: \"uint256\" },\n { name: \"secret\", type: \"bytes32\" },\n ],\n name: \"register\",\n outputs: [],\n payable: true,\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"minCommitmentAge\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"owner\",\n outputs: [{ name: \"\", type: \"address\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"isOwner\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"name\", type: \"string\" }],\n name: \"valid\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"name\", type: \"string\" },\n { name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [],\n payable: true,\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"name\", type: \"string\" }],\n name: \"available\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"maxCommitmentAge\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [{ name: \"commitment\", type: \"bytes32\" }],\n name: \"commit\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [{ name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n { name: \"name\", type: \"string\" },\n { name: \"owner\", type: \"address\" },\n { name: \"secret\", type: \"bytes32\" },\n ],\n name: \"makeCommitment\",\n outputs: [{ name: \"\", type: \"bytes32\" }],\n payable: false,\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"_base\", type: \"address\" },\n { name: \"_prices\", type: \"address\" },\n { name: \"_minCommitmentAge\", type: \"uint256\" },\n { name: \"_maxCommitmentAge\", type: \"uint256\" },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, name: \"name\", type: \"string\" },\n { indexed: true, name: \"label\", type: \"bytes32\" },\n { indexed: true, name: \"owner\", type: \"address\" },\n { indexed: false, name: \"cost\", type: \"uint256\" },\n { indexed: false, name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, name: \"name\", type: \"string\" },\n { indexed: true, name: \"label\", type: \"bytes32\" },\n { indexed: false, name: \"cost\", type: \"uint256\" },\n { indexed: false, name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: true, name: \"oracle\", type: \"address\" }],\n name: \"NewPriceOracle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"previousOwner\", type: \"address\" },\n { indexed: true, name: \"newOwner\", type: \"address\" },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n] as const;\n","export const UnwrappedEthRegistrarController = [\n {\n inputs: [\n {\n internalType: \"contract BaseRegistrarImplementation\",\n name: \"_base\",\n type: \"address\",\n },\n {\n internalType: \"contract IPriceOracle\",\n name: \"_prices\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_minCommitmentAge\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_maxCommitmentAge\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"_reverseRegistrar\",\n type: \"address\",\n },\n {\n internalType: \"contract IDefaultReverseRegistrar\",\n name: \"_defaultReverseRegistrar\",\n type: \"address\",\n },\n {\n internalType: \"contract ENS\",\n name: \"_ens\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"CommitmentNotFound\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"minimumCommitmentTimestamp\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"currentTimestamp\",\n type: \"uint256\",\n },\n ],\n name: \"CommitmentTooNew\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"maximumCommitmentTimestamp\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"currentTimestamp\",\n type: \"uint256\",\n },\n ],\n name: \"CommitmentTooOld\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InsufficientValue\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MaxCommitmentAgeTooHigh\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MaxCommitmentAgeTooLow\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ResolverRequiredForReverseRecord\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ResolverRequiredWhenDataSupplied\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"UnexpiredCommitmentExists\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"baseCost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"cost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"available\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"commit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n name: \"commitments\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"defaultReverseRegistrar\",\n outputs: [\n {\n internalType: \"contract IDefaultReverseRegistrar\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ens\",\n outputs: [\n {\n internalType: \"contract ENS\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n {\n internalType: \"uint8\",\n name: \"reverseRecord\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IETHRegistrarController.Registration\",\n name: \"registration\",\n type: \"tuple\",\n },\n ],\n name: \"makeCommitment\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"maxCommitmentAge\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"minCommitmentAge\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [\n {\n internalType: \"contract IPriceOracle\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_amount\",\n type: \"uint256\",\n },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n {\n internalType: \"uint8\",\n name: \"reverseRecord\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IETHRegistrarController.Registration\",\n name: \"registration\",\n type: \"tuple\",\n },\n ],\n name: \"register\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"base\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"valid\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdraw\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","export const WrappedEthRegistrarController = [\n {\n inputs: [\n {\n internalType: \"contract BaseRegistrarImplementation\",\n name: \"_base\",\n type: \"address\",\n },\n {\n internalType: \"contract IPriceOracle\",\n name: \"_prices\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_minCommitmentAge\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_maxCommitmentAge\",\n type: \"uint256\",\n },\n {\n internalType: \"contract ReverseRegistrar\",\n name: \"_reverseRegistrar\",\n type: \"address\",\n },\n {\n internalType: \"contract INameWrapper\",\n name: \"_nameWrapper\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"CommitmentTooNew\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"CommitmentTooOld\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InsufficientValue\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MaxCommitmentAgeTooHigh\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MaxCommitmentAgeTooLow\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ResolverRequiredWhenDataSupplied\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"UnexpiredCommitmentExists\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"baseCost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"cost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"available\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"commit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n name: \"commitments\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n {\n internalType: \"bool\",\n name: \"reverseRecord\",\n type: \"bool\",\n },\n {\n internalType: \"uint16\",\n name: \"ownerControlledFuses\",\n type: \"uint16\",\n },\n ],\n name: \"makeCommitment\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"maxCommitmentAge\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"minCommitmentAge\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nameWrapper\",\n outputs: [\n {\n internalType: \"contract INameWrapper\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [\n {\n internalType: \"contract IPriceOracle\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_amount\",\n type: \"uint256\",\n },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n {\n internalType: \"bool\",\n name: \"reverseRecord\",\n type: \"bool\",\n },\n {\n internalType: \"uint16\",\n name: \"ownerControlledFuses\",\n type: \"uint16\",\n },\n ],\n name: \"register\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"base\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [\n {\n internalType: \"contract ReverseRegistrar\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"valid\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdraw\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","import { type Chain, localhost } from \"viem/chains\";\n\n/**\n * The Default Chain Id for Devnet\n * @see https://github.com/ensdomains/contracts-v2/blob/762de44d60b2588b2e92a6d29df941c4de821ae6/contracts/script/setup.ts#L40\n */\nconst DEVNET_DEFAULT_CHAIN_ID = 0xeeeeed;\n\nexport const ensTestEnvChain = {\n ...localhost,\n id: DEVNET_DEFAULT_CHAIN_ID,\n name: \"ens-test-env\",\n rpcUrls: { default: { http: [\"http://localhost:8545\"] } },\n} as const satisfies Chain;\n","export const AbstractReverseResolver = [\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"dns\",\n type: \"bytes\",\n },\n ],\n name: \"DNSDecodingFailed\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"UnreachableName\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"UnsupportedResolverProfile\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"chainId\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"coinType\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"resolve\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"result\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"addrs\",\n type: \"address[]\",\n },\n ],\n name: \"resolveNames\",\n outputs: [\n {\n internalType: \"string[]\",\n name: \"names\",\n type: \"string[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","export const LegacyPublicResolver = [\n {\n inputs: [\n {\n internalType: \"contract ENS\",\n name: \"_ens\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"contentType\",\n type: \"uint256\",\n },\n ],\n name: \"ABIChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"a\",\n type: \"address\",\n },\n ],\n name: \"AddrChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"newAddress\",\n type: \"bytes\",\n },\n ],\n name: \"AddressChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"isAuthorised\",\n type: \"bool\",\n },\n ],\n name: \"AuthorisationChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"hash\",\n type: \"bytes\",\n },\n ],\n name: \"ContenthashChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"resource\",\n type: \"uint16\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"record\",\n type: \"bytes\",\n },\n ],\n name: \"DNSRecordChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"resource\",\n type: \"uint16\",\n },\n ],\n name: \"DNSRecordDeleted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"DNSZoneCleared\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"implementer\",\n type: \"address\",\n },\n ],\n name: \"InterfaceChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"NameChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n name: \"PubkeyChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"string\",\n name: \"indexedKey\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n ],\n name: \"TextChanged\",\n type: \"event\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"contentTypes\",\n type: \"uint256\",\n },\n ],\n name: \"ABI\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"addr\",\n outputs: [\n {\n internalType: \"address payable\",\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n ],\n name: \"addr\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"authorisations\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"clearDNSZone\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"contenthash\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"name\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint16\",\n name: \"resource\",\n type: \"uint16\",\n },\n ],\n name: \"dnsRecord\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"name\",\n type: \"bytes32\",\n },\n ],\n name: \"hasDNSRecords\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"interfaceImplementer\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n ],\n name: \"multicall\",\n outputs: [\n {\n internalType: \"bytes[]\",\n name: \"results\",\n type: \"bytes[]\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"pubkey\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"contentType\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"setABI\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"a\",\n type: \"bytes\",\n },\n ],\n name: \"setAddr\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"a\",\n type: \"address\",\n },\n ],\n name: \"setAddr\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"isAuthorised\",\n type: \"bool\",\n },\n ],\n name: \"setAuthorisation\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"hash\",\n type: \"bytes\",\n },\n ],\n name: \"setContenthash\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"setDNSRecords\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n {\n internalType: \"address\",\n name: \"implementer\",\n type: \"address\",\n },\n ],\n name: \"setInterface\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"setName\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n name: \"setPubkey\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n ],\n name: \"setText\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n ],\n name: \"text\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","export const Resolver = [\n {\n inputs: [\n {\n internalType: \"contract ENS\",\n name: \"_ens\",\n type: \"address\",\n },\n {\n internalType: \"contract INameWrapper\",\n name: \"wrapperAddress\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_trustedETHController\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_trustedReverseRegistrar\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"contentType\",\n type: \"uint256\",\n },\n ],\n name: \"ABIChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"a\",\n type: \"address\",\n },\n ],\n name: \"AddrChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"newAddress\",\n type: \"bytes\",\n },\n ],\n name: \"AddressChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"delegate\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"Approved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"hash\",\n type: \"bytes\",\n },\n ],\n name: \"ContenthashChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"resource\",\n type: \"uint16\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"record\",\n type: \"bytes\",\n },\n ],\n name: \"DNSRecordChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"lastzonehash\",\n type: \"bytes\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"zonehash\",\n type: \"bytes\",\n },\n ],\n name: \"DNSZonehashChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"implementer\",\n type: \"address\",\n },\n ],\n name: \"InterfaceChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"NameChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n name: \"PubkeyChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"string\",\n name: \"indexedKey\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n ],\n name: \"TextChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"newVersion\",\n type: \"uint64\",\n },\n ],\n name: \"VersionChanged\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"contentTypes\",\n type: \"uint256\",\n },\n ],\n name: \"ABI\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"addr\",\n outputs: [\n {\n internalType: \"address payable\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n ],\n name: \"addr\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"delegate\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"clearRecords\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"contenthash\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"name\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint16\",\n name: \"resource\",\n type: \"uint16\",\n },\n ],\n name: \"dnsRecord\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"name\",\n type: \"bytes32\",\n },\n ],\n name: \"hasDNSRecords\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"interfaceImplementer\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"delegate\",\n type: \"address\",\n },\n ],\n name: \"isApprovedFor\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n ],\n name: \"multicall\",\n outputs: [\n {\n internalType: \"bytes[]\",\n name: \"results\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"nodehash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n ],\n name: \"multicallWithNodeCheck\",\n outputs: [\n {\n internalType: \"bytes[]\",\n name: \"results\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"pubkey\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n name: \"recordVersions\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"contentType\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"setABI\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"a\",\n type: \"bytes\",\n },\n ],\n name: \"setAddr\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"a\",\n type: \"address\",\n },\n ],\n name: \"setAddr\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"hash\",\n type: \"bytes\",\n },\n ],\n name: \"setContenthash\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"setDNSRecords\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n {\n internalType: \"address\",\n name: \"implementer\",\n type: \"address\",\n },\n ],\n name: \"setInterface\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"newName\",\n type: \"string\",\n },\n ],\n name: \"setName\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n name: \"setPubkey\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n ],\n name: \"setText\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"hash\",\n type: \"bytes\",\n },\n ],\n name: \"setZonehash\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n ],\n name: \"text\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"zonehash\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n type: \"event\",\n name: \"DNSRecordChanged\",\n inputs: [\n { name: \"node\", type: \"bytes32\", indexed: true, internalType: \"bytes32\" },\n { name: \"name\", type: \"bytes\", indexed: false, internalType: \"bytes\" },\n { name: \"resource\", type: \"uint16\", indexed: false, internalType: \"uint16\" },\n { name: \"ttl\", type: \"uint32\", indexed: false, internalType: \"uint32\" },\n { name: \"record\", type: \"bytes\", indexed: false, internalType: \"bytes\" },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"DNSRecordDeleted\",\n inputs: [\n { name: \"node\", type: \"bytes32\", indexed: true, internalType: \"bytes32\" },\n { name: \"name\", type: \"bytes\", indexed: false, internalType: \"bytes\" },\n { name: \"resource\", type: \"uint16\", indexed: false, internalType: \"uint16\" },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"DNSZoneUpdated\",\n inputs: [\n { name: \"node\", type: \"bytes32\", indexed: true, internalType: \"bytes32\" },\n { name: \"serial\", type: \"uint32\", indexed: false, internalType: \"uint32\" },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ZoneCreated\",\n inputs: [\n { name: \"node\", type: \"bytes32\", indexed: true, internalType: \"bytes32\" },\n { name: \"version\", type: \"uint64\", indexed: true, internalType: \"uint64\" },\n ],\n anonymous: false,\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"resolve\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","import { mergeAbis } from \"@ponder/utils\";\n\nimport { AbstractReverseResolver } from \"../abis/shared/AbstractReverseResolver\";\nimport { LegacyPublicResolver } from \"../abis/shared/LegacyPublicResolver\";\nimport { Resolver } from \"../abis/shared/Resolver\";\n\n/**\n * This Resolver ABI represents the set of all well-known Resolver events/methods, including:\n * - LegacyPublicResolver\n * - TextChanged event without value\n * - IResolver\n * - modern Resolver ABI, TextChanged with value\n * - ReverseResolvers\n * - AbstractReverseResolver\n *\n * A Resolver contract is a contract that emits _any_ (not _all_) of the events specified here and\n * may or may not support any number of the methods available in this ABI.\n */\nexport const ResolverABI = mergeAbis([LegacyPublicResolver, Resolver, AbstractReverseResolver]);\n","import type { Abi, Address, Chain } from \"viem\";\n\n/**\n * ENSNamespaceIds encodes the set of identifiers for well-known ENS namespaces.\n *\n * Each ENS namespace is a single, unified set of ENS names with a distinct onchain root\n * Registry (the ensroot Datasource) and the capability of spanning from that root Registry across\n * other `Datasource`s that may be distributed across multiple chains and offchain resources.\n *\n * For example, as of 9-Feb-2025 the canonical ENS namespace on mainnet includes:\n * - A root Registry on mainnet.\n * - An onchain Registrar for direct subnames of 'eth' on mainnet.\n * - An onchain Registry and Registrar for direct subnames of 'base.eth' on Base.\n * - An onchain Registry and Registrar subregistry for direct subnames of 'linea.eth' on Linea.\n * - An offchain subregistry for subnames of '.cb.id'.\n * - An offchain subregistry for subnames of '.uni.eth'.\n * - Etc..\n *\n * Each ENS namespace is logically independent of & isolated from the others, and not exclusively\n * correlated with a specific L1 chain. For example, the Sepolia testnet ENS namepace\n * is independent of the canonical ENS namespace on mainnet, and there could be an additional\n * deployment of the ENS protocol to mainnet, configured with different Datasources, resulting in a\n * logically isolated set of ENS names.\n *\n * 'ens-test-env' represents an ENS namespace running on a local Anvil chain for testing\n * protocol changes, running deterministic test suites, and local development.\n * https://github.com/ensdomains/ens-test-env\n */\nexport const ENSNamespaceIds = {\n Mainnet: \"mainnet\",\n Sepolia: \"sepolia\",\n SepoliaV2: \"sepolia-v2\",\n EnsTestEnv: \"ens-test-env\",\n} as const;\n\n/**\n * ENSNamespaceId is the derived string union of possible ENS namespace identifiers.\n */\nexport type ENSNamespaceId = (typeof ENSNamespaceIds)[keyof typeof ENSNamespaceIds];\n\n/**\n * A Datasource describes a set of contracts on a given chain that interact with the ENS protocol.\n */\nexport interface Datasource {\n chain: Chain;\n\n // map of contract name to config\n contracts: Record<string, ContractConfig>;\n}\n\n/**\n * DatasourceNames encodes a unique id for each known Datasource.\n */\nexport const DatasourceNames = {\n ENSRoot: \"ensroot\",\n Basenames: \"basenames\",\n Lineanames: \"lineanames\",\n Seaport: \"seaport\",\n ThreeDNSOptimism: \"threednsOptimism\",\n ThreeDNSBase: \"threednsBase\",\n ReverseResolverRoot: \"rrRoot\",\n ReverseResolverBase: \"rrBase\",\n ReverseResolverLinea: \"rrLinea\",\n ReverseResolverOptimism: \"rrOptimism\",\n ReverseResolverArbitrum: \"rrArbitrum\",\n ReverseResolverScroll: \"rrScroll\",\n ENSv2Root: \"ENSv2Root\",\n} as const;\n\nexport type DatasourceName = (typeof DatasourceNames)[keyof typeof DatasourceNames];\n\n/**\n * EventFilter specifies a given event's name and arguments to filter that event by.\n * This type is intentionally a subset of Ponder's `ContractConfig['filter']`.\n */\nexport interface EventFilter {\n event: string;\n args: Record<string, unknown>;\n}\n\n/**\n * Defines the abi, address, and startBlock of a contract relevant to a Datasource.\n *\n * A contract is located onchain either by\n * 1. a single Address in `address`,\n * 2. a set of Address[] in `address`,\n * 3. or any contract that emits events as defined in `abi`.\n *\n * This type is intentionally a subset of Ponder's ContractConfig.\n *\n * @param abi - the ABI of the contract\n * @param address - (optional) Address of the contract or Address[] of each contract to be indexed\n * @param startBlock - block number the contract was deployed in\n */\nexport type ContractConfig = {\n readonly abi: Abi;\n readonly address?: Address | Address[];\n readonly startBlock: number;\n readonly endBlock?: number;\n};\n\n/**\n * ENSNamespace encodes a set of known Datasources associated with the same ENS namespace.\n *\n * The ENSRoot Datasource is required (this formally defines an ENS namespace). All other Datasources\n * within the ENSNamespace are optional.\n */\nexport type ENSNamespace = {\n [DatasourceNames.ENSRoot]: Datasource;\n} & Partial<Record<Exclude<DatasourceName, \"ensroot\">, Datasource>>;\n\n/**\n * Helper type to extract the datasource type for a specific datasource name across all namespaces.\n * Returns the union of all possible datasource types for that datasource name, or never if not found.\n */\nexport type ExtractDatasourceType<\n Namespaces extends ENSNamespace,\n D extends DatasourceName,\n> = Namespaces extends any ? (D extends keyof Namespaces ? Namespaces[D] : never) : never;\n","import { zeroAddress } from \"viem\";\n\nimport { EnhancedAccessControl } from \"./abis/ensv2/EnhancedAccessControl\";\nimport { ETHRegistrar } from \"./abis/ensv2/ETHRegistrar\";\nimport { Registry } from \"./abis/ensv2/Registry\";\n// ABIs for ENSRoot Datasource\nimport { BaseRegistrar as root_BaseRegistrar } from \"./abis/root/BaseRegistrar\";\nimport { LegacyEthRegistrarController as root_LegacyEthRegistrarController } from \"./abis/root/LegacyEthRegistrarController\";\nimport { NameWrapper as root_NameWrapper } from \"./abis/root/NameWrapper\";\nimport { Registry as root_Registry } from \"./abis/root/Registry\";\nimport { UniversalRegistrarRenewalWithReferrer as root_UniversalRegistrarRenewalWithReferrer } from \"./abis/root/UniversalRegistrarRenewalWithReferrer\";\nimport { UniversalResolver as root_UniversalResolver } from \"./abis/root/UniversalResolver\";\nimport { UnwrappedEthRegistrarController as root_UnwrappedEthRegistrarController } from \"./abis/root/UnwrappedEthRegistrarController\";\nimport { WrappedEthRegistrarController as root_WrappedEthRegistrarController } from \"./abis/root/WrappedEthRegistrarController\";\nimport { StandaloneReverseRegistrar } from \"./abis/shared/StandaloneReverseRegistrar\";\nimport { ensTestEnvChain } from \"./lib/chains\";\n// Shared ABIs\nimport { ResolverABI } from \"./lib/ResolverABI\";\n// Types\nimport { DatasourceNames, type ENSNamespace } from \"./lib/types\";\n\n/**\n * The ens-test-env ENSNamespace\n *\n * 'ens-test-env' represents a deterministic deployment of the ENS protocol to a local Anvil chain\n * for development and testing.\n *\n * @see https://github.com/ensdomains/ens-test-env\n * @see https://github.com/ensdomains/contracts-v2\n *\n * NOTE: The ens-test-env ENS namespace does not support Basenames, Lineanames, or 3DNS.\n * NOTE: The ens-test-env ENS namespace does not (yet) support ENSIP-19 Reverse Resolvers.\n */\nexport default {\n /**\n * ENSRoot Datasource\n *\n * Addresses and Start Blocks from ENSv2 devnet\n * https://github.com/ensdomains/contracts-v2\n */\n [DatasourceNames.ENSRoot]: {\n chain: ensTestEnvChain,\n contracts: {\n ENSv1RegistryOld: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0\",\n startBlock: 0,\n },\n ENSv1Registry: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9\",\n startBlock: 0,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 0,\n },\n BaseRegistrar: {\n abi: root_BaseRegistrar,\n address: \"0xb7278a61aa25c888815afc32ad3cc52ff24fe575\",\n startBlock: 0,\n },\n LegacyEthRegistrarController: {\n abi: root_LegacyEthRegistrarController,\n address: \"0x2e2ed0cfd3ad2f1d34481277b3204d807ca2f8c2\",\n startBlock: 0,\n },\n WrappedEthRegistrarController: {\n abi: root_WrappedEthRegistrarController,\n address: \"0x253553366da8546fc250f225fe3d25d0c782303b\",\n startBlock: 0,\n },\n UnwrappedEthRegistrarController: {\n abi: root_UnwrappedEthRegistrarController,\n address: \"0x51a1ceb83b83f1985a81c295d1ff28afef186e02\",\n startBlock: 0,\n },\n UniversalRegistrarRenewalWithReferrer: {\n abi: root_UniversalRegistrarRenewalWithReferrer,\n address: zeroAddress,\n startBlock: 0,\n },\n NameWrapper: {\n abi: root_NameWrapper,\n address: \"0xfd471836031dc5108809d173a067e8486b9047a3\",\n startBlock: 0,\n },\n UniversalResolver: {\n abi: root_UniversalResolver,\n address: \"0xbec49fa140acaa83533fb00a2bb19bddd0290f25\",\n startBlock: 0,\n },\n UniversalResolverV2: {\n abi: root_UniversalResolver,\n address: \"0xb0d4afd8879ed9f52b28595d31b441d079b2ca07\",\n startBlock: 0,\n },\n },\n },\n\n [DatasourceNames.ENSv2Root]: {\n chain: ensTestEnvChain,\n contracts: {\n Resolver: { abi: ResolverABI, startBlock: 0 },\n Registry: { abi: Registry, startBlock: 0 },\n EnhancedAccessControl: { abi: EnhancedAccessControl, startBlock: 0 },\n RootRegistry: {\n abi: Registry,\n address: \"0x8a791620dd6260079bf849dc5567adc3f2fdc318\",\n startBlock: 0,\n },\n ETHRegistry: {\n abi: Registry,\n address: \"0x84ea74d481ee0a5332c457a4d796187f6ba67feb\",\n startBlock: 0,\n },\n ETHRegistrar: {\n abi: ETHRegistrar,\n address: \"0x1291be112d480055dafd8a610b7d1e203891c274\",\n startBlock: 0,\n },\n },\n },\n\n [DatasourceNames.ReverseResolverRoot]: {\n chain: ensTestEnvChain,\n contracts: {\n DefaultReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x95401dc811bb5740090279ba06cfa8fcf6113778\",\n startBlock: 0,\n },\n\n DefaultReverseResolver3: {\n abi: ResolverABI,\n address: \"0x70e0ba845a1a0f2da3359c97e0285013525ffc49\",\n startBlock: 0,\n },\n\n DefaultPublicResolver4: {\n abi: ResolverABI,\n address: \"0x172076e0166d1f9cc711c77adf8488051744980c\",\n startBlock: 0,\n },\n\n DefaultPublicResolver5: {\n abi: ResolverABI,\n address: \"0x4ee6ecad1c2dae9f525404de8555724e3c35d07b\",\n startBlock: 0,\n },\n },\n },\n} satisfies ENSNamespace;\n","export const NameWrapper = [\n {\n inputs: [\n {\n internalType: \"contract ENS\",\n name: \"_ens\",\n type: \"address\",\n },\n {\n internalType: \"contract IBaseRegistrar\",\n name: \"_registrar\",\n type: \"address\",\n },\n {\n internalType: \"contract IMetadataService\",\n name: \"_metadataService\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"CannotUpgrade\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"IncompatibleParent\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"IncorrectTargetOwner\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"IncorrectTokenType\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"labelHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"expectedLabelhash\",\n type: \"bytes32\",\n },\n ],\n name: \"LabelMismatch\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"LabelTooLong\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"LabelTooShort\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"NameIsNotWrapped\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"OperationProhibited\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"Unauthorised\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"active\",\n type: \"bool\",\n },\n ],\n name: \"ControllerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"ExpiryExtended\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n ],\n name: \"FusesSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"NameUnwrapped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"NameWrapped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"values\",\n type: \"uint256[]\",\n },\n ],\n name: \"TransferBatch\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"TransferSingle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"URI\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"_tokens\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint32\",\n name: \"fuseMask\",\n type: \"uint32\",\n },\n ],\n name: \"allFusesBurned\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"accounts\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n ],\n name: \"balanceOfBatch\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"canModifyName\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"controllers\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ens\",\n outputs: [\n {\n internalType: \"contract ENS\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"extendExpiry\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"getData\",\n outputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"isWrapped\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"metadataService\",\n outputs: [\n {\n internalType: \"contract IMetadataService\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n name: \"names\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"onERC721Received\",\n outputs: [\n {\n internalType: \"bytes4\",\n name: \"\",\n type: \"bytes4\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"ownerOf\",\n outputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_amount\",\n type: \"uint256\",\n },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"wrappedOwner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint16\",\n name: \"ownerControlledFuses\",\n type: \"uint16\",\n },\n ],\n name: \"registerAndWrapETH2LD\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"registrarExpiry\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"registrar\",\n outputs: [\n {\n internalType: \"contract IBaseRegistrar\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"renew\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amounts\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeBatchTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"setChildFuses\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"active\",\n type: \"bool\",\n },\n ],\n name: \"setController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint16\",\n name: \"ownerControlledFuses\",\n type: \"uint16\",\n },\n ],\n name: \"setFuses\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IMetadataService\",\n name: \"_metadataService\",\n type: \"address\",\n },\n ],\n name: \"setMetadataService\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"setRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"setSubnodeOwner\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n {\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"setSubnodeRecord\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"setTTL\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract INameWrapperUpgrade\",\n name: \"_upgradeAddress\",\n type: \"address\",\n },\n ],\n name: \"setUpgradeContract\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"unwrap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"registrant\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"unwrapETH2LD\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"wrappedOwner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"upgrade\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"upgradeContract\",\n outputs: [\n {\n internalType: \"contract INameWrapperUpgrade\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"wrappedOwner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"upgradeETH2LD\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"uri\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"wrappedOwner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"wrap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"wrappedOwner\",\n type: \"address\",\n },\n {\n internalType: \"uint16\",\n name: \"ownerControlledFuses\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"wrapETH2LD\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","export const Registry = [\n {\n inputs: [\n {\n internalType: \"contract ENS\",\n name: \"_old\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"NewOwner\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"NewResolver\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"NewTTL\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"old\",\n outputs: [\n {\n internalType: \"contract ENS\",\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"recordExists\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"resolver\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"setOwner\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"setRecord\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"setResolver\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"setSubnodeOwner\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"setSubnodeRecord\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"setTTL\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"ttl\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"\",\n type: \"uint64\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","export const UniversalRegistrarRenewalWithReferrer = [\n {\n inputs: [\n { internalType: \"contract ENS\", name: \"ens\", type: \"address\" },\n {\n internalType: \"contract IWrappedEthRegistrarController\",\n name: \"_wrappedEthRegistrarController\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"label\", type: \"string\" },\n { indexed: true, internalType: \"bytes32\", name: \"labelHash\", type: \"bytes32\" },\n { indexed: false, internalType: \"uint256\", name: \"cost\", type: \"uint256\" },\n { indexed: false, internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { indexed: false, internalType: \"bytes32\", name: \"referrer\", type: \"bytes32\" },\n ],\n name: \"RenewalReferred\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"label\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"referrer\", type: \"bytes32\" },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n { stateMutability: \"payable\", type: \"receive\" },\n] as const;\n","import { arbitrum, base, linea, mainnet, optimism, scroll } from \"viem/chains\";\n\n// ABIs for Basenames Datasource\nimport { BaseRegistrar as base_BaseRegistrar } from \"./abis/basenames/BaseRegistrar\";\nimport { EarlyAccessRegistrarController as base_EARegistrarController } from \"./abis/basenames/EARegistrarController\";\nimport { RegistrarController as base_RegistrarController } from \"./abis/basenames/RegistrarController\";\nimport { Registry as base_Registry } from \"./abis/basenames/Registry\";\nimport { UpgradeableRegistrarController as base_UpgradeableRegistrarController } from \"./abis/basenames/UpgradeableRegistrarController\";\n// ABIs for Lineanames Datasource\nimport { BaseRegistrar as linea_BaseRegistrar } from \"./abis/lineanames/BaseRegistrar\";\nimport { EthRegistrarController as linea_EthRegistrarController } from \"./abis/lineanames/EthRegistrarController\";\nimport { NameWrapper as linea_NameWrapper } from \"./abis/lineanames/NameWrapper\";\nimport { Registry as linea_Registry } from \"./abis/lineanames/Registry\";\n// ABIs for ENSRoot Datasource\nimport { BaseRegistrar as root_BaseRegistrar } from \"./abis/root/BaseRegistrar\";\nimport { LegacyEthRegistrarController as root_LegacyEthRegistrarController } from \"./abis/root/LegacyEthRegistrarController\";\nimport { NameWrapper as root_NameWrapper } from \"./abis/root/NameWrapper\";\nimport { Registry as root_Registry } from \"./abis/root/Registry\";\nimport { UniversalRegistrarRenewalWithReferrer as root_UniversalRegistrarRenewalWithReferrer } from \"./abis/root/UniversalRegistrarRenewalWithReferrer\";\nimport { UniversalResolver as root_UniversalResolver } from \"./abis/root/UniversalResolver\";\nimport { UnwrappedEthRegistrarController as root_UnwrappedEthRegistrarController } from \"./abis/root/UnwrappedEthRegistrarController\";\nimport { WrappedEthRegistrarController as root_WrappedEthRegistrarController } from \"./abis/root/WrappedEthRegistrarController\";\nimport { Seaport as Seaport1_5 } from \"./abis/seaport/Seaport1.5\";\n// Shared ABIs\nimport { StandaloneReverseRegistrar } from \"./abis/shared/StandaloneReverseRegistrar\";\nimport { ThreeDNSToken } from \"./abis/threedns/ThreeDNSToken\";\nimport { ResolverABI } from \"./lib/ResolverABI\";\n// Types\nimport { DatasourceNames, type ENSNamespace } from \"./lib/types\";\n\n/**\n * The Mainnet ENSNamespace\n */\nexport default {\n /**\n * ENSRoot Datasource\n *\n * Addresses and Start Blocks from ENS Mainnet Subgraph Manifest\n * https://ipfs.io/ipfs/Qmd94vseLpkUrSFvJ3GuPubJSyHz8ornhNrwEAt6pjcbex\n */\n [DatasourceNames.ENSRoot]: {\n chain: mainnet,\n contracts: {\n ENSv1RegistryOld: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0x314159265dd8dbb310642f98f50c066173c1259b\",\n startBlock: 3327417,\n },\n ENSv1Registry: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e\",\n startBlock: 9380380,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 3327417, // ignores any Resolver events prior to `startBlock` of ENSv1RegistryOld on Mainnet\n },\n BaseRegistrar: {\n abi: root_BaseRegistrar,\n address: \"0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85\",\n startBlock: 9380410,\n },\n LegacyEthRegistrarController: {\n abi: root_LegacyEthRegistrarController,\n address: \"0x283af0b28c62c092c9727f1ee09c02ca627eb7f5\",\n startBlock: 9380471,\n },\n WrappedEthRegistrarController: {\n abi: root_WrappedEthRegistrarController,\n address: \"0x253553366da8546fc250f225fe3d25d0c782303b\",\n startBlock: 16925618,\n },\n UnwrappedEthRegistrarController: {\n abi: root_UnwrappedEthRegistrarController,\n address: \"0x59e16fccd424cc24e280be16e11bcd56fb0ce547\",\n startBlock: 22764821,\n },\n UniversalRegistrarRenewalWithReferrer: {\n abi: root_UniversalRegistrarRenewalWithReferrer,\n address: \"0xf55575bde5953ee4272d5ce7cdd924c74d8fa81a\",\n startBlock: 23784217,\n },\n NameWrapper: {\n abi: root_NameWrapper,\n address: \"0xd4416b13d2b3a9abae7acd5d6c2bbdbe25686401\",\n startBlock: 16925608,\n },\n UniversalResolver: {\n abi: root_UniversalResolver,\n address: \"0xabd80e8a13596feea40fd26fd6a24c3fe76f05fb\",\n startBlock: 22671701,\n },\n BasenamesL1Resolver: {\n abi: ResolverABI,\n address: \"0xde9049636f4a1dfe0a64d1bfe3155c0a14c54f31\",\n startBlock: 20420641,\n },\n LineanamesL1Resolver: {\n abi: ResolverABI,\n address: \"0xde16ee87b0c019499cebdde29c9f7686560f679a\",\n startBlock: 20410692,\n },\n\n // the Resolver for *.argent.xyz names\n ArgentResolver: {\n abi: ResolverABI,\n address: \"0xda1756bb923af5d1a05e277cb1e54f1d0a127890\",\n startBlock: 7173574,\n },\n\n // the Resolver for *.loopring.eth names\n LoopringResolver: {\n abi: ResolverABI,\n address: \"0xf58d55f06bb92f083e78bb5063a2dd3544f9b6a3\",\n startBlock: 10170681,\n },\n },\n },\n\n /**\n * Basenames Datasource\n *\n * Addresses and Start Blocks from Basenames\n * https://github.com/base-org/basenames\n */\n [DatasourceNames.Basenames]: {\n /**\n * As of 9-Feb-2025 the Resolver for 'base.eth' in the mainnet ENS namespace is\n * 0xde9049636F4a1dfE0a64d1bFe3155C0A14C54F31.\n *\n * This Resolver uses ENSIP-10 (Wildcard Resolution) and EIP-3668 (CCIP Read) to delegate\n * the forward resolution of data associated with subnames of 'base.eth' to an offchain\n * gateway server operated by Coinbase that uses the following subregistry contracts on\n * Base as its source of truth.\n *\n * The owner of 'base.eth' in the ENS Registry in the mainnet ENS namespace (e.g. Coinbase)\n * has the ability to change this configuration at any time.\n *\n * See the reference documentation for additional context:\n * docs/ensnode/src/content/docs/reference/mainnet-registered-subnames-of-subregistries.mdx\n */\n chain: base,\n contracts: {\n Registry: {\n abi: base_Registry,\n address: \"0xb94704422c2a1e396835a571837aa5ae53285a95\",\n startBlock: 17571480,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 17571480, // based on startBlock of Registry on Base\n },\n BaseRegistrar: {\n abi: base_BaseRegistrar,\n address: \"0x03c4738ee98ae44591e1a4a4f3cab6641d95dd9a\",\n startBlock: 17571486,\n },\n EARegistrarController: {\n abi: base_EARegistrarController,\n address: \"0xd3e6775ed9b7dc12b205c8e608dc3767b9e5efda\",\n startBlock: 17575699,\n },\n /**\n * This controller was removed from BaseRegistrar contract\n * https://basescan.org/tx/0x88a3cc03291bb1a4b2bd9ccfe6b770988470001905d96c32bd41b866797b684b\n */\n RegistrarController: {\n abi: base_RegistrarController,\n address: \"0x4ccb0bb02fcaba27e82a56646e81d8c5bc4119a5\",\n startBlock: 18619035,\n endBlock: 35936564,\n },\n /**\n * This controller was added to BaseRegistrar contract\n * with the following tx:\n * https://basescan.org/tx/0x52aed4dc975ba6c2b8b54d94f5b0b86a9cc0f27e81e78deb4a0b8b568f5e71ed\n */\n UpgradeableRegistrarController: {\n abi: base_UpgradeableRegistrarController,\n address: \"0xa7d2607c6bd39ae9521e514026cbb078405ab322\", // a proxy contract\n startBlock: 35286620,\n },\n\n // NOTE: not indexed, but referenced for Protocol Acceleration\n L2Resolver1: {\n abi: ResolverABI,\n address: \"0xc6d566a56a1aff6508b41f6c90ff131615583bcd\",\n startBlock: 17575714,\n },\n // NOTE: not indexed, but referenced for Protocol Acceleration\n L2Resolver2: {\n abi: ResolverABI,\n address: \"0x426fa03fb86e510d0dd9f70335cf102a98b10875\",\n startBlock: 35286620,\n },\n },\n },\n\n /**\n * Lineanames Datasource\n *\n * Addresses and Start Blocks from Lineanames\n * https://github.com/Consensys/linea-ens\n */\n [DatasourceNames.Lineanames]: {\n /**\n * As of 9-Feb-2025 the Resolver for 'linea.eth' in the mainnet ENS namespace is\n * 0xde16ee87B0C019499cEBDde29c9F7686560f679a.\n *\n * This Resolver uses ENSIP-10 (Wildcard Resolution) and EIP-3668 (CCIP Read) to delegate\n * the forward resolution of data associated with subnames of 'linea.eth' to an offchain\n * gateway server operated by Consensys that uses the following subregistry contracts on\n * Linea as its source of truth.\n *\n * The owner of 'linea.eth' in the ENS Registry in the mainnet ENS namespace (e.g. Consensys)\n * has the ability to change this configuration at any time.\n *\n * See the reference documentation for additional context:\n * docs/ensnode/src/content/docs/reference/mainnet-registered-subnames-of-subregistries.mdx\n */\n chain: linea,\n contracts: {\n Registry: {\n abi: linea_Registry,\n address: \"0x50130b669b28c339991d8676fa73cf122a121267\",\n startBlock: 6682888,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 6682888, // based on startBlock of Registry on Linea\n },\n BaseRegistrar: {\n abi: linea_BaseRegistrar,\n address: \"0x6e84390dcc5195414ec91a8c56a5c91021b95704\",\n startBlock: 6682892,\n },\n EthRegistrarController: {\n abi: linea_EthRegistrarController,\n address: \"0xdb75db974b1f2bd3b5916d503036208064d18295\",\n startBlock: 6682978,\n },\n NameWrapper: {\n abi: linea_NameWrapper,\n address: \"0xa53cca02f98d590819141aa85c891e2af713c223\",\n startBlock: 6682956,\n },\n\n // this is Linea's Default Public Resolver\n DefaultPublicResolver: {\n abi: ResolverABI,\n address: \"0x86c5aed9f27837074612288610fb98ccc1733126\",\n startBlock: 6682994,\n },\n },\n },\n\n /**\n * The 3DNS Datasource on Optimism.\n * https://opensea.io/collection/3dns-powered-domains\n */\n [DatasourceNames.ThreeDNSOptimism]: {\n chain: optimism,\n contracts: {\n ThreeDNSToken: {\n abi: ThreeDNSToken,\n address: \"0xbb7b805b257d7c76ca9435b3ffe780355e4c4b17\",\n startBlock: 110393959,\n },\n Resolver: {\n abi: ResolverABI,\n // NOTE: 3DNSToken on Optimism has a hardcoded protocol-wide Resolver at this address\n address: \"0xf97aac6c8dbaebcb54ff166d79706e3af7a813c8\",\n startBlock: 110393959,\n },\n },\n },\n\n /**\n * The 3DNS Datasource on Base.\n * https://opensea.io/collection/3dns-powered-domains-base\n */\n [DatasourceNames.ThreeDNSBase]: {\n chain: base,\n contracts: {\n ThreeDNSToken: {\n abi: ThreeDNSToken,\n address: \"0xbb7b805b257d7c76ca9435b3ffe780355e4c4b17\",\n startBlock: 17522624,\n },\n Resolver: {\n abi: ResolverABI,\n // NOTE: 3DNSToken on Base has a hardcoded protocol-wide Resolver at this address\n address: \"0xf97aac6c8dbaebcb54ff166d79706e3af7a813c8\",\n startBlock: 17522624,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on the ENS Root chain.\n */\n [DatasourceNames.ReverseResolverRoot]: {\n chain: mainnet,\n contracts: {\n DefaultReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x283f227c4bd38ece252c4ae7ece650b0e913f1f9\",\n startBlock: 22764819,\n },\n\n // NOTE: the DefaultReverseResolver1 (aka LegacyDefaultReverseResolver) does NOT emit events\n // and is effectively unindexable for the purposes of Reverse Resolution. We document it here\n // for completeness, but/and explicity do not index it.\n DefaultReverseResolver1: {\n abi: ResolverABI,\n address: \"0xa2c122be93b0074270ebee7f6b7292c7deb45047\",\n startBlock: 9380501,\n },\n\n // this DefaultReverseResolver was enabled in the following proposal:\n // https://discuss.ens.domains/t/ep3-5-executable-activate-new-eth-controller-and-reverse-registrar/16776\n // https://www.tally.xyz/gov/ens/proposal/42973781582803845389836855775840822719678533376883030929209752909248937768242\n // DefaultReverseResolver2 is the pre-ENSIP-19 DefaultReverseResolver and it emits\n // Resolver#NameChanged events. We index these events to power aspects of Protocol Acceleration.\n DefaultReverseResolver2: {\n abi: ResolverABI,\n address: \"0x231b0ee14048e9dccd1d247744d114a4eb5e8e63\",\n startBlock: 16925619,\n },\n\n // this DefaultReverseResolver was enabled in the following proposal:\n // https://discuss.ens.domains/t/executable-enable-l2-reverse-registrars-and-new-eth-registrar-controller/20969\n // https://www.tally.xyz/gov/ens/proposal/42524979896803285837776370636134389407867034021879791462477783237030656381157\n // NOTE: DefaultReverseResolver3 is not directly indexed: it simply reads data from\n // DefaultReverseRegistrar, which IS indexed. We document it here for completeness.\n DefaultReverseResolver3: {\n abi: ResolverABI,\n address: \"0xa7d635c8de9a58a228aa69353a1699c7cc240dcf\",\n startBlock: 22764871,\n },\n\n // this resolver uses a TextChanged event that does not include the `value` parameter\n DefaultPublicResolver0: {\n abi: ResolverABI,\n address: \"0x1da022710df5002339274aadee8d58218e9d6ab5\",\n startBlock: 3648359,\n },\n\n // this resolver uses a TextChanged event that does not include the `value` parameter\n DefaultPublicResolver1: {\n abi: ResolverABI,\n address: \"0x5ffc014343cd971b7eb70732021e26c35b744cc4\",\n startBlock: 3733668,\n },\n\n // this resolver uses a TextChanged event that does not include the `value` parameter\n DefaultPublicResolver2: {\n abi: ResolverABI,\n address: \"0x226159d592e2b063810a10ebf6dcbada94ed68b8\",\n startBlock: 8659893,\n },\n\n // aka 'LegacyPublicResolver' in the ENS Subgraph terminology\n // this resolver uses a TextChanged event that does not include the `value` parameter\n DefaultPublicResolver3: {\n abi: ResolverABI,\n address: \"0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41\",\n startBlock: 9412610,\n },\n\n // this PublicResolver was enabled in the following proposal:\n // https://discuss.ens.domains/t/ep3-5-executable-activate-new-eth-controller-and-reverse-registrar/16776\n // https://www.tally.xyz/gov/ens/proposal/42973781582803845389836855775840822719678533376883030929209752909248937768242\n DefaultPublicResolver4: {\n abi: ResolverABI,\n address: \"0x231b0ee14048e9dccd1d247744d114a4eb5e8e63\",\n startBlock: 16925619,\n },\n\n // this PublicResolver was enabled in the following proposal\n // https://discuss.ens.domains/t/executable-enable-l2-reverse-registrars-and-new-eth-registrar-controller/20969\n // https://www.tally.xyz/gov/ens/proposal/42524979896803285837776370636134389407867034021879791462477783237030656381157\n DefaultPublicResolver5: {\n abi: ResolverABI,\n address: \"0xf29100983e058b709f3d539b0c765937b804ac15\",\n startBlock: 22764828,\n },\n\n BaseReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html#80002105.reverse\n address: \"0xc800dbc8ff9796e58efba2d7b35028ddd1997e5e\",\n startBlock: 22764838,\n },\n\n LineaReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html#8000e708.reverse\n address: \"0x0ce08a41bdb10420fb5cac7da8ca508ea313aef8\",\n startBlock: 22764840,\n },\n\n OptimismReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html#8000000a.reverse\n address: \"0xf9edb1a21867ac11b023ce34abad916d29abf107\",\n startBlock: 22764854,\n },\n\n ArbitrumReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html#8000a4b1.reverse\n address: \"0x4b9572c03aaa8b0efa4b4b0f0cc0f0992bedb898\",\n startBlock: 22764837,\n },\n\n ScrollReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html#80082750.reverse\n address: \"0xc4842814ca523e481ca5aa85f719fed1e9cac614\",\n startBlock: 22921284,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Base.\n */\n [DatasourceNames.ReverseResolverBase]: {\n chain: base,\n contracts: {\n L2ReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x0000000000d8e504002cc26e3ec46d81971c1664\",\n startBlock: 31808582,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Linea.\n */\n [DatasourceNames.ReverseResolverLinea]: {\n chain: linea,\n contracts: {\n L2ReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x0000000000d8e504002cc26e3ec46d81971c1664\",\n startBlock: 20173340,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Optimism.\n */\n [DatasourceNames.ReverseResolverOptimism]: {\n chain: optimism,\n contracts: {\n L2ReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x0000000000d8e504002cc26e3ec46d81971c1664\",\n startBlock: 137403854,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Arbitrum.\n */\n [DatasourceNames.ReverseResolverArbitrum]: {\n chain: arbitrum,\n contracts: {\n L2ReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x0000000000d8e504002cc26e3ec46d81971c1664\",\n startBlock: 349263357,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Scroll.\n */\n [DatasourceNames.ReverseResolverScroll]: {\n chain: scroll,\n contracts: {\n L2ReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x0000000000d8e504002cc26e3ec46d81971c1664\",\n startBlock: 16604272,\n },\n },\n },\n\n [DatasourceNames.Seaport]: {\n chain: mainnet,\n contracts: {\n Seaport1_5: {\n abi: Seaport1_5, // Seaport 1.5\n address: \"0x00000000000000adc04c56bf30ac9d3c0aaf14dc\",\n startBlock: 17129405,\n },\n },\n },\n} satisfies ENSNamespace;\n","export const Registry = [\n {\n inputs: [{ internalType: \"address\", name: \"rootOwner\", type: \"address\" }],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n { inputs: [], name: \"Unauthorized\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: false, internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"NewOwner\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"NewResolver\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { indexed: false, internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"NewTTL\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"recordExists\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"resolver\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n { internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n ],\n name: \"setOwner\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"address\", name: \"resolver_\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl_\", type: \"uint64\" },\n ],\n name: \"setRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver_\", type: \"address\" },\n ],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n ],\n name: \"setSubnodeOwner\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"address\", name: \"resolver_\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl_\", type: \"uint64\" },\n ],\n name: \"setSubnodeRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"ttl_\", type: \"uint64\" },\n ],\n name: \"setTTL\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"ttl\",\n outputs: [{ internalType: \"uint64\", name: \"\", type: \"uint64\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","export const NameWrapper = [\n {\n inputs: [\n { internalType: \"contract ENS\", name: \"_ens\", type: \"address\" },\n {\n internalType: \"contract IBaseRegistrar\",\n name: \"_registrar\",\n type: \"address\",\n },\n {\n internalType: \"contract IMetadataService\",\n name: \"_metadataService\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"_baseNode\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"_baseNodeDnsEncoded\", type: \"bytes\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n { inputs: [], name: \"BaseNodeAsETHNodeOrROOTNodeNotAllowed\", type: \"error\" },\n { inputs: [], name: \"CannotUpgrade\", type: \"error\" },\n { inputs: [], name: \"DifferentBaseNodeBaseNodeDnsEncoded\", type: \"error\" },\n { inputs: [], name: \"EmptyDataNotAllowed\", type: \"error\" },\n { inputs: [], name: \"IncompatibleParent\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"IncorrectTargetOwner\",\n type: \"error\",\n },\n { inputs: [], name: \"IncorrectTokenType\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"labelHash\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"expectedLabelhash\", type: \"bytes32\" },\n ],\n name: \"LabelMismatch\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"label\", type: \"string\" }],\n name: \"LabelTooLong\",\n type: \"error\",\n },\n { inputs: [], name: \"LabelTooShort\", type: \"error\" },\n { inputs: [], name: \"NameIsNotWrapped\", type: \"error\" },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"OperationProhibited\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"addr\", type: \"address\" },\n ],\n name: \"Unauthorised\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"approved\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: false, internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n { indexed: false, internalType: \"bool\", name: \"active\", type: \"bool\" },\n ],\n name: \"ControllerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"ExpiryExtended\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { indexed: false, internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n ],\n name: \"FusesSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"NameUnwrapped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { indexed: false, internalType: \"bytes\", name: \"name\", type: \"bytes\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n { indexed: false, internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"NameWrapped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"values\",\n type: \"uint256[]\",\n },\n ],\n name: \"TransferBatch\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"TransferSingle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"value\", type: \"string\" },\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"URI\",\n type: \"event\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"_tokens\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"uint32\", name: \"fuseMask\", type: \"uint32\" },\n ],\n name: \"allFusesBurned\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"account\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"balanceOf\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address[]\", name: \"accounts\", type: \"address[]\" },\n { internalType: \"uint256[]\", name: \"ids\", type: \"uint256[]\" },\n ],\n name: \"balanceOfBatch\",\n outputs: [{ internalType: \"uint256[]\", name: \"\", type: \"uint256[]\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"addr\", type: \"address\" },\n ],\n name: \"canExtendSubnames\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"addr\", type: \"address\" },\n ],\n name: \"canModifyName\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"controllers\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ens\",\n outputs: [{ internalType: \"contract ENS\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"labelhash\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"expiry\", type: \"uint64\" },\n ],\n name: \"extendExpiry\",\n outputs: [{ internalType: \"uint64\", name: \"\", type: \"uint64\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"getApproved\",\n outputs: [{ internalType: \"address\", name: \"operator\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"getData\",\n outputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n { internalType: \"uint64\", name: \"expiry\", type: \"uint64\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"account\", type: \"address\" },\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"labelhash\", type: \"bytes32\" },\n ],\n name: \"isWrapped\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"isWrapped\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"metadataService\",\n outputs: [{ internalType: \"contract IMetadataService\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n name: \"names\",\n outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"onERC721Received\",\n outputs: [{ internalType: \"bytes4\", name: \"\", type: \"bytes4\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"ownerOf\",\n outputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_token\", type: \"address\" },\n { internalType: \"address\", name: \"_to\", type: \"address\" },\n { internalType: \"uint256\", name: \"_amount\", type: \"uint256\" },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"label\", type: \"string\" },\n { internalType: \"address\", name: \"wrappedOwner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n ],\n name: \"registerAndWrap\",\n outputs: [{ internalType: \"uint256\", name: \"registrarExpiry\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"registrar\",\n outputs: [{ internalType: \"contract IBaseRegistrar\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [{ internalType: \"uint256\", name: \"expires\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256[]\", name: \"ids\", type: \"uint256[]\" },\n { internalType: \"uint256[]\", name: \"amounts\", type: \"uint256[]\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"safeBatchTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n { internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"labelhash\", type: \"bytes32\" },\n { internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n { internalType: \"uint64\", name: \"expiry\", type: \"uint64\" },\n ],\n name: \"setChildFuses\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"controller\", type: \"address\" },\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n ],\n name: \"setController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n ],\n name: \"setFuses\",\n outputs: [{ internalType: \"uint32\", name: \"\", type: \"uint32\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IMetadataService\",\n name: \"_metadataService\",\n type: \"address\",\n },\n ],\n name: \"setMetadataService\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"setRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n ],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"string\", name: \"label\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n { internalType: \"uint64\", name: \"expiry\", type: \"uint64\" },\n ],\n name: \"setSubnodeOwner\",\n outputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"string\", name: \"label\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n { internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n { internalType: \"uint64\", name: \"expiry\", type: \"uint64\" },\n ],\n name: \"setSubnodeRecord\",\n outputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"setTTL\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract INameWrapperUpgrade\",\n name: \"_upgradeAddress\",\n type: \"address\",\n },\n ],\n name: \"setUpgradeContract\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes4\", name: \"interfaceId\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"labelhash\", type: \"bytes32\" },\n { internalType: \"address\", name: \"controller\", type: \"address\" },\n ],\n name: \"unwrap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"labelhash\", type: \"bytes32\" },\n { internalType: \"address\", name: \"registrant\", type: \"address\" },\n { internalType: \"address\", name: \"controller\", type: \"address\" },\n ],\n name: \"unwrapAnyLD\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes\", name: \"name\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"extraData\", type: \"bytes\" },\n ],\n name: \"upgrade\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"upgradeContract\",\n outputs: [\n {\n internalType: \"contract INameWrapperUpgrade\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"uri\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes\", name: \"name\", type: \"bytes\" },\n { internalType: \"address\", name: \"wrappedOwner\", type: \"address\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n ],\n name: \"wrap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"label\", type: \"string\" },\n { internalType: \"address\", name: \"wrappedOwner\", type: \"address\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n ],\n name: \"wrapAnyLD\",\n outputs: [{ internalType: \"uint64\", name: \"expiry\", type: \"uint64\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","export const Registry = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: false, internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"NewOwner\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"NewResolver\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { indexed: false, internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"NewTTL\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"recordExists\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"resolver\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n { internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n ],\n name: \"setOwner\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"setRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n ],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n ],\n name: \"setSubnodeOwner\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"setSubnodeRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"setTTL\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"ttl\",\n outputs: [{ internalType: \"uint64\", name: \"\", type: \"uint64\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","export const Seaport = [\n {\n inputs: [{ internalType: \"address\", name: \"conduitController\", type: \"address\" }],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n { inputs: [], name: \"BadContractSignature\", type: \"error\" },\n {\n inputs: [],\n name: \"BadFraction\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"BadReturnValueFromERC20OnTransfer\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint8\", name: \"v\", type: \"uint8\" }],\n name: \"BadSignatureV\",\n type: \"error\",\n },\n { inputs: [], name: \"CannotCancelOrder\", type: \"error\" },\n {\n inputs: [],\n name: \"ConsiderationCriteriaResolverOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ConsiderationLengthNotEqualToTotalOriginal\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"considerationIndex\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"shortfallAmount\", type: \"uint256\" },\n ],\n name: \"ConsiderationNotMet\",\n type: \"error\",\n },\n { inputs: [], name: \"CriteriaNotEnabledForItem\", type: \"error\" },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"from\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n { internalType: \"uint256[]\", name: \"identifiers\", type: \"uint256[]\" },\n {\n internalType: \"uint256[]\",\n name: \"amounts\",\n type: \"uint256[]\",\n },\n ],\n name: \"ERC1155BatchTransferGenericFailure\",\n type: \"error\",\n },\n { inputs: [], name: \"InexactFraction\", type: \"error\" },\n {\n inputs: [],\n name: \"InsufficientNativeTokensSupplied\",\n type: \"error\",\n },\n { inputs: [], name: \"Invalid1155BatchTransferEncoding\", type: \"error\" },\n {\n inputs: [],\n name: \"InvalidBasicOrderParameterEncoding\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"conduit\", type: \"address\" }],\n name: \"InvalidCallToConduit\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"conduitKey\", type: \"bytes32\" },\n {\n internalType: \"address\",\n name: \"conduit\",\n type: \"address\",\n },\n ],\n name: \"InvalidConduit\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"InvalidContractOrder\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n name: \"InvalidERC721TransferAmount\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidFulfillmentComponentData\", type: \"error\" },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"InvalidMsgValue\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidNativeOfferItem\", type: \"error\" },\n {\n inputs: [],\n name: \"InvalidProof\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"InvalidRestrictedOrder\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidSignature\", type: \"error\" },\n {\n inputs: [],\n name: \"InvalidSigner\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"startTime\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"InvalidTime\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"fulfillmentIndex\", type: \"uint256\" }],\n name: \"MismatchedFulfillmentOfferAndConsiderationComponents\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"enum Side\", name: \"side\", type: \"uint8\" }],\n name: \"MissingFulfillmentComponentOnAggregation\",\n type: \"error\",\n },\n { inputs: [], name: \"MissingItemAmount\", type: \"error\" },\n {\n inputs: [],\n name: \"MissingOriginalConsiderationItems\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"account\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"NativeTokenTransferGenericFailure\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"NoContract\",\n type: \"error\",\n },\n { inputs: [], name: \"NoReentrantCalls\", type: \"error\" },\n {\n inputs: [],\n name: \"NoSpecifiedOrdersAvailable\",\n type: \"error\",\n },\n { inputs: [], name: \"OfferAndConsiderationRequiredOnFulfillment\", type: \"error\" },\n {\n inputs: [],\n name: \"OfferCriteriaResolverOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"OrderAlreadyFilled\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"enum Side\", name: \"side\", type: \"uint8\" }],\n name: \"OrderCriteriaResolverOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"OrderIsCancelled\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"OrderPartiallyFilled\",\n type: \"error\",\n },\n { inputs: [], name: \"PartialFillsNotEnabledForOrder\", type: \"error\" },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"from\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n { internalType: \"uint256\", name: \"identifier\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"TokenTransferGenericFailure\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"considerationIndex\",\n type: \"uint256\",\n },\n ],\n name: \"UnresolvedConsiderationCriteria\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"offerIndex\",\n type: \"uint256\",\n },\n ],\n name: \"UnresolvedOfferCriteria\",\n type: \"error\",\n },\n { inputs: [], name: \"UnusedItemParameters\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"uint256\", name: \"newCounter\", type: \"uint256\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n ],\n name: \"CounterIncremented\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"zone\", type: \"address\" },\n ],\n name: \"OrderCancelled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"zone\", type: \"address\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct SpentItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n indexed: false,\n internalType: \"struct ReceivedItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n ],\n name: \"OrderFulfilled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" },\n {\n components: [\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct OrderParameters\",\n name: \"orderParameters\",\n type: \"tuple\",\n },\n ],\n name: \"OrderValidated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"bytes32[]\", name: \"orderHashes\", type: \"bytes32[]\" }],\n name: \"OrdersMatched\",\n type: \"event\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"counter\", type: \"uint256\" },\n ],\n internalType: \"struct OrderComponents[]\",\n name: \"orders\",\n type: \"tuple[]\",\n },\n ],\n name: \"cancel\",\n outputs: [{ internalType: \"bool\", name: \"cancelled\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"uint120\", name: \"numerator\", type: \"uint120\" },\n {\n internalType: \"uint120\",\n name: \"denominator\",\n type: \"uint120\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct AdvancedOrder\",\n name: \"\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"enum Side\", name: \"side\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"identifier\", type: \"uint256\" },\n {\n internalType: \"bytes32[]\",\n name: \"criteriaProof\",\n type: \"bytes32[]\",\n },\n ],\n internalType: \"struct CriteriaResolver[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n { internalType: \"bytes32\", name: \"fulfillerConduitKey\", type: \"bytes32\" },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n name: \"fulfillAdvancedOrder\",\n outputs: [{ internalType: \"bool\", name: \"fulfilled\", type: \"bool\" }],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"uint120\", name: \"numerator\", type: \"uint120\" },\n {\n internalType: \"uint120\",\n name: \"denominator\",\n type: \"uint120\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct AdvancedOrder[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"enum Side\", name: \"side\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"identifier\", type: \"uint256\" },\n {\n internalType: \"bytes32[]\",\n name: \"criteriaProof\",\n type: \"bytes32[]\",\n },\n ],\n internalType: \"struct CriteriaResolver[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"\",\n type: \"tuple[][]\",\n },\n {\n components: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"\",\n type: \"tuple[][]\",\n },\n { internalType: \"bytes32\", name: \"fulfillerConduitKey\", type: \"bytes32\" },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n { internalType: \"uint256\", name: \"maximumFulfilled\", type: \"uint256\" },\n ],\n name: \"fulfillAvailableAdvancedOrders\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"\",\n type: \"bool[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct Order[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"\",\n type: \"tuple[][]\",\n },\n {\n components: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"\",\n type: \"tuple[][]\",\n },\n { internalType: \"bytes32\", name: \"fulfillerConduitKey\", type: \"bytes32\" },\n {\n internalType: \"uint256\",\n name: \"maximumFulfilled\",\n type: \"uint256\",\n },\n ],\n name: \"fulfillAvailableOrders\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"\",\n type: \"bool[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"considerationToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationIdentifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"offerToken\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"offerIdentifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"offerAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"enum BasicOrderType\",\n name: \"basicOrderType\",\n type: \"uint8\",\n },\n { internalType: \"uint256\", name: \"startTime\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n { internalType: \"bytes32\", name: \"zoneHash\", type: \"bytes32\" },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n { internalType: \"bytes32\", name: \"offererConduitKey\", type: \"bytes32\" },\n {\n internalType: \"bytes32\",\n name: \"fulfillerConduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalAdditionalRecipients\",\n type: \"uint256\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct AdditionalRecipient[]\",\n name: \"additionalRecipients\",\n type: \"tuple[]\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct BasicOrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n ],\n name: \"fulfillBasicOrder\",\n outputs: [{ internalType: \"bool\", name: \"fulfilled\", type: \"bool\" }],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"considerationToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationIdentifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"offerToken\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"offerIdentifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"offerAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"enum BasicOrderType\",\n name: \"basicOrderType\",\n type: \"uint8\",\n },\n { internalType: \"uint256\", name: \"startTime\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n { internalType: \"bytes32\", name: \"zoneHash\", type: \"bytes32\" },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n { internalType: \"bytes32\", name: \"offererConduitKey\", type: \"bytes32\" },\n {\n internalType: \"bytes32\",\n name: \"fulfillerConduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalAdditionalRecipients\",\n type: \"uint256\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct AdditionalRecipient[]\",\n name: \"additionalRecipients\",\n type: \"tuple[]\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct BasicOrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n ],\n name: \"fulfillBasicOrder_efficient_6GL6yc\",\n outputs: [{ internalType: \"bool\", name: \"fulfilled\", type: \"bool\" }],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct Order\",\n name: \"\",\n type: \"tuple\",\n },\n { internalType: \"bytes32\", name: \"fulfillerConduitKey\", type: \"bytes32\" },\n ],\n name: \"fulfillOrder\",\n outputs: [{ internalType: \"bool\", name: \"fulfilled\", type: \"bool\" }],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"contractOfferer\", type: \"address\" }],\n name: \"getContractOffererNonce\",\n outputs: [{ internalType: \"uint256\", name: \"nonce\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"offerer\", type: \"address\" }],\n name: \"getCounter\",\n outputs: [{ internalType: \"uint256\", name: \"counter\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"counter\", type: \"uint256\" },\n ],\n internalType: \"struct OrderComponents\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n name: \"getOrderHash\",\n outputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"getOrderStatus\",\n outputs: [\n { internalType: \"bool\", name: \"isValidated\", type: \"bool\" },\n {\n internalType: \"bool\",\n name: \"isCancelled\",\n type: \"bool\",\n },\n { internalType: \"uint256\", name: \"totalFilled\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"totalSize\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"incrementCounter\",\n outputs: [{ internalType: \"uint256\", name: \"newCounter\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"information\",\n outputs: [\n { internalType: \"string\", name: \"version\", type: \"string\" },\n {\n internalType: \"bytes32\",\n name: \"domainSeparator\",\n type: \"bytes32\",\n },\n { internalType: \"address\", name: \"conduitController\", type: \"address\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"uint120\", name: \"numerator\", type: \"uint120\" },\n {\n internalType: \"uint120\",\n name: \"denominator\",\n type: \"uint120\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct AdvancedOrder[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"enum Side\", name: \"side\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"identifier\", type: \"uint256\" },\n {\n internalType: \"bytes32[]\",\n name: \"criteriaProof\",\n type: \"bytes32[]\",\n },\n ],\n internalType: \"struct CriteriaResolver[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"itemIndex\", type: \"uint256\" },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"offerComponents\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"itemIndex\", type: \"uint256\" },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"considerationComponents\",\n type: \"tuple[]\",\n },\n ],\n internalType: \"struct Fulfillment[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n { internalType: \"address\", name: \"recipient\", type: \"address\" },\n ],\n name: \"matchAdvancedOrders\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct Order[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"itemIndex\", type: \"uint256\" },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"offerComponents\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"itemIndex\", type: \"uint256\" },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"considerationComponents\",\n type: \"tuple[]\",\n },\n ],\n internalType: \"struct Fulfillment[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n name: \"matchOrders\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct Order[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n name: \"validate\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n { stateMutability: \"payable\", type: \"receive\" },\n] as const;\n","import {\n arbitrumSepolia,\n baseSepolia,\n lineaSepolia,\n optimismSepolia,\n scrollSepolia,\n sepolia,\n} from \"viem/chains\";\n\n// ABIs for Basenames Datasource\nimport { BaseRegistrar as base_BaseRegistrar } from \"./abis/basenames/BaseRegistrar\";\nimport { EarlyAccessRegistrarController as base_EARegistrarController } from \"./abis/basenames/EARegistrarController\";\nimport { RegistrarController as base_RegistrarController } from \"./abis/basenames/RegistrarController\";\nimport { Registry as base_Registry } from \"./abis/basenames/Registry\";\nimport { UpgradeableRegistrarController as base_UpgradeableRegistrarController } from \"./abis/basenames/UpgradeableRegistrarController\";\n// ABIs for Lineanames Datasource\nimport { BaseRegistrar as linea_BaseRegistrar } from \"./abis/lineanames/BaseRegistrar\";\nimport { EthRegistrarController as linea_EthRegistrarController } from \"./abis/lineanames/EthRegistrarController\";\nimport { NameWrapper as linea_NameWrapper } from \"./abis/lineanames/NameWrapper\";\nimport { Registry as linea_Registry } from \"./abis/lineanames/Registry\";\n// ABIs for ENSRoot Datasource\nimport { BaseRegistrar as root_BaseRegistrar } from \"./abis/root/BaseRegistrar\";\nimport { LegacyEthRegistrarController as root_LegacyEthRegistrarController } from \"./abis/root/LegacyEthRegistrarController\";\nimport { NameWrapper as root_NameWrapper } from \"./abis/root/NameWrapper\";\nimport { Registry as root_Registry } from \"./abis/root/Registry\";\nimport { UniversalRegistrarRenewalWithReferrer as root_UniversalRegistrarRenewalWithReferrer } from \"./abis/root/UniversalRegistrarRenewalWithReferrer\";\nimport { UniversalResolver as root_UniversalResolver } from \"./abis/root/UniversalResolver\";\nimport { UnwrappedEthRegistrarController as root_UnwrappedEthRegistrarController } from \"./abis/root/UnwrappedEthRegistrarController\";\nimport { WrappedEthRegistrarController as root_WrappedEthRegistrarController } from \"./abis/root/WrappedEthRegistrarController\";\nimport { Seaport as Seaport1_5 } from \"./abis/seaport/Seaport1.5\";\n// Shared ABIs\nimport { StandaloneReverseRegistrar } from \"./abis/shared/StandaloneReverseRegistrar\";\nimport { ResolverABI } from \"./lib/ResolverABI\";\n// Types\nimport { DatasourceNames, type ENSNamespace } from \"./lib/types\";\n\n/**\n * The Sepolia ENSNamespace\n *\n * NOTE: The Sepolia ENS namespace does not support 3DNS.\n */\nexport default {\n /**\n * ENSRoot Datasource\n *\n * Addresses and Start Blocks from ENS Sepolia Subgraph Manifest\n * https://ipfs.io/ipfs/QmdDtoN9QCRsBUsyoiiUUMQPPmPp5jimUQe81828UyWLtg\n */\n [DatasourceNames.ENSRoot]: {\n chain: sepolia,\n contracts: {\n ENSv1RegistryOld: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0x94f523b8261b815b87effcf4d18e6abef18d6e4b\",\n startBlock: 3702721,\n },\n ENSv1Registry: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e\",\n startBlock: 3702728,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 3702721, // ignores any Resolver events prior to `startBlock` of RegistryOld on Sepolia\n },\n BaseRegistrar: {\n abi: root_BaseRegistrar,\n address: \"0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85\",\n startBlock: 3702731,\n },\n LegacyEthRegistrarController: {\n abi: root_LegacyEthRegistrarController,\n address: \"0x7e02892cfc2bfd53a75275451d73cf620e793fc0\",\n startBlock: 3790197,\n },\n WrappedEthRegistrarController: {\n abi: root_WrappedEthRegistrarController,\n address: \"0xfed6a969aaa60e4961fcd3ebf1a2e8913ac65b72\",\n startBlock: 3790244,\n },\n UnwrappedEthRegistrarController: {\n abi: root_UnwrappedEthRegistrarController,\n address: \"0xfb3ce5d01e0f33f41dbb39035db9745962f1f968\",\n startBlock: 8579988,\n },\n UniversalRegistrarRenewalWithReferrer: {\n abi: root_UniversalRegistrarRenewalWithReferrer,\n address: \"0x7ab2947592c280542e680ba8f08a589009da8644\",\n startBlock: 9447519,\n },\n NameWrapper: {\n abi: root_NameWrapper,\n address: \"0x0635513f179d50a207757e05759cbd106d7dfce8\",\n startBlock: 3790153,\n },\n UniversalResolver: {\n abi: root_UniversalResolver,\n address: \"0xb7b7dadf4d42a08b3ec1d3a1079959dfbc8cffcc\",\n startBlock: 8515717,\n },\n },\n },\n\n /**\n * Basenames Datasource\n *\n * Addresses and Start Blocks from Basenames\n * https://github.com/base-org/basenames\n */\n [DatasourceNames.Basenames]: {\n /**\n * As of 5-Jun-2025 the Resolver for 'basetest.eth' in the Sepolia ENS namespace is\n * 0x084D10C07EfEecD9fFc73DEb38ecb72f9eEb65aB.\n *\n * This Resolver uses ENSIP-10 (Wildcard Resolution) and EIP-3668 (CCIP Read) to delegate\n * the forward resolution of data associated with subnames of 'basetest.eth' to an offchain\n * gateway server operated by Coinbase that uses the following subregistry contracts on\n * Base Sepolia as its source of truth.\n *\n * The owner of 'basetest.eth' in the ENS Registry on the Sepolia ENS namespace\n * (e.g. Coinbase) has the ability to change this configuration at any time.\n *\n * See the reference documentation for additional context:\n * docs/ensnode/src/content/docs/reference/mainnet-registered-subnames-of-subregistries.mdx\n */\n chain: baseSepolia,\n contracts: {\n Registry: {\n abi: base_Registry,\n address: \"0x1493b2567056c2181630115660963e13a8e32735\",\n startBlock: 13012458,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 13012458,\n },\n BaseRegistrar: {\n abi: base_BaseRegistrar,\n address: \"0xa0c70ec36c010b55e3c434d6c6ebeec50c705794\",\n startBlock: 13012465,\n },\n EARegistrarController: {\n abi: base_EARegistrarController,\n address: \"0x3a0e8c2a0a28f396a5e5b69edb2e630311f1517a\",\n startBlock: 13041164,\n },\n RegistrarController: {\n abi: base_RegistrarController,\n address: \"0x49ae3cc2e3aa768b1e5654f5d3c6002144a59581\",\n startBlock: 13298580,\n },\n /**\n * This controller was added to BaseRegistrar contract\n * with the following tx:\n * https://sepolia.basescan.org/tx/0x648d984c1a379a6c300851b9561fe98a9b5282a26ca8c2c7660b11c53f0564bc\n */\n UpgradeableRegistrarController: {\n abi: base_UpgradeableRegistrarController,\n address: \"0x82c858cdf64b3d893fe54962680edfddc37e94c8\", // a proxy contract\n startBlock: 29896051,\n },\n },\n },\n\n /**\n * Lineanames Datasource\n *\n * Addresses and Start Blocks from Lineanames\n * https://github.com/Consensys/linea-ens\n */\n [DatasourceNames.Lineanames]: {\n /**\n * As of 5-Jun-2025 the Resolver for 'linea-sepolia.eth' in the Sepolia ENS namespace is\n * 0x64884ED06241c059497aEdB2C7A44CcaE6bc7937.\n *\n * This Resolver uses ENSIP-10 (Wildcard Resolution) and EIP-3668 (CCIP Read) to delegate\n * the forward resolution of data associated with subnames of 'linea-sepolia.eth' to an offchain\n * gateway server operated by Consensys that uses the following subregistry contracts on\n * Linea Sepolia as its source of truth.\n *\n * The owner of 'linea-sepolia.eth' in the ENS Registry on the Sepolia ENS namespace\n * (e.g. Consensys) has the ability to change this configuration at any time.\n *\n * See the reference documentation for additional context:\n * docs/ensnode/src/content/docs/reference/mainnet-registered-subnames-of-subregistries.mdx\n */\n chain: lineaSepolia,\n contracts: {\n Registry: {\n abi: linea_Registry,\n address: \"0x5b2636f0f2137b4ae722c01dd5122d7d3e9541f7\",\n startBlock: 2395094,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 2395094, // based on startBlock of Registry on Linea Sepolia\n },\n BaseRegistrar: {\n abi: linea_BaseRegistrar,\n address: \"0x83475a84c0ea834f06c8e636a62631e7d2e07a44\",\n startBlock: 2395099,\n },\n EthRegistrarController: {\n abi: linea_EthRegistrarController,\n address: \"0x0f81e3b3a32dfe1b8a08d3c0061d852337a09338\",\n startBlock: 2395231,\n },\n NameWrapper: {\n abi: linea_NameWrapper,\n address: \"0xf127de9e039a789806fed4c6b1c0f3affea9425e\",\n startBlock: 2395202,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on the (Sepolia) ENS Root chain.\n */\n [DatasourceNames.ReverseResolverRoot]: {\n chain: sepolia,\n contracts: {\n DefaultReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x4f382928805ba0e23b30cfb75fc9e848e82dfd47\",\n startBlock: 8579966,\n },\n\n DefaultReverseResolver1: {\n abi: ResolverABI,\n address: \"0x8fade66b79cc9f707ab26799354482eb93a5b7dd\",\n startBlock: 3790251,\n },\n DefaultReverseResolver2: {\n abi: ResolverABI,\n address: \"0x8948458626811dd0c23eb25cc74291247077cc51\",\n startBlock: 7035086,\n },\n DefaultReverseResolver3: {\n abi: ResolverABI,\n address: \"0x9dc60e7bd81ccc96774c55214ff389d42ae5e9ac\",\n startBlock: 8580041,\n },\n\n DefaultPublicResolver3: {\n abi: ResolverABI,\n address: \"0x8fade66b79cc9f707ab26799354482eb93a5b7dd\",\n startBlock: 3790251,\n },\n DefaultPublicResolver4: {\n abi: ResolverABI,\n address: \"0x8948458626811dd0c23eb25cc74291247077cc51\",\n startBlock: 7035086,\n },\n DefaultPublicResolver5: {\n abi: ResolverABI,\n address: \"0xe99638b40e4fff0129d56f03b55b6bbc4bbe49b5\",\n startBlock: 8580001,\n },\n\n BaseReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html?sepolia#80014a34.reverse\n address: \"0xaf3b3f636be80b6709f5bd3a374d6ac0d0a7c7aa\",\n startBlock: 8580004,\n },\n\n LineaReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html?sepolia#8000e705.reverse\n address: \"0x083da1dbc0f379ccda6ac81a934207c3d8a8a205\",\n startBlock: 8580005,\n },\n\n OptimismReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html?sepolia#80aa37dc.reverse\n address: \"0xc9ae189772bd48e01410ab3be933637ee9d3aa5f\",\n startBlock: 8580026,\n },\n\n ArbitrumReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html?sepolia#80066eee.reverse\n address: \"0x926f94d2adc77c86cb0050892097d49aadd02e8b\",\n startBlock: 8580003,\n },\n\n ScrollReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html?sepolia#8008274f.reverse\n address: \"0x9fa59673e43f15bdb8722fdaf5c2107574b99062\",\n startBlock: 8580040,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Base Sepolia.\n */\n [DatasourceNames.ReverseResolverBase]: {\n chain: baseSepolia,\n contracts: {\n L2ReverseRegistrar: {\n abi: ResolverABI,\n address: \"0x00000beef055f7934784d6d81b6bc86665630dba\",\n startBlock: 21788010,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Optimism Sepolia.\n */\n [DatasourceNames.ReverseResolverOptimism]: {\n chain: optimismSepolia,\n contracts: {\n L2ReverseRegistrar: {\n abi: ResolverABI,\n address: \"0x00000beef055f7934784d6d81b6bc86665630dba\",\n startBlock: 23770766,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Arbitrum Sepolia.\n */\n [DatasourceNames.ReverseResolverArbitrum]: {\n chain: arbitrumSepolia,\n contracts: {\n L2ReverseRegistrar: {\n abi: ResolverABI,\n address: \"0x00000beef055f7934784d6d81b6bc86665630dba\",\n startBlock: 123142726,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Scroll Sepolia.\n */\n [DatasourceNames.ReverseResolverScroll]: {\n chain: scrollSepolia,\n contracts: {\n L2ReverseRegistrar: {\n abi: ResolverABI,\n address: \"0x00000beef055f7934784d6d81b6bc86665630dba\",\n startBlock: 8175276,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Linea Sepolia.\n */\n [DatasourceNames.ReverseResolverLinea]: {\n chain: lineaSepolia,\n contracts: {\n L2ReverseRegistrar: {\n abi: ResolverABI,\n address: \"0x00000beef055f7934784d6d81b6bc86665630dba\",\n startBlock: 9267966,\n },\n },\n },\n\n [DatasourceNames.Seaport]: {\n chain: sepolia,\n contracts: {\n Seaport1_5: {\n abi: Seaport1_5, // Seaport 1.5\n address: \"0x00000000000000adc04c56bf30ac9d3c0aaf14dc\",\n startBlock: 3365529,\n },\n },\n },\n} satisfies ENSNamespace;\n","import { zeroAddress } from \"viem\";\nimport { sepolia } from \"viem/chains\";\n\n// ABIs for ENSv2 Datasource\nimport { EnhancedAccessControl } from \"./abis/ensv2/EnhancedAccessControl\";\nimport { ETHRegistrar } from \"./abis/ensv2/ETHRegistrar\";\nimport { Registry } from \"./abis/ensv2/Registry\";\n// ABIs for ENSRoot Datasource\nimport { BaseRegistrar as root_BaseRegistrar } from \"./abis/root/BaseRegistrar\";\nimport { LegacyEthRegistrarController as root_LegacyEthRegistrarController } from \"./abis/root/LegacyEthRegistrarController\";\nimport { NameWrapper as root_NameWrapper } from \"./abis/root/NameWrapper\";\nimport { Registry as root_Registry } from \"./abis/root/Registry\";\nimport { UniversalRegistrarRenewalWithReferrer as root_UniversalRegistrarRenewalWithReferrer } from \"./abis/root/UniversalRegistrarRenewalWithReferrer\";\nimport { UniversalResolver as root_UniversalResolver } from \"./abis/root/UniversalResolver\";\nimport { UnwrappedEthRegistrarController as root_UnwrappedEthRegistrarController } from \"./abis/root/UnwrappedEthRegistrarController\";\nimport { WrappedEthRegistrarController as root_WrappedEthRegistrarController } from \"./abis/root/WrappedEthRegistrarController\";\n// Shared ABIs\nimport { StandaloneReverseRegistrar } from \"./abis/shared/StandaloneReverseRegistrar\";\nimport { ResolverABI } from \"./lib/ResolverABI\";\n// Types\nimport { DatasourceNames, type ENSNamespace } from \"./lib/types\";\n\n/**\n * The Sepolia V2 ENSNamespace\n *\n * This represents a testing deployment of ENSv1 w/ ENSv2 on Sepolia.\n *\n * @dev we use the earliest start block for simplicity (it's just for efficiency re: log fetches).\n */\nexport default {\n /**\n * ENS Root contracts deployed on Sepolia for the ENSv1 + ENSv2 test deployment.\n *\n * NOTE: `UniversalRegistrarRenewalWithReferrer` is a placeholder entry required by the typesystem\n * due to the registrar plugin; it does not exist on Sepolia V2 and therefore uses the zero address.\n */\n [DatasourceNames.ENSRoot]: {\n chain: sepolia,\n contracts: {\n ENSv1RegistryOld: {\n abi: root_Registry,\n address: \"0x4355f1c6b5b59818dc56e336d1584df35d47ad86\",\n startBlock: 9374708,\n },\n ENSv1Registry: {\n abi: root_Registry,\n address: \"0x17795c119b8155ab9d3357c77747ba509695d7cb\",\n startBlock: 9374708,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 9374708,\n },\n BaseRegistrar: {\n abi: root_BaseRegistrar,\n address: \"0xb16870800de7444f6b2ebd885465412a5e581614\",\n startBlock: 9374708,\n },\n LegacyEthRegistrarController: {\n abi: root_LegacyEthRegistrarController,\n address: \"0x25da9aa54dae4afa6534ba829c6288039d4f5ebb\",\n startBlock: 9374708,\n },\n WrappedEthRegistrarController: {\n abi: root_WrappedEthRegistrarController,\n address: \"0x4f1d36f2c1382a01006077a42de53f7c843d1a83\",\n startBlock: 9374708,\n },\n UnwrappedEthRegistrarController: {\n abi: root_UnwrappedEthRegistrarController,\n address: \"0x99e517db3db5ec5424367b8b50cd11ddcb0008f1\",\n startBlock: 9374708,\n },\n NameWrapper: {\n abi: root_NameWrapper,\n address: \"0xca7e6d0ddc5f373197bbe6fc2f09c2314399f028\",\n startBlock: 9374708,\n },\n UniversalResolver: {\n abi: root_UniversalResolver,\n address: \"0x198827b2316e020c48b500fc3cebdbcaf58787ce\",\n startBlock: 9374708,\n },\n UniversalRegistrarRenewalWithReferrer: {\n abi: root_UniversalRegistrarRenewalWithReferrer,\n address: zeroAddress,\n startBlock: 9374708,\n },\n },\n },\n\n [DatasourceNames.ENSv2Root]: {\n chain: sepolia,\n contracts: {\n Resolver: { abi: ResolverABI, startBlock: 9374708 },\n Registry: { abi: Registry, startBlock: 9374708 },\n EnhancedAccessControl: { abi: EnhancedAccessControl, startBlock: 9374708 },\n RootRegistry: {\n abi: Registry,\n address: \"0x245de1984f9bb890c5db0b1fb839470c6a4c7e08\",\n startBlock: 9374708,\n },\n ETHRegistry: {\n abi: Registry,\n address: \"0x3f0920aa92c5f9bce54643c09955c5f241f1f763\",\n startBlock: 9374708,\n },\n ETHRegistrar: {\n abi: ETHRegistrar,\n address: \"0x3334f0ebcbc4b5b7067f3aff25c6da8973690d54\",\n startBlock: 9374708,\n },\n },\n },\n\n [DatasourceNames.ReverseResolverRoot]: {\n chain: sepolia,\n contracts: {\n DefaultReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0xf7fca8d7b8b802d07a1011b69a5e39395197b730\",\n startBlock: 9374708,\n },\n DefaultReverseResolver3: {\n abi: ResolverABI,\n address: \"0xa238d3aca667210d272391a119125d38816af4b1\",\n startBlock: 9374708,\n },\n BaseReverseResolver: {\n abi: ResolverABI,\n address: \"0xf849bc9d818ac09a629ae981b03bcbcdca750e8f\",\n startBlock: 9374708,\n },\n LineaReverseResolver: {\n abi: ResolverABI,\n address: \"0xc8e393f59be1ec4d44ea9190e6831d3c4a94dfa7\",\n startBlock: 9374708,\n },\n OptimismReverseResolver: {\n abi: ResolverABI,\n address: \"0x05e889ba6c7a2399ea9ce4e9666f1e863b0f1728\",\n startBlock: 9374708,\n },\n ArbitrumReverseResolver: {\n abi: ResolverABI,\n address: \"0x18b9b7158c16194b6d4c4fde85de92b035a3ce77\",\n startBlock: 9374708,\n },\n ScrollReverseResolver: {\n abi: ResolverABI,\n address: \"0xd854f312888d0a5d64b646932a2ed8e8bad8de87\",\n startBlock: 9374708,\n },\n },\n },\n} satisfies ENSNamespace;\n","import ensTestEnv from \"./ens-test-env\";\nimport {\n type DatasourceName,\n DatasourceNames,\n type ENSNamespaceId,\n type ExtractDatasourceType,\n} from \"./lib/types\";\nimport mainnet from \"./mainnet\";\nimport sepolia from \"./sepolia\";\nimport sepoliaV2 from \"./sepolia-v2\";\n\n// internal map ENSNamespaceId -> ENSNamespace\nconst ENSNamespacesById: {\n readonly mainnet: typeof mainnet;\n readonly sepolia: typeof sepolia;\n readonly \"sepolia-v2\": typeof sepoliaV2;\n readonly \"ens-test-env\": typeof ensTestEnv;\n} = {\n mainnet,\n sepolia,\n \"sepolia-v2\": sepoliaV2,\n \"ens-test-env\": ensTestEnv,\n} as const;\n\n/**\n * Returns the ENSNamespace for a specified `namespaceId`.\n *\n * @param namespaceId - The ENSNamespace identifier (e.g. 'mainnet', 'sepolia', 'ens-test-env')\n * @returns the ENSNamespace\n */\nexport const getENSNamespace = <N extends ENSNamespaceId>(\n namespaceId: N,\n): (typeof ENSNamespacesById)[N] => ENSNamespacesById[namespaceId];\n\n/**\n * Returns the `datasourceName` Datasource within the specified `namespaceId` namespace.\n *\n * NOTE: the typescript typechecker _will_ enforce validity. i.e. using an invalid `datasourceName`\n * within the specified `namespaceId` will be a type error.\n *\n * @param namespaceId - The ENSNamespace identifier (e.g. 'mainnet', 'sepolia', 'ens-test-env')\n * @param datasourceName - The name of the Datasource to retrieve\n * @returns The Datasource object for the given name within the specified namespace\n */\nexport const getDatasource = <\n N extends ENSNamespaceId,\n D extends keyof ReturnType<typeof getENSNamespace<N>>,\n>(\n namespaceId: N,\n datasourceName: D,\n) => getENSNamespace(namespaceId)[datasourceName];\n\n/**\n * Returns the `datasourceName` Datasource within the specified `namespaceId` namespace, or undefined\n * if it does not exist.\n *\n * This is useful when you want to retrieve a Datasource from an arbitrary namespace where it may\n * or may not actually be defined. For example, if using {@link getDatasource}, with a\n * `namespaceId: ENSNamespaceId`, the typechecker will enforce that the only valid `datasourceName`\n * is ENSRoot (the only Datasource present in all namespaces). This method allows you to receive\n * the const Datasource or undefined for a specified `datasourceName`.\n *\n * @param namespaceId - The ENSNamespace identifier (e.g. 'mainnet', 'sepolia', 'ens-test-env')\n * @param datasourceName - The name of the Datasource to retrieve\n * @returns The Datasource object for the given name within the specified namespace, or undefined if it does not exist\n */\nexport const maybeGetDatasource = <\n N extends ENSNamespaceId,\n D extends DatasourceName = DatasourceName,\n>(\n namespaceId: N,\n datasourceName: D,\n): ExtractDatasourceType<ReturnType<typeof getENSNamespace<N>>, D> | undefined =>\n (getENSNamespace(namespaceId) as any)[datasourceName];\n\n/**\n * Returns the chain for the ENS Root Datasource within the selected namespace.\n *\n * @returns the chain that hosts the ENS Root\n */\nexport const getENSRootChain = (namespaceId: ENSNamespaceId) =>\n getDatasource(namespaceId, DatasourceNames.ENSRoot).chain;\n\n/**\n * Returns the chain id for the ENS Root Datasource within the selected namespace.\n *\n * @returns the chain ID that hosts the ENS Root\n */\nexport const getENSRootChainId = (namespaceId: ENSNamespaceId) => getENSRootChain(namespaceId).id;\n","import type { Address } from \"viem\";\n\n/**\n * Converts an EVM address to its lowercase representation.\n *\n * @param address - EVM address to convert.\n * @returns The lowercase representation of the EVM address.\n */\nexport function asLowerCaseAddress(address: Address): Address {\n return address.toLowerCase() as Address;\n}\n","import { parseUnits } from \"viem\";\n\nimport { scaleBigintByNumber } from \"./numbers\";\n\n/**\n * Identifiers for supported currencies.\n *\n * TODO: Add support for WETH\n */\nexport const CurrencyIds = {\n ETH: \"ETH\",\n USDC: \"USDC\",\n DAI: \"DAI\",\n} as const;\n\nexport type CurrencyId = (typeof CurrencyIds)[keyof typeof CurrencyIds];\n\n/**\n * The amount of the currency in the smallest unit of the currency\n * (see {@link CurrencyInfo.decimals} for the currency).\n *\n * Guaranteed to be non-negative.\n */\nexport type CurrencyAmount = bigint;\n\n/**\n * Serialized representation of {@link CurrencyAmount}.\n */\nexport type SerializedCurrencyAmount = string;\n\nexport interface PriceEth {\n currency: typeof CurrencyIds.ETH;\n\n amount: CurrencyAmount;\n}\n\nexport interface PriceDai {\n currency: typeof CurrencyIds.DAI;\n\n amount: CurrencyAmount;\n}\n\nexport interface PriceUsdc {\n currency: typeof CurrencyIds.USDC;\n\n amount: CurrencyAmount;\n}\n\nexport type Price = PriceEth | PriceDai | PriceUsdc;\n\n/**\n * Serialized representation of {@link PriceEth}.\n */\nexport interface SerializedPriceEth extends Omit<PriceEth, \"amount\"> {\n amount: SerializedCurrencyAmount;\n}\n\n/**\n * Serialized representation of {@link PriceDai}.\n */\nexport interface SerializedPriceDai extends Omit<PriceDai, \"amount\"> {\n amount: SerializedCurrencyAmount;\n}\n\n/**\n * Serialized representation of {@link PriceUsdc}.\n */\nexport interface SerializedPriceUsdc extends Omit<PriceUsdc, \"amount\"> {\n amount: SerializedCurrencyAmount;\n}\n\n/**\n * Serialized representation of {@link Price}.\n */\nexport type SerializedPrice = SerializedPriceEth | SerializedPriceDai | SerializedPriceUsdc;\n\nexport interface CurrencyInfo {\n id: CurrencyId;\n name: string;\n decimals: number;\n}\n\nconst currencyInfo: Record<CurrencyId, CurrencyInfo> = {\n [CurrencyIds.ETH]: {\n id: CurrencyIds.ETH,\n name: \"ETH\",\n decimals: 18,\n },\n [CurrencyIds.USDC]: {\n id: CurrencyIds.USDC,\n name: \"USDC\",\n decimals: 6,\n },\n [CurrencyIds.DAI]: {\n id: CurrencyIds.DAI,\n name: \"Dai Stablecoin\",\n decimals: 18,\n },\n};\n\n/**\n * Get currency info for a provided currency.\n */\nexport function getCurrencyInfo(currencyId: CurrencyId): CurrencyInfo {\n return currencyInfo[currencyId];\n}\n\n/**\n * Create price in ETH for given amount.\n */\nexport function priceEth(amount: Price[\"amount\"]): PriceEth {\n return {\n amount,\n currency: CurrencyIds.ETH,\n };\n}\n\n/**\n * Create price in USDC for given amount.\n */\nexport function priceUsdc(amount: Price[\"amount\"]): PriceUsdc {\n return {\n amount,\n currency: CurrencyIds.USDC,\n };\n}\n\n/**\n * Create price in DAI for given amount.\n */\nexport function priceDai(amount: Price[\"amount\"]): PriceDai {\n return {\n amount,\n currency: CurrencyIds.DAI,\n };\n}\n\n/**\n * Check if two prices have the same currency.\n */\nexport function isPriceCurrencyEqual(priceA: Price, priceB: Price): boolean {\n return priceA.currency === priceB.currency;\n}\n\n/**\n * Check if two {@link Price} values have the same currency and amount.\n */\nexport function isPriceEqual(priceA: Price, priceB: Price): boolean {\n return isPriceCurrencyEqual(priceA, priceB) && priceA.amount === priceB.amount;\n}\n\n/**\n * Add prices\n *\n * @param prices at least two {@link Price} values to be added together.\n * @returns total of all prices.\n * @throws if not all prices have the same currency.\n */\nexport function addPrices<const PriceType extends Price = Price>(\n ...prices: [PriceType, PriceType, ...PriceType[]]\n): PriceType {\n const firstPrice = prices[0];\n const allPricesInSameCurrency = prices.every((price) => isPriceCurrencyEqual(firstPrice, price));\n\n if (allPricesInSameCurrency === false) {\n throw new Error(\"All prices must have the same currency to be added together.\");\n }\n\n const { currency } = firstPrice;\n\n return prices.reduce(\n (acc, price) => ({\n amount: acc.amount + price.amount,\n currency,\n }),\n {\n amount: 0n,\n currency: firstPrice.currency,\n },\n ) as PriceType;\n}\n\n/**\n * Scales a Price object by a floating-point number while maintaining precision.\n *\n * **Important:** The precision of this method is bound to the precision of float\n * in JavaScript. For more information, see {@link scaleBigintByNumber}.\n *\n * @param price - The Price object to scale\n * @param scaleFactor - The number to multiply by (can be a decimal like 0.5)\n * @returns A new Price object with the scaled amount and same currency\n *\n * @throws {Error} If scaleFactor is negative, NaN, or infinite\n * @throws {Error} If price amount is negative\n *\n * @example\n * // Scale USDC price by 0.5\n * const price = priceUsdc(1000000n); // 1 USDC\n * const scaled = scalePrice(price, 0.5); // 0.5 USDC\n * // scaled = { currency: \"USDC\", amount: 500000n }\n *\n * @example\n * // Calculate 33.3% of ETH price\n * const ethPrice = priceEth(1000000000000000000n); // 1 ETH\n * const share = scalePrice(ethPrice, 0.333);\n * // share = { currency: \"ETH\", amount: 333000000000000000n }\n */\nexport function scalePrice<T extends Price>(price: T, scaleFactor: number): T {\n const scaledAmount = scaleBigintByNumber(price.amount, scaleFactor);\n\n return {\n ...price,\n amount: scaledAmount,\n };\n}\n\n/**\n * Validates a decimal string for currency parsing.\n *\n * @param value - The decimal string to validate\n * @throws {Error} If value is empty, whitespace-only or untrimmed\n * @throws {Error} If value represents a negative number\n */\nfunction validateAmountToParse(value: string): void {\n const trimmed = value.trim();\n if (trimmed === \"\") {\n throw new Error(\"amount must be a non-negative decimal string\");\n }\n if (value !== trimmed) {\n throw new Error(\"amount must not have leading or trailing whitespace\");\n }\n if (trimmed.startsWith(\"-\")) {\n throw new Error(\"amount must be a non-negative decimal string\");\n }\n}\n\n/**\n * Parses a string representation of ETH into a {@link PriceEth} object.\n *\n * Uses {@link getCurrencyInfo} to get the correct number of decimals (18) for ETH\n * and {@link parseUnits} from viem to convert the decimal string to a bigint.\n *\n * **Note:** Values with more than 18 decimal places will be truncated/rounded by viem's `parseUnits`.\n *\n * @param value - The decimal string to parse (e.g., \"0.015\" for 0.015 ETH)\n * @returns A PriceEth object with the amount in wei (smallest unit)\n *\n * @throws {Error} If value is empty, whitespace-only or untrimmed\n * @throws {Error} If value represents a negative number\n * @throws {Error} If value is not a valid decimal string (e.g., \"abc\", \"1.2.3\")\n *\n * @example\n * parseEth(\"0.015\") // returns { currency: \"ETH\", amount: 15000000000000000n }\n * parseEth(\"1\") // returns { currency: \"ETH\", amount: 1000000000000000000n }\n * parseEth(\"123.456789012345678\") // returns { currency: \"ETH\", amount: 123456789012345678000n }\n */\nexport function parseEth(value: string): PriceEth {\n validateAmountToParse(value);\n const currencyInfo = getCurrencyInfo(CurrencyIds.ETH);\n const amount = parseUnits(value, currencyInfo.decimals);\n return priceEth(amount);\n}\n\n/**\n * Parses a string representation of USDC into a {@link PriceUsdc} object.\n *\n * Uses {@link getCurrencyInfo} to get the correct number of decimals (6) for USDC\n * and {@link parseUnits} from viem to convert the decimal string to a bigint.\n *\n * **Note:** Values with more than 6 decimal places will be truncated/rounded by viem's `parseUnits`.\n *\n * @param value - The decimal string to parse (e.g., \"123.45678\" for $123.45678)\n * @returns A PriceUsdc object with the amount in the smallest unit (6 decimals)\n *\n * @throws {Error} If value is empty, whitespace-only or untrimmed\n * @throws {Error} If value represents a negative number\n * @throws {Error} If value is not a valid decimal string (e.g., \"abc\", \"1.2.3\")\n *\n * @example\n * parseUsdc(\"123.45678\") // returns { currency: \"USDC\", amount: 123456780n }\n * parseUsdc(\"1\") // returns { currency: \"USDC\", amount: 1000000n }\n * parseUsdc(\"0.001\") // returns { currency: \"USDC\", amount: 1000n }\n */\nexport function parseUsdc(value: string): PriceUsdc {\n validateAmountToParse(value);\n const currencyInfo = getCurrencyInfo(CurrencyIds.USDC);\n const amount = parseUnits(value, currencyInfo.decimals);\n return priceUsdc(amount);\n}\n\n/**\n * Parses a string representation of DAI into a {@link PriceDai} object.\n *\n * Uses {@link getCurrencyInfo} to get the correct number of decimals (18) for DAI\n * and {@link parseUnits} from viem to convert the decimal string to a bigint.\n *\n * **Note:** Values with more than 18 decimal places will be truncated/rounded by viem's `parseUnits`.\n *\n * @param value - The decimal string to parse (e.g., \"123.456789012345678\" for 123.456789012345678 DAI)\n * @returns A PriceDai object with the amount in the smallest unit (18 decimals)\n *\n * @throws {Error} If value is empty, whitespace-only or untrimmed\n * @throws {Error} If value represents a negative number\n * @throws {Error} If value is not a valid decimal string (e.g., \"abc\", \"1.2.3\")\n *\n * @example\n * parseDai(\"123.456789012345678\") // returns { currency: \"DAI\", amount: 123456789012345678000n }\n * parseDai(\"1\") // returns { currency: \"DAI\", amount: 1000000000000000000n }\n * parseDai(\"0.001\") // returns { currency: \"DAI\", amount: 1000000000000000n }\n */\nexport function parseDai(value: string): PriceDai {\n validateAmountToParse(value);\n const currencyInfo = getCurrencyInfo(CurrencyIds.DAI);\n const amount = parseUnits(value, currencyInfo.decimals);\n return priceDai(amount);\n}\n","/**\n * Converts a bigint value into a number value.\n *\n * @throws when value is outside the range of `Number.MIN_SAFE_INTEGER` and\n * `Number.MAX_SAFE_INTEGER`.\n */\nexport function bigIntToNumber(n: bigint): number {\n if (n < Number.MIN_SAFE_INTEGER) {\n throw new Error(\n `The bigint '${n.toString()}' value is too low to be to converted into a number.'`,\n );\n }\n\n if (n > Number.MAX_SAFE_INTEGER) {\n throw new Error(\n `The bigint '${n.toString()}' value is too high to be to converted into a number.'`,\n );\n }\n\n return Number(n);\n}\n\n/**\n * Scales a bigint value by a floating-point number while maintaining precision.\n *\n * **How it works:**\n * Converts the float to a fixed-point decimal string, extracts the decimal digits,\n * and performs multiplication using bigint arithmetic: `(value * numerator) / denominator`.\n *\n * **Important:** JavaScript floats (IEEE 754 double-precision) have ~15-17 significant\n * decimal digits. Any imprecision in the input `scaleFactor` will be reflected in the result.\n * For example, `1/3` in JavaScript is `0.3333333333333333...` (not infinite threes), and\n * this function accurately preserves that limitation.\n *\n * @param value - The bigint value to scale (must be non-negative)\n * @param scaleFactor - The non-negative number to multiply by (can be a decimal like 0.5 or 0.333)\n * @returns The scaled bigint value, rounded down via integer division\n *\n * @throws {Error} If value is negative\n * @throws {Error} If scaleFactor is negative, NaN, infinite, or >= 1e21\n *\n * @example\n * // Scale by 0.5\n * scaleBigintByNumber(1000n, 0.5) // returns 500n\n *\n * @example\n * // Scale by 1/3 (uses JavaScript's float representation)\n * scaleBigintByNumber(1000n, 1/3) // returns 333n\n *\n * @example\n * // Scale USDC amount (6 decimals) by percentage\n * scaleBigintByNumber(5000000000n, 0.4) // 5000 USDC * 0.4 = 2000000000n (2000 USDC)\n */\nexport function scaleBigintByNumber(value: bigint, scaleFactor: number): bigint {\n // Validate inputs\n if (value < 0n) {\n throw new Error(`scaleBigintByNumber: value must be non-negative, got: ${value.toString()}`);\n }\n\n if (!Number.isFinite(scaleFactor)) {\n throw new Error(\n `scaleBigintByNumber: scaleFactor must be a finite number, got: ${scaleFactor}`,\n );\n }\n\n if (scaleFactor < 0) {\n throw new Error(`scaleBigintByNumber: scaleFactor must be non-negative, got: ${scaleFactor}`);\n }\n\n // Reject scaleFactor >= 1e21 to prevent toFixed(20) from producing exponential notation that breaks BigInt parsing\n if (scaleFactor >= 1e21) {\n throw new Error(`scaleBigintByNumber: scaleFactor must be less than 1e21, got: ${scaleFactor}`);\n }\n\n // Handle special cases\n if (value === 0n || scaleFactor === 0) {\n return 0n;\n }\n\n if (scaleFactor === 1) {\n return value;\n }\n\n // Convert the float to a fixed-point decimal string with 20 decimal places.\n // Why 20?\n // - JavaScript floats have ~15-17 significant digits of precision (IEEE 754)\n // - Using 20 ensures we capture all meaningful precision\n // - Avoids scientific notation (e.g., \"1e-10\") which would break our parsing\n // - Extra digits beyond float precision are deterministic (not random noise)\n const fixedStr = scaleFactor.toFixed(20);\n\n // Split into integer and decimal parts\n // Example: \"0.50000000000000000000\" -> [\"0\", \"50000000000000000000\"]\n const [integerPart, decimalPart = \"\"] = fixedStr.split(\".\");\n\n // Remove trailing zeros to get the minimal precision needed\n // Example: \"50000000000000000000\" -> \"5\"\n // This optimization reduces the size of numerator/denominator\n const trimmedDecimal = decimalPart.replace(/0+$/, \"\") || \"0\";\n\n // Construct the numerator by concatenating integer and decimal parts\n // Example: integerPart=\"0\", trimmedDecimal=\"5\" -> \"05\" -> BigInt = 5n\n const numerator = BigInt(integerPart + trimmedDecimal);\n\n // Denominator is 10^(number of decimal digits we kept)\n // Example: trimmedDecimal.length = 1 -> 10^1 = 10n\n const denominator = 10n ** BigInt(trimmedDecimal.length);\n\n // Perform the multiplication and division in bigint space\n // Formula: (value * numerator) / denominator\n // Example: (1000n * 5n) / 10n = 5000n / 10n = 500n\n // Integer division automatically floors the result\n return (value * numerator) / denominator;\n}\n","import { AccountId as CaipAccountId, AssetId as CaipAssetId } from \"caip\";\n\nimport { uint256ToHex32 } from \"../ens\";\nimport type {\n Price,\n PriceDai,\n PriceEth,\n PriceUsdc,\n SerializedPrice,\n SerializedPriceDai,\n SerializedPriceEth,\n SerializedPriceUsdc,\n} from \"./currencies\";\nimport type {\n AccountIdString,\n AssetIdString,\n ChainIdString,\n DatetimeISO8601,\n UrlString,\n} from \"./serialized-types\";\nimport type { AccountId, AssetId, ChainId, Datetime } from \"./types\";\n\n/**\n * Serializes a {@link ChainId} value into its string representation.\n */\nexport function serializeChainId(chainId: ChainId): ChainIdString {\n return chainId.toString();\n}\n\n/**\n * Serializes a {@link Datetime} value into its string representation.\n */\nexport function serializeDatetime(datetime: Datetime): DatetimeISO8601 {\n return datetime.toISOString();\n}\n\n/**\n * Serializes a {@link URL} value into its string representation.\n */\nexport function serializeUrl(url: URL): UrlString {\n return url.toString();\n}\n\n/**\n * Serializes a {@link Price} object.\n */\nexport function serializePrice(price: Price): SerializedPrice {\n return {\n currency: price.currency,\n amount: price.amount.toString(),\n };\n}\n\n/**\n * Serializes a {@link PriceEth} object.\n */\nexport function serializePriceEth(price: PriceEth): SerializedPriceEth {\n return serializePrice(price) as SerializedPriceEth;\n}\n\n/**\n * Serializes a {@link PriceUsdc} object.\n */\nexport function serializePriceUsdc(price: PriceUsdc): SerializedPriceUsdc {\n return serializePrice(price) as SerializedPriceUsdc;\n}\n\n/**\n * Serializes a {@link PriceDai} object.\n */\nexport function serializePriceDai(price: PriceDai): SerializedPriceDai {\n return serializePrice(price) as SerializedPriceDai;\n}\n\n/**\n * Format {@link AccountId} object as a string.\n *\n * Formatted as a fully lowercase CAIP-10 AccountId.\n *\n * @see https://chainagnostic.org/CAIPs/caip-10\n */\nexport function formatAccountId(accountId: AccountId): AccountIdString {\n return CaipAccountId.format({\n chainId: { namespace: \"eip155\", reference: accountId.chainId.toString() },\n address: accountId.address,\n }).toLowerCase();\n}\n\n/**\n * Format {@link AssetId} object as a string.\n *\n * Formatted as a fully lowercase CAIP-19 AssetId.\n *\n * @see https://chainagnostic.org/CAIPs/caip-19\n */\nexport function formatAssetId({\n assetNamespace,\n contract: { chainId, address },\n tokenId,\n}: AssetId): AssetIdString {\n return CaipAssetId.format({\n chainId: { namespace: \"eip155\", reference: chainId.toString() },\n assetName: { namespace: assetNamespace, reference: address },\n tokenId: uint256ToHex32(tokenId),\n }).toLowerCase();\n}\n","import {\n DatasourceNames,\n type ENSNamespaceId,\n ENSNamespaceIds,\n maybeGetDatasource,\n} from \"@ensnode/datasources\";\n\nimport type { Name } from \"../ens\";\nimport type { AccountId } from \"../shared/types\";\n\n/**\n * Gets the SubregistryId (an AccountId) of the Ethnames Subregistry contract (this is the\n * \"BaseRegistrar\" contract for direct subnames of .eth) for the provided namespace.\n *\n * @param namespace The ENS namespace to get the Ethnames Subregistry ID for\n * @returns The AccountId for the Ethnames Subregistry contract for the provided namespace.\n * @throws Error if the contract is not found for the given namespace.\n */\nexport function getEthnamesSubregistryId(namespace: ENSNamespaceId): AccountId {\n const datasource = maybeGetDatasource(namespace, DatasourceNames.ENSRoot);\n if (!datasource) {\n throw new Error(`Datasource not found for ${namespace} ${DatasourceNames.ENSRoot}`);\n }\n\n const address = datasource.contracts.BaseRegistrar?.address;\n if (address === undefined || Array.isArray(address)) {\n throw new Error(`BaseRegistrar contract not found or has multiple addresses for ${namespace}`);\n }\n\n return {\n chainId: datasource.chain.id,\n address,\n };\n}\n\n/**\n * Get the managed name for the Ethnames subregistry for the selected ENS namespace.\n *\n * @param namespaceId\n * @returns registrar managed name\n */\nexport function getEthnamesSubregistryManagedName(namespaceId: ENSNamespaceId): Name {\n switch (namespaceId) {\n case ENSNamespaceIds.Mainnet:\n case ENSNamespaceIds.Sepolia:\n case ENSNamespaceIds.SepoliaV2:\n case ENSNamespaceIds.EnsTestEnv:\n return \"eth\";\n }\n}\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * @param date - The given date\n *\n * @returns The timestamp\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * const result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport function getUnixTime(date) {\n return Math.trunc(+toDate(date) / 1000);\n}\n\n// Fallback for modularized imports:\nexport default getUnixTime;\n","import z, { prettifyError } from \"zod/v4\";\n\nimport type { PriceDai, PriceEth, PriceUsdc } from \"./currencies\";\nimport type { ChainIdString, UrlString } from \"./serialized-types\";\nimport type { AccountId, BlockNumber, BlockRef, ChainId, Datetime, Duration } from \"./types\";\nimport {\n makeAccountIdStringSchema,\n makeBlockNumberSchema,\n makeBlockRefSchema,\n makeChainIdStringSchema,\n makeDatetimeSchema,\n makeDurationSchema,\n makePriceDaiSchema,\n makePriceEthSchema,\n makePriceUsdcSchema,\n makeUnixTimestampSchema,\n makeUrlSchema,\n} from \"./zod-schemas\";\n\nexport function deserializeChainId(maybeChainId: ChainIdString, valueLabel?: string): ChainId {\n const schema = makeChainIdStringSchema(valueLabel);\n const parsed = schema.safeParse(maybeChainId);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize ChainId:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeDatetime(maybeDatetime: string, valueLabel?: string): Datetime {\n const schema = makeDatetimeSchema(valueLabel);\n const parsed = schema.safeParse(maybeDatetime);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize Datetime:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeUnixTimestamp(maybeTimestamp: number, valueLabel?: string) {\n const schema = makeUnixTimestampSchema(valueLabel);\n const parsed = schema.safeParse(maybeTimestamp);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize Unix Timestamp:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeUrl(maybeUrl: UrlString, valueLabel?: string): URL {\n const schema = makeUrlSchema(valueLabel);\n const parsed = schema.safeParse(maybeUrl);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize URL:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeBlockNumber(maybeBlockNumber: number, valueLabel?: string): BlockNumber {\n const schema = makeBlockNumberSchema(valueLabel);\n const parsed = schema.safeParse(maybeBlockNumber);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize BlockNumber:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeBlockRef(\n maybeBlockRef: Partial<BlockRef>,\n valueLabel?: string,\n): BlockRef {\n const schema = makeBlockRefSchema(valueLabel);\n const parsed = schema.safeParse(maybeBlockRef);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize BlockRef:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeDuration(maybeDuration: unknown, valueLabel?: string): Duration {\n const schema = z.coerce.number().pipe(makeDurationSchema(valueLabel));\n const parsed = schema.safeParse(maybeDuration);\n\n if (parsed.error) {\n throw new RangeError(`Cannot deserialize Duration:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function parseAccountId(maybeAccountId: unknown, valueLabel?: string): AccountId {\n const schema = makeAccountIdStringSchema(valueLabel);\n const parsed = schema.safeParse(maybeAccountId);\n\n if (parsed.error) {\n throw new RangeError(`Cannot deserialize AccountId:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializePriceEth(maybePrice: unknown, valueLabel?: string): PriceEth {\n const schema = makePriceEthSchema(valueLabel);\n const parsed = schema.safeParse(maybePrice);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize PriceEth:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializePriceUsdc(maybePrice: unknown, valueLabel?: string): PriceUsdc {\n const schema = makePriceUsdcSchema(valueLabel);\n const parsed = schema.safeParse(maybePrice);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize PriceUsdc:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializePriceDai(maybePrice: unknown, valueLabel?: string): PriceDai {\n const schema = makePriceDaiSchema(valueLabel);\n const parsed = schema.safeParse(maybePrice);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize PriceDai:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n","import { getUnixTime } from \"date-fns/getUnixTime\";\n\nimport { deserializeDuration, deserializeUnixTimestamp } from \"./deserialize\";\nimport type { Duration, UnixTimestamp } from \"./types\";\n\n/**\n * Duration between two moments in time.\n */\nexport function durationBetween(start: UnixTimestamp, end: UnixTimestamp): Duration {\n return deserializeDuration(end - start, \"Duration\");\n}\n\n/**\n * Add a duration to a timestamp.\n */\nexport function addDuration(timestamp: UnixTimestamp, duration: Duration): UnixTimestamp {\n return deserializeUnixTimestamp(timestamp + duration, \"UnixTimestamp\");\n}\n\n/**\n * Parses an ISO 8601 date string into a {@link UnixTimestamp}.\n *\n * Accepts date strings in ISO 8601 format with an explicit timezone designator\n * (trailing 'Z' or offset like +HH:MM/-HH:MM), e.g., \"2025-12-01T00:00:00Z\".\n *\n * @param isoDateString - The ISO 8601 date string to parse (must include timezone)\n * @returns The Unix timestamp (seconds since epoch)\n *\n * @throws {Error} If the date string is missing a timezone designator or cannot be parsed\n *\n * @example\n * parseTimestamp(\"2025-12-01T00:00:00Z\") // returns 1764547200\n * parseTimestamp(\"2026-03-31T23:59:59Z\") // returns 1775001599\n */\nexport function parseTimestamp(isoDateString: string): UnixTimestamp {\n if (!/Z$|[+-]\\d{2}:\\d{2}$/.test(isoDateString)) {\n throw new Error(`Timezone required: provide Z or offset`);\n }\n\n const date = new Date(isoDateString);\n\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Invalid date string: ${isoDateString}`);\n }\n\n return deserializeUnixTimestamp(getUnixTime(date), \"UnixTimestamp\");\n}\n","import z from \"zod/v4\";\n\nimport {\n makeDurationSchema,\n makeFiniteNonNegativeNumberSchema,\n makeLowercaseAddressSchema,\n makeNonNegativeIntegerSchema,\n makePositiveIntegerSchema,\n makePriceEthSchema,\n makePriceUsdcSchema,\n makeUnixTimestampSchema,\n} from \"@ensnode/ensnode-sdk/internal\";\n\nimport {\n makeBaseReferralProgramRulesSchema,\n makeReferralProgramStatusSchema,\n makeReferrerLeaderboardPageContextSchema,\n} from \"../../shared/api/zod-schemas\";\nimport { ReferrerEditionMetricsTypeIds } from \"../../shared/edition-metrics\";\nimport { ReferralProgramAwardModels } from \"../../shared/rules\";\n\n/**\n * Schema for {@link ReferralProgramRulesPieSplit}.\n */\nexport const makeReferralProgramRulesPieSplitSchema = (\n valueLabel: string = \"ReferralProgramRulesPieSplit\",\n) =>\n makeBaseReferralProgramRulesSchema(valueLabel).safeExtend({\n awardModel: z.literal(ReferralProgramAwardModels.PieSplit),\n totalAwardPoolValue: makePriceUsdcSchema(`${valueLabel}.totalAwardPoolValue`),\n maxQualifiedReferrers: makeNonNegativeIntegerSchema(`${valueLabel}.maxQualifiedReferrers`),\n });\n\n/**\n * Schema for {@link AwardedReferrerMetricsPieSplit} (with numeric rank).\n */\nexport const makeAwardedReferrerMetricsPieSplitSchema = (\n valueLabel: string = \"AwardedReferrerMetricsPieSplit\",\n) =>\n z.object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n totalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.totalReferrals`),\n totalIncrementalDuration: makeDurationSchema(`${valueLabel}.totalIncrementalDuration`),\n totalRevenueContribution: makePriceEthSchema(`${valueLabel}.totalRevenueContribution`),\n score: makeFiniteNonNegativeNumberSchema(`${valueLabel}.score`),\n rank: makePositiveIntegerSchema(`${valueLabel}.rank`),\n isQualified: z.boolean(),\n finalScoreBoost: makeFiniteNonNegativeNumberSchema(`${valueLabel}.finalScoreBoost`).max(\n 1,\n `${valueLabel}.finalScoreBoost must be <= 1`,\n ),\n finalScore: makeFiniteNonNegativeNumberSchema(`${valueLabel}.finalScore`),\n awardPoolShare: makeFiniteNonNegativeNumberSchema(`${valueLabel}.awardPoolShare`).max(\n 1,\n `${valueLabel}.awardPoolShare must be <= 1`,\n ),\n awardPoolApproxValue: makePriceUsdcSchema(`${valueLabel}.awardPoolApproxValue`),\n });\n\n/**\n * Schema for {@link UnrankedReferrerMetricsPieSplit} (with null rank).\n */\nexport const makeUnrankedReferrerMetricsPieSplitSchema = (\n valueLabel: string = \"UnrankedReferrerMetricsPieSplit\",\n) =>\n z.object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n totalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.totalReferrals`),\n totalIncrementalDuration: makeDurationSchema(`${valueLabel}.totalIncrementalDuration`),\n totalRevenueContribution: makePriceEthSchema(`${valueLabel}.totalRevenueContribution`),\n score: makeFiniteNonNegativeNumberSchema(`${valueLabel}.score`),\n rank: z.null(),\n isQualified: z.literal(false),\n finalScoreBoost: makeFiniteNonNegativeNumberSchema(`${valueLabel}.finalScoreBoost`).max(\n 1,\n `${valueLabel}.finalScoreBoost must be <= 1`,\n ),\n finalScore: makeFiniteNonNegativeNumberSchema(`${valueLabel}.finalScore`),\n awardPoolShare: makeFiniteNonNegativeNumberSchema(`${valueLabel}.awardPoolShare`).max(\n 1,\n `${valueLabel}.awardPoolShare must be <= 1`,\n ),\n awardPoolApproxValue: makePriceUsdcSchema(`${valueLabel}.awardPoolApproxValue`),\n });\n\n/**\n * Schema for {@link AggregatedReferrerMetricsPieSplit}.\n */\nexport const makeAggregatedReferrerMetricsPieSplitSchema = (\n valueLabel: string = \"AggregatedReferrerMetricsPieSplit\",\n) =>\n z.object({\n grandTotalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.grandTotalReferrals`),\n grandTotalIncrementalDuration: makeDurationSchema(\n `${valueLabel}.grandTotalIncrementalDuration`,\n ),\n grandTotalRevenueContribution: makePriceEthSchema(\n `${valueLabel}.grandTotalRevenueContribution`,\n ),\n grandTotalQualifiedReferrersFinalScore: makeFiniteNonNegativeNumberSchema(\n `${valueLabel}.grandTotalQualifiedReferrersFinalScore`,\n ),\n minFinalScoreToQualify: makeFiniteNonNegativeNumberSchema(\n `${valueLabel}.minFinalScoreToQualify`,\n ),\n });\n\n/**\n * Schema for {@link ReferrerEditionMetricsRankedPieSplit}.\n */\nexport const makeReferrerEditionMetricsRankedPieSplitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsRankedPieSplit\",\n) =>\n z\n .object({\n awardModel: z.literal(ReferralProgramAwardModels.PieSplit),\n type: z.literal(ReferrerEditionMetricsTypeIds.Ranked),\n rules: makeReferralProgramRulesPieSplitSchema(`${valueLabel}.rules`),\n referrer: makeAwardedReferrerMetricsPieSplitSchema(`${valueLabel}.referrer`),\n aggregatedMetrics: makeAggregatedReferrerMetricsPieSplitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n\n/**\n * Schema for {@link ReferrerEditionMetricsUnrankedPieSplit}.\n */\nexport const makeReferrerEditionMetricsUnrankedPieSplitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsUnrankedPieSplit\",\n) =>\n z\n .object({\n awardModel: z.literal(ReferralProgramAwardModels.PieSplit),\n type: z.literal(ReferrerEditionMetricsTypeIds.Unranked),\n rules: makeReferralProgramRulesPieSplitSchema(`${valueLabel}.rules`),\n referrer: makeUnrankedReferrerMetricsPieSplitSchema(`${valueLabel}.referrer`),\n aggregatedMetrics: makeAggregatedReferrerMetricsPieSplitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n\n/**\n * Schema for all {@link ReferrerEditionMetrics} variants of the pie-split award model\n * (both ranked and unranked).\n */\nexport const makeReferrerEditionMetricsPieSplitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsPieSplit\",\n) =>\n z.discriminatedUnion(\"type\", [\n makeReferrerEditionMetricsRankedPieSplitSchema(valueLabel),\n makeReferrerEditionMetricsUnrankedPieSplitSchema(valueLabel),\n ]);\n\n/**\n * Schema for {@link ReferrerLeaderboardPagePieSplit}.\n */\nexport const makeReferrerLeaderboardPagePieSplitSchema = (\n valueLabel: string = \"ReferrerLeaderboardPagePieSplit\",\n) =>\n z\n .object({\n awardModel: z.literal(ReferralProgramAwardModels.PieSplit),\n rules: makeReferralProgramRulesPieSplitSchema(`${valueLabel}.rules`),\n referrers: z.array(\n makeAwardedReferrerMetricsPieSplitSchema(`${valueLabel}.referrers[record]`),\n ),\n aggregatedMetrics: makeAggregatedReferrerMetricsPieSplitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n pageContext: makeReferrerLeaderboardPageContextSchema(`${valueLabel}.pageContext`),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n","import z from \"zod/v4\";\n\nimport {\n makeAccountIdSchema,\n makeNonNegativeIntegerSchema,\n makePositiveIntegerSchema,\n makeUnixTimestampSchema,\n makeUrlSchema,\n} from \"@ensnode/ensnode-sdk/internal\";\n\nimport { ReferralProgramStatuses } from \"../../../status\";\nimport { REFERRERS_PER_LEADERBOARD_PAGE_MAX } from \"../leaderboard-page\";\n\n/**\n * Schema for {@link BaseReferralProgramRules}.\n */\nexport const makeBaseReferralProgramRulesSchema = (valueLabel: string) =>\n z\n .object({\n awardModel: z.string(),\n startTime: makeUnixTimestampSchema(`${valueLabel}.startTime`),\n endTime: makeUnixTimestampSchema(`${valueLabel}.endTime`),\n subregistryId: makeAccountIdSchema(`${valueLabel}.subregistryId`),\n rulesUrl: makeUrlSchema(`${valueLabel}.rulesUrl`),\n })\n .refine((data) => data.endTime >= data.startTime, {\n message: `${valueLabel}.endTime must be >= ${valueLabel}.startTime`,\n path: [\"endTime\"],\n });\n\n/**\n * Schema for {@link ReferrerLeaderboardPageContext}.\n */\nexport const makeReferrerLeaderboardPageContextSchema = (\n valueLabel: string = \"ReferrerLeaderboardPageContext\",\n) =>\n z.object({\n page: makePositiveIntegerSchema(`${valueLabel}.page`),\n recordsPerPage: makePositiveIntegerSchema(`${valueLabel}.recordsPerPage`).max(\n REFERRERS_PER_LEADERBOARD_PAGE_MAX,\n `${valueLabel}.recordsPerPage must not exceed ${REFERRERS_PER_LEADERBOARD_PAGE_MAX}`,\n ),\n totalRecords: makeNonNegativeIntegerSchema(`${valueLabel}.totalRecords`),\n totalPages: makePositiveIntegerSchema(`${valueLabel}.totalPages`),\n hasNext: z.boolean(),\n hasPrev: z.boolean(),\n startIndex: z.optional(makeNonNegativeIntegerSchema(`${valueLabel}.startIndex`)),\n endIndex: z.optional(makeNonNegativeIntegerSchema(`${valueLabel}.endIndex`)),\n });\n\n/**\n * Schema for referral program status field.\n * Validates that the status is one of: \"Scheduled\", \"Active\", or \"Closed\".\n */\nexport const makeReferralProgramStatusSchema = (_valueLabel: string = \"status\") =>\n z.enum(ReferralProgramStatuses);\n","import type { UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport type { ReferralProgramRules } from \"./rules.ts\";\n\n/**\n * The type of referral program's status.\n */\nexport const ReferralProgramStatuses = {\n /**\n * Represents a referral program that has been announced, but hasn't started yet.\n */\n Scheduled: \"Scheduled\",\n\n /**\n * Represents a currently ongoing referral program.\n */\n Active: \"Active\",\n\n /**\n * Represents a referral program that has already ended.\n */\n Closed: \"Closed\",\n} as const;\n\n/**\n * The derived string union of possible {@link ReferralProgramStatuses}.\n */\nexport type ReferralProgramStatusId =\n (typeof ReferralProgramStatuses)[keyof typeof ReferralProgramStatuses];\n\n/**\n * Calculate the status of the referral program based on the current date\n * and program's timeframe available in its rules.\n *\n * @param referralProgramRules - Related referral program's rules containing\n * program's start date and end date.\n *\n * @param now - Current date in {@link UnixTimestamp} format.\n */\nexport const calcReferralProgramStatus = (\n referralProgramRules: ReferralProgramRules,\n now: UnixTimestamp,\n): ReferralProgramStatusId => {\n // if the program has not started return \"Scheduled\"\n if (now < referralProgramRules.startTime) return ReferralProgramStatuses.Scheduled;\n\n // if the program has ended return \"Closed\"\n if (now > referralProgramRules.endTime) return ReferralProgramStatuses.Closed;\n\n // otherwise, return \"Active\"\n return ReferralProgramStatuses.Active;\n};\n","export const isInteger = (value: number): boolean => {\n return Number.isInteger(value);\n};\n\nexport const isNonNegativeInteger = (value: number): boolean => {\n return value >= 0 && Number.isInteger(value);\n};\n\nexport const isPositiveInteger = (value: number): boolean => {\n return value >= 1 && Number.isInteger(value);\n};\n\nexport const validateNonNegativeInteger = (value: number): void => {\n if (!isNonNegativeInteger(value)) {\n throw new Error(`Invalid non-negative integer: ${value}.`);\n }\n};\n\nexport const isFiniteNonNegativeNumber = (value: number): boolean => {\n return value >= 0 && Number.isFinite(value);\n};\n","import type { Address } from \"viem\";\n\nimport type { UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport type { ReferrerLeaderboard } from \"../../leaderboard\";\nimport { isNonNegativeInteger, isPositiveInteger } from \"../../number\";\nimport type { ReferralProgramStatusId } from \"../../status\";\nimport type { ReferralProgramAwardModel } from \"./rules\";\n\n/**\n * The default number of referrers per leaderboard page.\n */\nexport const REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT = 25;\n\n/**\n * The maximum number of referrers per leaderboard page.\n */\n\nexport const REFERRERS_PER_LEADERBOARD_PAGE_MAX = 100;\n\n/**\n * Pagination params for leaderboard queries.\n */\nexport interface ReferrerLeaderboardPageParams {\n /**\n * Requested referrer leaderboard page number (1-indexed)\n * @invariant Must be a positive integer (>= 1)\n * @default 1\n */\n page?: number;\n\n /**\n * Maximum number of referrers to return per leaderboard page\n * @invariant Must be a positive integer (>= 1) and less than or equal to {@link REFERRERS_PER_LEADERBOARD_PAGE_MAX}\n * @default {@link REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT}\n */\n recordsPerPage?: number;\n}\n\nconst validateReferrerLeaderboardPageParams = (params: ReferrerLeaderboardPageParams): void => {\n if (params.page !== undefined && !isPositiveInteger(params.page)) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageParams: ${params.page}. page must be a positive integer.`,\n );\n }\n if (params.recordsPerPage !== undefined && !isPositiveInteger(params.recordsPerPage)) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageParams: ${params.recordsPerPage}. recordsPerPage must be a positive integer.`,\n );\n }\n if (\n params.recordsPerPage !== undefined &&\n params.recordsPerPage > REFERRERS_PER_LEADERBOARD_PAGE_MAX\n ) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageParams: ${params.recordsPerPage}. recordsPerPage must be less than or equal to ${REFERRERS_PER_LEADERBOARD_PAGE_MAX}.`,\n );\n }\n};\n\nexport const buildReferrerLeaderboardPageParams = (\n params: ReferrerLeaderboardPageParams,\n): Required<ReferrerLeaderboardPageParams> => {\n const result = {\n page: params.page ?? 1,\n recordsPerPage: params.recordsPerPage ?? REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT,\n } satisfies Required<ReferrerLeaderboardPageParams>;\n validateReferrerLeaderboardPageParams(result);\n return result;\n};\n\nexport interface ReferrerLeaderboardPageContext extends Required<ReferrerLeaderboardPageParams> {\n /**\n * Total number of referrers across all leaderboard pages\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n totalRecords: number;\n\n /**\n * Total number of pages in the leaderboard\n * @invariant Guaranteed to be a positive integer (>= 1)\n */\n totalPages: number;\n\n /**\n * Indicates if there is a next page available\n * @invariant true if and only if (`page` * `recordsPerPage` < `totalRecords`)\n */\n hasNext: boolean;\n\n /**\n * Indicates if there is a previous page available\n * @invariant true if and only if (`page` > 1)\n */\n hasPrev: boolean;\n\n /**\n * The start index of the referrers on the page (0-indexed)\n *\n * `undefined` if and only if `totalRecords` is 0.\n *\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n startIndex?: number;\n\n /**\n * The end index of the referrers on the page (0-indexed)\n *\n * `undefined` if and only if `totalRecords` is 0.\n *\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n * @invariant If `totalRecords` is > 0:\n * - Guaranteed to be greater than or equal to `startIndex`.\n * - Guaranteed to be less than `totalRecords`.\n */\n endIndex?: number;\n}\n\nexport const validateReferrerLeaderboardPageContext = (\n context: ReferrerLeaderboardPageContext,\n): void => {\n validateReferrerLeaderboardPageParams(context);\n if (!isNonNegativeInteger(context.totalRecords)) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: totalRecords must be a non-negative integer but is ${context.totalRecords}.`,\n );\n }\n\n // Validate totalPages\n if (!isPositiveInteger(context.totalPages)) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: totalPages must be a positive integer (>= 1) but is ${context.totalPages}.`,\n );\n }\n\n const expectedTotalPages =\n context.totalRecords === 0 ? 1 : Math.ceil(context.totalRecords / context.recordsPerPage);\n\n if (context.totalPages !== expectedTotalPages) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: totalPages is ${context.totalPages} but expected ${expectedTotalPages} based on totalRecords (${context.totalRecords}) and recordsPerPage (${context.recordsPerPage}).`,\n );\n }\n\n if (context.page > context.totalPages) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: page ${context.page} exceeds totalPages ${context.totalPages}.`,\n );\n }\n\n // Validate startIndex and endIndex\n const expectedStartIndex = (context.page - 1) * context.recordsPerPage;\n const expectedEndIndex = Math.min(\n expectedStartIndex + context.recordsPerPage - 1,\n context.totalRecords - 1,\n );\n\n if (context.totalRecords === 0) {\n if (context.startIndex !== undefined) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: startIndex must be undefined when totalRecords is 0 but is ${context.startIndex}.`,\n );\n }\n if (context.endIndex !== undefined) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: endIndex must be undefined when totalRecords is 0 but is ${context.endIndex}.`,\n );\n }\n } else {\n if (context.startIndex !== expectedStartIndex) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: startIndex is ${context.startIndex} but expected ${expectedStartIndex} based on page (${context.page}) and recordsPerPage (${context.recordsPerPage}).`,\n );\n }\n if (context.endIndex !== expectedEndIndex) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: endIndex is ${context.endIndex} but expected ${expectedEndIndex} based on startIndex (${expectedStartIndex}), recordsPerPage (${context.recordsPerPage}), and totalRecords (${context.totalRecords}).`,\n );\n }\n if (\n typeof context.endIndex !== \"undefined\" &&\n typeof context.startIndex !== \"undefined\" &&\n context.endIndex < context.startIndex\n ) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: endIndex (${context.endIndex}) must be greater than or equal to startIndex (${context.startIndex}).`,\n );\n }\n }\n\n const startIndex = (context.page - 1) * context.recordsPerPage;\n const endIndex = startIndex + context.recordsPerPage;\n\n if (!context.hasNext && endIndex < context.totalRecords) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: if hasNext is false, endIndex (${endIndex}) must be greater than or equal to totalRecords (${context.totalRecords}).`,\n );\n } else if (context.hasNext && context.page * context.recordsPerPage >= context.totalRecords) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: if hasNext is true, endIndex (${endIndex}) must be less than totalRecords (${context.totalRecords}).`,\n );\n }\n if (!context.hasPrev && context.page !== 1) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: if hasPrev is false, page must be the first page (1) but is ${context.page}.`,\n );\n } else if (context.hasPrev && context.page === 1) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: if hasPrev is true, page must not be the first page (1) but is ${context.page}.`,\n );\n }\n};\n\nexport const buildReferrerLeaderboardPageContext = (\n optionalParams: ReferrerLeaderboardPageParams,\n leaderboard: ReferrerLeaderboard,\n): ReferrerLeaderboardPageContext => {\n const materializedParams = buildReferrerLeaderboardPageParams(optionalParams);\n\n const totalRecords = leaderboard.referrers.size;\n\n const totalPages = Math.max(1, Math.ceil(totalRecords / materializedParams.recordsPerPage));\n\n if (materializedParams.page > totalPages) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: page ${materializedParams.page} exceeds total pages ${totalPages}.`,\n );\n }\n\n if (totalRecords === 0) {\n return {\n ...materializedParams,\n totalRecords: 0,\n totalPages: 1,\n hasNext: false,\n hasPrev: false,\n startIndex: undefined,\n endIndex: undefined,\n } satisfies ReferrerLeaderboardPageContext;\n }\n\n const startIndex = (materializedParams.page - 1) * materializedParams.recordsPerPage;\n const maxTheoreticalIndexOnPage = startIndex + (materializedParams.recordsPerPage - 1);\n const endIndex = Math.min(maxTheoreticalIndexOnPage, totalRecords - 1);\n const hasNext = maxTheoreticalIndexOnPage < totalRecords - 1;\n const hasPrev = materializedParams.page > 1;\n\n const result = {\n ...materializedParams,\n totalRecords,\n totalPages,\n hasNext,\n hasPrev,\n startIndex,\n endIndex,\n } satisfies ReferrerLeaderboardPageContext;\n validateReferrerLeaderboardPageContext(result);\n return result;\n};\n\n/**\n * Base fields shared by all leaderboard page variants.\n */\nexport interface BaseReferrerLeaderboardPage {\n /**\n * Discriminant identifying the award model for this leaderboard page.\n */\n awardModel: ReferralProgramAwardModel;\n\n /**\n * The {@link ReferrerLeaderboardPageContext} of this page relative to the overall leaderboard.\n */\n pageContext: ReferrerLeaderboardPageContext;\n\n /**\n * The status of the referral program (\"Scheduled\", \"Active\", or \"Closed\")\n * calculated based on the program's timing relative to {@link accurateAsOf}.\n */\n status: ReferralProgramStatusId;\n\n /**\n * The {@link UnixTimestamp} of when the data used to build this page was accurate as of.\n */\n accurateAsOf: UnixTimestamp;\n}\n\n/**\n * Extracts the referrers for the current page from a fully-ranked Map.\n * Generic over the referrer type so each model variant retains its specific type.\n */\nexport function sliceReferrers<T>(\n referrers: Map<Address, T>,\n pageContext: ReferrerLeaderboardPageContext,\n): T[] {\n // pageContext invariants: startIndex and endIndex are defined iff totalRecords > 0\n if (\n pageContext.totalRecords === 0 ||\n pageContext.startIndex === undefined ||\n pageContext.endIndex === undefined\n ) {\n return [];\n }\n const all = [...referrers.values()];\n return all.slice(pageContext.startIndex, pageContext.endIndex + 1);\n}\n","/**\n * The type of referrer edition metrics data.\n */\nexport const ReferrerEditionMetricsTypeIds = {\n /**\n * Represents a referrer who is ranked on the leaderboard.\n */\n Ranked: \"ranked\",\n\n /**\n * Represents a referrer who is not ranked on the leaderboard.\n */\n Unranked: \"unranked\",\n} as const;\n\n/**\n * The derived string union of possible {@link ReferrerEditionMetricsTypeIds}.\n */\nexport type ReferrerEditionMetricsTypeId =\n (typeof ReferrerEditionMetricsTypeIds)[keyof typeof ReferrerEditionMetricsTypeIds];\n","import type { Duration, UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport { isInteger, isNonNegativeInteger } from \"./number\";\n\nexport const validateUnixTimestamp = (timestamp: UnixTimestamp): void => {\n if (!isInteger(timestamp)) {\n throw new Error(`Invalid Unix timestamp: ${timestamp}. Unix timestamp must be an integer.`);\n }\n};\n\n/**\n * The number of seconds in a year.\n *\n * (60 seconds per minute * 60 minutes per hour *\n * 24 hours per day * 365.2425 days on average per year).\n */\nexport const SECONDS_PER_YEAR: Duration = 31556952;\n\nexport function isValidDuration(duration: Duration): boolean {\n return isNonNegativeInteger(duration);\n}\n\nexport function validateDuration(duration: Duration): void {\n if (!isValidDuration(duration)) {\n throw new Error(`Invalid duration: ${duration}. Duration must be a non-negative integer.`);\n }\n}\n","import type { AccountId, UnixTimestamp } from \"@ensnode/ensnode-sdk\";\nimport { makeAccountIdSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { validateUnixTimestamp } from \"../../time\";\n\n/**\n * Discriminant values for the award model used in a referral program edition.\n *\n * @remarks Clients MUST check `awardModel` before accessing model-specific fields.\n * Editions with unrecognized `awardModel` values are preserved as\n * {@link ReferralProgramRulesUnrecognized} during parsing (see\n * `makeReferralProgramEditionConfigSetArraySchema`). Clients must handle this variant — typically\n * by skipping those editions with a warning log rather than crashing.\n */\nexport const ReferralProgramAwardModels = {\n PieSplit: \"pie-split\",\n RevShareLimit: \"rev-share-limit\",\n Unrecognized: \"unrecognized\",\n} as const;\n\nexport type ReferralProgramAwardModel =\n (typeof ReferralProgramAwardModels)[keyof typeof ReferralProgramAwardModels];\n\n/**\n * Base fields shared across all referral program rule types.\n *\n * Both `ReferralProgramRulesPieSplit` and `ReferralProgramRulesRevShareLimit` are structurally\n * compatible with this interface, so it can be used wherever only the common fields are needed\n * (e.g., `assertLeaderboardInputs`).\n */\nexport interface BaseReferralProgramRules {\n /**\n * Discriminant: identifies the award model for this edition.\n */\n awardModel: ReferralProgramAwardModel;\n\n /**\n * The start time of the referral program.\n */\n startTime: UnixTimestamp;\n\n /**\n * The end time of the referral program.\n * @invariant Guaranteed to be greater than or equal to `startTime`\n */\n endTime: UnixTimestamp;\n\n /**\n * The account ID of the subregistry for the referral program.\n */\n subregistryId: AccountId;\n\n /**\n * URL to the full rules document for these rules.\n * @example new URL(\"https://ensawards.org/ens-holiday-awards-rules\")\n */\n rulesUrl: URL;\n}\n\n/**\n * Rules for a referral program edition whose `awardModel` is not recognized by this client version.\n *\n * @remarks\n * This is a **client-side forward-compatibility** type only. It is never serialized or processed\n * by business logic on the backend. When the server introduces a new award model type, older\n * clients preserve the edition rather than silently dropping it, and downstream code that\n * encounters this type should skip it with a warning log rather than crashing.\n */\nexport interface ReferralProgramRulesUnrecognized extends BaseReferralProgramRules {\n /**\n * Discriminant — always `\"unrecognized\"`.\n */\n awardModel: typeof ReferralProgramAwardModels.Unrecognized;\n\n /**\n * The original, unrecognized `awardModel` string received from the server.\n *\n * @remarks Preserved for logging and debugging. Never used for business logic.\n */\n originalAwardModel: string;\n}\n\nexport const validateBaseReferralProgramRules = (rules: BaseReferralProgramRules): void => {\n makeAccountIdSchema(\"BaseReferralProgramRules.subregistryId\").parse(rules.subregistryId);\n\n validateUnixTimestamp(rules.startTime);\n validateUnixTimestamp(rules.endTime);\n\n if (!(rules.rulesUrl instanceof URL)) {\n throw new Error(\n `BaseReferralProgramRules: rulesUrl must be a URL instance, got ${typeof rules.rulesUrl}.`,\n );\n }\n\n if (rules.endTime < rules.startTime) {\n throw new Error(\n `BaseReferralProgramRules: startTime: ${rules.startTime} is after endTime: ${rules.endTime}.`,\n );\n }\n};\n","import z from \"zod/v4\";\n\nimport {\n makeDurationSchema,\n makeFiniteNonNegativeNumberSchema,\n makeLowercaseAddressSchema,\n makeNonNegativeIntegerSchema,\n makePositiveIntegerSchema,\n makePriceEthSchema,\n makePriceUsdcSchema,\n makeUnixTimestampSchema,\n} from \"@ensnode/ensnode-sdk/internal\";\n\nimport { normalizeAddress } from \"../../../address\";\nimport {\n makeBaseReferralProgramRulesSchema,\n makeReferralProgramStatusSchema,\n makeReferrerLeaderboardPageContextSchema,\n} from \"../../shared/api/zod-schemas\";\nimport { ReferrerEditionMetricsTypeIds } from \"../../shared/edition-metrics\";\nimport { ReferralProgramAwardModels } from \"../../shared/rules\";\n\n/**\n * Schema for {@link ReferralProgramEditionDisqualification}.\n */\nexport const makeReferralProgramEditionDisqualificationSchema = (\n valueLabel = \"ReferralProgramEditionDisqualification\",\n) =>\n z.object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n reason: z.string().trim().min(1, `${valueLabel}.reason must not be empty`),\n });\n\n/**\n * Schema for {@link ReferralProgramRulesRevShareLimit}.\n */\nexport const makeReferralProgramRulesRevShareLimitSchema = (\n valueLabel: string = \"ReferralProgramRulesRevShareLimit\",\n) =>\n makeBaseReferralProgramRulesSchema(valueLabel).safeExtend({\n awardModel: z.literal(ReferralProgramAwardModels.RevShareLimit),\n totalAwardPoolValue: makePriceUsdcSchema(`${valueLabel}.totalAwardPoolValue`),\n minQualifiedRevenueContribution: makePriceUsdcSchema(\n `${valueLabel}.minQualifiedRevenueContribution`,\n ),\n qualifiedRevenueShare: makeFiniteNonNegativeNumberSchema(\n `${valueLabel}.qualifiedRevenueShare`,\n ).max(1, `${valueLabel}.qualifiedRevenueShare must be <= 1`),\n disqualifications: z\n .array(\n makeReferralProgramEditionDisqualificationSchema(`${valueLabel}.disqualifications[item]`),\n )\n .refine(\n (items) => {\n const addresses = items.map((item) => normalizeAddress(item.referrer));\n return new Set(addresses).size === addresses.length;\n },\n {\n message: `${valueLabel}.disqualifications must not contain duplicate referrer addresses`,\n },\n )\n .default([]),\n });\n\n/**\n * Schema for {@link AwardedReferrerMetricsRevShareLimit} (with numeric rank).\n */\nexport const makeAwardedReferrerMetricsRevShareLimitSchema = (\n valueLabel: string = \"AwardedReferrerMetricsRevShareLimit\",\n) =>\n z\n .object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n totalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.totalReferrals`),\n totalIncrementalDuration: makeDurationSchema(`${valueLabel}.totalIncrementalDuration`),\n totalRevenueContribution: makePriceEthSchema(`${valueLabel}.totalRevenueContribution`),\n totalBaseRevenueContribution: makePriceUsdcSchema(\n `${valueLabel}.totalBaseRevenueContribution`,\n ),\n rank: makePositiveIntegerSchema(`${valueLabel}.rank`),\n isQualified: z.boolean(),\n standardAwardValue: makePriceUsdcSchema(`${valueLabel}.standardAwardValue`),\n awardPoolApproxValue: makePriceUsdcSchema(`${valueLabel}.awardPoolApproxValue`),\n isAdminDisqualified: z.boolean(),\n adminDisqualificationReason: z\n .string()\n .trim()\n .min(1, `${valueLabel}.adminDisqualificationReason must not be empty`)\n .nullable(),\n })\n .refine((data) => data.awardPoolApproxValue.amount <= data.standardAwardValue.amount, {\n message: `${valueLabel}.awardPoolApproxValue must be <= ${valueLabel}.standardAwardValue`,\n path: [\"awardPoolApproxValue\"],\n })\n .refine(\n (data) =>\n !data.isAdminDisqualified ||\n (data.isQualified === false && data.awardPoolApproxValue.amount === 0n),\n {\n message: `When ${valueLabel}.isAdminDisqualified is true, isQualified must be false and awardPoolApproxValue.amount must be 0`,\n path: [\"isAdminDisqualified\"],\n },\n )\n .refine((data) => data.isAdminDisqualified === (data.adminDisqualificationReason !== null), {\n message: `${valueLabel}.adminDisqualificationReason must be non-null iff isAdminDisqualified is true`,\n path: [\"adminDisqualificationReason\"],\n });\n\n/**\n * Schema for {@link UnrankedReferrerMetricsRevShareLimit} (with null rank).\n */\nexport const makeUnrankedReferrerMetricsRevShareLimitSchema = (\n valueLabel: string = \"UnrankedReferrerMetricsRevShareLimit\",\n) =>\n z\n .object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n totalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.totalReferrals`),\n totalIncrementalDuration: makeDurationSchema(`${valueLabel}.totalIncrementalDuration`),\n totalRevenueContribution: makePriceEthSchema(`${valueLabel}.totalRevenueContribution`),\n totalBaseRevenueContribution: makePriceUsdcSchema(\n `${valueLabel}.totalBaseRevenueContribution`,\n ),\n rank: z.null(),\n isQualified: z.literal(false),\n standardAwardValue: makePriceUsdcSchema(`${valueLabel}.standardAwardValue`),\n awardPoolApproxValue: makePriceUsdcSchema(`${valueLabel}.awardPoolApproxValue`),\n isAdminDisqualified: z.boolean(),\n adminDisqualificationReason: z\n .string()\n .trim()\n .min(1, `${valueLabel}.adminDisqualificationReason must not be empty`)\n .nullable(),\n })\n .refine((data) => data.awardPoolApproxValue.amount <= data.standardAwardValue.amount, {\n message: `${valueLabel}.awardPoolApproxValue must be <= ${valueLabel}.standardAwardValue`,\n path: [\"awardPoolApproxValue\"],\n })\n .refine((data) => data.isAdminDisqualified === (data.adminDisqualificationReason !== null), {\n message: `${valueLabel}.adminDisqualificationReason must be non-null iff isAdminDisqualified is true`,\n path: [\"adminDisqualificationReason\"],\n });\n\n/**\n * Schema for {@link AggregatedReferrerMetricsRevShareLimit}.\n */\nexport const makeAggregatedReferrerMetricsRevShareLimitSchema = (\n valueLabel: string = \"AggregatedReferrerMetricsRevShareLimit\",\n) =>\n z.object({\n grandTotalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.grandTotalReferrals`),\n grandTotalIncrementalDuration: makeDurationSchema(\n `${valueLabel}.grandTotalIncrementalDuration`,\n ),\n grandTotalRevenueContribution: makePriceEthSchema(\n `${valueLabel}.grandTotalRevenueContribution`,\n ),\n awardPoolRemaining: makePriceUsdcSchema(`${valueLabel}.awardPoolRemaining`),\n });\n\n/**\n * Schema for {@link ReferrerEditionMetricsRankedRevShareLimit}.\n */\nexport const makeReferrerEditionMetricsRankedRevShareLimitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsRankedRevShareLimit\",\n) =>\n z\n .object({\n awardModel: z.literal(ReferralProgramAwardModels.RevShareLimit),\n type: z.literal(ReferrerEditionMetricsTypeIds.Ranked),\n rules: makeReferralProgramRulesRevShareLimitSchema(`${valueLabel}.rules`),\n referrer: makeAwardedReferrerMetricsRevShareLimitSchema(`${valueLabel}.referrer`),\n aggregatedMetrics: makeAggregatedReferrerMetricsRevShareLimitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n\n/**\n * Schema for {@link ReferrerEditionMetricsUnrankedRevShareLimit}.\n */\nexport const makeReferrerEditionMetricsUnrankedRevShareLimitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsUnrankedRevShareLimit\",\n) =>\n z\n .object({\n awardModel: z.literal(ReferralProgramAwardModels.RevShareLimit),\n type: z.literal(ReferrerEditionMetricsTypeIds.Unranked),\n rules: makeReferralProgramRulesRevShareLimitSchema(`${valueLabel}.rules`),\n referrer: makeUnrankedReferrerMetricsRevShareLimitSchema(`${valueLabel}.referrer`),\n aggregatedMetrics: makeAggregatedReferrerMetricsRevShareLimitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n\n/**\n * Schema for all {@link ReferrerEditionMetrics} variants of the rev-share-limit award model\n * (both ranked and unranked).\n */\nexport const makeReferrerEditionMetricsRevShareLimitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsRevShareLimit\",\n) =>\n z.discriminatedUnion(\"type\", [\n makeReferrerEditionMetricsRankedRevShareLimitSchema(valueLabel),\n makeReferrerEditionMetricsUnrankedRevShareLimitSchema(valueLabel),\n ]);\n\n/**\n * Schema for {@link ReferrerLeaderboardPageRevShareLimit}.\n */\nexport const makeReferrerLeaderboardPageRevShareLimitSchema = (\n valueLabel: string = \"ReferrerLeaderboardPageRevShareLimit\",\n) =>\n z\n .object({\n awardModel: z.literal(ReferralProgramAwardModels.RevShareLimit),\n rules: makeReferralProgramRulesRevShareLimitSchema(`${valueLabel}.rules`),\n referrers: z.array(\n makeAwardedReferrerMetricsRevShareLimitSchema(`${valueLabel}.referrers[record]`),\n ),\n aggregatedMetrics: makeAggregatedReferrerMetricsRevShareLimitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n pageContext: makeReferrerLeaderboardPageContextSchema(`${valueLabel}.pageContext`),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n","import type { Address } from \"viem\";\n\nimport type { ReferrerLeaderboardPageParams } from \"../award-models/shared/leaderboard-page\";\nimport type { ReferralProgramEditionConfig, ReferralProgramEditionSlug } from \"../edition\";\nimport type { ReferrerEditionMetrics } from \"../edition-metrics\";\nimport type { ReferrerLeaderboardPage } from \"../leaderboard-page\";\n\n/**\n * Request parameters for a referrer leaderboard page query.\n */\nexport interface ReferrerLeaderboardPageRequest extends ReferrerLeaderboardPageParams {\n /** The referral program edition slug */\n edition: ReferralProgramEditionSlug;\n}\n\n/**\n * A status code for a referrer leaderboard page API response.\n */\nexport const ReferrerLeaderboardPageResponseCodes = {\n /**\n * Represents that the requested referrer leaderboard page is available.\n */\n Ok: \"ok\",\n\n /**\n * Represents that the referrer leaderboard data is not available.\n */\n Error: \"error\",\n} as const;\n\n/**\n * The derived string union of possible {@link ReferrerLeaderboardPageResponseCodes}.\n */\nexport type ReferrerLeaderboardPageResponseCode =\n (typeof ReferrerLeaderboardPageResponseCodes)[keyof typeof ReferrerLeaderboardPageResponseCodes];\n\n/**\n * A referrer leaderboard page response when the data is available.\n */\nexport type ReferrerLeaderboardPageResponseOk = {\n responseCode: typeof ReferrerLeaderboardPageResponseCodes.Ok;\n data: ReferrerLeaderboardPage;\n};\n\n/**\n * A referrer leaderboard page response when the data is not available.\n */\nexport type ReferrerLeaderboardPageResponseError = {\n responseCode: typeof ReferrerLeaderboardPageResponseCodes.Error;\n error: string;\n errorMessage: string;\n};\n\n/**\n * A referrer leaderboard page API response.\n *\n * Use the `responseCode` field to determine the specific type interpretation\n * at runtime.\n */\nexport type ReferrerLeaderboardPageResponse =\n | ReferrerLeaderboardPageResponseOk\n | ReferrerLeaderboardPageResponseError;\n\n/**\n * Maximum number of editions that can be requested in a single {@link ReferrerMetricsEditionsRequest}.\n */\nexport const MAX_EDITIONS_PER_REQUEST = 20;\n\n/**\n * Request parameters for referrer metrics query.\n */\nexport interface ReferrerMetricsEditionsRequest {\n /** The Ethereum address of the referrer to query */\n referrer: Address;\n /** Array of edition slugs to query (min 1, max {@link MAX_EDITIONS_PER_REQUEST}, must be distinct) */\n editions: ReferralProgramEditionSlug[];\n}\n\n/**\n * A status code for referrer metrics API responses.\n */\nexport const ReferrerMetricsEditionsResponseCodes = {\n /**\n * Represents that the referrer metrics data for the requested editions is available.\n */\n Ok: \"ok\",\n\n /**\n * Represents that an error occurred while fetching the data.\n */\n Error: \"error\",\n} as const;\n\n/**\n * The derived string union of possible {@link ReferrerMetricsEditionsResponseCodes}.\n */\nexport type ReferrerMetricsEditionsResponseCode =\n (typeof ReferrerMetricsEditionsResponseCodes)[keyof typeof ReferrerMetricsEditionsResponseCodes];\n\n/**\n * Referrer metrics data for requested editions.\n *\n * Maps each requested edition slug to the referrer's metrics for that edition.\n * Uses Partial because TypeScript cannot know at compile time which specific edition\n * slugs are requested. At runtime, when responseCode is Ok, all requested edition slugs\n * are guaranteed to be present in this record.\n */\nexport type ReferrerMetricsEditionsData = Partial<\n Record<ReferralProgramEditionSlug, ReferrerEditionMetrics>\n>;\n\n/**\n * A successful response containing referrer metrics for the requested editions.\n */\nexport type ReferrerMetricsEditionsResponseOk = {\n responseCode: typeof ReferrerMetricsEditionsResponseCodes.Ok;\n data: ReferrerMetricsEditionsData;\n};\n\n/**\n * A referrer metrics editions response when an error occurs.\n */\nexport type ReferrerMetricsEditionsResponseError = {\n responseCode: typeof ReferrerMetricsEditionsResponseCodes.Error;\n error: string;\n errorMessage: string;\n};\n\n/**\n * A referrer metrics editions API response.\n *\n * Use the `responseCode` field to determine the specific type interpretation\n * at runtime.\n */\nexport type ReferrerMetricsEditionsResponse =\n | ReferrerMetricsEditionsResponseOk\n | ReferrerMetricsEditionsResponseError;\n\n/**\n * A status code for referral program edition config set API responses.\n */\nexport const ReferralProgramEditionConfigSetResponseCodes = {\n /**\n * Represents that the edition config set is available.\n */\n Ok: \"ok\",\n\n /**\n * Represents that the edition config set is not available.\n */\n Error: \"error\",\n} as const;\n\n/**\n * The derived string union of possible {@link ReferralProgramEditionConfigSetResponseCodes}.\n */\nexport type ReferralProgramEditionConfigSetResponseCode =\n (typeof ReferralProgramEditionConfigSetResponseCodes)[keyof typeof ReferralProgramEditionConfigSetResponseCodes];\n\n/**\n * The data payload containing edition configs.\n * Editions are sorted in descending order by start timestamp.\n */\nexport type ReferralProgramEditionConfigSetData = {\n editions: ReferralProgramEditionConfig[];\n};\n\n/**\n * A successful response containing the configured edition config set.\n */\nexport type ReferralProgramEditionConfigSetResponseOk = {\n responseCode: typeof ReferralProgramEditionConfigSetResponseCodes.Ok;\n data: ReferralProgramEditionConfigSetData;\n};\n\n/**\n * An edition config set response when an error occurs.\n */\nexport type ReferralProgramEditionConfigSetResponseError = {\n responseCode: typeof ReferralProgramEditionConfigSetResponseCodes.Error;\n error: string;\n errorMessage: string;\n};\n\n/**\n * A referral program edition config set API response.\n *\n * Use the `responseCode` field to determine the specific type interpretation\n * at runtime.\n */\nexport type ReferralProgramEditionConfigSetResponse =\n | ReferralProgramEditionConfigSetResponseOk\n | ReferralProgramEditionConfigSetResponseError;\n","import { serializePriceEth, serializePriceUsdc } from \"@ensnode/ensnode-sdk\";\n\nimport type { AggregatedReferrerMetricsPieSplit } from \"../aggregations\";\nimport type {\n ReferrerEditionMetricsRankedPieSplit,\n ReferrerEditionMetricsUnrankedPieSplit,\n} from \"../edition-metrics\";\nimport type { ReferrerLeaderboardPagePieSplit } from \"../leaderboard-page\";\nimport type { AwardedReferrerMetricsPieSplit, UnrankedReferrerMetricsPieSplit } from \"../metrics\";\nimport type { ReferralProgramRulesPieSplit } from \"../rules\";\nimport type {\n SerializedAggregatedReferrerMetricsPieSplit,\n SerializedAwardedReferrerMetricsPieSplit,\n SerializedReferralProgramRulesPieSplit,\n SerializedReferrerEditionMetricsRankedPieSplit,\n SerializedReferrerEditionMetricsUnrankedPieSplit,\n SerializedReferrerLeaderboardPagePieSplit,\n SerializedUnrankedReferrerMetricsPieSplit,\n} from \"./serialized-types\";\n\n/**\n * Serializes a {@link ReferralProgramRulesPieSplit} object.\n */\nexport function serializeReferralProgramRulesPieSplit(\n rules: ReferralProgramRulesPieSplit,\n): SerializedReferralProgramRulesPieSplit {\n return {\n awardModel: rules.awardModel,\n totalAwardPoolValue: serializePriceUsdc(rules.totalAwardPoolValue),\n maxQualifiedReferrers: rules.maxQualifiedReferrers,\n startTime: rules.startTime,\n endTime: rules.endTime,\n subregistryId: rules.subregistryId,\n rulesUrl: rules.rulesUrl.toString(),\n };\n}\n\n/**\n * Serializes a {@link AggregatedReferrerMetricsPieSplit} object.\n */\nexport function serializeAggregatedReferrerMetricsPieSplit(\n metrics: AggregatedReferrerMetricsPieSplit,\n): SerializedAggregatedReferrerMetricsPieSplit {\n return {\n grandTotalReferrals: metrics.grandTotalReferrals,\n grandTotalIncrementalDuration: metrics.grandTotalIncrementalDuration,\n grandTotalRevenueContribution: serializePriceEth(metrics.grandTotalRevenueContribution),\n grandTotalQualifiedReferrersFinalScore: metrics.grandTotalQualifiedReferrersFinalScore,\n minFinalScoreToQualify: metrics.minFinalScoreToQualify,\n };\n}\n\n/**\n * Serializes a {@link AwardedReferrerMetricsPieSplit} object.\n */\nexport function serializeAwardedReferrerMetricsPieSplit(\n metrics: AwardedReferrerMetricsPieSplit,\n): SerializedAwardedReferrerMetricsPieSplit {\n return {\n referrer: metrics.referrer,\n totalReferrals: metrics.totalReferrals,\n totalIncrementalDuration: metrics.totalIncrementalDuration,\n totalRevenueContribution: serializePriceEth(metrics.totalRevenueContribution),\n score: metrics.score,\n rank: metrics.rank,\n isQualified: metrics.isQualified,\n finalScoreBoost: metrics.finalScoreBoost,\n finalScore: metrics.finalScore,\n awardPoolShare: metrics.awardPoolShare,\n awardPoolApproxValue: serializePriceUsdc(metrics.awardPoolApproxValue),\n };\n}\n\n/**\n * Serializes a {@link UnrankedReferrerMetricsPieSplit} object.\n */\nexport function serializeUnrankedReferrerMetricsPieSplit(\n metrics: UnrankedReferrerMetricsPieSplit,\n): SerializedUnrankedReferrerMetricsPieSplit {\n return {\n referrer: metrics.referrer,\n totalReferrals: metrics.totalReferrals,\n totalIncrementalDuration: metrics.totalIncrementalDuration,\n totalRevenueContribution: serializePriceEth(metrics.totalRevenueContribution),\n score: metrics.score,\n rank: metrics.rank,\n isQualified: metrics.isQualified,\n finalScoreBoost: metrics.finalScoreBoost,\n finalScore: metrics.finalScore,\n awardPoolShare: metrics.awardPoolShare,\n awardPoolApproxValue: serializePriceUsdc(metrics.awardPoolApproxValue),\n };\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsRankedPieSplit} object.\n */\nexport function serializeReferrerEditionMetricsRankedPieSplit(\n detail: ReferrerEditionMetricsRankedPieSplit,\n): SerializedReferrerEditionMetricsRankedPieSplit {\n return {\n awardModel: detail.awardModel,\n type: detail.type,\n rules: serializeReferralProgramRulesPieSplit(detail.rules),\n referrer: serializeAwardedReferrerMetricsPieSplit(detail.referrer),\n aggregatedMetrics: serializeAggregatedReferrerMetricsPieSplit(detail.aggregatedMetrics),\n status: detail.status,\n accurateAsOf: detail.accurateAsOf,\n };\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsUnrankedPieSplit} object.\n */\nexport function serializeReferrerEditionMetricsUnrankedPieSplit(\n detail: ReferrerEditionMetricsUnrankedPieSplit,\n): SerializedReferrerEditionMetricsUnrankedPieSplit {\n return {\n awardModel: detail.awardModel,\n type: detail.type,\n rules: serializeReferralProgramRulesPieSplit(detail.rules),\n referrer: serializeUnrankedReferrerMetricsPieSplit(detail.referrer),\n aggregatedMetrics: serializeAggregatedReferrerMetricsPieSplit(detail.aggregatedMetrics),\n status: detail.status,\n accurateAsOf: detail.accurateAsOf,\n };\n}\n\n/**\n * Serializes a {@link ReferrerLeaderboardPagePieSplit} object.\n */\nexport function serializeReferrerLeaderboardPagePieSplit(\n page: ReferrerLeaderboardPagePieSplit,\n): SerializedReferrerLeaderboardPagePieSplit {\n return {\n awardModel: page.awardModel,\n rules: serializeReferralProgramRulesPieSplit(page.rules),\n referrers: page.referrers.map(serializeAwardedReferrerMetricsPieSplit),\n aggregatedMetrics: serializeAggregatedReferrerMetricsPieSplit(page.aggregatedMetrics),\n pageContext: page.pageContext,\n status: page.status,\n accurateAsOf: page.accurateAsOf,\n };\n}\n","import { serializePriceEth, serializePriceUsdc } from \"@ensnode/ensnode-sdk\";\n\nimport type { AggregatedReferrerMetricsRevShareLimit } from \"../aggregations\";\nimport type {\n ReferrerEditionMetricsRankedRevShareLimit,\n ReferrerEditionMetricsUnrankedRevShareLimit,\n} from \"../edition-metrics\";\nimport type { ReferrerLeaderboardPageRevShareLimit } from \"../leaderboard-page\";\nimport type {\n AwardedReferrerMetricsRevShareLimit,\n UnrankedReferrerMetricsRevShareLimit,\n} from \"../metrics\";\nimport type { ReferralProgramRulesRevShareLimit } from \"../rules\";\nimport type {\n SerializedAggregatedReferrerMetricsRevShareLimit,\n SerializedAwardedReferrerMetricsRevShareLimit,\n SerializedReferralProgramRulesRevShareLimit,\n SerializedReferrerEditionMetricsRankedRevShareLimit,\n SerializedReferrerEditionMetricsUnrankedRevShareLimit,\n SerializedReferrerLeaderboardPageRevShareLimit,\n SerializedUnrankedReferrerMetricsRevShareLimit,\n} from \"./serialized-types\";\n\n/**\n * Serializes a {@link ReferralProgramRulesRevShareLimit} object.\n */\nexport function serializeReferralProgramRulesRevShareLimit(\n rules: ReferralProgramRulesRevShareLimit,\n): SerializedReferralProgramRulesRevShareLimit {\n return {\n awardModel: rules.awardModel,\n totalAwardPoolValue: serializePriceUsdc(rules.totalAwardPoolValue),\n minQualifiedRevenueContribution: serializePriceUsdc(rules.minQualifiedRevenueContribution),\n qualifiedRevenueShare: rules.qualifiedRevenueShare,\n startTime: rules.startTime,\n endTime: rules.endTime,\n subregistryId: rules.subregistryId,\n rulesUrl: rules.rulesUrl.toString(),\n disqualifications: rules.disqualifications,\n };\n}\n\n/**\n * Serializes a {@link AggregatedReferrerMetricsRevShareLimit} object.\n */\nexport function serializeAggregatedReferrerMetricsRevShareLimit(\n metrics: AggregatedReferrerMetricsRevShareLimit,\n): SerializedAggregatedReferrerMetricsRevShareLimit {\n return {\n grandTotalReferrals: metrics.grandTotalReferrals,\n grandTotalIncrementalDuration: metrics.grandTotalIncrementalDuration,\n grandTotalRevenueContribution: serializePriceEth(metrics.grandTotalRevenueContribution),\n awardPoolRemaining: serializePriceUsdc(metrics.awardPoolRemaining),\n };\n}\n\n/**\n * Serializes a {@link AwardedReferrerMetricsRevShareLimit} object.\n */\nexport function serializeAwardedReferrerMetricsRevShareLimit(\n metrics: AwardedReferrerMetricsRevShareLimit,\n): SerializedAwardedReferrerMetricsRevShareLimit {\n return {\n referrer: metrics.referrer,\n totalReferrals: metrics.totalReferrals,\n totalIncrementalDuration: metrics.totalIncrementalDuration,\n totalRevenueContribution: serializePriceEth(metrics.totalRevenueContribution),\n totalBaseRevenueContribution: serializePriceUsdc(metrics.totalBaseRevenueContribution),\n rank: metrics.rank,\n isQualified: metrics.isQualified,\n standardAwardValue: serializePriceUsdc(metrics.standardAwardValue),\n awardPoolApproxValue: serializePriceUsdc(metrics.awardPoolApproxValue),\n isAdminDisqualified: metrics.isAdminDisqualified,\n adminDisqualificationReason: metrics.adminDisqualificationReason,\n };\n}\n\n/**\n * Serializes a {@link UnrankedReferrerMetricsRevShareLimit} object.\n */\nexport function serializeUnrankedReferrerMetricsRevShareLimit(\n metrics: UnrankedReferrerMetricsRevShareLimit,\n): SerializedUnrankedReferrerMetricsRevShareLimit {\n return {\n referrer: metrics.referrer,\n totalReferrals: metrics.totalReferrals,\n totalIncrementalDuration: metrics.totalIncrementalDuration,\n totalRevenueContribution: serializePriceEth(metrics.totalRevenueContribution),\n totalBaseRevenueContribution: serializePriceUsdc(metrics.totalBaseRevenueContribution),\n rank: metrics.rank,\n isQualified: metrics.isQualified,\n standardAwardValue: serializePriceUsdc(metrics.standardAwardValue),\n awardPoolApproxValue: serializePriceUsdc(metrics.awardPoolApproxValue),\n isAdminDisqualified: metrics.isAdminDisqualified,\n adminDisqualificationReason: metrics.adminDisqualificationReason,\n };\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsRankedRevShareLimit} object.\n */\nexport function serializeReferrerEditionMetricsRankedRevShareLimit(\n detail: ReferrerEditionMetricsRankedRevShareLimit,\n): SerializedReferrerEditionMetricsRankedRevShareLimit {\n return {\n awardModel: detail.awardModel,\n type: detail.type,\n rules: serializeReferralProgramRulesRevShareLimit(detail.rules),\n referrer: serializeAwardedReferrerMetricsRevShareLimit(detail.referrer),\n aggregatedMetrics: serializeAggregatedReferrerMetricsRevShareLimit(detail.aggregatedMetrics),\n status: detail.status,\n accurateAsOf: detail.accurateAsOf,\n };\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsUnrankedRevShareLimit} object.\n */\nexport function serializeReferrerEditionMetricsUnrankedRevShareLimit(\n detail: ReferrerEditionMetricsUnrankedRevShareLimit,\n): SerializedReferrerEditionMetricsUnrankedRevShareLimit {\n return {\n awardModel: detail.awardModel,\n type: detail.type,\n rules: serializeReferralProgramRulesRevShareLimit(detail.rules),\n referrer: serializeUnrankedReferrerMetricsRevShareLimit(detail.referrer),\n aggregatedMetrics: serializeAggregatedReferrerMetricsRevShareLimit(detail.aggregatedMetrics),\n status: detail.status,\n accurateAsOf: detail.accurateAsOf,\n };\n}\n\n/**\n * Serializes a {@link ReferrerLeaderboardPageRevShareLimit} object.\n */\nexport function serializeReferrerLeaderboardPageRevShareLimit(\n page: ReferrerLeaderboardPageRevShareLimit,\n): SerializedReferrerLeaderboardPageRevShareLimit {\n return {\n awardModel: page.awardModel,\n rules: serializeReferralProgramRulesRevShareLimit(page.rules),\n referrers: page.referrers.map(serializeAwardedReferrerMetricsRevShareLimit),\n aggregatedMetrics: serializeAggregatedReferrerMetricsRevShareLimit(page.aggregatedMetrics),\n pageContext: page.pageContext,\n status: page.status,\n accurateAsOf: page.accurateAsOf,\n };\n}\n","import {\n serializeReferralProgramRulesPieSplit,\n serializeReferrerEditionMetricsRankedPieSplit,\n serializeReferrerEditionMetricsUnrankedPieSplit,\n serializeReferrerLeaderboardPagePieSplit,\n} from \"../award-models/pie-split/api/serialize\";\nimport {\n serializeReferralProgramRulesRevShareLimit,\n serializeReferrerEditionMetricsRankedRevShareLimit,\n serializeReferrerEditionMetricsUnrankedRevShareLimit,\n serializeReferrerLeaderboardPageRevShareLimit,\n} from \"../award-models/rev-share-limit/api/serialize\";\nimport type { ReferralProgramRulesUnrecognized } from \"../award-models/shared/rules\";\nimport { ReferralProgramAwardModels } from \"../award-models/shared/rules\";\nimport type { ReferralProgramEditionConfig } from \"../edition\";\nimport type {\n ReferrerEditionMetrics,\n ReferrerEditionMetricsRanked,\n ReferrerEditionMetricsUnranked,\n} from \"../edition-metrics\";\nimport type { ReferrerLeaderboardPage } from \"../leaderboard-page\";\nimport type { ReferralProgramRules } from \"../rules\";\nimport type {\n SerializedReferralProgramEditionConfig,\n SerializedReferralProgramEditionConfigSetResponse,\n SerializedReferralProgramRules,\n SerializedReferrerEditionMetrics,\n SerializedReferrerEditionMetricsRanked,\n SerializedReferrerEditionMetricsUnranked,\n SerializedReferrerLeaderboardPage,\n SerializedReferrerLeaderboardPageResponse,\n SerializedReferrerMetricsEditionsData,\n SerializedReferrerMetricsEditionsResponse,\n} from \"./serialized-types\";\nimport {\n type ReferralProgramEditionConfigSetResponse,\n ReferralProgramEditionConfigSetResponseCodes,\n type ReferrerLeaderboardPageResponse,\n ReferrerLeaderboardPageResponseCodes,\n type ReferrerMetricsEditionsResponse,\n ReferrerMetricsEditionsResponseCodes,\n} from \"./types\";\n\n/**\n * Serializes a {@link ReferralProgramRules} object.\n *\n * @throws if called with a {@link ReferralProgramRulesUnrecognized} — unrecognized editions are\n * client-side forward-compatibility placeholders and must never be serialized.\n */\nexport function serializeReferralProgramRules(\n rules: ReferralProgramRules,\n): SerializedReferralProgramRules {\n switch (rules.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return serializeReferralProgramRulesPieSplit(rules);\n\n case ReferralProgramAwardModels.RevShareLimit:\n return serializeReferralProgramRulesRevShareLimit(rules);\n\n case ReferralProgramAwardModels.Unrecognized: {\n const unrecognized = rules as ReferralProgramRulesUnrecognized;\n throw new Error(\n `ReferralProgramRulesUnrecognized (originalAwardModel: '${unrecognized.originalAwardModel}') must not be serialized — it is a client-side forward-compatibility placeholder only.`,\n );\n }\n\n default: {\n const _exhaustiveCheck: never = rules;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferralProgramRules).awardModel}`,\n );\n }\n }\n}\n\n/**\n * Serializes a {@link ReferrerLeaderboardPage} object.\n */\nfunction serializeReferrerLeaderboardPage(\n page: ReferrerLeaderboardPage,\n): SerializedReferrerLeaderboardPage {\n switch (page.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return serializeReferrerLeaderboardPagePieSplit(page);\n case ReferralProgramAwardModels.RevShareLimit:\n return serializeReferrerLeaderboardPageRevShareLimit(page);\n default: {\n const _exhaustiveCheck: never = page;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferrerLeaderboardPage).awardModel}`,\n );\n }\n }\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsRanked} object.\n */\nfunction serializeReferrerEditionMetricsRanked(\n detail: ReferrerEditionMetricsRanked,\n): SerializedReferrerEditionMetricsRanked {\n switch (detail.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return serializeReferrerEditionMetricsRankedPieSplit(detail);\n case ReferralProgramAwardModels.RevShareLimit:\n return serializeReferrerEditionMetricsRankedRevShareLimit(detail);\n default: {\n const _exhaustiveCheck: never = detail;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferrerEditionMetricsRanked).awardModel}`,\n );\n }\n }\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsUnranked} object.\n */\nfunction serializeReferrerEditionMetricsUnranked(\n detail: ReferrerEditionMetricsUnranked,\n): SerializedReferrerEditionMetricsUnranked {\n switch (detail.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return serializeReferrerEditionMetricsUnrankedPieSplit(detail);\n case ReferralProgramAwardModels.RevShareLimit:\n return serializeReferrerEditionMetricsUnrankedRevShareLimit(detail);\n default: {\n const _exhaustiveCheck: never = detail;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferrerEditionMetricsUnranked).awardModel}`,\n );\n }\n }\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetrics} object (ranked or unranked).\n */\nfunction serializeReferrerEditionMetrics(\n detail: ReferrerEditionMetrics,\n): SerializedReferrerEditionMetrics {\n switch (detail.type) {\n case \"ranked\":\n return serializeReferrerEditionMetricsRanked(detail);\n case \"unranked\":\n return serializeReferrerEditionMetricsUnranked(detail);\n default: {\n const _exhaustiveCheck: never = detail;\n throw new Error(`Unknown detail type: ${(_exhaustiveCheck as ReferrerEditionMetrics).type}`);\n }\n }\n}\n\n/**\n * Serializes a {@link ReferralProgramEditionConfig} object.\n */\nexport function serializeReferralProgramEditionConfig(\n editionConfig: ReferralProgramEditionConfig,\n): SerializedReferralProgramEditionConfig {\n return {\n slug: editionConfig.slug,\n displayName: editionConfig.displayName,\n rules: serializeReferralProgramRules(editionConfig.rules),\n };\n}\n\n/**\n * Serialize a {@link ReferrerLeaderboardPageResponse} object.\n */\nexport function serializeReferrerLeaderboardPageResponse(\n response: ReferrerLeaderboardPageResponse,\n): SerializedReferrerLeaderboardPageResponse {\n switch (response.responseCode) {\n case ReferrerLeaderboardPageResponseCodes.Ok:\n return {\n responseCode: response.responseCode,\n data: serializeReferrerLeaderboardPage(response.data),\n };\n\n case ReferrerLeaderboardPageResponseCodes.Error:\n return response;\n }\n}\n\n/**\n * Serialize a {@link ReferrerMetricsEditionsResponse} object.\n */\nexport function serializeReferrerMetricsEditionsResponse(\n response: ReferrerMetricsEditionsResponse,\n): SerializedReferrerMetricsEditionsResponse {\n switch (response.responseCode) {\n case ReferrerMetricsEditionsResponseCodes.Ok: {\n const serializedData = Object.fromEntries(\n Object.entries(response.data).map(([editionSlug, detail]) => [\n editionSlug,\n serializeReferrerEditionMetrics(detail as ReferrerEditionMetrics),\n ]),\n ) as SerializedReferrerMetricsEditionsData;\n\n return {\n responseCode: response.responseCode,\n data: serializedData,\n };\n }\n\n case ReferrerMetricsEditionsResponseCodes.Error:\n return response;\n\n default: {\n const _exhaustiveCheck: never = response;\n throw new Error(\n `Unknown response code: ${(_exhaustiveCheck as ReferrerMetricsEditionsResponse).responseCode}`,\n );\n }\n }\n}\n\n/**\n * Serialize a {@link ReferralProgramEditionConfigSetResponse} object.\n */\nexport function serializeReferralProgramEditionConfigSetResponse(\n response: ReferralProgramEditionConfigSetResponse,\n): SerializedReferralProgramEditionConfigSetResponse {\n switch (response.responseCode) {\n case ReferralProgramEditionConfigSetResponseCodes.Ok:\n return {\n responseCode: response.responseCode,\n data: {\n editions: response.data.editions.map(serializeReferralProgramEditionConfig),\n },\n };\n\n case ReferralProgramEditionConfigSetResponseCodes.Error:\n return response;\n\n default: {\n const _exhaustiveCheck: never = response;\n throw new Error(\n `Unknown response code: ${(_exhaustiveCheck as ReferralProgramEditionConfigSetResponse).responseCode}`,\n );\n }\n }\n}\n","/**\n * The score of a referrer.\n *\n * @invariant Guaranteed to be a finite non-negative number (>= 0)\n */\nexport type ReferrerScore = number;\n\nexport const isValidReferrerScore = (score: ReferrerScore): boolean => {\n return score >= 0 && Number.isFinite(score);\n};\n\nexport const validateReferrerScore = (score: ReferrerScore): void => {\n if (!isValidReferrerScore(score)) {\n throw new Error(\n `Invalid referrer score: ${score}. Referrer score must be a finite non-negative number.`,\n );\n }\n};\n","import { type Duration, type PriceEth, priceEth } from \"@ensnode/ensnode-sdk\";\nimport { makePriceEthSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { validateNonNegativeInteger } from \"../../number\";\nimport { validateDuration } from \"../../time\";\nimport { type ReferrerScore, validateReferrerScore } from \"../shared/score\";\nimport type { RankedReferrerMetricsPieSplit } from \"./metrics\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\n\n/**\n * Represents aggregated metrics for a list of {@link RankedReferrerMetricsPieSplit}.\n */\nexport interface AggregatedReferrerMetricsPieSplit {\n /**\n * @invariant The sum of `totalReferrals` across all {@link RankedReferrerMetricsPieSplit} in the list.\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n grandTotalReferrals: number;\n\n /**\n * @invariant The sum of `totalIncrementalDuration` across all {@link RankedReferrerMetricsPieSplit} in the list.\n */\n grandTotalIncrementalDuration: Duration;\n\n /**\n * The total revenue contribution in ETH to the ENS DAO from all referrals\n * across all referrers on the leaderboard.\n *\n * This is the sum of `totalRevenueContribution` across all {@link RankedReferrerMetricsPieSplit} in the list.\n *\n * @invariant Guaranteed to be a valid PriceEth with non-negative amount (>= 0n)\n */\n grandTotalRevenueContribution: PriceEth;\n\n /**\n * @invariant The sum of `finalScore` across all {@link RankedReferrerMetricsPieSplit} where `isQualified` is `true`.\n */\n grandTotalQualifiedReferrersFinalScore: ReferrerScore;\n\n /**\n * @invariant Identifies the minimum final score required to become a qualified referrer.\n * @invariant If `rules.maxQualifiedReferrers` is 0, then `minFinalScoreToQualify` is guaranteed to\n * be `Number.MAX_SAFE_INTEGER`.\n * @invariant If `rules.maxQualifiedReferrers` is greater than 0, and there are no current referrers\n * matching the `rules`, then `minFinalScoreToQualify` is guaranteed to be `0`.\n */\n minFinalScoreToQualify: ReferrerScore;\n}\n\nexport const validateAggregatedReferrerMetricsPieSplit = (\n metrics: AggregatedReferrerMetricsPieSplit,\n): void => {\n validateNonNegativeInteger(metrics.grandTotalReferrals);\n validateDuration(metrics.grandTotalIncrementalDuration);\n\n makePriceEthSchema(\"AggregatedReferrerMetricsPieSplit.grandTotalRevenueContribution\").parse(\n metrics.grandTotalRevenueContribution,\n );\n\n validateReferrerScore(metrics.grandTotalQualifiedReferrersFinalScore);\n validateReferrerScore(metrics.minFinalScoreToQualify);\n};\n\n/**\n * Builds aggregated pie-split metrics from a complete, globally ranked list of referrers.\n *\n * **IMPORTANT: This function expects a complete ranking of all referrers.**\n *\n * @param referrers - Must be a complete, globally ranked list of {@link RankedReferrerMetricsPieSplit}\n * where ranks start at 1 and are consecutive.\n * **This must NOT be a paginated or partial slice of the rankings.**\n *\n * @param rules - The {@link ReferralProgramRulesPieSplit} object that define qualification criteria,\n * including `maxQualifiedReferrers` (the maximum number of referrers\n * that can qualify for rewards).\n *\n * @returns Aggregated metrics including totals across all referrers and the minimum\n * score required to qualify.\n *\n * @remarks\n * - If you need to work with paginated data, aggregate the full ranking first before\n * calling this function, or call this function on the complete dataset and then paginate\n * the results.\n * - If `rules.maxQualifiedReferrers === 0`, no referrers can qualify and\n * `minFinalScoreToQualify` will be set to `Number.MAX_SAFE_INTEGER`.\n * - If `referrers` is empty and `rules.maxQualifiedReferrers > 0`,\n * `minFinalScoreToQualify` will be set to `0` (anyone can qualify).\n */\nexport const buildAggregatedReferrerMetricsPieSplit = (\n referrers: RankedReferrerMetricsPieSplit[],\n rules: ReferralProgramRulesPieSplit,\n): AggregatedReferrerMetricsPieSplit => {\n let grandTotalReferrals = 0;\n let grandTotalIncrementalDuration = 0;\n let grandTotalRevenueContributionAmount = 0n;\n let grandTotalQualifiedReferrersFinalScore = 0;\n let minFinalScoreToQualify = Number.MAX_SAFE_INTEGER;\n\n for (const referrer of referrers) {\n grandTotalReferrals += referrer.totalReferrals;\n grandTotalIncrementalDuration += referrer.totalIncrementalDuration;\n grandTotalRevenueContributionAmount += referrer.totalRevenueContribution.amount;\n if (referrer.isQualified) {\n grandTotalQualifiedReferrersFinalScore += referrer.finalScore;\n if (referrer.finalScore < minFinalScoreToQualify) {\n minFinalScoreToQualify = referrer.finalScore;\n }\n }\n }\n\n if (minFinalScoreToQualify === Number.MAX_SAFE_INTEGER) {\n if (rules.maxQualifiedReferrers === 0) {\n // ... because it's impossible to qualify based on the rules\n // therefore keep minFinalScoreToQualify as Number.MAX_SAFE_INTEGER\n } else {\n // ... because there are no referrers at all on the leaderboard\n if (referrers.length !== 0) {\n // invariant sanity check\n throw new Error(\n \"AggregatedReferrerMetricsPieSplit: There are referrers on the leaderboard, and the rules allow for qualified referrers, but no qualified referrers.\",\n );\n }\n\n minFinalScoreToQualify = 0;\n }\n }\n\n const result = {\n grandTotalReferrals,\n grandTotalIncrementalDuration,\n grandTotalRevenueContribution: priceEth(grandTotalRevenueContributionAmount),\n grandTotalQualifiedReferrersFinalScore,\n minFinalScoreToQualify,\n } satisfies AggregatedReferrerMetricsPieSplit;\n\n validateAggregatedReferrerMetricsPieSplit(result);\n\n return result;\n};\n","import type { UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport type { ReferrerMetrics } from \"../../referrer-metrics\";\nimport type { BaseReferralProgramRules } from \"./rules\";\n\n/**\n * Asserts invariants that must hold for any leaderboard builder regardless of award model.\n */\nexport const assertLeaderboardInputs = (\n allReferrers: ReferrerMetrics[],\n rules: BaseReferralProgramRules,\n accurateAsOf: UnixTimestamp,\n): void => {\n const uniqueReferrers = new Set(allReferrers.map((r) => r.referrer));\n if (uniqueReferrers.size !== allReferrers.length) {\n throw new Error(\n \"ReferrerLeaderboard: Cannot build a leaderboard containing duplicate referrers\",\n );\n }\n\n if (accurateAsOf < rules.startTime && allReferrers.length > 0) {\n throw new Error(\n `ReferrerLeaderboard: accurateAsOf (${accurateAsOf}) is before startTime (${rules.startTime}) which indicates allReferrers should be empty, but allReferrers is not empty.`,\n );\n }\n};\n","import type { Address } from \"viem\";\n\nimport type { Duration } from \"@ensnode/ensnode-sdk\";\n\nimport { isPositiveInteger } from \"../../number\";\nimport type { ReferrerMetrics } from \"../../referrer-metrics\";\n\n/**\n * The rank of a referrer relative to all other referrers, where 1 is the\n * top-ranked referrer.\n *\n * @invariant Guaranteed to be a positive integer (> 0)\n */\nexport type ReferrerRank = number;\n\nexport const validateReferrerRank = (rank: ReferrerRank): void => {\n if (!isPositiveInteger(rank)) {\n throw new Error(`Invalid ReferrerRank: ${rank}. ReferrerRank must be a positive integer.`);\n }\n};\n\nexport interface ReferrerMetricsForComparison {\n /**\n * The total incremental duration (in seconds) of all referrals made by the referrer within\n * the {@link ReferralProgramRules}.\n */\n totalIncrementalDuration: Duration;\n\n /**\n * The fully lowercase Ethereum address of the referrer.\n *\n * @invariant Guaranteed to be a valid EVM address in lowercase format.\n */\n referrer: Address;\n}\n\nexport const compareReferrerMetrics = (\n a: ReferrerMetricsForComparison,\n b: ReferrerMetricsForComparison,\n): number => {\n // Primary sort: totalIncrementalDuration (descending)\n if (a.totalIncrementalDuration !== b.totalIncrementalDuration) {\n return b.totalIncrementalDuration - a.totalIncrementalDuration;\n }\n\n // Secondary sort: referrer address using lexicographic comparison of ASCII hex strings (descending)\n if (b.referrer > a.referrer) return 1;\n if (b.referrer < a.referrer) return -1;\n return 0;\n};\n\n/**\n * Sorts a list of referrers for leaderboard ranking.\n * Returns a new array — does not mutate the input.\n */\nexport const sortReferrerMetrics = (referrers: ReferrerMetrics[]): ReferrerMetrics[] => {\n return [...referrers].sort(compareReferrerMetrics);\n};\n","import type { Address } from \"viem\";\n\nimport type { Duration, PriceEth } from \"@ensnode/ensnode-sdk\";\nimport { makePriceEthSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { normalizeAddress, validateLowercaseAddress } from \"./address\";\nimport { validateNonNegativeInteger } from \"./number\";\nimport { ReferralProgramRules } from \"./rules\";\nimport { validateDuration } from \"./time\";\n\n/**\n * Metrics for a single referrer, as aggregated from the DB layer.\n * Independent of other referrers and award model; does not carry an `awardModel` discriminant.\n */\nexport interface ReferrerMetrics {\n /**\n * The fully lowercase Ethereum address of the referrer.\n *\n * @invariant Guaranteed to be a valid EVM address in lowercase format\n */\n referrer: Address;\n\n /**\n * The total number of referrals made by the referrer within the {@link ReferralProgramRules}.\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n totalReferrals: number;\n\n /**\n * The total incremental duration (in seconds) of all referrals made by the referrer within\n * the {@link ReferralProgramRules}.\n */\n totalIncrementalDuration: Duration;\n\n /**\n * The total revenue contribution in ETH made to the ENS DAO by all referrals\n * from this referrer.\n *\n * This is the sum of the total cost paid by registrants for all registrar actions\n * where this address was the referrer.\n *\n * @invariant Guaranteed to be a valid PriceEth with non-negative amount (>= 0n)\n * @invariant Never null (records with null `total` in the database are treated as 0 when summing)\n */\n totalRevenueContribution: PriceEth;\n}\n\nexport const buildReferrerMetrics = (\n referrer: Address,\n totalReferrals: number,\n totalIncrementalDuration: Duration,\n totalRevenueContribution: PriceEth,\n): ReferrerMetrics => {\n const result = {\n referrer: normalizeAddress(referrer),\n totalReferrals,\n totalIncrementalDuration,\n totalRevenueContribution,\n } satisfies ReferrerMetrics;\n\n validateReferrerMetrics(result);\n return result;\n};\n\nexport const validateReferrerMetrics = (metrics: ReferrerMetrics): void => {\n validateLowercaseAddress(metrics.referrer);\n validateNonNegativeInteger(metrics.totalReferrals);\n validateDuration(metrics.totalIncrementalDuration);\n\n makePriceEthSchema(\"ReferrerMetrics.totalRevenueContribution\").parse(\n metrics.totalRevenueContribution,\n );\n};\n","import type { Duration } from \"@ensnode/ensnode-sdk\";\n\nimport { SECONDS_PER_YEAR } from \"../../time\";\nimport type { ReferrerScore } from \"../shared/score\";\n\n/**\n * Calculate the score of a referrer based on the total incremental duration\n * (in seconds) of registrations and renewals for direct subnames of .eth\n * referred by the referrer within the referral program edition.\n *\n * Used exclusively in the pie-split award model pipeline.\n *\n * @param totalIncrementalDuration - The total incremental duration (in seconds)\n * of referrals made by a referrer within the {@link ReferralProgramRulesPieSplit}.\n */\nexport const calcReferrerScorePieSplit = (totalIncrementalDuration: Duration): ReferrerScore => {\n return totalIncrementalDuration / SECONDS_PER_YEAR;\n};\n","import type { Duration } from \"@ensnode/ensnode-sdk\";\n\nimport type { ReferrerRank } from \"../shared/rank\";\nimport type { ReferrerScore } from \"../shared/score\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\nimport { calcReferrerScorePieSplit } from \"./score\";\n\n/**\n * Determine if a referrer with the given `rank` is qualified to receive a non-zero\n * `awardPoolShare` under pie-split rules.\n *\n * @param rank - The rank of the referrer relative to all other referrers on a leaderboard.\n * @param rules - The pie-split rules of the referral program.\n */\nexport function isReferrerQualifiedPieSplit(\n rank: ReferrerRank,\n rules: ReferralProgramRulesPieSplit,\n): boolean {\n return rank <= rules.maxQualifiedReferrers;\n}\n\n/**\n * Calculate the final score boost of a referrer based on their rank (pie-split only).\n *\n * @param rank - The rank of the referrer relative to all other referrers, where 1 is the\n * top-ranked referrer.\n * @returns The final score boost of the referrer as a number between 0 and 1 (inclusive).\n */\nexport function calcReferrerFinalScoreBoostPieSplit(\n rank: ReferrerRank,\n rules: ReferralProgramRulesPieSplit,\n): number {\n if (!isReferrerQualifiedPieSplit(rank, rules)) return 0;\n\n // Avoid division by zero when only a single referrer is qualified.\n // In this case, that single referrer (rank 1) should receive the maximum boost.\n if (rules.maxQualifiedReferrers === 1) return 1;\n\n return 1 - (rank - 1) / (rules.maxQualifiedReferrers - 1);\n}\n\n/**\n * Calculate the final score multiplier of a referrer based on their rank (pie-split only).\n *\n * @param rank - The rank of the referrer relative to all other referrers, where 1 is the\n * top-ranked referrer.\n * @returns The final score multiplier of the referrer as a number between 1 and 2 (inclusive).\n */\nexport function calcReferrerFinalScoreMultiplierPieSplit(\n rank: ReferrerRank,\n rules: ReferralProgramRulesPieSplit,\n): number {\n return 1 + calcReferrerFinalScoreBoostPieSplit(rank, rules);\n}\n\n/**\n * Calculate the final score of a referrer based on their score and final score boost (pie-split only).\n *\n * @param rank - The rank of the referrer relative to all other referrers.\n * @param totalIncrementalDuration - The total incremental duration (in seconds)\n * of referrals made by the referrer within the `rules`.\n * @param rules - The pie-split rules of the referral program.\n */\nexport function calcReferrerFinalScorePieSplit(\n rank: ReferrerRank,\n totalIncrementalDuration: Duration,\n rules: ReferralProgramRulesPieSplit,\n): ReferrerScore {\n return (\n calcReferrerScorePieSplit(totalIncrementalDuration) *\n calcReferrerFinalScoreMultiplierPieSplit(rank, rules)\n );\n}\n","import type { Address } from \"viem\";\n\nimport { type PriceUsdc, priceEth, priceUsdc, scalePrice } from \"@ensnode/ensnode-sdk\";\nimport { makePriceEthSchema, makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport type { ReferrerMetrics } from \"../../referrer-metrics\";\nimport { buildReferrerMetrics, validateReferrerMetrics } from \"../../referrer-metrics\";\nimport type { ReferrerRank } from \"../shared/rank\";\nimport { validateReferrerRank } from \"../shared/rank\";\nimport { type ReferrerScore, validateReferrerScore } from \"../shared/score\";\nimport type { AggregatedReferrerMetricsPieSplit } from \"./aggregations\";\nimport {\n calcReferrerFinalScoreBoostPieSplit,\n calcReferrerFinalScorePieSplit,\n isReferrerQualifiedPieSplit,\n} from \"./rank\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\nimport { calcReferrerScorePieSplit } from \"./score\";\n\n/**\n * Represents metrics for a single referrer independent of other referrers,\n * including a calculation of the referrer's score.\n */\nexport interface ScoredReferrerMetricsPieSplit extends ReferrerMetrics {\n /**\n * The referrer's score.\n *\n * @invariant Guaranteed to be `calcReferrerScorePieSplit(totalIncrementalDuration)`\n */\n score: ReferrerScore;\n}\n\nexport const buildScoredReferrerMetricsPieSplit = (\n referrer: ReferrerMetrics,\n): ScoredReferrerMetricsPieSplit => {\n const result = {\n ...referrer,\n score: calcReferrerScorePieSplit(referrer.totalIncrementalDuration),\n } satisfies ScoredReferrerMetricsPieSplit;\n\n validateScoredReferrerMetricsPieSplit(result);\n return result;\n};\n\nexport const validateScoredReferrerMetricsPieSplit = (\n metrics: ScoredReferrerMetricsPieSplit,\n): void => {\n validateReferrerMetrics(metrics);\n validateReferrerScore(metrics.score);\n\n const expectedScore = calcReferrerScorePieSplit(metrics.totalIncrementalDuration);\n if (metrics.score !== expectedScore) {\n throw new Error(`Referrer: Invalid score: ${metrics.score}, expected: ${expectedScore}.`);\n }\n};\n\n/**\n * Extends {@link ScoredReferrerMetricsPieSplit} to include additional metrics relative to all\n * other referrers on a {@link ReferrerLeaderboardPieSplit} and {@link ReferralProgramRulesPieSplit}.\n */\nexport interface RankedReferrerMetricsPieSplit extends ScoredReferrerMetricsPieSplit {\n /**\n * The referrer's rank on the {@link ReferrerLeaderboardPieSplit} relative to all other referrers.\n */\n rank: ReferrerRank;\n\n /**\n * Identifies if the referrer meets the qualifications of the {@link ReferralProgramRulesPieSplit} to receive a non-zero `awardPoolShare`.\n *\n * @invariant true if and only if `rank` is less than or equal to {@link ReferralProgramRulesPieSplit.maxQualifiedReferrers}\n */\n isQualified: boolean;\n\n /**\n * The referrer's final score boost.\n *\n * @invariant Guaranteed to be a number between 0 and 1 (inclusive)\n * @invariant Calculated as: `1-((rank-1)/({@link ReferralProgramRulesPieSplit.maxQualifiedReferrers}-1))` if `isQualified` is `true`, else `0`\n */\n finalScoreBoost: number;\n\n /**\n * The referrer's final score.\n *\n * @invariant Calculated as: `score * (1 + finalScoreBoost)`\n */\n finalScore: ReferrerScore;\n}\n\nexport const validateRankedReferrerMetricsPieSplit = (\n metrics: RankedReferrerMetricsPieSplit,\n rules: ReferralProgramRulesPieSplit,\n): void => {\n validateScoredReferrerMetricsPieSplit(metrics);\n validateReferrerRank(metrics.rank);\n\n if (metrics.finalScoreBoost < 0 || metrics.finalScoreBoost > 1) {\n throw new Error(\n `Invalid RankedReferrerMetricsPieSplit: Invalid finalScoreBoost: ${metrics.finalScoreBoost}. finalScoreBoost must be between 0 and 1 (inclusive).`,\n );\n }\n\n validateReferrerScore(metrics.finalScore);\n\n const expectedIsQualified = isReferrerQualifiedPieSplit(metrics.rank, rules);\n if (metrics.isQualified !== expectedIsQualified) {\n throw new Error(\n `RankedReferrerMetricsPieSplit: Invalid isQualified: ${metrics.isQualified}, expected: ${expectedIsQualified}.`,\n );\n }\n\n const expectedFinalScoreBoost = calcReferrerFinalScoreBoostPieSplit(metrics.rank, rules);\n if (metrics.finalScoreBoost !== expectedFinalScoreBoost) {\n throw new Error(\n `RankedReferrerMetricsPieSplit: Invalid finalScoreBoost: ${metrics.finalScoreBoost}, expected: ${expectedFinalScoreBoost}.`,\n );\n }\n\n const expectedFinalScore = calcReferrerFinalScorePieSplit(\n metrics.rank,\n metrics.totalIncrementalDuration,\n rules,\n );\n if (metrics.finalScore !== expectedFinalScore) {\n throw new Error(\n `RankedReferrerMetricsPieSplit: Invalid finalScore: ${metrics.finalScore}, expected: ${expectedFinalScore}.`,\n );\n }\n};\n\nexport const buildRankedReferrerMetricsPieSplit = (\n referrer: ScoredReferrerMetricsPieSplit,\n rank: ReferrerRank,\n rules: ReferralProgramRulesPieSplit,\n): RankedReferrerMetricsPieSplit => {\n const result = {\n ...referrer,\n rank,\n isQualified: isReferrerQualifiedPieSplit(rank, rules),\n finalScoreBoost: calcReferrerFinalScoreBoostPieSplit(rank, rules),\n finalScore: calcReferrerFinalScorePieSplit(rank, referrer.totalIncrementalDuration, rules),\n } satisfies RankedReferrerMetricsPieSplit;\n validateRankedReferrerMetricsPieSplit(result, rules);\n return result;\n};\n\n/**\n * Calculate the share of the award pool for a referrer.\n * @param referrer - The referrer to calculate the award pool share for.\n * @param aggregatedMetrics - Aggregated metrics for all referrers.\n * @returns The referrer's share of the award pool as a number between 0 and 1 (inclusive).\n */\nexport const calcReferrerAwardPoolSharePieSplit = (\n referrer: RankedReferrerMetricsPieSplit,\n aggregatedMetrics: AggregatedReferrerMetricsPieSplit,\n): number => {\n if (!referrer.isQualified) return 0;\n if (aggregatedMetrics.grandTotalQualifiedReferrersFinalScore === 0) return 0;\n\n return referrer.finalScore / aggregatedMetrics.grandTotalQualifiedReferrersFinalScore;\n};\n\n/**\n * Extends {@link RankedReferrerMetricsPieSplit} to include additional metrics\n * relative to {@link AggregatedReferrerMetricsPieSplit}.\n */\nexport interface AwardedReferrerMetricsPieSplit extends RankedReferrerMetricsPieSplit {\n /**\n * The referrer's share of the award pool.\n *\n * @invariant Guaranteed to be a number between 0 and 1 (inclusive)\n * @invariant Calculated as: `finalScore / {@link AggregatedReferrerMetricsPieSplit.grandTotalQualifiedReferrersFinalScore}` if `isQualified` is `true`, else `0`\n */\n awardPoolShare: number;\n\n /**\n * The approximate USDC value of the referrer's share of the {@link ReferralProgramRulesPieSplit.totalAwardPoolValue}.\n *\n * @invariant Guaranteed to be a valid PriceUsdc with amount between 0 and {@link ReferralProgramRulesPieSplit.totalAwardPoolValue.amount} (inclusive)\n * @invariant Calculated as: `awardPoolShare` * {@link ReferralProgramRulesPieSplit.totalAwardPoolValue.amount}\n */\n awardPoolApproxValue: PriceUsdc;\n}\n\nexport const validateAwardedReferrerMetricsPieSplit = (\n referrer: AwardedReferrerMetricsPieSplit,\n rules: ReferralProgramRulesPieSplit,\n): void => {\n validateRankedReferrerMetricsPieSplit(referrer, rules);\n if (referrer.awardPoolShare < 0 || referrer.awardPoolShare > 1) {\n throw new Error(\n `Invalid AwardedReferrerMetricsPieSplit: ${referrer.awardPoolShare}. awardPoolShare must be between 0 and 1 (inclusive).`,\n );\n }\n\n makePriceUsdcSchema(\"AwardedReferrerMetricsPieSplit.awardPoolApproxValue\").parse(\n referrer.awardPoolApproxValue,\n );\n\n if (referrer.awardPoolApproxValue.amount > rules.totalAwardPoolValue.amount) {\n throw new Error(\n `AwardedReferrerMetricsPieSplit: awardPoolApproxValue.amount ${referrer.awardPoolApproxValue.amount.toString()} exceeds totalAwardPoolValue.amount ${rules.totalAwardPoolValue.amount.toString()}.`,\n );\n }\n};\n\nexport const buildAwardedReferrerMetricsPieSplit = (\n referrer: RankedReferrerMetricsPieSplit,\n aggregatedMetrics: AggregatedReferrerMetricsPieSplit,\n rules: ReferralProgramRulesPieSplit,\n): AwardedReferrerMetricsPieSplit => {\n const awardPoolShare = calcReferrerAwardPoolSharePieSplit(referrer, aggregatedMetrics);\n\n // Calculate the approximate USDC value by multiplying the share by the total award pool value\n const awardPoolApproxValue = scalePrice(rules.totalAwardPoolValue, awardPoolShare);\n\n const result = {\n ...referrer,\n awardPoolShare,\n awardPoolApproxValue,\n } satisfies AwardedReferrerMetricsPieSplit;\n validateAwardedReferrerMetricsPieSplit(result, rules);\n return result;\n};\n\n/**\n * Extends {@link AwardedReferrerMetricsPieSplit} but with rank set to null to represent\n * a referrer who is not on the leaderboard (has zero referrals within the rules associated with the leaderboard).\n */\nexport interface UnrankedReferrerMetricsPieSplit\n extends Omit<AwardedReferrerMetricsPieSplit, \"rank\" | \"isQualified\"> {\n /**\n * The referrer is not on the leaderboard and therefore has no rank.\n */\n rank: null;\n\n /**\n * Always false for unranked referrers.\n */\n isQualified: false;\n}\n\nexport const validateUnrankedReferrerMetricsPieSplit = (\n metrics: UnrankedReferrerMetricsPieSplit,\n): void => {\n validateScoredReferrerMetricsPieSplit(metrics);\n\n if (metrics.rank !== null) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: rank must be null, got: ${metrics.rank}.`,\n );\n }\n if (metrics.isQualified !== false) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: isQualified must be false, got: ${metrics.isQualified}.`,\n );\n }\n if (metrics.totalReferrals !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: totalReferrals must be 0, got: ${metrics.totalReferrals}.`,\n );\n }\n if (metrics.totalIncrementalDuration !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: totalIncrementalDuration must be 0, got: ${metrics.totalIncrementalDuration}.`,\n );\n }\n\n makePriceEthSchema(\"UnrankedReferrerMetricsPieSplit.totalRevenueContribution\").parse(\n metrics.totalRevenueContribution,\n );\n if (metrics.totalRevenueContribution.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: totalRevenueContribution.amount must be 0n, got: ${metrics.totalRevenueContribution.amount.toString()}.`,\n );\n }\n\n if (metrics.score !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: score must be 0, got: ${metrics.score}.`,\n );\n }\n if (metrics.finalScoreBoost !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: finalScoreBoost must be 0, got: ${metrics.finalScoreBoost}.`,\n );\n }\n if (metrics.finalScore !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: finalScore must be 0, got: ${metrics.finalScore}.`,\n );\n }\n if (metrics.awardPoolShare !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: awardPoolShare must be 0, got: ${metrics.awardPoolShare}.`,\n );\n }\n\n makePriceUsdcSchema(\"UnrankedReferrerMetricsPieSplit.awardPoolApproxValue\").parse(\n metrics.awardPoolApproxValue,\n );\n if (metrics.awardPoolApproxValue.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: awardPoolApproxValue must be 0n, got: ${metrics.awardPoolApproxValue.amount.toString()}.`,\n );\n }\n};\n\n/**\n * Build an unranked zero-score referrer record for a referrer address that is not in the leaderboard.\n *\n * This is useful when you want to return a referrer record for an address that has no referrals\n * and is not qualified for the leaderboard.\n *\n * @param referrer - The referrer address\n * @returns An {@link UnrankedReferrerMetricsPieSplit} with zero values for all metrics and null rank\n */\nexport const buildUnrankedReferrerMetricsPieSplit = (\n referrer: Address,\n): UnrankedReferrerMetricsPieSplit => {\n const metrics = buildReferrerMetrics(referrer, 0, 0, priceEth(0n));\n const scoredMetrics = buildScoredReferrerMetricsPieSplit(metrics);\n\n const result = {\n ...scoredMetrics,\n rank: null,\n isQualified: false,\n finalScoreBoost: 0,\n finalScore: 0,\n awardPoolShare: 0,\n awardPoolApproxValue: priceUsdc(0n),\n } satisfies UnrankedReferrerMetricsPieSplit;\n\n validateUnrankedReferrerMetricsPieSplit(result);\n return result;\n};\n","import type { Address } from \"viem\";\n\nimport type { UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport type { ReferrerMetrics } from \"../../referrer-metrics\";\nimport { assertLeaderboardInputs } from \"../shared/leaderboard-guards\";\nimport { sortReferrerMetrics } from \"../shared/rank\";\nimport type { ReferralProgramAwardModels } from \"../shared/rules\";\nimport type { AggregatedReferrerMetricsPieSplit } from \"./aggregations\";\nimport { buildAggregatedReferrerMetricsPieSplit } from \"./aggregations\";\nimport type { AwardedReferrerMetricsPieSplit } from \"./metrics\";\nimport {\n buildAwardedReferrerMetricsPieSplit,\n buildRankedReferrerMetricsPieSplit,\n buildScoredReferrerMetricsPieSplit,\n} from \"./metrics\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\n\n/**\n * Represents a leaderboard with the pie-split award model for any number of referrers.\n */\nexport interface ReferrerLeaderboardPieSplit {\n /**\n * Discriminant identifying this as a pie-split leaderboard.\n *\n * @invariant Always equals `rules.awardModel` ({@link ReferralProgramAwardModels.PieSplit}).\n */\n awardModel: typeof ReferralProgramAwardModels.PieSplit;\n\n /**\n * The rules of the referral program that generated the {@link ReferrerLeaderboardPieSplit}.\n */\n rules: ReferralProgramRulesPieSplit;\n\n /**\n * The {@link AggregatedReferrerMetricsPieSplit} for all {@link RankedReferrerMetricsPieSplit} values in `referrers`.\n */\n aggregatedMetrics: AggregatedReferrerMetricsPieSplit;\n\n /**\n * Ordered map containing `AwardedReferrerMetricsPieSplit` for all referrers with 1 or more\n * `totalReferrals` within the `rules` as of `accurateAsOf`.\n *\n * @invariant Map entries are ordered by `rank` (ascending).\n * @invariant Map is empty if there are no referrers with 1 or more `totalReferrals`\n * within the `rules` as of `accurateAsOf`.\n * @invariant If a fully-lowercase `Address` is not a key in this map then that `Address` had\n * 0 `totalReferrals`, `totalIncrementalDuration`, and `score` within the\n * `rules` as of `accurateAsOf`.\n * @invariant Each value in this map is guaranteed to have a non-zero\n * `totalReferrals`, `totalIncrementalDuration`, and `score`.\n */\n referrers: Map<Address, AwardedReferrerMetricsPieSplit>;\n\n /**\n * The {@link UnixTimestamp} of when the data used to build the {@link ReferrerLeaderboardPieSplit} was accurate as of.\n */\n accurateAsOf: UnixTimestamp;\n}\n\nexport const buildReferrerLeaderboardPieSplit = (\n allReferrers: ReferrerMetrics[],\n rules: ReferralProgramRulesPieSplit,\n accurateAsOf: UnixTimestamp,\n): ReferrerLeaderboardPieSplit => {\n assertLeaderboardInputs(allReferrers, rules, accurateAsOf);\n\n const sortedReferrers = sortReferrerMetrics(allReferrers);\n\n const scoredReferrers = sortedReferrers.map((r) => buildScoredReferrerMetricsPieSplit(r));\n\n const rankedReferrers = scoredReferrers.map((r, index) =>\n buildRankedReferrerMetricsPieSplit(r, index + 1, rules),\n );\n\n const aggregatedMetrics = buildAggregatedReferrerMetricsPieSplit(rankedReferrers, rules);\n\n const awardedReferrers = rankedReferrers.map((r) =>\n buildAwardedReferrerMetricsPieSplit(r, aggregatedMetrics, rules),\n );\n\n const referrers = new Map(awardedReferrers.map((r) => [r.referrer, r]));\n\n return { awardModel: rules.awardModel, rules, aggregatedMetrics, referrers, accurateAsOf };\n};\n","import { calcReferralProgramStatus } from \"../../status\";\nimport {\n type BaseReferrerLeaderboardPage,\n type ReferrerLeaderboardPageContext,\n sliceReferrers,\n} from \"../shared/leaderboard-page\";\nimport type { ReferralProgramAwardModels } from \"../shared/rules\";\nimport type { AggregatedReferrerMetricsPieSplit } from \"./aggregations\";\nimport type { ReferrerLeaderboardPieSplit } from \"./leaderboard\";\nimport type { AwardedReferrerMetricsPieSplit } from \"./metrics\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\n\n/**\n * A page of referrers from the pie-split referrer leaderboard.\n */\nexport interface ReferrerLeaderboardPagePieSplit extends BaseReferrerLeaderboardPage {\n /**\n * Discriminant identifying this as a page from a pie-split leaderboard.\n *\n * @invariant Always equals `rules.awardModel` ({@link ReferralProgramAwardModels.PieSplit}).\n */\n awardModel: typeof ReferralProgramAwardModels.PieSplit;\n\n /**\n * The {@link ReferralProgramRulesPieSplit} used to generate the {@link ReferrerLeaderboardPieSplit}\n * that this {@link ReferrerLeaderboardPagePieSplit} comes from.\n */\n rules: ReferralProgramRulesPieSplit;\n\n /**\n * Ordered list of {@link AwardedReferrerMetricsPieSplit} for the {@link ReferrerLeaderboardPagePieSplit}\n * described by {@link pageContext} within the related {@link ReferrerLeaderboardPieSplit}.\n *\n * @invariant Array will be empty if `pageContext.totalRecords` is 0.\n * @invariant Array entries are ordered by `rank` (ascending).\n */\n referrers: AwardedReferrerMetricsPieSplit[];\n\n /**\n * The aggregated metrics for all referrers on the leaderboard.\n */\n aggregatedMetrics: AggregatedReferrerMetricsPieSplit;\n}\n\nexport function buildLeaderboardPagePieSplit(\n pageContext: ReferrerLeaderboardPageContext,\n leaderboard: ReferrerLeaderboardPieSplit,\n): ReferrerLeaderboardPagePieSplit {\n const status = calcReferralProgramStatus(leaderboard.rules, leaderboard.accurateAsOf);\n return {\n awardModel: leaderboard.awardModel,\n rules: leaderboard.rules,\n referrers: sliceReferrers(leaderboard.referrers, pageContext),\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n pageContext,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n };\n}\n","import type { AccountId, PriceUsdc, UnixTimestamp } from \"@ensnode/ensnode-sdk\";\nimport { makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { validateNonNegativeInteger } from \"../../number\";\nimport {\n type BaseReferralProgramRules,\n ReferralProgramAwardModels,\n validateBaseReferralProgramRules,\n} from \"../shared/rules\";\n\nexport interface ReferralProgramRulesPieSplit extends BaseReferralProgramRules {\n /**\n * Discriminant: identifies this as a \"pie-split\" award model edition.\n *\n * In pie-split, the top-N referrers split an award pool proportionally\n * based on their scored duration (with rank-based boost).\n */\n awardModel: typeof ReferralProgramAwardModels.PieSplit;\n\n /**\n * The total value of the award pool in USDC.\n *\n * NOTE: Awards will actually be distributed in $ENS tokens.\n */\n totalAwardPoolValue: PriceUsdc;\n\n /**\n * The maximum number of referrers that will qualify to receive a non-zero `awardPoolShare`.\n *\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n maxQualifiedReferrers: number;\n}\n\nexport const validateReferralProgramRulesPieSplit = (rules: ReferralProgramRulesPieSplit): void => {\n makePriceUsdcSchema(\"ReferralProgramRulesPieSplit.totalAwardPoolValue\").parse(\n rules.totalAwardPoolValue,\n );\n\n validateNonNegativeInteger(rules.maxQualifiedReferrers);\n\n validateBaseReferralProgramRules(rules);\n};\n\nexport const buildReferralProgramRulesPieSplit = (\n totalAwardPoolValue: PriceUsdc,\n maxQualifiedReferrers: number,\n startTime: UnixTimestamp,\n endTime: UnixTimestamp,\n subregistryId: AccountId,\n rulesUrl: URL,\n): ReferralProgramRulesPieSplit => {\n const result = {\n awardModel: ReferralProgramAwardModels.PieSplit,\n totalAwardPoolValue,\n maxQualifiedReferrers,\n startTime,\n endTime,\n subregistryId,\n rulesUrl,\n } satisfies ReferralProgramRulesPieSplit;\n\n validateReferralProgramRulesPieSplit(result);\n\n return result;\n};\n","import { type Duration, type PriceEth, type PriceUsdc, priceEth } from \"@ensnode/ensnode-sdk\";\nimport { makePriceEthSchema, makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { validateNonNegativeInteger } from \"../../number\";\nimport { validateDuration } from \"../../time\";\nimport type { AwardedReferrerMetricsRevShareLimit } from \"./metrics\";\n\n/**\n * Represents aggregated metrics for a list of referrers on a rev-share-limit leaderboard.\n */\nexport interface AggregatedReferrerMetricsRevShareLimit {\n /**\n * @invariant The sum of `totalReferrals` across all referrers in the list.\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n grandTotalReferrals: number;\n\n /**\n * @invariant The sum of `totalIncrementalDuration` across all referrers in the list.\n */\n grandTotalIncrementalDuration: Duration;\n\n /**\n * The total revenue contribution in ETH to the ENS DAO from all referrals\n * across all referrers on the leaderboard.\n *\n * This is the sum of `totalRevenueContribution` across all referrers in the list.\n *\n * @invariant Guaranteed to be a valid PriceEth with non-negative amount (>= 0n)\n */\n grandTotalRevenueContribution: PriceEth;\n\n /**\n * The remaining amount in the award pool after subtracting all qualified awards\n * claimed during the sequential race processing.\n *\n * @invariant Guaranteed to be a valid PriceUsdc with non-negative amount (>= 0n)\n */\n awardPoolRemaining: PriceUsdc;\n}\n\nexport const validateAggregatedReferrerMetricsRevShareLimit = (\n metrics: AggregatedReferrerMetricsRevShareLimit,\n): void => {\n validateNonNegativeInteger(metrics.grandTotalReferrals);\n validateDuration(metrics.grandTotalIncrementalDuration);\n\n makePriceEthSchema(\"AggregatedReferrerMetricsRevShareLimit.grandTotalRevenueContribution\").parse(\n metrics.grandTotalRevenueContribution,\n );\n\n makePriceUsdcSchema(\"AggregatedReferrerMetricsRevShareLimit.awardPoolRemaining\").parse(\n metrics.awardPoolRemaining,\n );\n};\n\n/**\n * Builds aggregated rev-share-limit metrics from a complete list of referrers and\n * the award pool remaining after sequential race processing.\n *\n * **IMPORTANT: This function expects a complete list of all referrers.**\n *\n * @param referrers - Must be a complete list of referrers with their totals.\n * **This must NOT be a paginated or partial slice.**\n *\n * @param awardPoolRemaining - The amount remaining in the award pool after the sequential\n * race algorithm has processed all events.\n *\n * @returns Aggregated metrics including totals across all referrers and the award pool remaining.\n */\nexport const buildAggregatedReferrerMetricsRevShareLimit = (\n referrers: AwardedReferrerMetricsRevShareLimit[],\n awardPoolRemaining: PriceUsdc,\n): AggregatedReferrerMetricsRevShareLimit => {\n let grandTotalReferrals = 0;\n let grandTotalIncrementalDuration = 0;\n let grandTotalRevenueContributionAmount = 0n;\n\n for (const referrer of referrers) {\n grandTotalReferrals += referrer.totalReferrals;\n grandTotalIncrementalDuration += referrer.totalIncrementalDuration;\n grandTotalRevenueContributionAmount += referrer.totalRevenueContribution.amount;\n }\n\n const aggregatedMetrics = {\n grandTotalReferrals,\n grandTotalIncrementalDuration,\n grandTotalRevenueContribution: priceEth(grandTotalRevenueContributionAmount),\n awardPoolRemaining,\n } satisfies AggregatedReferrerMetricsRevShareLimit;\n\n validateAggregatedReferrerMetricsRevShareLimit(aggregatedMetrics);\n\n return aggregatedMetrics;\n};\n","/**\n * Zeros out the 1-digit `eventType` field in a Ponder checkpoint string.\n *\n * A Ponder checkpoint string ends with 17 digits:\n * - 1 digit for `eventType` (internal Ponder concept, irrelevant to event ordering)\n * - 16 digits for `eventIndex`\n *\n * Zeroing `eventType` allows safe bigint comparison across events from different\n * internal Ponder event types while preserving all ordering-relevant information.\n */\nexport function resetEncodedEventType(encodedCheckpoint: string): string {\n const encodedEventIndexLength = 16;\n const encodedEventTypeLength = 1;\n const encodedEventTypePosition =\n encodedCheckpoint.length - encodedEventIndexLength - encodedEventTypeLength;\n\n return (\n encodedCheckpoint.slice(0, encodedEventTypePosition) +\n \"0\" +\n encodedCheckpoint.slice(encodedEventTypePosition + encodedEventTypeLength)\n );\n}\n\n/**\n * Compares two Ponder checkpoint IDs for ordering purposes.\n *\n * Zeroes out the `eventType` digit before comparing as bigints, since `eventType`\n * is an internal Ponder concept not relevant to chronological event ordering.\n */\nexport function compareEventIds(idA: string, idB: string): number {\n const a = BigInt(resetEncodedEventType(idA));\n const b = BigInt(resetEncodedEventType(idB));\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import type { Address } from \"viem\";\n\nimport {\n type AccountId,\n type PriceUsdc,\n parseUsdc,\n type UnixTimestamp,\n} from \"@ensnode/ensnode-sdk\";\nimport { makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { normalizeAddress, validateLowercaseAddress } from \"../../address\";\nimport {\n type BaseReferralProgramRules,\n ReferralProgramAwardModels,\n validateBaseReferralProgramRules,\n} from \"../shared/rules\";\n\n/**\n * An admin-imposed disqualification entry of a specific referrer in an edition.\n */\nexport interface ReferralProgramEditionDisqualification {\n /**\n * The address of the disqualified referrer.\n *\n * @invariant Guaranteed to be a valid EVM address in lowercase format.\n */\n referrer: Address;\n\n /**\n * A human-readable explanation of why the referrer was disqualified.\n *\n * @invariant Must be a non-empty string.\n */\n reason: string;\n}\n\n/**\n * Base revenue contribution per year of incremental duration.\n *\n * Used in `rev-share-limit` qualification and award calculations:\n * 1 year of incremental duration = $5 in base revenue (base-fee-only, excluding premiums).\n */\nexport const BASE_REVENUE_CONTRIBUTION_PER_YEAR: PriceUsdc = parseUsdc(\"5\");\n\nexport interface ReferralProgramRulesRevShareLimit extends BaseReferralProgramRules {\n /**\n * Discriminant: identifies this as a \"rev-share-limit\" award model edition.\n *\n * In rev-share-limit, each qualified referrer receives a share of their base revenue\n * contribution (base-fee-only: $5 × years of incremental duration), subject to a\n * pool cap and a minimum qualification threshold.\n */\n awardModel: typeof ReferralProgramAwardModels.RevShareLimit;\n\n /**\n * The total value of the award pool in USDC (acts as a cap on total payouts).\n */\n totalAwardPoolValue: PriceUsdc;\n\n /**\n * The minimum base revenue contribution required for a referrer to qualify.\n */\n minQualifiedRevenueContribution: PriceUsdc;\n\n /**\n * The fraction of the referrer's base revenue contribution that constitutes their potential award.\n *\n * @invariant Guaranteed to be a number between 0 and 1 (inclusive)\n */\n qualifiedRevenueShare: number;\n\n /**\n * Admin-imposed disqualifications for this edition.\n * Disqualified referrers receive no awards.\n *\n * @invariant No duplicate referrer addresses.\n */\n disqualifications: ReferralProgramEditionDisqualification[];\n}\n\nexport const validateReferralProgramRulesRevShareLimit = (\n rules: ReferralProgramRulesRevShareLimit,\n): void => {\n makePriceUsdcSchema(\"ReferralProgramRulesRevShareLimit.totalAwardPoolValue\").parse(\n rules.totalAwardPoolValue,\n );\n\n makePriceUsdcSchema(\"ReferralProgramRulesRevShareLimit.minQualifiedRevenueContribution\").parse(\n rules.minQualifiedRevenueContribution,\n );\n\n if (\n !Number.isFinite(rules.qualifiedRevenueShare) ||\n rules.qualifiedRevenueShare < 0 ||\n rules.qualifiedRevenueShare > 1\n ) {\n throw new Error(\n `ReferralProgramRulesRevShareLimit: qualifiedRevenueShare must be between 0 and 1 (inclusive), got ${rules.qualifiedRevenueShare}.`,\n );\n }\n\n for (const d of rules.disqualifications) {\n validateLowercaseAddress(d.referrer);\n if (d.reason.trim().length === 0) {\n throw new Error(\n \"ReferralProgramRulesRevShareLimit: disqualification reason must not be empty.\",\n );\n }\n }\n\n const disqualificationAddresses = rules.disqualifications.map((d) => d.referrer);\n const uniqueDisqualificationAddresses = new Set(disqualificationAddresses);\n if (uniqueDisqualificationAddresses.size !== disqualificationAddresses.length) {\n throw new Error(\n \"ReferralProgramRulesRevShareLimit: disqualifications must not contain duplicate referrer addresses.\",\n );\n }\n\n validateBaseReferralProgramRules(rules);\n};\n\nexport const buildReferralProgramRulesRevShareLimit = (\n totalAwardPoolValue: PriceUsdc,\n minQualifiedRevenueContribution: PriceUsdc,\n qualifiedRevenueShare: number,\n startTime: UnixTimestamp,\n endTime: UnixTimestamp,\n subregistryId: AccountId,\n rulesUrl: URL,\n disqualifications: ReferralProgramEditionDisqualification[] = [],\n): ReferralProgramRulesRevShareLimit => {\n const result = {\n awardModel: ReferralProgramAwardModels.RevShareLimit,\n totalAwardPoolValue,\n minQualifiedRevenueContribution,\n qualifiedRevenueShare,\n startTime,\n endTime,\n subregistryId,\n rulesUrl,\n disqualifications,\n } satisfies ReferralProgramRulesRevShareLimit;\n\n validateReferralProgramRulesRevShareLimit(result);\n\n return result;\n};\n\n/**\n * Determine if a referrer is qualified under rev-share-limit rules.\n *\n * A referrer is qualified if they meet the revenue threshold AND are not admin-disqualified.\n *\n * @param referrer - The referrer's address.\n * @param totalBaseRevenueContribution - The referrer's total base revenue contribution.\n * @param rules - The rev-share-limit rules of the referral program.\n */\nexport function isReferrerQualifiedRevShareLimit(\n referrer: Address,\n totalBaseRevenueContribution: PriceUsdc,\n rules: ReferralProgramRulesRevShareLimit,\n): boolean {\n const normalizedReferrer = normalizeAddress(referrer);\n const isAdminDisqualified = rules.disqualifications.some(\n (d) => d.referrer === normalizedReferrer,\n );\n return (\n totalBaseRevenueContribution.amount >= rules.minQualifiedRevenueContribution.amount &&\n !isAdminDisqualified\n );\n}\n","import type { Address } from \"viem\";\n\nimport { type PriceUsdc, priceEth, priceUsdc } from \"@ensnode/ensnode-sdk\";\nimport { makePriceEthSchema, makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport type { ReferrerMetrics } from \"../../referrer-metrics\";\nimport { buildReferrerMetrics, validateReferrerMetrics } from \"../../referrer-metrics\";\nimport { SECONDS_PER_YEAR } from \"../../time\";\nimport type { ReferrerRank } from \"../shared/rank\";\nimport { validateReferrerRank } from \"../shared/rank\";\nimport {\n BASE_REVENUE_CONTRIBUTION_PER_YEAR,\n isReferrerQualifiedRevShareLimit,\n type ReferralProgramRulesRevShareLimit,\n} from \"./rules\";\n\n/**\n * Extends {@link ReferrerMetrics} with computed base revenue contribution.\n */\nexport interface ReferrerMetricsRevShareLimit extends ReferrerMetrics {\n /**\n * The referrer's base revenue contribution (base-fee-only: $5 × years of incremental duration).\n * Used for qualification and award calculation in the rev-share-limit model.\n *\n * @invariant Guaranteed to be `priceUsdc(BASE_REVENUE_CONTRIBUTION_PER_YEAR.amount * BigInt(totalIncrementalDuration) / BigInt(SECONDS_PER_YEAR))`\n */\n totalBaseRevenueContribution: PriceUsdc;\n}\n\nexport const validateReferrerMetricsRevShareLimit = (\n metrics: ReferrerMetricsRevShareLimit,\n): void => {\n validateReferrerMetrics(metrics);\n\n const expectedTotalBaseRevenueContribution = priceUsdc(\n (BASE_REVENUE_CONTRIBUTION_PER_YEAR.amount * BigInt(metrics.totalIncrementalDuration)) /\n BigInt(SECONDS_PER_YEAR),\n );\n if (metrics.totalBaseRevenueContribution.amount !== expectedTotalBaseRevenueContribution.amount) {\n throw new Error(\n `ReferrerMetricsRevShareLimit: Invalid totalBaseRevenueContribution: ${metrics.totalBaseRevenueContribution.amount.toString()}, expected: ${expectedTotalBaseRevenueContribution.amount.toString()}.`,\n );\n }\n};\n\nexport const buildReferrerMetricsRevShareLimit = (\n metrics: ReferrerMetrics,\n): ReferrerMetricsRevShareLimit => {\n const totalBaseRevenueContribution = priceUsdc(\n (BASE_REVENUE_CONTRIBUTION_PER_YEAR.amount * BigInt(metrics.totalIncrementalDuration)) /\n BigInt(SECONDS_PER_YEAR),\n );\n\n const result = {\n ...metrics,\n totalBaseRevenueContribution,\n } satisfies ReferrerMetricsRevShareLimit;\n\n validateReferrerMetricsRevShareLimit(result);\n return result;\n};\n\n/**\n * Extends {@link ReferrerMetricsRevShareLimit} with rank, qualification status, and admin disqualification.\n */\nexport interface RankedReferrerMetricsRevShareLimit extends ReferrerMetricsRevShareLimit {\n /**\n * The referrer's rank on the {@link ReferrerLeaderboardRevShareLimit} relative to all other referrers.\n */\n rank: ReferrerRank;\n\n /**\n * Identifies if the referrer meets the qualifications of the {@link ReferralProgramRulesRevShareLimit} to receive a non-zero `awardPoolShare`.\n *\n * @invariant true if and only if `totalBaseRevenueContribution` is greater than or equal to\n * {@link ReferralProgramRulesRevShareLimit.minQualifiedRevenueContribution} AND\n * {@link isAdminDisqualified} is false.\n */\n isQualified: boolean;\n\n /**\n * Whether this referrer has been admin-disqualified from the edition.\n *\n * @invariant When true, {@link isQualified} is false.\n */\n isAdminDisqualified: boolean;\n\n /**\n * The reason for admin disqualification, or null if not disqualified.\n *\n * @invariant null when {@link isAdminDisqualified} is false.\n * @invariant Non-empty string when {@link isAdminDisqualified} is true.\n */\n adminDisqualificationReason: string | null;\n}\n\nexport const validateRankedReferrerMetricsRevShareLimit = (\n metrics: RankedReferrerMetricsRevShareLimit,\n rules: ReferralProgramRulesRevShareLimit,\n): void => {\n validateReferrerMetricsRevShareLimit(metrics);\n validateReferrerRank(metrics.rank);\n\n const expectedIsQualified = isReferrerQualifiedRevShareLimit(\n metrics.referrer,\n metrics.totalBaseRevenueContribution,\n rules,\n );\n if (metrics.isQualified !== expectedIsQualified) {\n throw new Error(\n `RankedReferrerMetricsRevShareLimit: Invalid isQualified: ${metrics.isQualified}, expected: ${expectedIsQualified}.`,\n );\n }\n\n const disqualification =\n rules.disqualifications.find((d) => d.referrer === metrics.referrer) ?? null;\n\n if (metrics.isAdminDisqualified !== (disqualification !== null)) {\n throw new Error(\n `RankedReferrerMetricsRevShareLimit: Invalid isAdminDisqualified: ${metrics.isAdminDisqualified}, expected: ${disqualification !== null}.`,\n );\n }\n\n const expectedReason = disqualification?.reason ?? null;\n if (metrics.adminDisqualificationReason !== expectedReason) {\n throw new Error(\n `RankedReferrerMetricsRevShareLimit: Invalid adminDisqualificationReason: ${metrics.adminDisqualificationReason}, expected: ${expectedReason}.`,\n );\n }\n};\n\nexport const buildRankedReferrerMetricsRevShareLimit = (\n referrer: ReferrerMetricsRevShareLimit,\n rank: ReferrerRank,\n rules: ReferralProgramRulesRevShareLimit,\n): RankedReferrerMetricsRevShareLimit => {\n const disqualification =\n rules.disqualifications.find((d) => d.referrer === referrer.referrer) ?? null;\n\n const result = {\n ...referrer,\n rank,\n isQualified: isReferrerQualifiedRevShareLimit(\n referrer.referrer,\n referrer.totalBaseRevenueContribution,\n rules,\n ),\n isAdminDisqualified: disqualification !== null,\n adminDisqualificationReason: disqualification?.reason ?? null,\n } satisfies RankedReferrerMetricsRevShareLimit;\n\n validateRankedReferrerMetricsRevShareLimit(result, rules);\n return result;\n};\n\n/**\n * Extends {@link RankedReferrerMetricsRevShareLimit} with approximate award value.\n */\nexport interface AwardedReferrerMetricsRevShareLimit extends RankedReferrerMetricsRevShareLimit {\n /**\n * The standard (uncapped) USDC award value for this referrer, computed as\n * `qualifiedRevenueShare × totalBaseRevenueContribution`.\n *\n * Represents what the referrer would receive if the pool were unlimited and the referrer were qualified.\n * Independent of the pool state and qualification status.\n */\n standardAwardValue: PriceUsdc;\n\n /**\n * The approximate USDC value of the referrer's award.\n *\n * This is the amount actually claimed from the pool by this referrer, capped by\n * the remaining pool at the time of their qualifying events.\n *\n * @invariant Guaranteed to be a valid PriceUsdc with amount between 0 and {@link ReferralProgramRulesRevShareLimit.totalAwardPoolValue.amount} (inclusive)\n * @invariant Always <= standardAwardValue.amount\n * @invariant Amount equal to 0 when {@link isAdminDisqualified} is true.\n */\n awardPoolApproxValue: PriceUsdc;\n}\n\nexport const validateAwardedReferrerMetricsRevShareLimit = (\n metrics: AwardedReferrerMetricsRevShareLimit,\n rules: ReferralProgramRulesRevShareLimit,\n): void => {\n validateRankedReferrerMetricsRevShareLimit(metrics, rules);\n\n makePriceUsdcSchema(\"AwardedReferrerMetricsRevShareLimit.standardAwardValue\").parse(\n metrics.standardAwardValue,\n );\n\n makePriceUsdcSchema(\"AwardedReferrerMetricsRevShareLimit.awardPoolApproxValue\").parse(\n metrics.awardPoolApproxValue,\n );\n\n if (metrics.isAdminDisqualified && metrics.awardPoolApproxValue.amount !== 0n) {\n throw new Error(\n `AwardedReferrerMetricsRevShareLimit: awardPoolApproxValue.amount must be 0n for admin-disqualified referrers, got ${metrics.awardPoolApproxValue.amount.toString()}.`,\n );\n }\n\n if (metrics.awardPoolApproxValue.amount > rules.totalAwardPoolValue.amount) {\n throw new Error(\n `AwardedReferrerMetricsRevShareLimit: awardPoolApproxValue.amount ${metrics.awardPoolApproxValue.amount.toString()} exceeds totalAwardPoolValue.amount ${rules.totalAwardPoolValue.amount.toString()}.`,\n );\n }\n\n if (metrics.awardPoolApproxValue.amount > metrics.standardAwardValue.amount) {\n throw new Error(\n `AwardedReferrerMetricsRevShareLimit: awardPoolApproxValue.amount ${metrics.awardPoolApproxValue.amount.toString()} exceeds standardAwardValue.amount ${metrics.standardAwardValue.amount.toString()}.`,\n );\n }\n};\n\nexport const buildAwardedReferrerMetricsRevShareLimit = (\n referrer: RankedReferrerMetricsRevShareLimit,\n standardAwardValue: PriceUsdc,\n awardPoolApproxValue: PriceUsdc,\n rules: ReferralProgramRulesRevShareLimit,\n): AwardedReferrerMetricsRevShareLimit => {\n const result = {\n ...referrer,\n standardAwardValue,\n awardPoolApproxValue,\n } satisfies AwardedReferrerMetricsRevShareLimit;\n\n validateAwardedReferrerMetricsRevShareLimit(result, rules);\n return result;\n};\n\n/**\n * Extends {@link AwardedReferrerMetricsRevShareLimit} but with rank set to null to represent\n * a referrer who is not on the leaderboard (has zero referrals within the rules associated with the leaderboard).\n */\nexport interface UnrankedReferrerMetricsRevShareLimit\n extends Omit<AwardedReferrerMetricsRevShareLimit, \"rank\" | \"isQualified\"> {\n /**\n * The referrer is not on the leaderboard and therefore has no rank.\n */\n rank: null;\n\n /**\n * Always false for unranked referrers.\n */\n isQualified: false;\n}\n\nexport const validateUnrankedReferrerMetricsRevShareLimit = (\n metrics: UnrankedReferrerMetricsRevShareLimit,\n rules: ReferralProgramRulesRevShareLimit,\n): void => {\n validateReferrerMetrics(metrics);\n\n if (metrics.rank !== null) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: rank must be null, got: ${metrics.rank}.`,\n );\n }\n if (metrics.isQualified !== false) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: isQualified must be false, got: ${metrics.isQualified}.`,\n );\n }\n\n const disqualification =\n rules.disqualifications.find((d) => d.referrer === metrics.referrer) ?? null;\n\n if (metrics.isAdminDisqualified !== (disqualification !== null)) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: isAdminDisqualified: ${metrics.isAdminDisqualified}, expected: ${disqualification !== null}.`,\n );\n }\n\n const expectedReason = disqualification?.reason ?? null;\n if (metrics.adminDisqualificationReason !== expectedReason) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: adminDisqualificationReason: ${metrics.adminDisqualificationReason}, expected: ${expectedReason}.`,\n );\n }\n\n if (metrics.totalReferrals !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: totalReferrals must be 0, got: ${metrics.totalReferrals}.`,\n );\n }\n if (metrics.totalIncrementalDuration !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: totalIncrementalDuration must be 0, got: ${metrics.totalIncrementalDuration}.`,\n );\n }\n\n makePriceEthSchema(\"UnrankedReferrerMetricsRevShareLimit.totalRevenueContribution\").parse(\n metrics.totalRevenueContribution,\n );\n if (metrics.totalRevenueContribution.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: totalRevenueContribution.amount must be 0n, got: ${metrics.totalRevenueContribution.amount.toString()}.`,\n );\n }\n\n makePriceUsdcSchema(\"UnrankedReferrerMetricsRevShareLimit.totalBaseRevenueContribution\").parse(\n metrics.totalBaseRevenueContribution,\n );\n if (metrics.totalBaseRevenueContribution.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: totalBaseRevenueContribution.amount must be 0n, got: ${metrics.totalBaseRevenueContribution.amount.toString()}.`,\n );\n }\n\n makePriceUsdcSchema(\"UnrankedReferrerMetricsRevShareLimit.standardAwardValue\").parse(\n metrics.standardAwardValue,\n );\n if (metrics.standardAwardValue.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: standardAwardValue.amount must be 0n, got: ${metrics.standardAwardValue.amount.toString()}.`,\n );\n }\n\n makePriceUsdcSchema(\"UnrankedReferrerMetricsRevShareLimit.awardPoolApproxValue\").parse(\n metrics.awardPoolApproxValue,\n );\n if (metrics.awardPoolApproxValue.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: awardPoolApproxValue.amount must be 0n, got: ${metrics.awardPoolApproxValue.amount.toString()}.`,\n );\n }\n};\n\n/**\n * Build an unranked zero-metrics rev-share-limit referrer record for an address not on the leaderboard.\n */\nexport const buildUnrankedReferrerMetricsRevShareLimit = (\n referrer: Address,\n rules: ReferralProgramRulesRevShareLimit,\n): UnrankedReferrerMetricsRevShareLimit => {\n const metrics = buildReferrerMetrics(referrer, 0, 0, priceEth(0n));\n\n const disqualification =\n rules.disqualifications.find((d) => d.referrer === metrics.referrer) ?? null;\n\n const result = {\n ...metrics,\n totalBaseRevenueContribution: priceUsdc(0n),\n rank: null,\n isQualified: false,\n standardAwardValue: priceUsdc(0n),\n awardPoolApproxValue: priceUsdc(0n),\n isAdminDisqualified: disqualification !== null,\n adminDisqualificationReason: disqualification?.reason ?? null,\n } satisfies UnrankedReferrerMetricsRevShareLimit;\n\n validateUnrankedReferrerMetricsRevShareLimit(result, rules);\n return result;\n};\n","import type { Address } from \"viem\";\n\nimport {\n type Duration,\n priceEth,\n priceUsdc,\n scalePrice,\n type UnixTimestamp,\n} from \"@ensnode/ensnode-sdk\";\n\nimport { normalizeAddress } from \"../../address\";\nimport { buildReferrerMetrics } from \"../../referrer-metrics\";\nimport { SECONDS_PER_YEAR } from \"../../time\";\nimport type { ReferralProgramAwardModels } from \"../shared/rules\";\nimport type { AggregatedReferrerMetricsRevShareLimit } from \"./aggregations\";\nimport { buildAggregatedReferrerMetricsRevShareLimit } from \"./aggregations\";\nimport { compareEventIds } from \"./checkpoint\";\nimport type { AwardedReferrerMetricsRevShareLimit } from \"./metrics\";\nimport {\n buildAwardedReferrerMetricsRevShareLimit,\n buildRankedReferrerMetricsRevShareLimit,\n buildReferrerMetricsRevShareLimit,\n} from \"./metrics\";\nimport type { ReferralEvent } from \"./referral-event\";\nimport {\n BASE_REVENUE_CONTRIBUTION_PER_YEAR,\n isReferrerQualifiedRevShareLimit,\n type ReferralProgramRulesRevShareLimit,\n} from \"./rules\";\n\n/**\n * Represents a leaderboard with the rev-share-limit award model for any number of referrers.\n */\nexport interface ReferrerLeaderboardRevShareLimit {\n /**\n * Discriminant identifying this as a rev-share-limit leaderboard.\n *\n * @invariant Always equals `rules.awardModel` ({@link ReferralProgramAwardModels.RevShareLimit}).\n */\n awardModel: typeof ReferralProgramAwardModels.RevShareLimit;\n\n /**\n * The rules of the referral program that generated the {@link ReferrerLeaderboardRevShareLimit}.\n */\n rules: ReferralProgramRulesRevShareLimit;\n\n /**\n * The {@link AggregatedReferrerMetricsRevShareLimit} for all {@link AwardedReferrerMetricsRevShareLimit} values in `referrers`.\n */\n aggregatedMetrics: AggregatedReferrerMetricsRevShareLimit;\n\n /**\n * Ordered map containing {@link AwardedReferrerMetricsRevShareLimit} for all referrers with 1 or more\n * `totalReferrals` within the `rules` as of `accurateAsOf`.\n *\n * @invariant Map entries are ordered by `rank` (ascending).\n * @invariant Map is empty if there are no referrers with 1 or more `totalReferrals`\n * within the `rules` as of `accurateAsOf`.\n * @invariant If a fully-lowercase `Address` is not a key in this map then that `Address` had\n * 0 `totalReferrals`, `totalIncrementalDuration`, and `totalRevenueContribution` within the\n * `rules` as of `accurateAsOf`.\n * @invariant Each value in this map is guaranteed to have a non-zero\n * `totalReferrals` and `totalIncrementalDuration`.\n */\n referrers: Map<Address, AwardedReferrerMetricsRevShareLimit>;\n\n /**\n * The {@link UnixTimestamp} of when the data used to build the {@link ReferrerLeaderboardRevShareLimit} was accurate as of.\n */\n accurateAsOf: UnixTimestamp;\n}\n\n/**\n * Per-referrer mutable state used during sequential race processing.\n */\ninterface ReferrerRaceState {\n totalReferrals: number;\n totalIncrementalDuration: Duration;\n totalRevenueContributionAmount: bigint;\n /** Whether this referrer has ever crossed the qualification threshold. */\n wasQualified: boolean;\n /** Amount actually claimed from the award pool. */\n qualifiedAwardValueAmount: bigint;\n}\n\n/**\n * Builds a {@link ReferrerLeaderboardRevShareLimit} using a sequential \"first-come, first-served\"\n * race algorithm over individual referral events.\n *\n * Events are processed in chronological order. When a referrer first crosses the qualification\n * threshold, they claim ALL accumulated standard award value at once (capped by remaining pool).\n * After qualifying, each subsequent event claims that event's incremental standard award (also\n * capped). Once the pool reaches $0, no further awards are issued to anyone.\n *\n * @param events - Raw referral events from the database (unsorted; will be sorted internally).\n * @param rules - The {@link ReferralProgramRulesRevShareLimit} defining the program parameters.\n * @param accurateAsOf - Timestamp indicating data freshness.\n */\nexport const buildReferrerLeaderboardRevShareLimit = (\n events: ReferralEvent[],\n rules: ReferralProgramRulesRevShareLimit,\n accurateAsOf: UnixTimestamp,\n): ReferrerLeaderboardRevShareLimit => {\n // 1. Sort events deterministically using the Ponder checkpoint ID.\n // The `id` encodes all ordering-relevant properties (blockTimestamp, chainId,\n // blockNumber, transactionIndex, eventIndex), so comparing IDs as bigints\n // (after zeroing the internal `eventType` digit) yields a total chronological order.\n const sortedEvents = [...events].sort((a, b) => compareEventIds(a.id, b.id));\n\n // 2. Process events sequentially to run the race.\n const referrerStates = new Map<Address, ReferrerRaceState>();\n let poolRemainingAmount = rules.totalAwardPoolValue.amount;\n\n for (const event of sortedEvents) {\n const referrer = normalizeAddress(event.referrer);\n\n let state = referrerStates.get(referrer);\n if (!state) {\n state = {\n totalReferrals: 0,\n totalIncrementalDuration: 0,\n totalRevenueContributionAmount: 0n,\n wasQualified: false,\n qualifiedAwardValueAmount: 0n,\n };\n referrerStates.set(referrer, state);\n }\n\n // Update raw totals.\n state.totalReferrals += 1;\n state.totalIncrementalDuration += event.incrementalDuration;\n state.totalRevenueContributionAmount += event.incrementalRevenueContribution.amount;\n\n // Compute totalBaseRevenue from aggregated duration (single division — avoids per-event\n // truncation that would compound into a sum lower than the correct aggregated value).\n const totalBaseRevenueAmount =\n (BASE_REVENUE_CONTRIBUTION_PER_YEAR.amount * BigInt(state.totalIncrementalDuration)) /\n BigInt(SECONDS_PER_YEAR);\n\n // Determine if newly qualifying or already qualified.\n const isNowQualified = isReferrerQualifiedRevShareLimit(\n referrer,\n priceUsdc(totalBaseRevenueAmount),\n rules,\n );\n\n if (isNowQualified && !state.wasQualified) {\n // First time crossing the qualification threshold: claim all accumulated standard award.\n // Compute from aggregated totals to match the single-division used in final output.\n const accumulatedStandardAwardAmount = scalePrice(\n priceUsdc(totalBaseRevenueAmount),\n rules.qualifiedRevenueShare,\n ).amount;\n const claimAmount =\n accumulatedStandardAwardAmount < poolRemainingAmount\n ? accumulatedStandardAwardAmount\n : poolRemainingAmount;\n state.qualifiedAwardValueAmount += claimAmount;\n poolRemainingAmount -= claimAmount;\n state.wasQualified = true;\n } else if (state.wasQualified) {\n // Already qualified: claim this event's incremental standard award.\n const incrementalBaseRevenueAmount =\n (BASE_REVENUE_CONTRIBUTION_PER_YEAR.amount * BigInt(event.incrementalDuration)) /\n BigInt(SECONDS_PER_YEAR);\n const incrementalStandardAwardAmount = scalePrice(\n priceUsdc(incrementalBaseRevenueAmount),\n rules.qualifiedRevenueShare,\n ).amount;\n const claimAmount =\n incrementalStandardAwardAmount < poolRemainingAmount\n ? incrementalStandardAwardAmount\n : poolRemainingAmount;\n state.qualifiedAwardValueAmount += claimAmount;\n poolRemainingAmount -= claimAmount;\n }\n // If not yet qualified, nothing is claimed from the pool.\n }\n\n // 3. Sort referrers to assign ranks:\n // 1. qualifiedAwardValue (awardPoolApproxValue) desc — actual pool claims, race winners first\n // 2. totalIncrementalDuration desc — tie-break for pool-depleted referrers\n // 3. referrer address desc — deterministic tie-break\n // Both `a` and `b` are keys from `referrerStates`, so lookups are always defined.\n const sortedAddresses = [...referrerStates.keys()].sort((a, b) => {\n const stateA = referrerStates.get(a) as ReferrerRaceState;\n const stateB = referrerStates.get(b) as ReferrerRaceState;\n\n // Primary: qualifiedAwardValue desc (bigint comparison)\n if (stateB.qualifiedAwardValueAmount !== stateA.qualifiedAwardValueAmount) {\n return stateB.qualifiedAwardValueAmount > stateA.qualifiedAwardValueAmount ? 1 : -1;\n }\n\n // Secondary: totalIncrementalDuration desc (used directly as the tie-breaker).\n if (stateB.totalIncrementalDuration !== stateA.totalIncrementalDuration) {\n return stateB.totalIncrementalDuration - stateA.totalIncrementalDuration;\n }\n\n // Tertiary: referrer address desc (lexicographic)\n if (b > a) return 1;\n if (b < a) return -1;\n return 0;\n });\n\n // 4. Build AwardedReferrerMetricsRevShareLimit for each referrer.\n const awardedReferrers: AwardedReferrerMetricsRevShareLimit[] = sortedAddresses.map(\n (referrerAddr, index) => {\n // `sortedAddresses` is derived directly from `referrerStates.keys()`, so\n // the state entry is always present.\n const state = referrerStates.get(referrerAddr) as ReferrerRaceState;\n\n const baseMetrics = buildReferrerMetrics(\n referrerAddr,\n state.totalReferrals,\n state.totalIncrementalDuration,\n priceEth(state.totalRevenueContributionAmount),\n );\n\n const revShareMetrics = buildReferrerMetricsRevShareLimit(baseMetrics);\n\n const rankedMetrics = buildRankedReferrerMetricsRevShareLimit(\n revShareMetrics,\n index + 1,\n rules,\n );\n\n const standardAwardValue = scalePrice(\n revShareMetrics.totalBaseRevenueContribution,\n rules.qualifiedRevenueShare,\n );\n\n return buildAwardedReferrerMetricsRevShareLimit(\n rankedMetrics,\n standardAwardValue,\n priceUsdc(state.qualifiedAwardValueAmount),\n rules,\n );\n },\n );\n\n const awardPoolRemaining = priceUsdc(poolRemainingAmount);\n\n const aggregatedMetrics = buildAggregatedReferrerMetricsRevShareLimit(\n awardedReferrers,\n awardPoolRemaining,\n );\n\n const referrers = new Map(awardedReferrers.map((r) => [r.referrer, r]));\n\n return { awardModel: rules.awardModel, rules, aggregatedMetrics, referrers, accurateAsOf };\n};\n","import { calcReferralProgramStatus } from \"../../status\";\nimport {\n type BaseReferrerLeaderboardPage,\n type ReferrerLeaderboardPageContext,\n sliceReferrers,\n} from \"../shared/leaderboard-page\";\nimport type { ReferralProgramAwardModels } from \"../shared/rules\";\nimport type { AggregatedReferrerMetricsRevShareLimit } from \"./aggregations\";\nimport type { ReferrerLeaderboardRevShareLimit } from \"./leaderboard\";\nimport type { AwardedReferrerMetricsRevShareLimit } from \"./metrics\";\nimport type { ReferralProgramRulesRevShareLimit } from \"./rules\";\n\n/**\n * A page of referrers from the rev-share-limit referrer leaderboard.\n */\nexport interface ReferrerLeaderboardPageRevShareLimit extends BaseReferrerLeaderboardPage {\n /**\n * Discriminant identifying this as a page from a rev-share-limit leaderboard.\n *\n * @invariant Always equals `rules.awardModel` ({@link ReferralProgramAwardModels.RevShareLimit}).\n */\n awardModel: typeof ReferralProgramAwardModels.RevShareLimit;\n\n /**\n * The {@link ReferralProgramRulesRevShareLimit} used to generate the {@link ReferrerLeaderboardRevShareLimit}\n * that this {@link ReferrerLeaderboardPageRevShareLimit} comes from.\n */\n rules: ReferralProgramRulesRevShareLimit;\n\n /**\n * Ordered list of {@link AwardedReferrerMetricsRevShareLimit} for the {@link ReferrerLeaderboardPageRevShareLimit}\n * described by {@link pageContext} within the related {@link ReferrerLeaderboard}.\n *\n * @invariant Array will be empty if `pageContext.totalRecords` is 0.\n * @invariant Array entries are ordered by `rank` (ascending).\n */\n referrers: AwardedReferrerMetricsRevShareLimit[];\n\n /**\n * The aggregated metrics for all referrers on the leaderboard.\n */\n aggregatedMetrics: AggregatedReferrerMetricsRevShareLimit;\n}\n\nexport function buildLeaderboardPageRevShareLimit(\n pageContext: ReferrerLeaderboardPageContext,\n leaderboard: ReferrerLeaderboardRevShareLimit,\n): ReferrerLeaderboardPageRevShareLimit {\n const status = calcReferralProgramStatus(leaderboard.rules, leaderboard.accurateAsOf);\n return {\n awardModel: leaderboard.awardModel,\n rules: leaderboard.rules,\n referrers: sliceReferrers(leaderboard.referrers, pageContext),\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n pageContext,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n };\n}\n","import type { ReferralProgramRules } from \"./rules\";\n\n/**\n * Referral program edition slug.\n *\n * A URL-safe identifier for a referral program edition. Each edition represents\n * a distinct referral program period with its own rules, leaderboard, and\n * award distribution.\n *\n * @invariant Must contain only lowercase letters (a-z), digits (0-9), and hyphens (-).\n * Must not start or end with a hyphen. Pattern: `^[a-z0-9]+(-[a-z0-9]+)*$`\n *\n * @example \"2025-12\" // December 2025 edition\n * @example \"2026-03\" // March 2026 edition\n * @example \"holiday-special\" // Custom named edition\n */\nexport type ReferralProgramEditionSlug = string;\n\n/**\n * Represents a referral program edition configuration.\n */\nexport interface ReferralProgramEditionConfig {\n /**\n * Unique slug identifier for the edition.\n */\n slug: ReferralProgramEditionSlug;\n\n /**\n * Human-readable display name for the edition.\n * @example \"ENS Holiday Awards\"\n */\n displayName: string;\n\n /**\n * The rules that govern this referral program edition.\n */\n rules: ReferralProgramRules;\n}\n\n/**\n * A map from edition slug to edition configuration.\n *\n * Used to store and look up all configured referral program editions.\n *\n * @invariant For each key-value pair in the map, the key must equal the value's slug property.\n * That is, for all entries: `map.get(key)?.slug === key`\n */\nexport type ReferralProgramEditionConfigSet = Map<\n ReferralProgramEditionSlug,\n ReferralProgramEditionConfig\n>;\n\n/**\n * Validates that a ReferralProgramEditionConfigSet maintains the invariant\n * that each map key equals the corresponding config's slug.\n *\n * @param configSet - The edition config set to validate\n * @throws {Error} If any entry violates the invariant (key !== value.slug)\n */\nexport function validateReferralProgramEditionConfigSet(\n configSet: ReferralProgramEditionConfigSet,\n): void {\n const violation = Array.from(configSet.entries()).find(([key, config]) => key !== config.slug);\n\n if (violation) {\n const [key, config] = violation;\n throw new Error(\n `Edition config set invariant violation: map key \"${key}\" does not match config.slug \"${config.slug}\"`,\n );\n }\n}\n\n/**\n * Builds a new ReferralProgramEditionConfigSet from an array of configs and validates the invariant.\n *\n * @param configs - Array of edition configurations to add to the set\n * @returns A validated edition config set\n * @throws {Error} If duplicate slugs are detected or if any config would violate the invariant\n */\nexport function buildReferralProgramEditionConfigSet(\n configs: ReferralProgramEditionConfig[],\n): ReferralProgramEditionConfigSet {\n // Check for duplicate slugs before creating the Map\n const slugCounts = configs.reduce((counts, config) => {\n counts.set(config.slug, (counts.get(config.slug) || 0) + 1);\n return counts;\n }, new Map<ReferralProgramEditionSlug, number>());\n\n const duplicates = Array.from(slugCounts.entries())\n .filter(([_, count]) => count > 1)\n .map(([slug, count]) => `\"${slug}\" (${count} occurrences)`);\n\n if (duplicates.length > 0) {\n throw new Error(`Duplicate edition config slugs detected: ${duplicates.join(\", \")}`);\n }\n\n const configSet = new Map(configs.map((config) => [config.slug, config]));\n validateReferralProgramEditionConfigSet(configSet);\n return configSet;\n}\n","import {\n deserializeReferralProgramEditionConfigSetArray,\n deserializeReferralProgramEditionConfigSetResponse,\n deserializeReferrerLeaderboardPageResponse,\n deserializeReferrerMetricsEditionsResponse,\n type ReferralProgramEditionConfigSetResponse,\n type ReferrerLeaderboardPageRequest,\n type ReferrerLeaderboardPageResponse,\n type ReferrerMetricsEditionsRequest,\n type ReferrerMetricsEditionsResponse,\n type SerializedReferralProgramEditionConfigSetResponse,\n type SerializedReferrerLeaderboardPageResponse,\n type SerializedReferrerMetricsEditionsResponse,\n} from \"./api\";\nimport {\n buildReferralProgramEditionConfigSet,\n type ReferralProgramEditionConfigSet,\n} from \"./edition\";\n\n/**\n * Default ENSNode API endpoint URL\n */\nexport const DEFAULT_ENSNODE_API_URL = \"https://api.alpha.ensnode.io\" as const;\n\n/**\n * Configuration options for ENS Referrals API client\n */\nexport interface ClientOptions {\n /** The ENSNode API URL */\n url: URL;\n}\n\n/**\n * ENS Referrals API Client\n *\n * Provides access to ENS Referrals data and leaderboard information.\n *\n * @example\n * ```typescript\n * // Create client with default options\n * const client = new ENSReferralsClient();\n *\n * // Get referrer leaderboard for December 2025 edition\n * const leaderboardPage = await client.getReferrerLeaderboardPage({\n * edition: \"2025-12\",\n * page: 1,\n * recordsPerPage: 25\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Custom configuration\n * const client = new ENSReferralsClient({\n * url: new URL(\"https://my-ensnode-instance.com\"),\n * });\n * ```\n */\nexport class ENSReferralsClient {\n private readonly options: ClientOptions;\n\n static defaultOptions(): ClientOptions {\n return {\n url: new URL(DEFAULT_ENSNODE_API_URL),\n };\n }\n\n constructor(options: Partial<ClientOptions> = {}) {\n this.options = {\n ...ENSReferralsClient.defaultOptions(),\n ...options,\n };\n }\n\n getOptions(): Readonly<ClientOptions> {\n return Object.freeze({\n url: new URL(this.options.url.href),\n });\n }\n\n /**\n * Get Referral Program Edition Config Set\n *\n * Fetches and deserializes a referral program edition config set from a remote URL.\n *\n * @param url - The URL to fetch the edition config set from\n * @returns A ReferralProgramEditionConfigSet (Map of edition slugs to edition configurations)\n *\n * @remarks Editions whose `rules.awardModel` is not recognized by this client version are\n * preserved as {@link ReferralProgramRulesUnrecognized}. The returned map includes all\n * editions — recognized and unrecognized alike. Callers should check `editionConfig.rules.awardModel`\n * and skip editions with `\"unrecognized\"` as appropriate. At least one edition of any kind must\n * be present, otherwise deserialization throws.\n *\n * @throws if the fetch fails\n * @throws if the response is not valid JSON\n * @throws if the data doesn't match the expected schema\n *\n * @example\n * ```typescript\n * const url = new URL(\"https://example.com/editions.json\");\n * const editionConfigSet = await ENSReferralsClient.getReferralProgramEditionConfigSet(url);\n * console.log(`Loaded ${editionConfigSet.size} editions`);\n * ```\n */\n static async getReferralProgramEditionConfigSet(\n url: URL,\n ): Promise<ReferralProgramEditionConfigSet> {\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new Error(\"Malformed response data: invalid JSON\");\n }\n\n const editionConfigs = deserializeReferralProgramEditionConfigSetArray(json);\n\n return buildReferralProgramEditionConfigSet(editionConfigs);\n }\n\n /**\n * Fetch Referrer Leaderboard Page\n *\n * Retrieves a paginated list of referrer leaderboard metrics for a specific referral program edition.\n *\n * @param request - Request parameters including edition and pagination\n * @param request.edition - The referral program edition slug (e.g., \"2025-12\", \"2026-03\", or any other configured edition slug)\n * @param request.page - The page number to retrieve (1-indexed, default: 1)\n * @param request.recordsPerPage - Number of records per page (default: 25, max: 100)\n * @returns {ReferrerLeaderboardPageResponse}\n *\n * @throws if the ENSNode request fails\n * @throws if the ENSNode API returns an error response\n * @throws if the ENSNode response breaks required invariants\n * @throws if the requested edition uses an award model not recognized by this version of\n * the client. Call {@link getEditionConfigSet} first to verify the edition's `awardModel`\n * is supported before requesting its leaderboard.\n *\n * @example\n * ```typescript\n * // Get first page of 2025-12 leaderboard with default page size (25 records)\n * const editionSlug = \"2025-12\";\n * const response = await client.getReferrerLeaderboardPage({ edition: editionSlug });\n * if (response.responseCode === ReferrerLeaderboardPageResponseCodes.Ok) {\n * const {\n * aggregatedMetrics,\n * referrers,\n * rules,\n * pageContext,\n * accurateAsOf\n * } = response.data;\n * console.log(`Edition: ${editionSlug}`);\n * console.log(`Subregistry: ${rules.subregistryId}`);\n * console.log(`Total Referrers: ${pageContext.totalRecords}`);\n * console.log(`Page ${pageContext.page} of ${pageContext.totalPages}`);\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Get second page of 2026-03 with 50 records per page\n * const response = await client.getReferrerLeaderboardPage({\n * edition: \"2026-03\",\n * page: 2,\n * recordsPerPage: 50\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Handle error response (e.g., unknown edition or data not available)\n * const response = await client.getReferrerLeaderboardPage({ edition: \"2025-12\" });\n *\n * if (response.responseCode === ReferrerLeaderboardPageResponseCodes.Error) {\n * console.error(response.error);\n * console.error(response.errorMessage);\n * }\n * ```\n */\n async getReferrerLeaderboardPage(\n request: ReferrerLeaderboardPageRequest,\n ): Promise<ReferrerLeaderboardPageResponse> {\n const url = new URL(`/v1/ensanalytics/referral-leaderboard`, this.options.url);\n\n url.searchParams.set(\"edition\", request.edition);\n if (request.page) url.searchParams.set(\"page\", request.page.toString());\n if (request.recordsPerPage)\n url.searchParams.set(\"recordsPerPage\", request.recordsPerPage.toString());\n\n const response = await fetch(url);\n\n // ENSNode API should always allow parsing a response as JSON object.\n // If for some reason it's not the case, throw an error.\n let responseData: unknown;\n try {\n responseData = await response.json();\n } catch {\n throw new Error(\"Malformed response data: invalid JSON\");\n }\n\n // The API can return errors with various status codes, but they're still in the\n // ReferrerLeaderboardPageResponse format with responseCode: 'error'\n // So we don't need to check response.ok here, just deserialize and let\n // the caller handle the responseCode\n\n return deserializeReferrerLeaderboardPageResponse(\n responseData as SerializedReferrerLeaderboardPageResponse,\n );\n }\n\n /**\n * Fetch Referrer Metrics for Specific Editions\n *\n * Retrieves detailed information about a specific referrer for the requested\n * referral program editions. Returns a record mapping each requested edition slug\n * to the referrer's metrics for that edition.\n *\n * The response data maps edition slugs to referrer metrics. Each edition's data is a\n * discriminated union type with a `type` field:\n *\n * **For referrers on the leaderboard** (`ReferrerEditionMetricsRanked`):\n * - `type`: {@link ReferrerEditionMetricsTypeIds.Ranked}\n * - `referrer`: The `AwardedReferrerMetrics` with rank, qualification status, and award share\n * - `rules`: The referral program rules for this edition\n * - `aggregatedMetrics`: Aggregated metrics for all referrers on the leaderboard\n * - `accurateAsOf`: Unix timestamp indicating when the data was last updated\n *\n * **For referrers NOT on the leaderboard** (`ReferrerEditionMetricsUnranked`):\n * - `type`: {@link ReferrerEditionMetricsTypeIds.Unranked}\n * - `referrer`: The `UnrankedReferrerMetrics` from @namehash/ens-referrals\n * - `rules`: The referral program rules for this edition\n * - `aggregatedMetrics`: Aggregated metrics for all referrers on the leaderboard\n * - `accurateAsOf`: Unix timestamp indicating when the data was last updated\n *\n * **Note:** This endpoint does not allow partial success. When `responseCode === Ok`,\n * all requested editions are guaranteed to be present in the response data. If any\n * requested edition cannot be returned, the entire request fails with an error.\n *\n * @see {@link https://www.npmjs.com/package/@namehash/ens-referrals|@namehash/ens-referrals} for calculation details\n *\n * @param request The referrer address and edition slugs to query\n * @returns {ReferrerMetricsEditionsResponse} Returns the referrer metrics for requested editions\n *\n * @throws if the ENSNode request fails\n * @throws if the response data is malformed\n * @throws if any of the requested editions use an award model not recognized by this\n * version of the client. Call {@link getEditionConfigSet} first to verify each\n * edition's `awardModel` is supported before requesting metrics.\n *\n * @example\n * ```typescript\n * // Get referrer metrics for specific editions\n * const response = await client.getReferrerMetricsEditions({\n * referrer: \"0x1234567890123456789012345678901234567890\",\n * editions: [\"2025-12\", \"2026-01\"]\n * });\n * if (response.responseCode === ReferrerMetricsEditionsResponseCodes.Ok) {\n * // All requested editions are present in response.data\n * for (const [editionSlug, detail] of Object.entries(response.data)) {\n * console.log(`Edition: ${editionSlug}`);\n * console.log(`Type: ${detail.type}`);\n * if (detail.type === ReferrerEditionMetricsTypeIds.Ranked) {\n * console.log(`Rank: ${detail.referrer.rank}`);\n * console.log(`Award Share: ${detail.referrer.awardPoolShare * 100}%`);\n * }\n * }\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Access specific edition data directly (edition is guaranteed to exist when OK)\n * const response = await client.getReferrerMetricsEditions({\n * referrer: \"0x1234567890123456789012345678901234567890\",\n * editions: [\"2025-12\"]\n * });\n * if (response.responseCode === ReferrerMetricsEditionsResponseCodes.Ok) {\n * const edition202512Detail = response.data[\"2025-12\"];\n * if (edition202512Detail && edition202512Detail.type === ReferrerEditionMetricsTypeIds.Ranked) {\n * // TypeScript knows this is ReferrerEditionMetricsRanked\n * console.log(`Edition 2025-12 Rank: ${edition202512Detail.referrer.rank}`);\n * } else if (edition202512Detail) {\n * // TypeScript knows this is ReferrerEditionMetricsUnranked\n * console.log(\"Referrer is not on the leaderboard for 2025-12\");\n * }\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Handle error response (e.g., unknown edition or data not available)\n * const response = await client.getReferrerMetricsEditions({\n * referrer: \"0x1234567890123456789012345678901234567890\",\n * editions: [\"2025-12\", \"invalid-edition\"]\n * });\n *\n * if (response.responseCode === ReferrerMetricsEditionsResponseCodes.Error) {\n * console.error(response.error);\n * console.error(response.errorMessage);\n * }\n * ```\n */\n async getReferrerMetricsEditions(\n request: ReferrerMetricsEditionsRequest,\n ): Promise<ReferrerMetricsEditionsResponse> {\n const url = new URL(\n `/v1/ensanalytics/referrer/${encodeURIComponent(request.referrer)}`,\n this.options.url,\n );\n\n // Add editions as comma-separated query parameter\n url.searchParams.set(\"editions\", request.editions.join(\",\"));\n\n const response = await fetch(url);\n\n // ENSNode API should always allow parsing a response as JSON object.\n // If for some reason it's not the case, throw an error.\n let responseData: unknown;\n try {\n responseData = await response.json();\n } catch {\n throw new Error(\"Malformed response data: invalid JSON\");\n }\n\n // The API can return errors with various status codes, but they're still in the\n // ReferrerMetricsEditionsResponse format with responseCode: 'error'\n // So we don't need to check response.ok here, just deserialize and let\n // the caller handle the responseCode\n\n return deserializeReferrerMetricsEditionsResponse(\n responseData as SerializedReferrerMetricsEditionsResponse,\n );\n }\n\n /**\n * Get the currently configured referral program edition config set.\n * Editions are sorted in descending order by start timestamp (most recent first).\n *\n * @returns A response containing the edition config set, or an error response if unavailable.\n *\n * @remarks Editions whose `rules.awardModel` is not recognized by this client version are\n * preserved as {@link ReferralProgramRulesUnrecognized}. The returned map includes all\n * editions — recognized and unrecognized alike. Callers should check `editionConfig.rules.awardModel`\n * and skip editions with `\"unrecognized\"` as appropriate. At least one edition of any kind must\n * be present, otherwise deserialization throws.\n *\n * @example\n * ```typescript\n * const response = await client.getEditionConfigSet();\n *\n * if (response.responseCode === ReferralProgramEditionConfigSetResponseCodes.Ok) {\n * console.log(`Found ${response.data.editions.length} editions`);\n * for (const edition of response.data.editions) {\n * console.log(`${edition.slug}: ${edition.displayName}`);\n * }\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Handle error response\n * const response = await client.getEditionConfigSet();\n *\n * if (response.responseCode === ReferralProgramEditionConfigSetResponseCodes.Error) {\n * console.error(response.error);\n * console.error(response.errorMessage);\n * }\n * ```\n */\n async getEditionConfigSet(): Promise<ReferralProgramEditionConfigSetResponse> {\n const url = new URL(`/v1/ensanalytics/editions`, this.options.url);\n\n const response = await fetch(url);\n\n // ENSNode API should always allow parsing a response as JSON object.\n // If for some reason it's not the case, throw an error.\n let responseData: unknown;\n try {\n responseData = await response.json();\n } catch {\n throw new Error(\"Malformed response data: invalid JSON\");\n }\n\n // The API can return errors with various status codes, but they're still in the\n // ReferralProgramEditionConfigSetResponse format with responseCode: 'error'\n // So we don't need to check response.ok here, just deserialize and let\n // the caller handle the responseCode\n\n return deserializeReferralProgramEditionConfigSetResponse(\n responseData as SerializedReferralProgramEditionConfigSetResponse,\n );\n }\n}\n","import {\n type ENSNamespaceId,\n getEthnamesSubregistryId,\n parseTimestamp,\n parseUsdc,\n} from \"@ensnode/ensnode-sdk\";\n\nimport { buildReferralProgramRulesPieSplit } from \"./award-models/pie-split/rules\";\nimport { buildReferralProgramRulesRevShareLimit } from \"./award-models/rev-share-limit/rules\";\nimport {\n buildReferralProgramEditionConfigSet,\n type ReferralProgramEditionConfig,\n type ReferralProgramEditionConfigSet,\n} from \"./edition\";\n\n/**\n * Returns the default referral program edition set with pre-built edition configurations.\n *\n * This function maps from an ENS namespace to the appropriate subregistry (BaseRegistrar)\n * and builds the default referral program editions for that namespace.\n *\n * @param ensNamespaceId - The ENS namespace slug to get the default editions for\n * @returns A map of edition slugs to their pre-built edition configurations\n * @throws Error if the subregistry contract is not found for the given namespace\n */\nexport function getDefaultReferralProgramEditionConfigSet(\n ensNamespaceId: ENSNamespaceId,\n): ReferralProgramEditionConfigSet {\n const subregistryId = getEthnamesSubregistryId(ensNamespaceId);\n\n const edition1: ReferralProgramEditionConfig = {\n slug: \"2025-12\",\n displayName: \"ENS Holiday Awards\",\n rules: buildReferralProgramRulesPieSplit(\n parseUsdc(\"10000\"),\n 10,\n parseTimestamp(\"2025-12-01T00:00:00Z\"),\n parseTimestamp(\"2025-12-31T23:59:59Z\"),\n subregistryId,\n new URL(\"https://ensawards.org/ens-holiday-awards-rules\"),\n ),\n };\n\n const edition2: ReferralProgramEditionConfig = {\n slug: \"2026-03\",\n displayName: \"March 2026\",\n rules: buildReferralProgramRulesRevShareLimit(\n parseUsdc(\"10000\"),\n parseUsdc(\"500\"),\n 0.5,\n parseTimestamp(\"2026-03-01T00:00:00Z\"),\n parseTimestamp(\"2026-03-31T23:59:59Z\"),\n subregistryId,\n // TODO: replace this with the dedicated March 2026 rules URL once published\n new URL(\"https://ensawards.org/ens-holiday-awards-rules\"),\n [],\n ),\n };\n\n return buildReferralProgramEditionConfigSet([edition1, edition2]);\n}\n","import type { Address } from \"viem\";\n\nimport type {\n ReferrerEditionMetricsRankedPieSplit,\n ReferrerEditionMetricsUnrankedPieSplit,\n} from \"./award-models/pie-split/edition-metrics\";\nimport { buildUnrankedReferrerMetricsPieSplit } from \"./award-models/pie-split/metrics\";\nimport type {\n ReferrerEditionMetricsRankedRevShareLimit,\n ReferrerEditionMetricsUnrankedRevShareLimit,\n} from \"./award-models/rev-share-limit/edition-metrics\";\nimport { buildUnrankedReferrerMetricsRevShareLimit } from \"./award-models/rev-share-limit/metrics\";\nimport { ReferrerEditionMetricsTypeIds } from \"./award-models/shared/edition-metrics\";\nimport { ReferralProgramAwardModels } from \"./award-models/shared/rules\";\nimport type { ReferrerLeaderboard } from \"./leaderboard\";\nimport { calcReferralProgramStatus } from \"./status\";\n\n/**\n * Referrer edition metrics data for a specific referrer address on the leaderboard.\n *\n * Use `awardModel` to narrow the specific model variant at runtime.\n */\nexport type ReferrerEditionMetricsRanked =\n | ReferrerEditionMetricsRankedPieSplit\n | ReferrerEditionMetricsRankedRevShareLimit;\n\n/**\n * Referrer edition metrics data for a specific referrer address NOT on the leaderboard.\n *\n * Use `awardModel` to narrow the specific model variant at runtime.\n */\nexport type ReferrerEditionMetricsUnranked =\n | ReferrerEditionMetricsUnrankedPieSplit\n | ReferrerEditionMetricsUnrankedRevShareLimit;\n\n/**\n * Referrer edition metrics data for a specific referrer address.\n *\n * Use `type` to determine if the referrer is ranked or unranked.\n * Use `awardModel` to narrow the award model variant.\n */\nexport type ReferrerEditionMetrics = ReferrerEditionMetricsRanked | ReferrerEditionMetricsUnranked;\n\n/**\n * Get the edition metrics for a specific referrer from the leaderboard.\n *\n * Returns a {@link ReferrerEditionMetricsRanked} if the referrer is on the leaderboard,\n * or a {@link ReferrerEditionMetricsUnranked} if the referrer has no referrals.\n *\n * @param referrer - The referrer address to look up\n * @param leaderboard - The referrer leaderboard to query\n * @returns The appropriate {@link ReferrerEditionMetrics} (ranked or unranked)\n */\nexport const getReferrerEditionMetrics = (\n referrer: Address,\n leaderboard: ReferrerLeaderboard,\n): ReferrerEditionMetrics => {\n const status = calcReferralProgramStatus(leaderboard.rules, leaderboard.accurateAsOf);\n\n switch (leaderboard.awardModel) {\n case ReferralProgramAwardModels.PieSplit: {\n const awardedReferrerMetrics = leaderboard.referrers.get(referrer);\n if (awardedReferrerMetrics) {\n return {\n awardModel: leaderboard.awardModel,\n type: ReferrerEditionMetricsTypeIds.Ranked,\n rules: leaderboard.rules,\n referrer: awardedReferrerMetrics,\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n } satisfies ReferrerEditionMetricsRankedPieSplit;\n }\n return {\n awardModel: leaderboard.awardModel,\n type: ReferrerEditionMetricsTypeIds.Unranked,\n rules: leaderboard.rules,\n referrer: buildUnrankedReferrerMetricsPieSplit(referrer),\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n } satisfies ReferrerEditionMetricsUnrankedPieSplit;\n }\n\n case ReferralProgramAwardModels.RevShareLimit: {\n const awardedReferrerMetrics = leaderboard.referrers.get(referrer);\n if (awardedReferrerMetrics) {\n return {\n awardModel: leaderboard.awardModel,\n type: ReferrerEditionMetricsTypeIds.Ranked,\n rules: leaderboard.rules,\n referrer: awardedReferrerMetrics,\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n } satisfies ReferrerEditionMetricsRankedRevShareLimit;\n }\n return {\n awardModel: leaderboard.awardModel,\n type: ReferrerEditionMetricsTypeIds.Unranked,\n rules: leaderboard.rules,\n referrer: buildUnrankedReferrerMetricsRevShareLimit(referrer, leaderboard.rules),\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n } satisfies ReferrerEditionMetricsUnrankedRevShareLimit;\n }\n }\n};\n","import {\n buildLeaderboardPagePieSplit,\n type ReferrerLeaderboardPagePieSplit,\n} from \"./award-models/pie-split/leaderboard-page\";\nimport {\n buildLeaderboardPageRevShareLimit,\n type ReferrerLeaderboardPageRevShareLimit,\n} from \"./award-models/rev-share-limit/leaderboard-page\";\nimport {\n buildReferrerLeaderboardPageContext,\n type ReferrerLeaderboardPageParams,\n} from \"./award-models/shared/leaderboard-page\";\nimport { ReferralProgramAwardModels } from \"./award-models/shared/rules\";\nimport type { ReferrerLeaderboard } from \"./leaderboard\";\n\n/**\n * A page of referrers from the referrer leaderboard.\n *\n * Use `awardModel` to narrow the specific variant at runtime. Within each variant,\n * `rules`, `referrers`, and `aggregatedMetrics` are all guaranteed to be from the same model.\n */\nexport type ReferrerLeaderboardPage =\n | ReferrerLeaderboardPagePieSplit\n | ReferrerLeaderboardPageRevShareLimit;\n\nexport const getReferrerLeaderboardPage = (\n pageParams: ReferrerLeaderboardPageParams,\n leaderboard: ReferrerLeaderboard,\n): ReferrerLeaderboardPage => {\n const pageContext = buildReferrerLeaderboardPageContext(pageParams, leaderboard);\n\n switch (leaderboard.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return buildLeaderboardPagePieSplit(pageContext, leaderboard);\n case ReferralProgramAwardModels.RevShareLimit:\n return buildLeaderboardPageRevShareLimit(pageContext, leaderboard);\n }\n};\n","import { type Address, getAddress } from \"viem\";\n\n/**\n * Build a URL to the official ENS manager app\n * where the given {@link Address} is set as the referrer.\n */\nexport function buildEnsReferralUrl(address: Address): URL {\n const ensAppUrl = new URL(\"https://app.ens.domains\");\n\n ensAppUrl.searchParams.set(\"referrer\", getAddress(address));\n\n return ensAppUrl;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,kBAAwC;AAEjC,IAAM,2BAA2B,CAAC,YAA2B;AAClE,MAAI,KAAC,uBAAU,SAAS,EAAE,QAAQ,MAAM,CAAC,GAAG;AAC1C,UAAM,IAAI,MAAM,oBAAoB,OAAO,wCAAwC;AAAA,EACrF;AAEA,MAAI,YAAY,QAAQ,YAAY,GAAG;AACrC,UAAM,IAAI,MAAM,oBAAoB,OAAO,wCAAwC;AAAA,EACrF;AACF;AAEO,IAAM,mBAAmB,CAAC,YAA8B;AAC7D,SAAO,QAAQ,YAAY;AAC7B;;;ACdA,IAAAA,aAA8B;;;ACS9B,IAAAC,aAAc;;;;;;;;;;;;;;;;;ACPd,IAAMC,QAAwB;EAC5BC,MAAM;EACNC,OAAO;EACPC,YAAY;IACVC,WAAW;IACXC,QAAQ;MACN,GAAG;QACDJ,MAAM;QACNC,OAAO;MAFN;MAIH,GAAG;QACDD,MAAM;QACNC,OAAO;MAFN;IALG;EAFE;AAHgB;AAkB9B,IAAMI,SAAyB;EAC7BL,MAAM;EACNC,OAAO;EACPC,YAAY;IACVC,WAAW;IACXC,QAAQ;MACN,GAAG;QACDJ,MAAM;QACNC,OAAO;MAFN;MAIH,GAAG;QACDD,MAAM;QACNC,OAAO;MAFN;MAIH,GAAG;QACDD,MAAM;QACNC,OAAO;MAFN;IATG;EAFE;AAHiB;AAuB/B,IAAMK,cAA4B;EAChCN,MAAM;EACNC,OAAO;EACPC,YAAY;IACVC,WAAW;IACXC,QAAQ;MACN,GAAG;QACDJ,MAAM;QACNC,OAAO;MAFN;MAIH,GAAG;QACDD,MAAM;QACNC,OAAO;MAFN;IALG;EAFE;AAHoB;AAkBlC,IAAMM,kBAAkC;EACtCP,MAAM;EACNC,OAAO;EACPC,YAAY;IACVC,WAAW;IACXC,QAAQ;MACN,GAAGL;MACH,GAAGO;IAFG;EAFE;AAH0B;AAYxC,IAAME,gBAAgC;EACpCR,MAAM;EACNC,OAAO;EACPC,YAAY;IACVC,WAAW;IACXC,QAAQ;MACN,GAAGL;MACH,GAAGO;MACH,GAAG;QACDN,MAAM;QACNC,OAAO;MAFN;IAHG;EAFE;AAHwB;AAgB/B,IAAMQ,OAAO;EAClB,KAAKV;EACL,MAAMM;EACN,MAAM;IACJK,WAAWJ;IACXK,WAAWJ;IACXK,SAASJ;EAHL;AAHY;SCvFJK,YAAYC,IAAYC,MAAAA;AACtC,SAAOD,GAAGE,MAAMD,KAAKb,WAAWC,SAAzB;AACR;SAEec,UAAaH,IAAYC,MAAAA;AACvC,MAAMG,MAAML,YAAYC,IAAIC,IAAL;AACvB,MAAMI,SAAS,CAAA;AACfD,MAAIE,QAAQ,SAACC,OAAOC,OAAR;AACVH,WAAOJ,KAAKb,WAAWE,OAAOkB,KAAvB,EAA8BtB,IAA/B,IAAuCqB;EAC9C,CAFD;AAGA,SAAOF;AACR;SAEeI,WAAWJ,QAAgBJ,MAAAA;AACzC,SAAOS,OAAOpB,OAAOW,KAAKb,WAAWE,MAA9B,EACJqB,IAAI,SAAAC,WAAS;AACZ,QAAMC,QAAQR,OAAOO,UAAU1B,IAAX;AACpB,WAAO,OAAO2B,UAAU,WACpBA,QACAJ,WAAWI,OAAOD,SAAR;EACf,CANI,EAOJE,KAAKb,KAAKb,WAAWC,SAPjB;AAQR;SAEe0B,UAAUf,IAAYC,MAAAA;AAIpC,MAAI,CAAC,IAAIe,OAAOf,KAAKd,KAAhB,EAAuB8B,KAAKjB,EAA5B,EAAiC,QAAO;AAG7C,MAAMK,SAASN,YAAYC,IAAIC,IAAL;AAI1B,MAAII,OAAOa,WAAWR,OAAOS,KAAKlB,KAAKb,WAAWE,MAA5B,EAAoC4B,OACxD,QAAO;AAGT,MAAME,UAAUf,OACbM,IAAI,SAACE,OAAOL,OAAR;AAAA,WACH,IAAIQ,OAAOf,KAAKb,WAAWE,OAAOkB,KAAvB,EAA8BrB,KAAzC,EAAgD8B,KAAKJ,KAArD;EADG,CADS,EAIbQ,OAAO,SAAAC,GAAC;AAAA,WAAI,CAAC,CAACA;EAAN,CAJK;AAKhB,MAAIF,QAAQF,WAAWb,OAAOa,OAAQ,QAAO;AAE7C,SAAO;AACR;ICxCYK,UAAb,4BAAA;AAiBE,WAAAA,SAAYlB,QAAZ;AACE,QAAI,OAAOA,WAAW,UAAU;AAC9BA,eAASkB,SAAQC,MAAMnB,MAAd;IACV;AAED,SAAKoB,YAAYpB,OAAOoB;AACxB,SAAKC,YAAYrB,OAAOqB;EACzB;AAxBH,EAAAH,SAGgBC,QAAP,SAAA,MAAaxB,IAAb;AACL,QAAI,CAACe,UAAUf,IAAI,KAAKC,IAAV,GAAiB;AAC7B,YAAM,IAAI0B,MAAJ,aAAqB,KAAK1B,KAAKf,OAA/B,gBAAiDc,EAAjD;IACP;AACD,WAAO,IAAIuB,SAAQpB,UAAyBH,IAAI,KAAKC,IAAzB,CAArB,EAAqD2B,OAArD;EACR;AARH,EAAAL,SAUgBM,SAAP,SAAA,OAAcxB,QAAd;AACL,WAAOI,WAAWJ,QAAe,KAAKJ,IAArB;EAClB;AAZH,MAAA,SAAAsB,SAAA;AAAA,SA0BSO,WAAA,SAAA,WAAA;AACL,WAAOP,SAAQM,OAAO,KAAKD,OAAL,CAAf;EACR;AA5BH,SA8BSA,SAAA,SAAA,SAAA;AACL,WAAO;MACLH,WAAW,KAAKA;MAChBC,WAAW,KAAKA;IAFX;EAIR;AAnCH,SAAAH;AAAA,GAAA;AACgBA,QAAAA,OAAuB5B,KAAK,GAAD;ICG9BoC,YAAb,4BAAA;AA2BE,WAAAA,WAAY1B,QAAZ;AACE,QAAI,OAAOA,WAAW,UAAU;AAC9BA,eAAS0B,WAAUP,MAAMnB,MAAhB;IACV;AAED,SAAK2B,UAAU,IAAIT,QAAQlB,OAAO2B,OAAnB;AACf,SAAKC,UAAU5B,OAAO4B;EACvB;AAlCH,EAAAF,WAGgBP,QAAP,SAAA,MAAaxB,IAAb;AACL,QAAI,CAACe,UAAUf,IAAI,KAAKC,IAAV,GAAiB;AAC7B,YAAM,IAAI0B,MAAJ,aAAqB,KAAK1B,KAAKf,OAA/B,gBAAiDc,EAAjD;IACP;AACD,QAAA,aAA0CG,UACxCH,IACA,KAAKC,IAF4C,GAA3CwB,YAAR,WAAQA,WAAWC,YAAnB,WAAmBA,WAAWO,UAA9B,WAA8BA;AAI9B,QAAMD,UAAU,IAAIT,QAAQ;MAAEE;MAAWC;IAAb,CAAZ;AAChB,WAAO,IAAIK,WAAU;MAAEC;MAASC;IAAX,CAAd,EAAoCL,OAApC;EACR;AAbH,EAAAG,WAegBF,SAAP,SAAA,OAAcxB,QAAd;AACL,QAAM2B,UAAU,IAAIT,QAAQlB,OAAO2B,OAAnB;AAChB,QAAMjC,eAAW,SAAA,CAAA,GACZiC,QAAQJ,OAAR,GADY;MAEfK,SAAS5B,OAAO4B;IAFD,CAAA;AAIjB,WAAOxB,WAAWV,cAAoB,KAAKE,IAA1B;EAClB;AAtBH,MAAA,SAAA8B,WAAA;AAAA,SAoCSD,WAAA,SAAA,WAAA;AACL,WAAOC,WAAUF,OAAO,KAAKD,OAAL,CAAjB;EACR;AAtCH,SAwCSA,SAAA,SAAA,SAAA;AACL,WAAO;MACLI,SAAS,KAAKA,QAAQJ,OAAb;MACTK,SAAS,KAAKA;IAFT;EAIR;AA7CH,SAAAF;AAAA,GAAA;AACgBA,UAAAA,OAAuBpC,KAAK,IAAD;ICL9BH,YAAb,4BAAA;AAiBE,WAAAA,WAAYa,QAAZ;AACE,QAAI,OAAOA,WAAW,UAAU;AAC9BA,eAASb,WAAUgC,MAAMnB,MAAhB;IACV;AAED,SAAKoB,YAAYpB,OAAOoB;AACxB,SAAKC,YAAYrB,OAAOqB;EACzB;AAxBH,EAAAlC,WAGgBgC,QAAP,SAAA,MAAaxB,IAAb;AACL,QAAI,CAACe,UAAUf,IAAI,KAAKC,IAAV,GAAiB;AAC7B,YAAM,IAAI0B,MAAJ,aAAqB,KAAK1B,KAAKf,OAA/B,gBAAiDc,EAAjD;IACP;AACD,WAAO,IAAIR,WAAUW,UAA2BH,IAAI,KAAKC,IAA3B,CAAvB,EAAyD2B,OAAzD;EACR;AARH,EAAApC,WAUgBqC,SAAP,SAAA,OAAcxB,QAAd;AACL,WAAOI,WAAWJ,QAAe,KAAKJ,IAArB;EAClB;AAZH,MAAA,SAAAT,WAAA;AAAA,SA0BSsC,WAAA,SAAA,WAAA;AACL,WAAOtC,WAAUqC,OAAO,KAAKD,OAAL,CAAjB;EACR;AA5BH,SA8BSA,SAAA,SAAA,SAAA;AACL,WAAO;MACLH,WAAW,KAAKA;MAChBC,WAAW,KAAKA;IAFX;EAIR;AAnCH,SAAAlC;AAAA,GAAA;AACgBA,UAAAA,OAAuBG,KAAK,IAAD,EAAOC;ICCrCsC,YAAb,4BAAA;AAiBE,WAAAA,WAAY7B,QAAZ;AACE,QAAI,OAAOA,WAAW,UAAU;AAC9BA,eAAS6B,WAAUV,MAAMnB,MAAhB;IACV;AAED,SAAK2B,UAAU,IAAIT,QAAQlB,OAAO2B,OAAnB;AACf,SAAKpC,YAAY,IAAIJ,UAAUa,OAAOT,SAArB;EAClB;AAxBH,EAAAsC,WAGgBV,QAAP,SAAA,MAAaxB,IAAb;AACL,QAAI,CAACe,UAAUf,IAAI,KAAKC,IAAV,GAAiB;AAC7B,YAAM,IAAI0B,MAAJ,aAAqB,KAAK1B,KAAKf,OAA/B,gBAAiDc,EAAjD;IACP;AACD,WAAO,IAAIkC,WAAU/B,UAA2BH,IAAI,KAAKC,IAA3B,CAAvB,EAAyD2B,OAAzD;EACR;AARH,EAAAM,WAUgBL,SAAP,SAAA,OAAcxB,QAAd;AACL,WAAOI,WAAWJ,QAAe,KAAKJ,IAArB;EAClB;AAZH,MAAA,SAAAiC,WAAA;AAAA,SA0BSJ,WAAA,SAAA,WAAA;AACL,WAAOI,WAAUL,OAAO,KAAKD,OAAL,CAAjB;EACR;AA5BH,SA8BSA,SAAA,SAAA,SAAA;AACL,WAAO;MACLI,SAAS,KAAKA,QAAQJ,OAAb;MACThC,WAAW,KAAKA;IAFX;EAIR;AAnCH,SAAAsC;AAAA,GAAA;AACgBA,UAAAA,OAAuBvC,KAAK,IAAD,EAAOE;ICArCsC,UAAb,4BAAA;AAkBE,WAAAA,SAAY9B,QAAZ;AACE,QAAI,OAAOA,WAAW,UAAU;AAC9BA,eAAS8B,SAAQX,MAAMnB,MAAd;IACV;AAED,SAAK2B,UAAU,IAAIT,QAAQlB,OAAO2B,OAAnB;AACf,SAAKpC,YAAY,IAAIJ,UAAUa,OAAOT,SAArB;AACjB,SAAKwC,UAAU/B,OAAO+B;EACvB;AA1BH,EAAAD,SAGgBX,QAAP,SAAA,MAAaxB,IAAb;AACL,QAAI,CAACe,UAAUf,IAAI,KAAKC,IAAV,GAAiB;AAC7B,YAAM,IAAI0B,MAAJ,aAAqB,KAAK1B,KAAKf,OAA/B,gBAAiDc,EAAjD;IACP;AACD,WAAO,IAAImC,SAAQhC,UAAyBH,IAAI,KAAKC,IAAzB,CAArB,EAAqD2B,OAArD;EACR;AARH,EAAAO,SAUgBN,SAAP,SAAA,OAAcxB,QAAd;AACL,WAAOI,WAAWJ,QAAe,KAAKJ,IAArB;EAClB;AAZH,MAAA,SAAAkC,SAAA;AAAA,SA4BSL,WAAA,SAAA,WAAA;AACL,WAAOK,SAAQN,OAAO,KAAKD,OAAL,CAAf;EACR;AA9BH,SAgCSA,SAAA,SAAA,SAAA;AACL,WAAO;MACLI,SAAS,KAAKA,QAAQJ,OAAb;MACThC,WAAW,KAAKA,UAAUgC,OAAf;MACXQ,SAAS,KAAKA;IAHT;EAKR;AAtCH,SAAAD;AAAA,GAAA;AACgBA,QAAAA,OAAuBxC,KAAK,IAAD,EAAOG;;;ACXlD,IAAAuC,eAA+D;AAS/D,gBAAkB;;;ACXX,IAAM,wBAAwB;AAAA,EACnC;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACnbO,IAAM,eAAe;AAAA,EAC1B;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACliBO,IAAM,WAAW;AAAA,EACtB;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACtdO,IAAM,oBAAoB;AAAA,EAC/B;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AChyBO,IAAM,6BAA6B;AAAA,EACxC;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,IACzE;AAAA,EACF;AACF;;;ACTO,IAAM,gBAAgB;AAAA,EAC3B;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,WAAW,MAAM,QAAQ,SAAS,KAAK;AAAA,MAC/C,EAAE,MAAM,WAAW,MAAM,SAAS,SAAS,KAAK;AAAA,MAChD,EAAE,MAAM,WAAW,MAAM,SAAS,SAAS,MAAM;AAAA,IACnD;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,WAAW,MAAM,QAAQ,SAAS,KAAK;AAAA,MAC/C,EAAE,MAAM,WAAW,MAAM,OAAO,SAAS,KAAK;AAAA,MAC9C,EAAE,MAAM,SAAS,MAAM,QAAQ,SAAS,MAAM;AAAA,MAC9C,EAAE,MAAM,WAAW,MAAM,cAAc,SAAS,MAAM;AAAA,MACtD,EAAE,MAAM,UAAU,MAAM,iBAAiB,SAAS,MAAM;AAAA,MACxD,EAAE,MAAM,UAAU,MAAM,UAAU,SAAS,MAAM;AAAA,IACnD;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,WAAW,MAAM,QAAQ,SAAS,KAAK;AAAA,MAC/C,EAAE,MAAM,UAAU,MAAM,YAAY,SAAS,KAAK;AAAA,MAClD,EAAE,MAAM,UAAU,MAAM,aAAa,SAAS,KAAK;AAAA,IACrD;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,WAAW,MAAM,QAAQ,SAAS,KAAK;AAAA,MAC/C,EAAE,MAAM,WAAW,MAAM,YAAY,SAAS,KAAK;AAAA,MACnD,EAAE,MAAM,WAAW,MAAM,YAAY,SAAS,KAAK;AAAA,IACrD;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,WAAW,MAAM,QAAQ,SAAS,KAAK;AAAA,MAC/C,EAAE,MAAM,WAAW,MAAM,UAAU,SAAS,KAAK;AAAA,IACnD;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,CAAC,EAAE,MAAM,WAAW,MAAM,WAAW,CAAC;AAAA,IAC9C,SAAS,CAAC,EAAE,MAAM,UAAU,MAAM,GAAG,CAAC;AAAA,IACtC,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,CAAC,EAAE,MAAM,WAAW,MAAM,OAAO,CAAC;AAAA,IAC1C,SAAS,CAAC,EAAE,MAAM,WAAW,MAAM,GAAG,CAAC;AAAA,IACvC,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;;;AC3JA,IAAAC,eAOO;ACNP,mBAA8B;ACD9B,IAAAA,eAAsE;ACAtE,IAAAA,eAAsE;AF2BtE,IAAM,iBAAiB,CAAC,GAAY,UAClC,4BAAc,CAAC,UAAM,4BAAc,CAAC;AAK/B,IAAM,YAAY,CAAqC,SAAgB;AAC5E,MAAI,SAAc,CAAC;AAEnB,aAAW,OAAO,MAAM;AACtB,eAAW,QAAQ,KAAK;AAGtB,UACE,KAAK,SAAS,iBACd,KAAK,SAAS,aACd,KAAK,SAAS,cACd,CAAC,OAAO,KAAK,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAC3C;AACA,iBAAS,CAAC,GAAG,QAAQ,IAAI;MAC3B;IACF;EACF;AAEA,SAAO;AACT;;;AMpDO,IAAM,gBAAgB;AAAA,EAC3B;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,gBAAgB,MAAM,aAAa,MAAM,UAAU;AAAA,MACnE,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,UAAU,MAAM,YAAY,MAAM,SAAS;AAAA,MAC3D,EAAE,cAAc,UAAU,MAAM,kBAAkB,MAAM,SAAS;AAAA,IACnE;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,0BAA0B,MAAM,QAAQ;AAAA,EAC5D,EAAE,QAAQ,CAAC,GAAG,MAAM,sBAAsB,MAAM,QAAQ;AAAA,EACxD,EAAE,QAAQ,CAAC,GAAG,MAAM,8BAA8B,MAAM,QAAQ;AAAA,EAChE;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC3D,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,MAC5D,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,IAC7D;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,uBAAuB,MAAM,QAAQ;AAAA,EACzD;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,kBAAkB,MAAM,QAAQ;AAAA,EACpD,EAAE,QAAQ,CAAC,GAAG,MAAM,oBAAoB,MAAM,QAAQ;AAAA,EACtD,EAAE,QAAQ,CAAC,GAAG,MAAM,sBAAsB,MAAM,QAAQ;AAAA,EACxD,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD,EAAE,QAAQ,CAAC,GAAG,MAAM,8BAA8B,MAAM,QAAQ;AAAA,EAChE,EAAE,QAAQ,CAAC,GAAG,MAAM,0CAA0C,MAAM,QAAQ;AAAA,EAC5E,EAAE,QAAQ,CAAC,GAAG,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC3D,EAAE,QAAQ,CAAC,GAAG,MAAM,gBAAgB,MAAM,QAAQ;AAAA,EAClD;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,WAAW,OAAO,QAAQ,CAAC,GAAG,MAAM,sBAAsB,MAAM,QAAQ;AAAA,EAC1E;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACtE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACtE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,OAAO,MAAM,SAAS;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACtE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACtE,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC7E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,MAC5D,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACtE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU,CAAC;AAAA,IAC3E,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,cAAc,MAAM,OAAO,CAAC;AAAA,IACpE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACtE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACtE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACtE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU,CAAC;AAAA,IAC3E,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACtE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,IAC5D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,UAAU,MAAM,OAAO,MAAM,SAAS;AAAA,IACxD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,gBAAgB,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACrE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,IACvD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,QAAQ,MAAM,cAAc,MAAM,OAAO;AAAA,IAC3D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,YAAY,MAAM,SAAS,CAAC;AAAA,IACrE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,kBAAkB,MAAM,SAAS,CAAC;AAAA,IAC3E,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,eAAe,MAAM,SAAS,CAAC;AAAA,IACxE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AC3iBO,IAAMC,iBAAgB;AAAA,EAC3B;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,gBAAgB,MAAM,QAAQ,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,IAChE;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,QAAQ,MAAM,YAAY,MAAM,OAAO;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACtE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACtE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACtE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACtE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC9D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,gBAAgB,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACrE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,IAC5D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC9D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,MAC5D,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,IACvD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,QAAQ,MAAM,YAAY,MAAM,OAAO;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,eAAe,MAAM,SAAS,CAAC;AAAA,IACxE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC9D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACvZO,IAAMC,iBAAgB;AAAA,EAC3B;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,eAAe,MAAM,SAAS,CAAC;AAAA,IAChD,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IACpC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IAC7C,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,MAC9B,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,IACrC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,MAChC,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,MAC9B,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,IACrC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,MAC9B,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,IACnC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,MAChC,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,MAC9B,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,IACrC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IAC9C,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IAC7C,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IAC3C,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IACpC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM,UAAU,CAAC;AAAA,IACxC,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IACpC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,MAC9B,EAAE,MAAM,YAAY,MAAM,OAAO;AAAA,IACnC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IAChD,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,MAChC,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,MAC9B,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,MACnC,EAAE,MAAM,SAAS,MAAM,QAAQ;AAAA,IACjC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,MAC9B,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,IACtC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM,UAAU,CAAC;AAAA,IACxC,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACtC,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IACpC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,IACtC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IACpC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,MAChC,EAAE,MAAM,IAAI,MAAM,UAAU;AAAA,IAC9B;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IAC9C,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IAChD,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,MAC9B,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,IACtC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,MAChC,EAAE,MAAM,sBAAsB,MAAM,UAAU;AAAA,MAC9C,EAAE,MAAM,aAAa,MAAM,UAAU;AAAA,MACrC,EAAE,MAAM,uBAAuB,MAAM,UAAU;AAAA,IACjD;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ,CAAC,EAAE,SAAS,MAAM,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ,CAAC,EAAE,SAAS,MAAM,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,MAAM,MAAM,MAAM,UAAU;AAAA,MAC7C,EAAE,SAAS,MAAM,MAAM,SAAS,MAAM,UAAU;AAAA,MAChD,EAAE,SAAS,OAAO,MAAM,WAAW,MAAM,UAAU;AAAA,IACrD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,MAAM,MAAM,MAAM,UAAU;AAAA,MAC7C,EAAE,SAAS,MAAM,MAAM,SAAS,MAAM,UAAU;AAAA,MAChD,EAAE,SAAS,OAAO,MAAM,WAAW,MAAM,UAAU;AAAA,IACrD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,MAAM,MAAM,MAAM,UAAU;AAAA,MAC7C,EAAE,SAAS,OAAO,MAAM,WAAW,MAAM,UAAU;AAAA,IACrD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,MAAM,iBAAiB,MAAM,UAAU;AAAA,MACxD,EAAE,SAAS,MAAM,MAAM,YAAY,MAAM,UAAU;AAAA,IACrD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,MAAM,QAAQ,MAAM,UAAU;AAAA,MAC/C,EAAE,SAAS,MAAM,MAAM,MAAM,MAAM,UAAU;AAAA,MAC7C,EAAE,SAAS,MAAM,MAAM,WAAW,MAAM,UAAU;AAAA,IACpD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,MAAM,SAAS,MAAM,UAAU;AAAA,MAChD,EAAE,SAAS,MAAM,MAAM,YAAY,MAAM,UAAU;AAAA,MACnD,EAAE,SAAS,MAAM,MAAM,WAAW,MAAM,UAAU;AAAA,IACpD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,MAAM,SAAS,MAAM,UAAU;AAAA,MAChD,EAAE,SAAS,MAAM,MAAM,YAAY,MAAM,UAAU;AAAA,MACnD,EAAE,SAAS,OAAO,MAAM,YAAY,MAAM,OAAO;AAAA,IACnD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;;;AC9YO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,UAAU,MAAM,aAAa,MAAM,SAAS;AAAA,MAC5D,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU;AAAA,IACvE;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACrE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,sBAAsB,MAAM,QAAQ;AAAA,EACxD;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACrE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,mBAAmB,MAAM,QAAQ;AAAA,EACrD;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU,CAAC;AAAA,IAClE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,IACvD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU,CAAC;AAAA,IAClE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,0BAA0B,MAAM,QAAQ;AAAA,EAC5D;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,IAChE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC3D,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD,EAAE,QAAQ,CAAC,GAAG,MAAM,oCAAoC,MAAM,QAAQ;AAAA,EACtE;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,kBAAkB,MAAM,QAAQ;AAAA,EACpD,EAAE,QAAQ,CAAC,GAAG,MAAM,gBAAgB,MAAM,QAAQ;AAAA,EAClD;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,UACrD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,UACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,QAC/D;AAAA,QACA,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU,CAAC;AAAA,IAC3E,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,UACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,UAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD,EAAE,cAAc,QAAQ,MAAM,iBAAiB,MAAM,OAAO;AAAA,QAC9D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAChE,EAAE,cAAc,SAAS,MAAM,kBAAkB,MAAM,QAAQ;AAAA,IACjE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,IAClE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACrE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,6BAA6B,MAAM,OAAO,CAAC;AAAA,IACnF,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU,CAAC;AAAA,IAClE,MAAM;AAAA,IACN,SAAS;AAAA,MACP,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,MACrD,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,MACtE,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,UACrD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,UACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,QAC/D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,YAAY,CAAC;AAAA,IAC5E,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACtE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU,CAAC;AAAA,IAC3E,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACtE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,yBAAyB,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC9E,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC9D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,QAC9D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,8BAA8B,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACnF,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,UACrD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,UACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,QAC/D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU,CAAC;AAAA,IAC/E,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACvjBO,IAAM,sBAAsB;AAAA,EACjC;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,UAAU,MAAM,aAAa,MAAM,SAAS;AAAA,MAC5D,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU;AAAA,IACvE;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACrE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,sBAAsB,MAAM,QAAQ;AAAA,EACxD;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACrE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,mBAAmB,MAAM,QAAQ;AAAA,EACrD;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU,CAAC;AAAA,IAClE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,IACvD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU,CAAC;AAAA,IAClE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,0BAA0B,MAAM,QAAQ;AAAA,EAC5D;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,IAChE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC3D,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD,EAAE,QAAQ,CAAC,GAAG,MAAM,oCAAoC,MAAM,QAAQ;AAAA,EACtE;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,kBAAkB,MAAM,QAAQ;AAAA,EACpD,EAAE,QAAQ,CAAC,GAAG,MAAM,gBAAgB,MAAM,QAAQ;AAAA,EAClD;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,UACrD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,UACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,QAC/D;AAAA,QACA,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU,CAAC;AAAA,IAC3E,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,UACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,UAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD,EAAE,cAAc,QAAQ,MAAM,iBAAiB,MAAM,OAAO;AAAA,QAC9D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAChE,EAAE,cAAc,SAAS,MAAM,kBAAkB,MAAM,QAAQ;AAAA,IACjE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,IAClE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACrE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,6BAA6B,MAAM,OAAO,CAAC;AAAA,IACnF,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU,CAAC;AAAA,IAClE,MAAM;AAAA,IACN,SAAS;AAAA,MACP,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,MACrD,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,MACtE,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,UACrD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,UACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,QAC/D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,YAAY,CAAC;AAAA,IAC5E,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACtE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU,CAAC;AAAA,IAC3E,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACtE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,yBAAyB,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC9E,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC9D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,UACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,UAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD,EAAE,cAAc,QAAQ,MAAM,iBAAiB,MAAM,OAAO;AAAA,QAC9D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,QAC9D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,8BAA8B,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACnF,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,UACrD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,UACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,QAC/D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU,CAAC;AAAA,IAC1E,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU,CAAC;AAAA,IAC/E,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACxnBO,IAAM,iCAAiC;AAAA,EAC5C,EAAE,QAAQ,CAAC,GAAG,iBAAiB,cAAc,MAAM,cAAc;AAAA,EACjE;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACrE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU,CAAC;AAAA,IAClE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,IACvD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU,CAAC;AAAA,IAClE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC3D,EAAE,QAAQ,CAAC,GAAG,MAAM,0BAA0B,MAAM,QAAQ;AAAA,EAC5D;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,IAChE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,mBAAmB,MAAM,QAAQ;AAAA,EACrD;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,oCAAoC,MAAM,QAAQ;AAAA,EACtE,EAAE,QAAQ,CAAC,GAAG,MAAM,kBAAkB,MAAM,QAAQ;AAAA,EACpD,EAAE,QAAQ,CAAC,GAAG,MAAM,eAAe,MAAM,QAAQ;AAAA,EACjD;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC9E,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,IACjF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAC/E;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,UACrD,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,UACtE,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,UACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,QAC/D;AAAA,QACA,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MACzE,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,IAC5E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ,CAAC,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,WAAW,MAAM,SAAS,CAAC;AAAA,IACpF,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,yBAAyB,MAAM,UAAU;AAAA,IAC5F;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvE,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MACzE,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MACzE,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC9E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvE,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MACzE,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC9E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,iBAAiB,MAAM,UAAU;AAAA,MACjF,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC9E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,iBAAiB,MAAM,UAAU;AAAA,MACjF,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC9E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,sBAAsB,MAAM,UAAU;AAAA,IACzF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ,CAAC,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IACxF,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,uBAAuB,MAAM,UAAU;AAAA,IAC1F;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,UACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,UAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD,EAAE,cAAc,QAAQ,MAAM,iBAAiB,MAAM,OAAO;AAAA,UAC5D,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,YAAY;AAAA,UAClE,EAAE,cAAc,WAAW,MAAM,mBAAmB,MAAM,UAAU;AAAA,UACpE,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,QAC5D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAChE,EAAE,cAAc,SAAS,MAAM,kBAAkB,MAAM,QAAQ;AAAA,IACjE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,IAClE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACrE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU,CAAC;AAAA,IAC1E,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,UACrD,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,UACtE,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,UACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,QAC/D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,UACrD,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,UACtE,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,UACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,QAC/D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,YAAY,CAAC;AAAA,IAC5E,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,2BAA2B,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1E,EAAE,cAAc,yBAAyB,MAAM,WAAW,MAAM,UAAU;AAAA,MAC1E,EAAE,cAAc,8BAA8B,MAAM,qBAAqB,MAAM,UAAU;AAAA,MACzF,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,UAAU,MAAM,aAAa,MAAM,SAAS;AAAA,MAC5D,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU;AAAA,MACrE,EAAE,cAAc,WAAW,MAAM,8BAA8B,MAAM,UAAU;AAAA,MAC/E,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,MACtE,EAAE,cAAc,WAAW,MAAM,uBAAuB,MAAM,UAAU;AAAA,IAC1E;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,yBAAyB,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC9E,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,UACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,UAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD,EAAE,cAAc,QAAQ,MAAM,iBAAiB,MAAM,OAAO;AAAA,UAC5D,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,YAAY;AAAA,UAClE,EAAE,cAAc,WAAW,MAAM,mBAAmB,MAAM,UAAU;AAAA,UACpE,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,QAC5D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,QAC9D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,8BAA8B,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACnF,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,UACrD,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,UACtE,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,UACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,QAC/D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,uBAAuB,MAAM,UAAU,CAAC;AAAA,IAClF,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU,CAAC;AAAA,IAC/E,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,yBAAyB,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACpF,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,mBAAmB,MAAM,UAAU;AAAA,MACpE,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,YAAY;AAAA,MAClE,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,IAC5D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,8BAA8B,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IAC1F,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,eAAe,SAAS,CAAC,GAAG,iBAAiB,cAAc,MAAM,WAAW;AAClG;;;ACjeO,IAAM,yBAAyB;AAAA,EACpC;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,MACtE,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,MACtE;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,gBAAgB,MAAM,QAAQ,MAAM,UAAU;AAAA,MAC9D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,UAAU,MAAM,eAAe,MAAM,SAAS;AAAA,IAChE;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,yCAAyC,MAAM,QAAQ;AAAA,EAC3E;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,+BAA+B,MAAM,QAAQ;AAAA,EACjE;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC3D,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD,EAAE,QAAQ,CAAC,GAAG,MAAM,2BAA2B,MAAM,QAAQ;AAAA,EAC7D,EAAE,QAAQ,CAAC,GAAG,MAAM,0BAA0B,MAAM,QAAQ;AAAA,EAC5D;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAChE,EAAE,cAAc,WAAW,MAAM,kBAAkB,MAAM,UAAU;AAAA,IACrE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,oCAAoC,MAAM,QAAQ;AAAA,EACtE;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,IAC7D;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC3D;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,QAAQ,MAAM,iBAAiB,MAAM,OAAO;AAAA,MAC5D,EAAE,cAAc,UAAU,MAAM,wBAAwB,MAAM,SAAS;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,yBAAyB,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC9E,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,UAAU,MAAM,wBAAwB,MAAM,SAAS;AAAA,MACvE,EAAE,cAAc,QAAQ,MAAM,iBAAiB,MAAM,OAAO;AAAA,IAC9D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,wBAAwB,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC7E,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,yBAAyB,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC9E,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC9D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,QAAQ,MAAM,iBAAiB,MAAM,OAAO;AAAA,MAC5D,EAAE,cAAc,UAAU,MAAM,wBAAwB,MAAM,SAAS;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,QAAQ,MAAM,iBAAiB,MAAM,OAAO;AAAA,MAC5D,EAAE,cAAc,UAAU,MAAM,wBAAwB,MAAM,SAAS;AAAA,MACvE,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,IAC5D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,IAC5D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,QAC9D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,6BAA6B,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAClF,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,eAAe,MAAM,SAAS,CAAC;AAAA,IACxE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACxhBO,IAAM,+BAA+B;AAAA,EAC1C;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,eAAe,MAAM,SAAS,CAAC;AAAA,IAChD,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IACpC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IAC7C,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,qBAAqB,MAAM,UAAU;AAAA,MAC7C,EAAE,MAAM,qBAAqB,MAAM,UAAU;AAAA,IAC/C;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACtC,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,SAAS;AAAA,MAC/B,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,IACtC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,SAAS;AAAA,MAC/B,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,MACpC,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,IACpC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IACpC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACzC,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IACpC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,SAAS;AAAA,MAC/B,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,IACtC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,IACzC,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IACpC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IAChD,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,EAAE,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IAC9C,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,SAAS;AAAA,MAC/B,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,IACpC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACvC,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,MACnC,EAAE,MAAM,qBAAqB,MAAM,UAAU;AAAA,MAC7C,EAAE,MAAM,qBAAqB,MAAM,UAAU;AAAA,IAC/C;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,MAAM,QAAQ,MAAM,SAAS;AAAA,MAC/C,EAAE,SAAS,MAAM,MAAM,SAAS,MAAM,UAAU;AAAA,MAChD,EAAE,SAAS,MAAM,MAAM,SAAS,MAAM,UAAU;AAAA,MAChD,EAAE,SAAS,OAAO,MAAM,QAAQ,MAAM,UAAU;AAAA,MAChD,EAAE,SAAS,OAAO,MAAM,WAAW,MAAM,UAAU;AAAA,IACrD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,MAAM,QAAQ,MAAM,SAAS;AAAA,MAC/C,EAAE,SAAS,MAAM,MAAM,SAAS,MAAM,UAAU;AAAA,MAChD,EAAE,SAAS,OAAO,MAAM,QAAQ,MAAM,UAAU;AAAA,MAChD,EAAE,SAAS,OAAO,MAAM,WAAW,MAAM,UAAU;AAAA,IACrD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ,CAAC,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IAC3D,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,MAAM,iBAAiB,MAAM,UAAU;AAAA,MACxD,EAAE,SAAS,MAAM,MAAM,YAAY,MAAM,UAAU;AAAA,IACrD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;;;AC/OO,IAAM,kCAAkC;AAAA,EAC7C;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACpqBO,IAAM,gCAAgC;AAAA,EAC3C;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AC/kBA,oBAAsC;AAMtC,IAAM,0BAA0B;AAEzB,IAAM,kBAAkB;AAAA,EAC7B,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,uBAAuB,EAAE,EAAE;AAC1D;;;ACbO,IAAM,0BAA0B;AAAA,EACrC;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AC1HO,IAAM,uBAAuB;AAAA,EAClC;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AC91BO,IAAM,WAAW;AAAA,EACtB;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,WAAW,SAAS,MAAM,cAAc,UAAU;AAAA,MACxE,EAAE,MAAM,QAAQ,MAAM,SAAS,SAAS,OAAO,cAAc,QAAQ;AAAA,MACrE,EAAE,MAAM,YAAY,MAAM,UAAU,SAAS,OAAO,cAAc,SAAS;AAAA,MAC3E,EAAE,MAAM,OAAO,MAAM,UAAU,SAAS,OAAO,cAAc,SAAS;AAAA,MACtE,EAAE,MAAM,UAAU,MAAM,SAAS,SAAS,OAAO,cAAc,QAAQ;AAAA,IACzE;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,WAAW,SAAS,MAAM,cAAc,UAAU;AAAA,MACxE,EAAE,MAAM,QAAQ,MAAM,SAAS,SAAS,OAAO,cAAc,QAAQ;AAAA,MACrE,EAAE,MAAM,YAAY,MAAM,UAAU,SAAS,OAAO,cAAc,SAAS;AAAA,IAC7E;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,WAAW,SAAS,MAAM,cAAc,UAAU;AAAA,MACxE,EAAE,MAAM,UAAU,MAAM,UAAU,SAAS,OAAO,cAAc,SAAS;AAAA,IAC3E;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,WAAW,SAAS,MAAM,cAAc,UAAU;AAAA,MACxE,EAAE,MAAM,WAAW,MAAM,UAAU,SAAS,MAAM,cAAc,SAAS;AAAA,IAC3E;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACzgCO,IAAM,cAAc,UAAU,CAAC,sBAAsB,UAAU,uBAAuB,CAAC;;;ACmCvF,IAAM,kBAAkB;AAAA,EAC7B,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,uBAAuB;AAAA,EACvB,WAAW;AACb;;;ACnEA,IAAAC,eAA4B;;;ACArB,IAAM,cAAc;AAAA,EACzB;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AC31CO,IAAMC,YAAW;AAAA,EACtB;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACraO,IAAM,wCAAwC;AAAA,EACnD;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,gBAAgB,MAAM,OAAO,MAAM,UAAU;AAAA,MAC7D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxE,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC7E,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzE,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7E,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA,EAAE,iBAAiB,WAAW,MAAM,UAAU;AAChD;;;AHJA,IAAO,uBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,CAAC,gBAAgB,OAAO,GAAG;AAAA,IACzB,OAAO;AAAA,IACP,WAAW;AAAA,MACT,kBAAkB;AAAA,QAChB,KAAKC;AAAA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAKA;AAAA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,KAAK;AAAA,QACL,YAAY;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAKC;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,8BAA8B;AAAA,QAC5B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,+BAA+B;AAAA,QAC7B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,iCAAiC;AAAA,QAC/B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,uCAAuC;AAAA,QACrC,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,aAAa;AAAA,QACX,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,mBAAmB;AAAA,QACjB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,qBAAqB;AAAA,QACnB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EAEA,CAAC,gBAAgB,SAAS,GAAG;AAAA,IAC3B,OAAO;AAAA,IACP,WAAW;AAAA,MACT,UAAU,EAAE,KAAK,aAAa,YAAY,EAAE;AAAA,MAC5C,UAAU,EAAE,KAAK,UAAU,YAAY,EAAE;AAAA,MACzC,uBAAuB,EAAE,KAAK,uBAAuB,YAAY,EAAE;AAAA,MACnE,cAAc;AAAA,QACZ,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,aAAa;AAAA,QACX,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,cAAc;AAAA,QACZ,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EAEA,CAAC,gBAAgB,mBAAmB,GAAG;AAAA,IACrC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;;;AIxJA,IAAAC,iBAAiE;;;ACA1D,IAAMC,YAAW;AAAA,EACtB;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IACxE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,gBAAgB,MAAM,QAAQ;AAAA,EAClD;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,QAAQ,MAAM,YAAY,MAAM,OAAO;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,OAAO,MAAM,SAAS;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,QAAQ,MAAM,YAAY,MAAM,OAAO;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,IAC7D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,IAChE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,IAC7D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,UAAU,MAAM,QAAQ,MAAM,SAAS;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACtMO,IAAMC,eAAc;AAAA,EACzB;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,gBAAgB,MAAM,QAAQ,MAAM,UAAU;AAAA,MAC9D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,SAAS,MAAM,uBAAuB,MAAM,QAAQ;AAAA,IACtE;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,yCAAyC,MAAM,QAAQ;AAAA,EAC3E,EAAE,QAAQ,CAAC,GAAG,MAAM,iBAAiB,MAAM,QAAQ;AAAA,EACnD,EAAE,QAAQ,CAAC,GAAG,MAAM,uCAAuC,MAAM,QAAQ;AAAA,EACzE,EAAE,QAAQ,CAAC,GAAG,MAAM,uBAAuB,MAAM,QAAQ;AAAA,EACzD,EAAE,QAAQ,CAAC,GAAG,MAAM,sBAAsB,MAAM,QAAQ;AAAA,EACxD;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,sBAAsB,MAAM,QAAQ;AAAA,EACxD;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS,CAAC;AAAA,IAClE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,iBAAiB,MAAM,QAAQ;AAAA,EACnD,EAAE,QAAQ,CAAC,GAAG,MAAM,oBAAoB,MAAM,QAAQ;AAAA,EACtD;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,IAC3D;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,QAAQ,MAAM,YAAY,MAAM,OAAO;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,IACvE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,IAC1E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE,EAAE,SAAS,OAAO,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACrE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACtE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACtE,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxE,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,UAAU,MAAM,YAAY,MAAM,SAAS;AAAA,IAC7D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC9D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,MAC5D,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,aAAa,MAAM,YAAY,MAAM,YAAY;AAAA,MACjE,EAAE,cAAc,aAAa,MAAM,OAAO,MAAM,YAAY;AAAA,IAC9D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,aAAa,MAAM,IAAI,MAAM,YAAY,CAAC;AAAA,IACpE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,IAC3D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,IAC3D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,gBAAgB,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IACrE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,UAAU,MAAM,UAAU,MAAM,SAAS;AAAA,IAC3D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACxE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS;AAAA,MACP,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxD,EAAE,cAAc,UAAU,MAAM,UAAU,MAAM,SAAS;AAAA,IAC3D;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,MAC5D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,IAChE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,6BAA6B,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAClF,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,SAAS,MAAM,IAAI,MAAM,QAAQ,CAAC;AAAA,IAC5D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU;AAAA,MACrD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,MAC5D,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,IACvD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU,CAAC;AAAA,IACjE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACrE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,OAAO,MAAM,UAAU;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IAC9D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU;AAAA,MACjE,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,UAAU,MAAM,wBAAwB,MAAM,SAAS;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,mBAAmB,MAAM,UAAU,CAAC;AAAA,IAC/E,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,2BAA2B,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChF,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,MAC5D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACvE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,aAAa,MAAM,OAAO,MAAM,YAAY;AAAA,MAC5D,EAAE,cAAc,aAAa,MAAM,WAAW,MAAM,YAAY;AAAA,MAChE,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,IACvD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,IACvD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,QAAQ,MAAM,YAAY,MAAM,OAAO;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxD,EAAE,cAAc,UAAU,MAAM,UAAU,MAAM,SAAS;AAAA,IAC3D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D,EAAE,cAAc,QAAQ,MAAM,UAAU,MAAM,OAAO;AAAA,IACvD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,UAAU,MAAM,wBAAwB,MAAM,SAAS;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,UAAU,MAAM,OAAO,MAAM,SAAS;AAAA,IACxD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxD,EAAE,cAAc,UAAU,MAAM,UAAU,MAAM,SAAS;AAAA,IAC3D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACpE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,UAAU,MAAM,OAAO,MAAM,SAAS;AAAA,MACtD,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxD,EAAE,cAAc,UAAU,MAAM,UAAU,MAAM,SAAS;AAAA,IAC3D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACpE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,UAAU,MAAM,OAAO,MAAM,SAAS;AAAA,IACxD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,UAAU,MAAM,eAAe,MAAM,SAAS,CAAC;AAAA,IACxE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,IACjE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,IACjE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACrD,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,IAC5D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACrD,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU;AAAA,MACjE,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxD,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU;AAAA,MACjE,EAAE,cAAc,UAAU,MAAM,wBAAwB,MAAM,SAAS;AAAA,MACvE,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,UAAU,MAAM,SAAS,CAAC;AAAA,IACpE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AChuBO,IAAMC,YAAW;AAAA,EACtB,EAAE,QAAQ,CAAC,GAAG,iBAAiB,cAAc,MAAM,cAAc;AAAA,EACjE;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,QAAQ,MAAM,YAAY,MAAM,OAAO;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,OAAO,MAAM,SAAS;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,QAAQ,MAAM,YAAY,MAAM,OAAO;AAAA,IACzD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,IAC5D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,UAAU,MAAM,OAAO,MAAM,SAAS;AAAA,IACxD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,IAC5D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,UAAU,MAAM,OAAO,MAAM,SAAS;AAAA,IACxD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD,EAAE,cAAc,UAAU,MAAM,OAAO,MAAM,SAAS;AAAA,IACxD;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACjMO,IAAM,UAAU;AAAA,EACrB;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU,CAAC;AAAA,IAChF,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,wBAAwB,MAAM,QAAQ;AAAA,EAC1D;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,MACvD;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,KAAK,MAAM,QAAQ,CAAC;AAAA,IAC5D,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,mBAAmB,MAAM,UAAU;AAAA,IACtE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,6BAA6B,MAAM,QAAQ;AAAA,EAC/D;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,aAAa,MAAM,eAAe,MAAM,YAAY;AAAA,MACpE;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,mBAAmB,MAAM,QAAQ;AAAA,EACrD;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,oCAAoC,MAAM,QAAQ;AAAA,EACtE;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IACxE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,IACrE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,mCAAmC,MAAM,QAAQ;AAAA,EACrE;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,0BAA0B,MAAM,QAAQ;AAAA,EAC5D;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IACxE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,oBAAoB,MAAM,QAAQ;AAAA,EACtD;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU,CAAC;AAAA,IAC/E,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,aAAa,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,MAC5D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,oBAAoB,MAAM,QAAQ;AAAA,EACtD;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,8CAA8C,MAAM,QAAQ;AAAA,EAChF;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IACxE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,aAAa,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IACxE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IACxE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,kCAAkC,MAAM,QAAQ;AAAA,EACpE;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzD;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,wBAAwB,MAAM,QAAQ;AAAA,EAC1D;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,MAC/E;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9E;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,IAC1E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9E;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,MAAM,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,UAC1D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,QAC7D;AAAA,QACA,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,UAC1D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,UAC3D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,MAC9E;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,UAC5D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,cAC1D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,cAChE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,cAC1D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,cAChE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,YACxE;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,kBAAkB,MAAM,aAAa,MAAM,QAAQ;AAAA,UACnE;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,UAC5D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,mCAAmC,MAAM,UAAU;AAAA,QACtF;AAAA,QACA,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ,CAAC,EAAE,SAAS,OAAO,cAAc,aAAa,MAAM,eAAe,MAAM,YAAY,CAAC;AAAA,IAC9F,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,UAC5D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,cAC1D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,cAChE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,cAC1D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,cAChE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,YACxE;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,kBAAkB,MAAM,aAAa,MAAM,QAAQ;AAAA,UACnE;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,UAC5D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,QAC9D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,aAAa,MAAM,OAAO,CAAC;AAAA,IACnE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,gBACxE;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,kBAAkB,MAAM,aAAa,MAAM,QAAQ;AAAA,cACnE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,cAC5D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,cACzD;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,mCAAmC,MAAM,UAAU;AAAA,YACtF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,UAC9D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,UAC1D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,aAAa,MAAM,QAAQ,MAAM,QAAQ;AAAA,UACzD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,UAC/D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,uBAAuB,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,aAAa,MAAM,OAAO,CAAC;AAAA,IACnE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,gBACxE;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,kBAAkB,MAAM,aAAa,MAAM,QAAQ;AAAA,cACnE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,cAC5D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,cACzD;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,mCAAmC,MAAM,UAAU;AAAA,YACtF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,UAC9D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,UAC1D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,aAAa,MAAM,QAAQ,MAAM,QAAQ;AAAA,UACzD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,UAC/D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,UAC/D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,UAC/D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,uBAAuB,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU;AAAA,IACvE;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,cAC1D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,cAC3D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,UAC5D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,gBACxE;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,kBAAkB,MAAM,aAAa,MAAM,QAAQ;AAAA,cACnE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,cAC5D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,cACzD;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,mCAAmC,MAAM,UAAU;AAAA,YACtF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,QAC5D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,UAC/D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,UAC/D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,uBAAuB,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,cAC1D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,cAC3D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,UAC5D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,mBAAmB,MAAM,WAAW,MAAM,UAAU;AAAA,UACpE;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,UAC/D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,UAC9D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,UACtE;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,YACxE;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,QAC5D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,aAAa,MAAM,OAAO,CAAC;AAAA,IACnE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,mBAAmB,MAAM,WAAW,MAAM,UAAU;AAAA,UACpE;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,UAC/D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,UAC9D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,UAC7D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,UACtE;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,YACxE;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,QAC5D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,aAAa,MAAM,OAAO,CAAC;AAAA,IACnE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,gBACxE;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,kBAAkB,MAAM,aAAa,MAAM,QAAQ;AAAA,cACnE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,cAC5D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,cACzD;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,mCAAmC,MAAM,UAAU;AAAA,YACtF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,QAC5D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,uBAAuB,MAAM,UAAU;AAAA,IAC1E;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,aAAa,MAAM,OAAO,CAAC;AAAA,IACnE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,mBAAmB,MAAM,UAAU,CAAC;AAAA,IAC9E,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACrE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACvE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,UAC5D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,cAC1D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,cAChE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,cAC1D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,cAChE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,YACxE;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,kBAAkB,MAAM,aAAa,MAAM,QAAQ;AAAA,UACnE;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,UAC5D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,UACzD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,QAC9D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IACzE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IACxE,MAAM;AAAA,IACN,SAAS;AAAA,MACP,EAAE,cAAc,QAAQ,MAAM,eAAe,MAAM,OAAO;AAAA,MAC1D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAChE;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IAC1E,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP,EAAE,cAAc,UAAU,MAAM,WAAW,MAAM,SAAS;AAAA,MAC1D;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,IACxE;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,gBACxE;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,kBAAkB,MAAM,aAAa,MAAM,QAAQ;AAAA,cACnE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,cAC5D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,cACzD;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,mCAAmC,MAAM,UAAU;AAAA,YACtF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,UAC9D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,UAC1D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,aAAa,MAAM,QAAQ,MAAM,QAAQ;AAAA,UACzD;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,UAC/D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,YAChE;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,YAChE;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,IAChE;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,cAC1D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,cAC3D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,UAC5D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,gBACxE;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,kBAAkB,MAAM,aAAa,MAAM,QAAQ;AAAA,cACnE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,cAC5D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,cACzD;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,mCAAmC,MAAM,UAAU;AAAA,YACtF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,QAC5D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,YAChE;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,aAAa,MAAM,UAAU;AAAA,YAChE;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,cAC1D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,cAC3D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,UAC5D;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,kBACV;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,kBAC1D;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,kBAChE;AAAA,oBACE,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,kBACA,EAAE,cAAc,mBAAmB,MAAM,aAAa,MAAM,UAAU;AAAA,gBACxE;AAAA,gBACA,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,kBAAkB,MAAM,aAAa,MAAM,QAAQ;AAAA,cACnE;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,cAC5D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,QAAQ,MAAM,UAAU;AAAA,cACzD;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA,EAAE,cAAc,WAAW,MAAM,mCAAmC,MAAM,UAAU;AAAA,YACtF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,SAAS,MAAM,aAAa,MAAM,QAAQ;AAAA,QAC5D;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA,EAAE,iBAAiB,WAAW,MAAM,UAAU;AAChD;;;AJh7DA,IAAO,kBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,CAAC,gBAAgB,OAAO,GAAG;AAAA,IACzB,OAAO;AAAA,IACP,WAAW;AAAA,MACT,kBAAkB;AAAA,QAChB,KAAKC;AAAA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAKA;AAAA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,KAAK;AAAA,QACL,YAAY;AAAA;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAKC;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,8BAA8B;AAAA,QAC5B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,+BAA+B;AAAA,QAC7B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,iCAAiC;AAAA,QAC/B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,uCAAuC;AAAA,QACrC,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,aAAa;AAAA,QACX,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,mBAAmB;AAAA,QACjB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,qBAAqB;AAAA,QACnB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,sBAAsB;AAAA,QACpB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA,MAGA,gBAAgB;AAAA,QACd,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA,MAGA,kBAAkB;AAAA,QAChB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,CAAC,gBAAgB,SAAS,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgB3B,OAAO;AAAA,IACP,WAAW;AAAA,MACT,UAAU;AAAA,QACR,KAAKD;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,KAAK;AAAA,QACL,YAAY;AAAA;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,uBAAuB;AAAA,QACrB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,qBAAqB;AAAA,QACnB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,gCAAgC;AAAA,QAC9B,KAAK;AAAA,QACL,SAAS;AAAA;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA,MAGA,aAAa;AAAA,QACX,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA,MAEA,aAAa;AAAA,QACX,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,CAAC,gBAAgB,UAAU,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgB5B,OAAO;AAAA,IACP,WAAW;AAAA,MACT,UAAU;AAAA,QACR,KAAKA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,KAAK;AAAA,QACL,YAAY;AAAA;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAKC;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,aAAa;AAAA,QACX,KAAKC;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA,MAGA,uBAAuB;AAAA,QACrB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,CAAC,gBAAgB,gBAAgB,GAAG;AAAA,IAClC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,eAAe;AAAA,QACb,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,CAAC,gBAAgB,YAAY,GAAG;AAAA,IAC9B,OAAO;AAAA,IACP,WAAW;AAAA,MACT,eAAe;AAAA,QACb,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,mBAAmB,GAAG;AAAA,IACrC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKA,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA,MAGA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA,MAGA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA,MAGA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA;AAAA,MAIA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,qBAAqB;AAAA,QACnB,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,sBAAsB;AAAA,QACpB,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,yBAAyB;AAAA,QACvB,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,yBAAyB;AAAA,QACvB,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,uBAAuB;AAAA,QACrB,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,mBAAmB,GAAG;AAAA,IACrC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,oBAAoB;AAAA,QAClB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,oBAAoB,GAAG;AAAA,IACtC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,oBAAoB;AAAA,QAClB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,uBAAuB,GAAG;AAAA,IACzC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,oBAAoB;AAAA,QAClB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,uBAAuB,GAAG;AAAA,IACzC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,oBAAoB;AAAA,QAClB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,qBAAqB,GAAG;AAAA,IACvC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,oBAAoB;AAAA,QAClB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EAEA,CAAC,gBAAgB,OAAO,GAAG;AAAA,IACzB,OAAO;AAAA,IACP,WAAW;AAAA,MACT,YAAY;AAAA,QACV,KAAK;AAAA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;;;AKzfA,IAAAC,iBAOO;AAkCP,IAAO,kBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,CAAC,gBAAgB,OAAO,GAAG;AAAA,IACzB,OAAO;AAAA,IACP,WAAW;AAAA,MACT,kBAAkB;AAAA,QAChB,KAAKC;AAAA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAKA;AAAA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,KAAK;AAAA,QACL,YAAY;AAAA;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAKC;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,8BAA8B;AAAA,QAC5B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,+BAA+B;AAAA,QAC7B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,iCAAiC;AAAA,QAC/B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,uCAAuC;AAAA,QACrC,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,aAAa;AAAA,QACX,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,mBAAmB;AAAA,QACjB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,CAAC,gBAAgB,SAAS,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgB3B,OAAO;AAAA,IACP,WAAW;AAAA,MACT,UAAU;AAAA,QACR,KAAKD;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,KAAK;AAAA,QACL,YAAY;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,uBAAuB;AAAA,QACrB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,qBAAqB;AAAA,QACnB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,gCAAgC;AAAA,QAC9B,KAAK;AAAA,QACL,SAAS;AAAA;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,CAAC,gBAAgB,UAAU,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgB5B,OAAO;AAAA,IACP,WAAW;AAAA,MACT,UAAU;AAAA,QACR,KAAKA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,KAAK;AAAA,QACL,YAAY;AAAA;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAKC;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,aAAa;AAAA,QACX,KAAKC;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,mBAAmB,GAAG;AAAA,IACrC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,wBAAwB;AAAA,QACtB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,qBAAqB;AAAA,QACnB,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,sBAAsB;AAAA,QACpB,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,yBAAyB;AAAA,QACvB,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,yBAAyB;AAAA,QACvB,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEA,uBAAuB;AAAA,QACrB,KAAK;AAAA;AAAA,QAEL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,mBAAmB,GAAG;AAAA,IACrC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,oBAAoB;AAAA,QAClB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,uBAAuB,GAAG;AAAA,IACzC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,oBAAoB;AAAA,QAClB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,uBAAuB,GAAG;AAAA,IACzC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,oBAAoB;AAAA,QAClB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,qBAAqB,GAAG;AAAA,IACvC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,oBAAoB;AAAA,QAClB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,gBAAgB,oBAAoB,GAAG;AAAA,IACtC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,oBAAoB;AAAA,QAClB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EAEA,CAAC,gBAAgB,OAAO,GAAG;AAAA,IACzB,OAAO;AAAA,IACP,WAAW;AAAA,MACT,YAAY;AAAA,QACV,KAAK;AAAA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;;;ACxXA,IAAAC,eAA4B;AAC5B,IAAAC,iBAAwB;AA4BxB,IAAO,qBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,CAAC,gBAAgB,OAAO,GAAG;AAAA,IACzB,OAAO;AAAA,IACP,WAAW;AAAA,MACT,kBAAkB;AAAA,QAChB,KAAKC;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAKA;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,KAAK;AAAA,QACL,YAAY;AAAA,MACd;AAAA,MACA,eAAe;AAAA,QACb,KAAKC;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,8BAA8B;AAAA,QAC5B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,+BAA+B;AAAA,QAC7B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,iCAAiC;AAAA,QAC/B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,aAAa;AAAA,QACX,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,mBAAmB;AAAA,QACjB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,uCAAuC;AAAA,QACrC,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EAEA,CAAC,gBAAgB,SAAS,GAAG;AAAA,IAC3B,OAAO;AAAA,IACP,WAAW;AAAA,MACT,UAAU,EAAE,KAAK,aAAa,YAAY,QAAQ;AAAA,MAClD,UAAU,EAAE,KAAK,UAAU,YAAY,QAAQ;AAAA,MAC/C,uBAAuB,EAAE,KAAK,uBAAuB,YAAY,QAAQ;AAAA,MACzE,cAAc;AAAA,QACZ,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,aAAa;AAAA,QACX,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,cAAc;AAAA,QACZ,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EAEA,CAAC,gBAAgB,mBAAmB,GAAG;AAAA,IACrC,OAAO;AAAA,IACP,WAAW;AAAA,MACT,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,qBAAqB;AAAA,QACnB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,sBAAsB;AAAA,QACpB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,yBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,uBAAuB;AAAA,QACrB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;;;AC/IA,IAAM,oBAKF;AAAA,EACF;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,gBAAgB;AAClB;AAQO,IAAM,kBAAkB,CAC7B,gBACkC,kBAAkB,WAAW;AAkC1D,IAAM,qBAAqB,CAIhC,aACA,mBAEC,gBAAgB,WAAW,EAAU,cAAc;;;ACjE/C,SAAS,mBAAmB,SAA2B;AAC5D,SAAO,QAAQ,YAAY;AAC7B;;;ACVA,IAAAC,eAA2B;;;ACqDpB,SAAS,oBAAoB,OAAe,aAA6B;AAE9E,MAAI,QAAQ,IAAI;AACd,UAAM,IAAI,MAAM,yDAAyD,MAAM,SAAS,CAAC,EAAE;AAAA,EAC7F;AAEA,MAAI,CAAC,OAAO,SAAS,WAAW,GAAG;AACjC,UAAM,IAAI;AAAA,MACR,kEAAkE,WAAW;AAAA,IAC/E;AAAA,EACF;AAEA,MAAI,cAAc,GAAG;AACnB,UAAM,IAAI,MAAM,+DAA+D,WAAW,EAAE;AAAA,EAC9F;AAGA,MAAI,eAAe,MAAM;AACvB,UAAM,IAAI,MAAM,iEAAiE,WAAW,EAAE;AAAA,EAChG;AAGA,MAAI,UAAU,MAAM,gBAAgB,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,GAAG;AACrB,WAAO;AAAA,EACT;AAQA,QAAM,WAAW,YAAY,QAAQ,EAAE;AAIvC,QAAM,CAAC,aAAa,cAAc,EAAE,IAAI,SAAS,MAAM,GAAG;AAK1D,QAAM,iBAAiB,YAAY,QAAQ,OAAO,EAAE,KAAK;AAIzD,QAAM,YAAY,OAAO,cAAc,cAAc;AAIrD,QAAM,cAAc,OAAO,OAAO,eAAe,MAAM;AAMvD,SAAQ,QAAQ,YAAa;AAC/B;;;ADxGO,IAAM,cAAc;AAAA,EACzB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AACP;AAqEA,IAAM,eAAiD;AAAA,EACrD,CAAC,YAAY,GAAG,GAAG;AAAA,IACjB,IAAI,YAAY;AAAA,IAChB,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA,CAAC,YAAY,IAAI,GAAG;AAAA,IAClB,IAAI,YAAY;AAAA,IAChB,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA,CAAC,YAAY,GAAG,GAAG;AAAA,IACjB,IAAI,YAAY;AAAA,IAChB,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AACF;AAKO,SAAS,gBAAgB,YAAsC;AACpE,SAAO,aAAa,UAAU;AAChC;AAKO,SAAS,SAAS,QAAmC;AAC1D,SAAO;AAAA,IACL;AAAA,IACA,UAAU,YAAY;AAAA,EACxB;AACF;AAKO,SAAS,UAAU,QAAoC;AAC5D,SAAO;AAAA,IACL;AAAA,IACA,UAAU,YAAY;AAAA,EACxB;AACF;AAkFO,SAAS,WAA4B,OAAU,aAAwB;AAC5E,QAAM,eAAe,oBAAoB,MAAM,QAAQ,WAAW;AAElE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,EACV;AACF;AASA,SAAS,sBAAsB,OAAqB;AAClD,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,YAAY,IAAI;AAClB,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,MAAI,UAAU,SAAS;AACrB,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,MAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACF;AAiDO,SAAS,UAAU,OAA0B;AAClD,wBAAsB,KAAK;AAC3B,QAAMC,gBAAe,gBAAgB,YAAY,IAAI;AACrD,QAAM,aAAS,yBAAW,OAAOA,cAAa,QAAQ;AACtD,SAAO,UAAU,MAAM;AACzB;;;A3C9OO,IAAM,oCAAoC,CAAC,aAAqB,YACrE,YACG,OAAO;AAAA;AAAA;AAAA,EAGN,OAAO,GAAG,UAAU;AACtB,CAAC,EACA,YAAY;AAAA,EACX,OAAO,GAAG,UAAU;AACtB,CAAC;AAKE,IAAM,oBAAoB,CAAC,aAAqB,YACrD,YAAE,IAAI;AAAA,EACJ,OAAO,GAAG,UAAU;AACtB,CAAC;AAKI,IAAM,4BAA4B,CAAC,aAAqB,YAC7D,kBAAkB,UAAU,EAAE,SAAS;AAAA,EACrC,OAAO,GAAG,UAAU;AACtB,CAAC;AAKI,IAAM,+BAA+B,CAAC,aAAqB,YAChE,kBAAkB,UAAU,EAAE,YAAY;AAAA,EACxC,OAAO,GAAG,UAAU;AACtB,CAAC;AAKI,IAAM,qBAAqB,CAAC,aAAqB,YACtD,YACG,OAAO;AAAA,EACN,OAAO,GAAG,UAAU;AACtB,CAAC,EACA,KAAK,6BAA6B,UAAU,CAAC;AAO3C,IAAM,oBAAoB,CAAC,aAAqB,eACrD,0BAA0B,UAAU,EAAE,UAAU,CAAC,QAAQ,GAAc;AAoDlE,IAAM,6BAA6B,CAAC,aAAqB,kBAC9D,YACG,OAAO,EACP,MAAM,CAAC,QAAQ;AACd,MAAI,KAAC,wBAAU,IAAI,KAAK,GAAG;AACzB,QAAI,OAAO,KAAK;AAAA,MACd,MAAM;AAAA,MACN,SAAS,GAAG,UAAU;AAAA,MACtB,OAAO,IAAI;AAAA,IACb,CAAC;AAAA,EACH;AACF,CAAC,EACA,UAAU,CAAC,QAAQ,mBAAmB,GAAc,CAAC;AAanD,IAAM,0BAA0B,CAAC,aAAqB,gBAC3D,kBAAkB,UAAU;AAKvB,IAAM,gBAAgB,CAAC,aAAqB,YACjD,YACG,IAAI;AAAA,EACH,OAAO,GAAG,UAAU;AAAA,EACpB,OAAO;AACT,CAAC,EACA,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AA2ChC,IAAM,wBAAwB,CAAC,aAAqB,aAClD,YAAE,OACC,OAAO;AAAA,EACN,OAAO,GAAG,UAAU;AACtB,CAAC,EACA,YAAY;AAAA,EACX,OAAO,GAAG,UAAU;AACtB,CAAC;AAEE,IAAM,0BAA0B,CACrC,UACA,aAAqB,qBAErB,YAAE,aAAa;AAAA,EACb,QAAQ,sBAAsB,GAAG,UAAU,SAAS;AAAA,EAEpD,UAAU,YAAE,QAAQ,UAAU;AAAA,IAC5B,OAAO,GAAG,UAAU,6BAA6B,QAAQ;AAAA,EAC3D,CAAC;AACH,CAAC;AAmBI,IAAM,qBAAqB,CAAC,aAAqB,gBACtD,wBAAwB,YAAY,KAAK,UAAU,EAAE,UAAU,CAAC,MAAM,CAAa;AAK9E,IAAM,sBAAsB,CAAC,aAAqB,iBACvD,wBAAwB,YAAY,MAAM,UAAU,EAAE,UAAU,CAAC,MAAM,CAAc;AAWhF,IAAM,sBAAsB,CAAC,aAAqB,gBACvD,YAAE,aAAa;AAAA,EACb,SAAS,kBAAkB,GAAG,UAAU,WAAW;AAAA,EACnD,SAAS,2BAA2B,GAAG,UAAU,UAAU;AAC7D,CAAC;;;A6CvPI,SAAS,eAAe,OAA+B;AAC5D,SAAO;AAAA,IACL,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,OAAO,SAAS;AAAA,EAChC;AACF;AAKO,SAAS,kBAAkB,OAAqC;AACrE,SAAO,eAAe,KAAK;AAC7B;AAKO,SAAS,mBAAmB,OAAuC;AACxE,SAAO,eAAe,KAAK;AAC7B;;;AC/CO,SAAS,yBAAyB,WAAsC;AAC7E,QAAM,aAAa,mBAAmB,WAAW,gBAAgB,OAAO;AACxE,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,4BAA4B,SAAS,IAAI,gBAAgB,OAAO,EAAE;AAAA,EACpF;AAEA,QAAM,UAAU,WAAW,UAAU,eAAe;AACpD,MAAI,YAAY,UAAa,MAAM,QAAQ,OAAO,GAAG;AACnD,UAAM,IAAI,MAAM,kEAAkE,SAAS,EAAE;AAAA,EAC/F;AAEA,SAAO;AAAA,IACL,SAAS,WAAW,MAAM;AAAA,IAC1B;AAAA,EACF;AACF;;;ACIO,IAAM,aAAa;AAgBnB,IAAM,UAAU,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,KAAK;AAgBjD,IAAM,UAAU,CAAC;AA2FjB,IAAM,gBAAgB;AActB,IAAM,eAAe,gBAAgB;AAOrC,IAAM,gBAAgB,eAAe;AAOrC,IAAM,gBAAgB,eAAe;AAOrC,IAAM,iBAAiB,gBAAgB;AAOvC,IAAM,mBAAmB,iBAAiB;AAa1C,IAAM,sBAAsB,OAAO,IAAI,mBAAmB;;;AClL1D,SAAS,cAAc,MAAM,OAAO;AACzC,MAAI,OAAO,SAAS,WAAY,QAAO,KAAK,KAAK;AAEjD,MAAI,QAAQ,OAAO,SAAS,YAAY,uBAAuB;AAC7D,WAAO,KAAK,mBAAmB,EAAE,KAAK;AAExC,MAAI,gBAAgB,KAAM,QAAO,IAAI,KAAK,YAAY,KAAK;AAE3D,SAAO,IAAI,KAAK,KAAK;AACvB;;;ACNO,SAAS,OAAO,UAAU,SAAS;AAExC,SAAO,cAAc,WAAW,UAAU,QAAQ;AACpD;;;ACxBO,SAAS,YAAY,MAAM;AAChC,SAAO,KAAK,MAAM,CAAC,OAAO,IAAI,IAAI,GAAI;AACxC;;;ACrBA,IAAAC,aAAiC;AAyC1B,SAAS,yBAAyB,gBAAwB,YAAqB;AACpF,QAAM,SAAS,wBAAwB,UAAU;AACjD,QAAM,SAAS,OAAO,UAAU,cAAc;AAE9C,MAAI,OAAO,OAAO;AAChB,UAAM,IAAI,MAAM;AAAA,MAAuC,0BAAc,OAAO,KAAK,CAAC;AAAA,CAAI;AAAA,EACxF;AAEA,SAAO,OAAO;AAChB;;;AChBO,SAAS,eAAe,eAAsC;AACnE,MAAI,CAAC,sBAAsB,KAAK,aAAa,GAAG;AAC9C,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,QAAM,OAAO,IAAI,KAAK,aAAa;AAEnC,MAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,GAAG;AAChC,UAAM,IAAI,MAAM,wBAAwB,aAAa,EAAE;AAAA,EACzD;AAEA,SAAO,yBAAyB,YAAY,IAAI,GAAG,eAAe;AACpE;;;AC9CA,IAAAC,aAAc;;;ACAd,IAAAC,aAAc;;;ACOP,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA,EAIrC,WAAW;AAAA;AAAA;AAAA;AAAA,EAKX,QAAQ;AAAA;AAAA;AAAA;AAAA,EAKR,QAAQ;AACV;AAiBO,IAAM,4BAA4B,CACvC,sBACA,QAC4B;AAE5B,MAAI,MAAM,qBAAqB,UAAW,QAAO,wBAAwB;AAGzE,MAAI,MAAM,qBAAqB,QAAS,QAAO,wBAAwB;AAGvE,SAAO,wBAAwB;AACjC;;;ACnDO,IAAM,YAAY,CAAC,UAA2B;AACnD,SAAO,OAAO,UAAU,KAAK;AAC/B;AAEO,IAAM,uBAAuB,CAAC,UAA2B;AAC9D,SAAO,SAAS,KAAK,OAAO,UAAU,KAAK;AAC7C;AAEO,IAAM,oBAAoB,CAAC,UAA2B;AAC3D,SAAO,SAAS,KAAK,OAAO,UAAU,KAAK;AAC7C;AAEO,IAAM,6BAA6B,CAAC,UAAwB;AACjE,MAAI,CAAC,qBAAqB,KAAK,GAAG;AAChC,UAAM,IAAI,MAAM,iCAAiC,KAAK,GAAG;AAAA,EAC3D;AACF;AAEO,IAAM,4BAA4B,CAAC,UAA2B;AACnE,SAAO,SAAS,KAAK,OAAO,SAAS,KAAK;AAC5C;;;ACRO,IAAM,yCAAyC;AAM/C,IAAM,qCAAqC;AAqBlD,IAAM,wCAAwC,CAAC,WAAgD;AAC7F,MAAI,OAAO,SAAS,UAAa,CAAC,kBAAkB,OAAO,IAAI,GAAG;AAChE,UAAM,IAAI;AAAA,MACR,0CAA0C,OAAO,IAAI;AAAA,IACvD;AAAA,EACF;AACA,MAAI,OAAO,mBAAmB,UAAa,CAAC,kBAAkB,OAAO,cAAc,GAAG;AACpF,UAAM,IAAI;AAAA,MACR,0CAA0C,OAAO,cAAc;AAAA,IACjE;AAAA,EACF;AACA,MACE,OAAO,mBAAmB,UAC1B,OAAO,iBAAiB,oCACxB;AACA,UAAM,IAAI;AAAA,MACR,0CAA0C,OAAO,cAAc,kDAAkD,kCAAkC;AAAA,IACrJ;AAAA,EACF;AACF;AAEO,IAAM,qCAAqC,CAChD,WAC4C;AAC5C,QAAM,SAAS;AAAA,IACb,MAAM,OAAO,QAAQ;AAAA,IACrB,gBAAgB,OAAO,kBAAkB;AAAA,EAC3C;AACA,wCAAsC,MAAM;AAC5C,SAAO;AACT;AAiDO,IAAM,yCAAyC,CACpD,YACS;AACT,wCAAsC,OAAO;AAC7C,MAAI,CAAC,qBAAqB,QAAQ,YAAY,GAAG;AAC/C,UAAM,IAAI;AAAA,MACR,8FAA8F,QAAQ,YAAY;AAAA,IACpH;AAAA,EACF;AAGA,MAAI,CAAC,kBAAkB,QAAQ,UAAU,GAAG;AAC1C,UAAM,IAAI;AAAA,MACR,+FAA+F,QAAQ,UAAU;AAAA,IACnH;AAAA,EACF;AAEA,QAAM,qBACJ,QAAQ,iBAAiB,IAAI,IAAI,KAAK,KAAK,QAAQ,eAAe,QAAQ,cAAc;AAE1F,MAAI,QAAQ,eAAe,oBAAoB;AAC7C,UAAM,IAAI;AAAA,MACR,yDAAyD,QAAQ,UAAU,iBAAiB,kBAAkB,2BAA2B,QAAQ,YAAY,yBAAyB,QAAQ,cAAc;AAAA,IAC9M;AAAA,EACF;AAEA,MAAI,QAAQ,OAAO,QAAQ,YAAY;AACrC,UAAM,IAAI;AAAA,MACR,gDAAgD,QAAQ,IAAI,uBAAuB,QAAQ,UAAU;AAAA,IACvG;AAAA,EACF;AAGA,QAAM,sBAAsB,QAAQ,OAAO,KAAK,QAAQ;AACxD,QAAM,mBAAmB,KAAK;AAAA,IAC5B,qBAAqB,QAAQ,iBAAiB;AAAA,IAC9C,QAAQ,eAAe;AAAA,EACzB;AAEA,MAAI,QAAQ,iBAAiB,GAAG;AAC9B,QAAI,QAAQ,eAAe,QAAW;AACpC,YAAM,IAAI;AAAA,QACR,sGAAsG,QAAQ,UAAU;AAAA,MAC1H;AAAA,IACF;AACA,QAAI,QAAQ,aAAa,QAAW;AAClC,YAAM,IAAI;AAAA,QACR,oGAAoG,QAAQ,QAAQ;AAAA,MACtH;AAAA,IACF;AAAA,EACF,OAAO;AACL,QAAI,QAAQ,eAAe,oBAAoB;AAC7C,YAAM,IAAI;AAAA,QACR,yDAAyD,QAAQ,UAAU,iBAAiB,kBAAkB,mBAAmB,QAAQ,IAAI,yBAAyB,QAAQ,cAAc;AAAA,MAC9L;AAAA,IACF;AACA,QAAI,QAAQ,aAAa,kBAAkB;AACzC,YAAM,IAAI;AAAA,QACR,uDAAuD,QAAQ,QAAQ,iBAAiB,gBAAgB,yBAAyB,kBAAkB,sBAAsB,QAAQ,cAAc,wBAAwB,QAAQ,YAAY;AAAA,MAC7O;AAAA,IACF;AACA,QACE,OAAO,QAAQ,aAAa,eAC5B,OAAO,QAAQ,eAAe,eAC9B,QAAQ,WAAW,QAAQ,YAC3B;AACA,YAAM,IAAI;AAAA,QACR,qDAAqD,QAAQ,QAAQ,kDAAkD,QAAQ,UAAU;AAAA,MAC3I;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,QAAQ,OAAO,KAAK,QAAQ;AAChD,QAAM,WAAW,aAAa,QAAQ;AAEtC,MAAI,CAAC,QAAQ,WAAW,WAAW,QAAQ,cAAc;AACvD,UAAM,IAAI;AAAA,MACR,0EAA0E,QAAQ,oDAAoD,QAAQ,YAAY;AAAA,IAC5J;AAAA,EACF,WAAW,QAAQ,WAAW,QAAQ,OAAO,QAAQ,kBAAkB,QAAQ,cAAc;AAC3F,UAAM,IAAI;AAAA,MACR,yEAAyE,QAAQ,qCAAqC,QAAQ,YAAY;AAAA,IAC5I;AAAA,EACF;AACA,MAAI,CAAC,QAAQ,WAAW,QAAQ,SAAS,GAAG;AAC1C,UAAM,IAAI;AAAA,MACR,uGAAuG,QAAQ,IAAI;AAAA,IACrH;AAAA,EACF,WAAW,QAAQ,WAAW,QAAQ,SAAS,GAAG;AAChD,UAAM,IAAI;AAAA,MACR,0GAA0G,QAAQ,IAAI;AAAA,IACxH;AAAA,EACF;AACF;AAEO,IAAM,sCAAsC,CACjD,gBACA,gBACmC;AACnC,QAAM,qBAAqB,mCAAmC,cAAc;AAE5E,QAAM,eAAe,YAAY,UAAU;AAE3C,QAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,eAAe,mBAAmB,cAAc,CAAC;AAE1F,MAAI,mBAAmB,OAAO,YAAY;AACxC,UAAM,IAAI;AAAA,MACR,gDAAgD,mBAAmB,IAAI,wBAAwB,UAAU;AAAA,IAC3G;AAAA,EACF;AAEA,MAAI,iBAAiB,GAAG;AACtB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,cAAc,mBAAmB,OAAO,KAAK,mBAAmB;AACtE,QAAM,4BAA4B,cAAc,mBAAmB,iBAAiB;AACpF,QAAM,WAAW,KAAK,IAAI,2BAA2B,eAAe,CAAC;AACrE,QAAM,UAAU,4BAA4B,eAAe;AAC3D,QAAM,UAAU,mBAAmB,OAAO;AAE1C,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,yCAAuC,MAAM;AAC7C,SAAO;AACT;AAgCO,SAAS,eACd,WACA,aACK;AAEL,MACE,YAAY,iBAAiB,KAC7B,YAAY,eAAe,UAC3B,YAAY,aAAa,QACzB;AACA,WAAO,CAAC;AAAA,EACV;AACA,QAAM,MAAM,CAAC,GAAG,UAAU,OAAO,CAAC;AAClC,SAAO,IAAI,MAAM,YAAY,YAAY,YAAY,WAAW,CAAC;AACnE;;;AHhSO,IAAM,qCAAqC,CAAC,eACjD,WAAAC,QACG,OAAO;AAAA,EACN,YAAY,WAAAA,QAAE,OAAO;AAAA,EACrB,WAAW,wBAAwB,GAAG,UAAU,YAAY;AAAA,EAC5D,SAAS,wBAAwB,GAAG,UAAU,UAAU;AAAA,EACxD,eAAe,oBAAoB,GAAG,UAAU,gBAAgB;AAAA,EAChE,UAAU,cAAc,GAAG,UAAU,WAAW;AAClD,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,WAAW,KAAK,WAAW;AAAA,EAChD,SAAS,GAAG,UAAU,uBAAuB,UAAU;AAAA,EACvD,MAAM,CAAC,SAAS;AAClB,CAAC;AAKE,IAAM,2CAA2C,CACtD,aAAqB,qCAErB,WAAAA,QAAE,OAAO;AAAA,EACP,MAAM,0BAA0B,GAAG,UAAU,OAAO;AAAA,EACpD,gBAAgB,0BAA0B,GAAG,UAAU,iBAAiB,EAAE;AAAA,IACxE;AAAA,IACA,GAAG,UAAU,mCAAmC,kCAAkC;AAAA,EACpF;AAAA,EACA,cAAc,6BAA6B,GAAG,UAAU,eAAe;AAAA,EACvE,YAAY,0BAA0B,GAAG,UAAU,aAAa;AAAA,EAChE,SAAS,WAAAA,QAAE,QAAQ;AAAA,EACnB,SAAS,WAAAA,QAAE,QAAQ;AAAA,EACnB,YAAY,WAAAA,QAAE,SAAS,6BAA6B,GAAG,UAAU,aAAa,CAAC;AAAA,EAC/E,UAAU,WAAAA,QAAE,SAAS,6BAA6B,GAAG,UAAU,WAAW,CAAC;AAC7E,CAAC;AAMI,IAAM,kCAAkC,CAAC,cAAsB,aACpE,WAAAA,QAAE,KAAK,uBAAuB;;;AIpDzB,IAAM,gCAAgC;AAAA;AAAA;AAAA;AAAA,EAI3C,QAAQ;AAAA;AAAA;AAAA;AAAA,EAKR,UAAU;AACZ;;;ACTO,IAAM,wBAAwB,CAAC,cAAmC;AACvE,MAAI,CAAC,UAAU,SAAS,GAAG;AACzB,UAAM,IAAI,MAAM,2BAA2B,SAAS,sCAAsC;AAAA,EAC5F;AACF;AAQO,IAAM,mBAA6B;AAEnC,SAAS,gBAAgB,UAA6B;AAC3D,SAAO,qBAAqB,QAAQ;AACtC;AAEO,SAAS,iBAAiB,UAA0B;AACzD,MAAI,CAAC,gBAAgB,QAAQ,GAAG;AAC9B,UAAM,IAAI,MAAM,qBAAqB,QAAQ,4CAA4C;AAAA,EAC3F;AACF;;;ACZO,IAAM,6BAA6B;AAAA,EACxC,UAAU;AAAA,EACV,eAAe;AAAA,EACf,cAAc;AAChB;AAgEO,IAAM,mCAAmC,CAAC,UAA0C;AACzF,sBAAoB,wCAAwC,EAAE,MAAM,MAAM,aAAa;AAEvF,wBAAsB,MAAM,SAAS;AACrC,wBAAsB,MAAM,OAAO;AAEnC,MAAI,EAAE,MAAM,oBAAoB,MAAM;AACpC,UAAM,IAAI;AAAA,MACR,kEAAkE,OAAO,MAAM,QAAQ;AAAA,IACzF;AAAA,EACF;AAEA,MAAI,MAAM,UAAU,MAAM,WAAW;AACnC,UAAM,IAAI;AAAA,MACR,wCAAwC,MAAM,SAAS,sBAAsB,MAAM,OAAO;AAAA,IAC5F;AAAA,EACF;AACF;;;AP3EO,IAAM,yCAAyC,CACpD,aAAqB,mCAErB,mCAAmC,UAAU,EAAE,WAAW;AAAA,EACxD,YAAY,WAAAC,QAAE,QAAQ,2BAA2B,QAAQ;AAAA,EACzD,qBAAqB,oBAAoB,GAAG,UAAU,sBAAsB;AAAA,EAC5E,uBAAuB,6BAA6B,GAAG,UAAU,wBAAwB;AAC3F,CAAC;AAKI,IAAM,2CAA2C,CACtD,aAAqB,qCAErB,WAAAA,QAAE,OAAO;AAAA,EACP,UAAU,2BAA2B,GAAG,UAAU,WAAW;AAAA,EAC7D,gBAAgB,6BAA6B,GAAG,UAAU,iBAAiB;AAAA,EAC3E,0BAA0B,mBAAmB,GAAG,UAAU,2BAA2B;AAAA,EACrF,0BAA0B,mBAAmB,GAAG,UAAU,2BAA2B;AAAA,EACrF,OAAO,kCAAkC,GAAG,UAAU,QAAQ;AAAA,EAC9D,MAAM,0BAA0B,GAAG,UAAU,OAAO;AAAA,EACpD,aAAa,WAAAA,QAAE,QAAQ;AAAA,EACvB,iBAAiB,kCAAkC,GAAG,UAAU,kBAAkB,EAAE;AAAA,IAClF;AAAA,IACA,GAAG,UAAU;AAAA,EACf;AAAA,EACA,YAAY,kCAAkC,GAAG,UAAU,aAAa;AAAA,EACxE,gBAAgB,kCAAkC,GAAG,UAAU,iBAAiB,EAAE;AAAA,IAChF;AAAA,IACA,GAAG,UAAU;AAAA,EACf;AAAA,EACA,sBAAsB,oBAAoB,GAAG,UAAU,uBAAuB;AAChF,CAAC;AAKI,IAAM,4CAA4C,CACvD,aAAqB,sCAErB,WAAAA,QAAE,OAAO;AAAA,EACP,UAAU,2BAA2B,GAAG,UAAU,WAAW;AAAA,EAC7D,gBAAgB,6BAA6B,GAAG,UAAU,iBAAiB;AAAA,EAC3E,0BAA0B,mBAAmB,GAAG,UAAU,2BAA2B;AAAA,EACrF,0BAA0B,mBAAmB,GAAG,UAAU,2BAA2B;AAAA,EACrF,OAAO,kCAAkC,GAAG,UAAU,QAAQ;AAAA,EAC9D,MAAM,WAAAA,QAAE,KAAK;AAAA,EACb,aAAa,WAAAA,QAAE,QAAQ,KAAK;AAAA,EAC5B,iBAAiB,kCAAkC,GAAG,UAAU,kBAAkB,EAAE;AAAA,IAClF;AAAA,IACA,GAAG,UAAU;AAAA,EACf;AAAA,EACA,YAAY,kCAAkC,GAAG,UAAU,aAAa;AAAA,EACxE,gBAAgB,kCAAkC,GAAG,UAAU,iBAAiB,EAAE;AAAA,IAChF;AAAA,IACA,GAAG,UAAU;AAAA,EACf;AAAA,EACA,sBAAsB,oBAAoB,GAAG,UAAU,uBAAuB;AAChF,CAAC;AAKI,IAAM,8CAA8C,CACzD,aAAqB,wCAErB,WAAAA,QAAE,OAAO;AAAA,EACP,qBAAqB,6BAA6B,GAAG,UAAU,sBAAsB;AAAA,EACrF,+BAA+B;AAAA,IAC7B,GAAG,UAAU;AAAA,EACf;AAAA,EACA,+BAA+B;AAAA,IAC7B,GAAG,UAAU;AAAA,EACf;AAAA,EACA,wCAAwC;AAAA,IACtC,GAAG,UAAU;AAAA,EACf;AAAA,EACA,wBAAwB;AAAA,IACtB,GAAG,UAAU;AAAA,EACf;AACF,CAAC;AAKI,IAAM,iDAAiD,CAC5D,aAAqB,2CAErB,WAAAA,QACG,OAAO;AAAA,EACN,YAAY,WAAAA,QAAE,QAAQ,2BAA2B,QAAQ;AAAA,EACzD,MAAM,WAAAA,QAAE,QAAQ,8BAA8B,MAAM;AAAA,EACpD,OAAO,uCAAuC,GAAG,UAAU,QAAQ;AAAA,EACnE,UAAU,yCAAyC,GAAG,UAAU,WAAW;AAAA,EAC3E,mBAAmB;AAAA,IACjB,GAAG,UAAU;AAAA,EACf;AAAA,EACA,QAAQ,gCAAgC,GAAG,UAAU,SAAS;AAAA,EAC9D,cAAc,wBAAwB,GAAG,UAAU,eAAe;AACpE,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,eAAe,KAAK,MAAM,YAAY;AAAA,EAC3D,SAAS,GAAG,UAAU,0BAA0B,UAAU;AAAA,EAC1D,MAAM,CAAC,YAAY;AACrB,CAAC;AAKE,IAAM,mDAAmD,CAC9D,aAAqB,6CAErB,WAAAA,QACG,OAAO;AAAA,EACN,YAAY,WAAAA,QAAE,QAAQ,2BAA2B,QAAQ;AAAA,EACzD,MAAM,WAAAA,QAAE,QAAQ,8BAA8B,QAAQ;AAAA,EACtD,OAAO,uCAAuC,GAAG,UAAU,QAAQ;AAAA,EACnE,UAAU,0CAA0C,GAAG,UAAU,WAAW;AAAA,EAC5E,mBAAmB;AAAA,IACjB,GAAG,UAAU;AAAA,EACf;AAAA,EACA,QAAQ,gCAAgC,GAAG,UAAU,SAAS;AAAA,EAC9D,cAAc,wBAAwB,GAAG,UAAU,eAAe;AACpE,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,eAAe,KAAK,MAAM,YAAY;AAAA,EAC3D,SAAS,GAAG,UAAU,0BAA0B,UAAU;AAAA,EAC1D,MAAM,CAAC,YAAY;AACrB,CAAC;AAME,IAAM,2CAA2C,CACtD,aAAqB,qCAErB,WAAAA,QAAE,mBAAmB,QAAQ;AAAA,EAC3B,+CAA+C,UAAU;AAAA,EACzD,iDAAiD,UAAU;AAC7D,CAAC;AAKI,IAAM,4CAA4C,CACvD,aAAqB,sCAErB,WAAAA,QACG,OAAO;AAAA,EACN,YAAY,WAAAA,QAAE,QAAQ,2BAA2B,QAAQ;AAAA,EACzD,OAAO,uCAAuC,GAAG,UAAU,QAAQ;AAAA,EACnE,WAAW,WAAAA,QAAE;AAAA,IACX,yCAAyC,GAAG,UAAU,oBAAoB;AAAA,EAC5E;AAAA,EACA,mBAAmB;AAAA,IACjB,GAAG,UAAU;AAAA,EACf;AAAA,EACA,aAAa,yCAAyC,GAAG,UAAU,cAAc;AAAA,EACjF,QAAQ,gCAAgC,GAAG,UAAU,SAAS;AAAA,EAC9D,cAAc,wBAAwB,GAAG,UAAU,eAAe;AACpE,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,eAAe,KAAK,MAAM,YAAY;AAAA,EAC3D,SAAS,GAAG,UAAU,0BAA0B,UAAU;AAAA,EAC1D,MAAM,CAAC,YAAY;AACrB,CAAC;;;AQ5LL,IAAAC,aAAc;AAyBP,IAAM,mDAAmD,CAC9D,aAAa,6CAEb,WAAAC,QAAE,OAAO;AAAA,EACP,UAAU,2BAA2B,GAAG,UAAU,WAAW;AAAA,EAC7D,QAAQ,WAAAA,QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,GAAG,UAAU,2BAA2B;AAC3E,CAAC;AAKI,IAAM,8CAA8C,CACzD,aAAqB,wCAErB,mCAAmC,UAAU,EAAE,WAAW;AAAA,EACxD,YAAY,WAAAA,QAAE,QAAQ,2BAA2B,aAAa;AAAA,EAC9D,qBAAqB,oBAAoB,GAAG,UAAU,sBAAsB;AAAA,EAC5E,iCAAiC;AAAA,IAC/B,GAAG,UAAU;AAAA,EACf;AAAA,EACA,uBAAuB;AAAA,IACrB,GAAG,UAAU;AAAA,EACf,EAAE,IAAI,GAAG,GAAG,UAAU,qCAAqC;AAAA,EAC3D,mBAAmB,WAAAA,QAChB;AAAA,IACC,iDAAiD,GAAG,UAAU,0BAA0B;AAAA,EAC1F,EACC;AAAA,IACC,CAAC,UAAU;AACT,YAAM,YAAY,MAAM,IAAI,CAAC,SAAS,iBAAiB,KAAK,QAAQ,CAAC;AACrE,aAAO,IAAI,IAAI,SAAS,EAAE,SAAS,UAAU;AAAA,IAC/C;AAAA,IACA;AAAA,MACE,SAAS,GAAG,UAAU;AAAA,IACxB;AAAA,EACF,EACC,QAAQ,CAAC,CAAC;AACf,CAAC;AAKI,IAAM,gDAAgD,CAC3D,aAAqB,0CAErB,WAAAA,QACG,OAAO;AAAA,EACN,UAAU,2BAA2B,GAAG,UAAU,WAAW;AAAA,EAC7D,gBAAgB,6BAA6B,GAAG,UAAU,iBAAiB;AAAA,EAC3E,0BAA0B,mBAAmB,GAAG,UAAU,2BAA2B;AAAA,EACrF,0BAA0B,mBAAmB,GAAG,UAAU,2BAA2B;AAAA,EACrF,8BAA8B;AAAA,IAC5B,GAAG,UAAU;AAAA,EACf;AAAA,EACA,MAAM,0BAA0B,GAAG,UAAU,OAAO;AAAA,EACpD,aAAa,WAAAA,QAAE,QAAQ;AAAA,EACvB,oBAAoB,oBAAoB,GAAG,UAAU,qBAAqB;AAAA,EAC1E,sBAAsB,oBAAoB,GAAG,UAAU,uBAAuB;AAAA,EAC9E,qBAAqB,WAAAA,QAAE,QAAQ;AAAA,EAC/B,6BAA6B,WAAAA,QAC1B,OAAO,EACP,KAAK,EACL,IAAI,GAAG,GAAG,UAAU,gDAAgD,EACpE,SAAS;AACd,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,qBAAqB,UAAU,KAAK,mBAAmB,QAAQ;AAAA,EACpF,SAAS,GAAG,UAAU,oCAAoC,UAAU;AAAA,EACpE,MAAM,CAAC,sBAAsB;AAC/B,CAAC,EACA;AAAA,EACC,CAAC,SACC,CAAC,KAAK,uBACL,KAAK,gBAAgB,SAAS,KAAK,qBAAqB,WAAW;AAAA,EACtE;AAAA,IACE,SAAS,QAAQ,UAAU;AAAA,IAC3B,MAAM,CAAC,qBAAqB;AAAA,EAC9B;AACF,EACC,OAAO,CAAC,SAAS,KAAK,yBAAyB,KAAK,gCAAgC,OAAO;AAAA,EAC1F,SAAS,GAAG,UAAU;AAAA,EACtB,MAAM,CAAC,6BAA6B;AACtC,CAAC;AAKE,IAAM,iDAAiD,CAC5D,aAAqB,2CAErB,WAAAA,QACG,OAAO;AAAA,EACN,UAAU,2BAA2B,GAAG,UAAU,WAAW;AAAA,EAC7D,gBAAgB,6BAA6B,GAAG,UAAU,iBAAiB;AAAA,EAC3E,0BAA0B,mBAAmB,GAAG,UAAU,2BAA2B;AAAA,EACrF,0BAA0B,mBAAmB,GAAG,UAAU,2BAA2B;AAAA,EACrF,8BAA8B;AAAA,IAC5B,GAAG,UAAU;AAAA,EACf;AAAA,EACA,MAAM,WAAAA,QAAE,KAAK;AAAA,EACb,aAAa,WAAAA,QAAE,QAAQ,KAAK;AAAA,EAC5B,oBAAoB,oBAAoB,GAAG,UAAU,qBAAqB;AAAA,EAC1E,sBAAsB,oBAAoB,GAAG,UAAU,uBAAuB;AAAA,EAC9E,qBAAqB,WAAAA,QAAE,QAAQ;AAAA,EAC/B,6BAA6B,WAAAA,QAC1B,OAAO,EACP,KAAK,EACL,IAAI,GAAG,GAAG,UAAU,gDAAgD,EACpE,SAAS;AACd,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,qBAAqB,UAAU,KAAK,mBAAmB,QAAQ;AAAA,EACpF,SAAS,GAAG,UAAU,oCAAoC,UAAU;AAAA,EACpE,MAAM,CAAC,sBAAsB;AAC/B,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,yBAAyB,KAAK,gCAAgC,OAAO;AAAA,EAC1F,SAAS,GAAG,UAAU;AAAA,EACtB,MAAM,CAAC,6BAA6B;AACtC,CAAC;AAKE,IAAM,mDAAmD,CAC9D,aAAqB,6CAErB,WAAAA,QAAE,OAAO;AAAA,EACP,qBAAqB,6BAA6B,GAAG,UAAU,sBAAsB;AAAA,EACrF,+BAA+B;AAAA,IAC7B,GAAG,UAAU;AAAA,EACf;AAAA,EACA,+BAA+B;AAAA,IAC7B,GAAG,UAAU;AAAA,EACf;AAAA,EACA,oBAAoB,oBAAoB,GAAG,UAAU,qBAAqB;AAC5E,CAAC;AAKI,IAAM,sDAAsD,CACjE,aAAqB,gDAErB,WAAAA,QACG,OAAO;AAAA,EACN,YAAY,WAAAA,QAAE,QAAQ,2BAA2B,aAAa;AAAA,EAC9D,MAAM,WAAAA,QAAE,QAAQ,8BAA8B,MAAM;AAAA,EACpD,OAAO,4CAA4C,GAAG,UAAU,QAAQ;AAAA,EACxE,UAAU,8CAA8C,GAAG,UAAU,WAAW;AAAA,EAChF,mBAAmB;AAAA,IACjB,GAAG,UAAU;AAAA,EACf;AAAA,EACA,QAAQ,gCAAgC,GAAG,UAAU,SAAS;AAAA,EAC9D,cAAc,wBAAwB,GAAG,UAAU,eAAe;AACpE,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,eAAe,KAAK,MAAM,YAAY;AAAA,EAC3D,SAAS,GAAG,UAAU,0BAA0B,UAAU;AAAA,EAC1D,MAAM,CAAC,YAAY;AACrB,CAAC;AAKE,IAAM,wDAAwD,CACnE,aAAqB,kDAErB,WAAAA,QACG,OAAO;AAAA,EACN,YAAY,WAAAA,QAAE,QAAQ,2BAA2B,aAAa;AAAA,EAC9D,MAAM,WAAAA,QAAE,QAAQ,8BAA8B,QAAQ;AAAA,EACtD,OAAO,4CAA4C,GAAG,UAAU,QAAQ;AAAA,EACxE,UAAU,+CAA+C,GAAG,UAAU,WAAW;AAAA,EACjF,mBAAmB;AAAA,IACjB,GAAG,UAAU;AAAA,EACf;AAAA,EACA,QAAQ,gCAAgC,GAAG,UAAU,SAAS;AAAA,EAC9D,cAAc,wBAAwB,GAAG,UAAU,eAAe;AACpE,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,eAAe,KAAK,MAAM,YAAY;AAAA,EAC3D,SAAS,GAAG,UAAU,0BAA0B,UAAU;AAAA,EAC1D,MAAM,CAAC,YAAY;AACrB,CAAC;AAME,IAAM,gDAAgD,CAC3D,aAAqB,0CAErB,WAAAA,QAAE,mBAAmB,QAAQ;AAAA,EAC3B,oDAAoD,UAAU;AAAA,EAC9D,sDAAsD,UAAU;AAClE,CAAC;AAKI,IAAM,iDAAiD,CAC5D,aAAqB,2CAErB,WAAAA,QACG,OAAO;AAAA,EACN,YAAY,WAAAA,QAAE,QAAQ,2BAA2B,aAAa;AAAA,EAC9D,OAAO,4CAA4C,GAAG,UAAU,QAAQ;AAAA,EACxE,WAAW,WAAAA,QAAE;AAAA,IACX,8CAA8C,GAAG,UAAU,oBAAoB;AAAA,EACjF;AAAA,EACA,mBAAmB;AAAA,IACjB,GAAG,UAAU;AAAA,EACf;AAAA,EACA,aAAa,yCAAyC,GAAG,UAAU,cAAc;AAAA,EACjF,QAAQ,gCAAgC,GAAG,UAAU,SAAS;AAAA,EAC9D,cAAc,wBAAwB,GAAG,UAAU,eAAe;AACpE,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,eAAe,KAAK,MAAM,YAAY;AAAA,EAC3D,SAAS,GAAG,UAAU,0BAA0B,UAAU;AAAA,EAC1D,MAAM,CAAC,YAAY;AACrB,CAAC;;;AC/NE,IAAM,uCAAuC;AAAA;AAAA;AAAA;AAAA,EAIlD,IAAI;AAAA;AAAA;AAAA;AAAA,EAKJ,OAAO;AACT;AAsCO,IAAM,2BAA2B;AAejC,IAAM,uCAAuC;AAAA;AAAA;AAAA;AAAA,EAIlD,IAAI;AAAA;AAAA;AAAA;AAAA,EAKJ,OAAO;AACT;AAkDO,IAAM,+CAA+C;AAAA;AAAA;AAAA;AAAA,EAI1D,IAAI;AAAA;AAAA;AAAA;AAAA,EAKJ,OAAO;AACT;;;AtElHO,IAAM,iCAAiC,CAAC,aAAqB,2BAClE,WAAAC,QAAE,mBAAmB,cAAc;AAAA,EACjC,uCAAuC,UAAU;AAAA,EACjD,4CAA4C,UAAU;AACxD,CAAC;AAKI,IAAM,oCAAoC,CAAC,aAAqB,8BACrE,WAAAA,QAAE,mBAAmB,cAAc;AAAA,EACjC,0CAA0C,UAAU;AAAA,EACpD,+CAA+C,UAAU;AAC3D,CAAC;AAKI,IAAM,8CAA8C,CACzD,aAAqB,wCAErB,WAAAA,QAAE,OAAO;AAAA,EACP,cAAc,WAAAA,QAAE,QAAQ,qCAAqC,EAAE;AAAA,EAC/D,MAAM,kCAAkC,GAAG,UAAU,OAAO;AAC9D,CAAC;AAKI,IAAM,iDAAiD,CAC5D,cAAsB,2CAEtB,WAAAA,QAAE,OAAO;AAAA,EACP,cAAc,WAAAA,QAAE,QAAQ,qCAAqC,KAAK;AAAA,EAClE,OAAO,WAAAA,QAAE,OAAO;AAAA,EAChB,cAAc,WAAAA,QAAE,OAAO;AACzB,CAAC;AAKI,IAAM,4CAA4C,CACvD,aAAqB,sCAErB,WAAAA,QAAE,mBAAmB,gBAAgB;AAAA,EACnC,4CAA4C,UAAU;AAAA,EACtD,+CAA+C,UAAU;AAC3D,CAAC;AAKI,IAAM,mCAAmC,CAAC,aAAqB,6BACpE,WAAAA,QAAE,mBAAmB,cAAc;AAAA,EACjC,yCAAyC,UAAU;AAAA,EACnD,8CAA8C,UAAU;AAC1D,CAAC;AAUI,IAAM,uCAAuC,CAClD,aAAqB,iCAErB,WAAAA,QACG,OAAO,EACP,IAAI,GAAG,GAAG,UAAU,oBAAoB,EACxC;AAAA,EACC;AAAA,EACA,GAAG,UAAU;AACf;AAqCG,IAAM,8CAA8C,CACzD,aAAqB,wCAErB,WAAAC,QAAE,OAAO;AAAA,EACP,cAAc,WAAAA,QAAE,QAAQ,qCAAqC,EAAE;AAAA,EAC/D,MAAM,WAAAA,QAAE;AAAA,IACN,qCAAqC,GAAG,UAAU,gBAAgB;AAAA,IAClE,iCAAiC,GAAG,UAAU,gBAAgB;AAAA,EAChE;AACF,CAAC;AAKI,IAAM,iDAAiD,CAC5D,cAAsB,2CAEtB,WAAAA,QAAE,OAAO;AAAA,EACP,cAAc,WAAAA,QAAE,QAAQ,qCAAqC,KAAK;AAAA,EAClE,OAAO,WAAAA,QAAE,OAAO;AAAA,EAChB,cAAc,WAAAA,QAAE,OAAO;AACzB,CAAC;AAKI,IAAM,4CAA4C,CACvD,aAAqB,sCAErB,WAAAA,QAAE,mBAAmB,gBAAgB;AAAA,EACnC,4CAA4C,UAAU;AAAA,EACtD,+CAA+C,UAAU;AAC3D,CAAC;AAKH,IAAM,6CAA6C,CAAC,eAClD,WAAAA,QAAE,OAAO;AAAA,EACP,MAAM,qCAAqC,GAAG,UAAU,OAAO;AAAA,EAC/D,aAAa,WAAAA,QAAE,OAAO,EAAE,IAAI,GAAG,GAAG,UAAU,gCAAgC;AAAA,EAC5E,OAAO,mCAAmC,GAAG,UAAU,QAAQ;AACjE,CAAC;AAKI,IAAM,yCAAyC,CACpD,aAAqB,mCAErB,2CAA2C,UAAU,EAAE,WAAW;AAAA,EAChE,OAAO,+BAA+B,GAAG,UAAU,QAAQ;AAC7D,CAAC;AAmBI,IAAM,iDAAiD,CAC5D,aAAqB,2CAClB;AACH,QAAM,mBAAmB,OAAO,OAAO,0BAA0B,EAAE;AAAA,IACjE,CAAC,MAAM,MAAM,2BAA2B;AAAA,EAC1C;AACA,QAAM,eAAe,uCAAuC,GAAG,UAAU,WAAW;AAGpF,QAAM,kBAAkB,WAAAA,QACrB,OAAO,EAAE,OAAO,WAAAA,QAAE,OAAO,EAAE,YAAY,WAAAA,QAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EACpE,YAAY;AAGf,QAAM,yBAAyB;AAAA,IAC7B,GAAG,UAAU;AAAA,EACf;AAEA,SAAO,WAAAA,QAAE,MAAM,eAAe,EAAE,UAAU,CAAC,OAAO,QAAwC;AACxF,UAAM,SAAyC,CAAC;AAEhD,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AAEpB,UAAI,iBAAiB,SAAS,KAAK,MAAM,UAAU,GAAG;AAEpD,cAAM,SAAS,aAAa,UAAU,IAAI;AAC1C,YAAI,CAAC,OAAO,SAAS;AACnB,qBAAW,SAAS,OAAO,MAAM,QAAQ;AACvC,gBAAI,SAAS;AAAA,cACX,MAAM;AAAA,cACN,MAAM,CAAC,GAAG,GAAI,MAAM,IAAsB;AAAA,cAC1C,SAAS,MAAM;AAAA,YACjB,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AACL,iBAAO,KAAK,OAAO,IAAI;AAAA,QACzB;AAAA,MACF,OAAO;AAEL,cAAM,SAAS,uBAAuB,UAAU,IAAI;AACpD,YAAI,CAAC,OAAO,SAAS;AACnB,qBAAW,SAAS,OAAO,MAAM,QAAQ;AACvC,gBAAI,SAAS;AAAA,cACX,MAAM;AAAA,cACN,MAAM,CAAC,GAAG,GAAI,MAAM,IAAsB;AAAA,cAC1C,SAAS,MAAM;AAAA,YACjB,CAAC;AAAA,UACH;AACA;AAAA,QACF;AAEA,eAAO,KAAK;AAAA,UACV,GAAG,OAAO;AAAA,UACV,OAAO;AAAA,YACL,GAAG,OAAO,KAAK;AAAA,YACf,YAAY,2BAA2B;AAAA,YACvC,oBAAoB,KAAK,MAAM;AAAA,UACjC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,OAAO,WAAW,GAAG;AACvB,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,SAAS,GAAG,UAAU;AAAA,MACxB,CAAC;AAED,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,QAAQ,oBAAI,IAAY;AAC9B,eAAW,WAAW,QAAQ;AAC5B,UAAI,MAAM,IAAI,QAAQ,IAAI,GAAG;AAC3B,YAAI,SAAS;AAAA,UACX,MAAM;AAAA,UACN,SAAS,GAAG,UAAU;AAAA,QACxB,CAAC;AAED,eAAO,CAAC;AAAA,MACV;AACA,YAAM,IAAI,QAAQ,IAAI;AAAA,IACxB;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AAKO,IAAM,gDAAgD,CAC3D,aAAqB,0CAErB,WAAAA,QAAE,OAAO;AAAA,EACP,UAAU,+CAA+C,GAAG,UAAU,WAAW;AACnF,CAAC;AAKI,IAAM,sDAAsD,CACjE,aAAqB,gDAErB,WAAAA,QAAE,OAAO;AAAA,EACP,cAAc,WAAAA,QAAE,QAAQ,6CAA6C,EAAE;AAAA,EACvE,MAAM,8CAA8C,GAAG,UAAU,OAAO;AAC1E,CAAC;AAKI,IAAM,yDAAyD,CACpE,cAAsB,mDAEtB,WAAAA,QAAE,OAAO;AAAA,EACP,cAAc,WAAAA,QAAE,QAAQ,6CAA6C,KAAK;AAAA,EAC1E,OAAO,WAAAA,QAAE,OAAO;AAAA,EAChB,cAAc,WAAAA,QAAE,OAAO;AACzB,CAAC;AAKI,IAAM,oDAAoD,CAC/D,aAAqB,8CAErB,WAAAA,QAAE,mBAAmB,gBAAgB;AAAA,EACnC,oDAAoD,UAAU;AAAA,EAC9D,uDAAuD,UAAU;AACnE,CAAC;;;ADxUI,SAAS,2CACd,eACA,YACiC;AACjC,QAAM,SAAS,0CAA0C,UAAU;AACnE,QAAM,SAAS,OAAO,UAAU,aAAa;AAE7C,MAAI,OAAO,OAAO;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,MAAkE,0BAAc,OAAO,KAAK,CAAC;AAAA;AAAA,IAC/F;AAAA,EACF;AAEA,SAAO,OAAO;AAChB;AAKO,SAAS,2CACd,eACA,YACiC;AACjC,QAAM,SAAS,0CAA0C,UAAU;AACnE,QAAM,SAAS,OAAO,UAAU,aAAa;AAE7C,MAAI,OAAO,OAAO;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,MAAwD,0BAAc,OAAO,KAAK,CAAC;AAAA;AAAA,IACrF;AAAA,EACF;AAEA,SAAO,OAAO;AAChB;AAKO,SAAS,gDACd,YACA,YACgC;AAChC,QAAM,SAAS,+CAA+C,UAAU;AACxE,QAAM,SAAS,OAAO,UAAU,UAAU;AAE1C,MAAI,OAAO,OAAO;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,MAA6D,0BAAc,OAAO,KAAK,CAAC;AAAA;AAAA,IAC1F;AAAA,EACF;AAEA,SAAO,OAAO;AAChB;AAKO,SAAS,mDACd,eACA,YACyC;AACzC,QAAM,SAAS,kDAAkD,UAAU;AAC3E,QAAM,SAAS,OAAO,UAAU,aAAa;AAE7C,MAAI,OAAO,OAAO;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,MAAgE,0BAAc,OAAO,KAAK,CAAC;AAAA;AAAA,IAC7F;AAAA,EACF;AAEA,SAAO,OAAO;AAChB;;;AwEvEO,SAAS,sCACd,OACwC;AACxC,SAAO;AAAA,IACL,YAAY,MAAM;AAAA,IAClB,qBAAqB,mBAAmB,MAAM,mBAAmB;AAAA,IACjE,uBAAuB,MAAM;AAAA,IAC7B,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IACf,eAAe,MAAM;AAAA,IACrB,UAAU,MAAM,SAAS,SAAS;AAAA,EACpC;AACF;AAKO,SAAS,2CACd,SAC6C;AAC7C,SAAO;AAAA,IACL,qBAAqB,QAAQ;AAAA,IAC7B,+BAA+B,QAAQ;AAAA,IACvC,+BAA+B,kBAAkB,QAAQ,6BAA6B;AAAA,IACtF,wCAAwC,QAAQ;AAAA,IAChD,wBAAwB,QAAQ;AAAA,EAClC;AACF;AAKO,SAAS,wCACd,SAC0C;AAC1C,SAAO;AAAA,IACL,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,0BAA0B,QAAQ;AAAA,IAClC,0BAA0B,kBAAkB,QAAQ,wBAAwB;AAAA,IAC5E,OAAO,QAAQ;AAAA,IACf,MAAM,QAAQ;AAAA,IACd,aAAa,QAAQ;AAAA,IACrB,iBAAiB,QAAQ;AAAA,IACzB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,QAAQ;AAAA,IACxB,sBAAsB,mBAAmB,QAAQ,oBAAoB;AAAA,EACvE;AACF;AAKO,SAAS,yCACd,SAC2C;AAC3C,SAAO;AAAA,IACL,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,0BAA0B,QAAQ;AAAA,IAClC,0BAA0B,kBAAkB,QAAQ,wBAAwB;AAAA,IAC5E,OAAO,QAAQ;AAAA,IACf,MAAM,QAAQ;AAAA,IACd,aAAa,QAAQ;AAAA,IACrB,iBAAiB,QAAQ;AAAA,IACzB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,QAAQ;AAAA,IACxB,sBAAsB,mBAAmB,QAAQ,oBAAoB;AAAA,EACvE;AACF;AAKO,SAAS,8CACd,QACgD;AAChD,SAAO;AAAA,IACL,YAAY,OAAO;AAAA,IACnB,MAAM,OAAO;AAAA,IACb,OAAO,sCAAsC,OAAO,KAAK;AAAA,IACzD,UAAU,wCAAwC,OAAO,QAAQ;AAAA,IACjE,mBAAmB,2CAA2C,OAAO,iBAAiB;AAAA,IACtF,QAAQ,OAAO;AAAA,IACf,cAAc,OAAO;AAAA,EACvB;AACF;AAKO,SAAS,gDACd,QACkD;AAClD,SAAO;AAAA,IACL,YAAY,OAAO;AAAA,IACnB,MAAM,OAAO;AAAA,IACb,OAAO,sCAAsC,OAAO,KAAK;AAAA,IACzD,UAAU,yCAAyC,OAAO,QAAQ;AAAA,IAClE,mBAAmB,2CAA2C,OAAO,iBAAiB;AAAA,IACtF,QAAQ,OAAO;AAAA,IACf,cAAc,OAAO;AAAA,EACvB;AACF;AAKO,SAAS,yCACd,MAC2C;AAC3C,SAAO;AAAA,IACL,YAAY,KAAK;AAAA,IACjB,OAAO,sCAAsC,KAAK,KAAK;AAAA,IACvD,WAAW,KAAK,UAAU,IAAI,uCAAuC;AAAA,IACrE,mBAAmB,2CAA2C,KAAK,iBAAiB;AAAA,IACpF,aAAa,KAAK;AAAA,IAClB,QAAQ,KAAK;AAAA,IACb,cAAc,KAAK;AAAA,EACrB;AACF;;;ACrHO,SAAS,2CACd,OAC6C;AAC7C,SAAO;AAAA,IACL,YAAY,MAAM;AAAA,IAClB,qBAAqB,mBAAmB,MAAM,mBAAmB;AAAA,IACjE,iCAAiC,mBAAmB,MAAM,+BAA+B;AAAA,IACzF,uBAAuB,MAAM;AAAA,IAC7B,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IACf,eAAe,MAAM;AAAA,IACrB,UAAU,MAAM,SAAS,SAAS;AAAA,IAClC,mBAAmB,MAAM;AAAA,EAC3B;AACF;AAKO,SAAS,gDACd,SACkD;AAClD,SAAO;AAAA,IACL,qBAAqB,QAAQ;AAAA,IAC7B,+BAA+B,QAAQ;AAAA,IACvC,+BAA+B,kBAAkB,QAAQ,6BAA6B;AAAA,IACtF,oBAAoB,mBAAmB,QAAQ,kBAAkB;AAAA,EACnE;AACF;AAKO,SAAS,6CACd,SAC+C;AAC/C,SAAO;AAAA,IACL,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,0BAA0B,QAAQ;AAAA,IAClC,0BAA0B,kBAAkB,QAAQ,wBAAwB;AAAA,IAC5E,8BAA8B,mBAAmB,QAAQ,4BAA4B;AAAA,IACrF,MAAM,QAAQ;AAAA,IACd,aAAa,QAAQ;AAAA,IACrB,oBAAoB,mBAAmB,QAAQ,kBAAkB;AAAA,IACjE,sBAAsB,mBAAmB,QAAQ,oBAAoB;AAAA,IACrE,qBAAqB,QAAQ;AAAA,IAC7B,6BAA6B,QAAQ;AAAA,EACvC;AACF;AAKO,SAAS,8CACd,SACgD;AAChD,SAAO;AAAA,IACL,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,0BAA0B,QAAQ;AAAA,IAClC,0BAA0B,kBAAkB,QAAQ,wBAAwB;AAAA,IAC5E,8BAA8B,mBAAmB,QAAQ,4BAA4B;AAAA,IACrF,MAAM,QAAQ;AAAA,IACd,aAAa,QAAQ;AAAA,IACrB,oBAAoB,mBAAmB,QAAQ,kBAAkB;AAAA,IACjE,sBAAsB,mBAAmB,QAAQ,oBAAoB;AAAA,IACrE,qBAAqB,QAAQ;AAAA,IAC7B,6BAA6B,QAAQ;AAAA,EACvC;AACF;AAKO,SAAS,mDACd,QACqD;AACrD,SAAO;AAAA,IACL,YAAY,OAAO;AAAA,IACnB,MAAM,OAAO;AAAA,IACb,OAAO,2CAA2C,OAAO,KAAK;AAAA,IAC9D,UAAU,6CAA6C,OAAO,QAAQ;AAAA,IACtE,mBAAmB,gDAAgD,OAAO,iBAAiB;AAAA,IAC3F,QAAQ,OAAO;AAAA,IACf,cAAc,OAAO;AAAA,EACvB;AACF;AAKO,SAAS,qDACd,QACuD;AACvD,SAAO;AAAA,IACL,YAAY,OAAO;AAAA,IACnB,MAAM,OAAO;AAAA,IACb,OAAO,2CAA2C,OAAO,KAAK;AAAA,IAC9D,UAAU,8CAA8C,OAAO,QAAQ;AAAA,IACvE,mBAAmB,gDAAgD,OAAO,iBAAiB;AAAA,IAC3F,QAAQ,OAAO;AAAA,IACf,cAAc,OAAO;AAAA,EACvB;AACF;AAKO,SAAS,8CACd,MACgD;AAChD,SAAO;AAAA,IACL,YAAY,KAAK;AAAA,IACjB,OAAO,2CAA2C,KAAK,KAAK;AAAA,IAC5D,WAAW,KAAK,UAAU,IAAI,4CAA4C;AAAA,IAC1E,mBAAmB,gDAAgD,KAAK,iBAAiB;AAAA,IACzF,aAAa,KAAK;AAAA,IAClB,QAAQ,KAAK;AAAA,IACb,cAAc,KAAK;AAAA,EACrB;AACF;;;AClGO,SAAS,8BACd,OACgC;AAChC,UAAQ,MAAM,YAAY;AAAA,IACxB,KAAK,2BAA2B;AAC9B,aAAO,sCAAsC,KAAK;AAAA,IAEpD,KAAK,2BAA2B;AAC9B,aAAO,2CAA2C,KAAK;AAAA,IAEzD,KAAK,2BAA2B,cAAc;AAC5C,YAAM,eAAe;AACrB,YAAM,IAAI;AAAA,QACR,0DAA0D,aAAa,kBAAkB;AAAA,MAC3F;AAAA,IACF;AAAA,IAEA,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI;AAAA,QACR,wBAAyB,iBAA0C,UAAU;AAAA,MAC/E;AAAA,IACF;AAAA,EACF;AACF;AAKA,SAAS,iCACP,MACmC;AACnC,UAAQ,KAAK,YAAY;AAAA,IACvB,KAAK,2BAA2B;AAC9B,aAAO,yCAAyC,IAAI;AAAA,IACtD,KAAK,2BAA2B;AAC9B,aAAO,8CAA8C,IAAI;AAAA,IAC3D,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI;AAAA,QACR,wBAAyB,iBAA6C,UAAU;AAAA,MAClF;AAAA,IACF;AAAA,EACF;AACF;AAKA,SAAS,sCACP,QACwC;AACxC,UAAQ,OAAO,YAAY;AAAA,IACzB,KAAK,2BAA2B;AAC9B,aAAO,8CAA8C,MAAM;AAAA,IAC7D,KAAK,2BAA2B;AAC9B,aAAO,mDAAmD,MAAM;AAAA,IAClE,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI;AAAA,QACR,wBAAyB,iBAAkD,UAAU;AAAA,MACvF;AAAA,IACF;AAAA,EACF;AACF;AAKA,SAAS,wCACP,QAC0C;AAC1C,UAAQ,OAAO,YAAY;AAAA,IACzB,KAAK,2BAA2B;AAC9B,aAAO,gDAAgD,MAAM;AAAA,IAC/D,KAAK,2BAA2B;AAC9B,aAAO,qDAAqD,MAAM;AAAA,IACpE,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI;AAAA,QACR,wBAAyB,iBAAoD,UAAU;AAAA,MACzF;AAAA,IACF;AAAA,EACF;AACF;AAKA,SAAS,gCACP,QACkC;AAClC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO,sCAAsC,MAAM;AAAA,IACrD,KAAK;AACH,aAAO,wCAAwC,MAAM;AAAA,IACvD,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI,MAAM,wBAAyB,iBAA4C,IAAI,EAAE;AAAA,IAC7F;AAAA,EACF;AACF;AAKO,SAAS,sCACd,eACwC;AACxC,SAAO;AAAA,IACL,MAAM,cAAc;AAAA,IACpB,aAAa,cAAc;AAAA,IAC3B,OAAO,8BAA8B,cAAc,KAAK;AAAA,EAC1D;AACF;AAKO,SAAS,yCACd,UAC2C;AAC3C,UAAQ,SAAS,cAAc;AAAA,IAC7B,KAAK,qCAAqC;AACxC,aAAO;AAAA,QACL,cAAc,SAAS;AAAA,QACvB,MAAM,iCAAiC,SAAS,IAAI;AAAA,MACtD;AAAA,IAEF,KAAK,qCAAqC;AACxC,aAAO;AAAA,EACX;AACF;AAKO,SAAS,yCACd,UAC2C;AAC3C,UAAQ,SAAS,cAAc;AAAA,IAC7B,KAAK,qCAAqC,IAAI;AAC5C,YAAM,iBAAiB,OAAO;AAAA,QAC5B,OAAO,QAAQ,SAAS,IAAI,EAAE,IAAI,CAAC,CAAC,aAAa,MAAM,MAAM;AAAA,UAC3D;AAAA,UACA,gCAAgC,MAAgC;AAAA,QAClE,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,QACL,cAAc,SAAS;AAAA,QACvB,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IAEA,KAAK,qCAAqC;AACxC,aAAO;AAAA,IAET,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI;AAAA,QACR,0BAA2B,iBAAqD,YAAY;AAAA,MAC9F;AAAA,IACF;AAAA,EACF;AACF;AAKO,SAAS,iDACd,UACmD;AACnD,UAAQ,SAAS,cAAc;AAAA,IAC7B,KAAK,6CAA6C;AAChD,aAAO;AAAA,QACL,cAAc,SAAS;AAAA,QACvB,MAAM;AAAA,UACJ,UAAU,SAAS,KAAK,SAAS,IAAI,qCAAqC;AAAA,QAC5E;AAAA,MACF;AAAA,IAEF,KAAK,6CAA6C;AAChD,aAAO;AAAA,IAET,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI;AAAA,QACR,0BAA2B,iBAA6D,YAAY;AAAA,MACtG;AAAA,IACF;AAAA,EACF;AACF;;;AC3OO,IAAM,uBAAuB,CAAC,UAAkC;AACrE,SAAO,SAAS,KAAK,OAAO,SAAS,KAAK;AAC5C;AAEO,IAAM,wBAAwB,CAAC,UAA+B;AACnE,MAAI,CAAC,qBAAqB,KAAK,GAAG;AAChC,UAAM,IAAI;AAAA,MACR,2BAA2B,KAAK;AAAA,IAClC;AAAA,EACF;AACF;;;ACgCO,IAAM,4CAA4C,CACvD,YACS;AACT,6BAA2B,QAAQ,mBAAmB;AACtD,mBAAiB,QAAQ,6BAA6B;AAEtD,qBAAmB,iEAAiE,EAAE;AAAA,IACpF,QAAQ;AAAA,EACV;AAEA,wBAAsB,QAAQ,sCAAsC;AACpE,wBAAsB,QAAQ,sBAAsB;AACtD;AA2BO,IAAM,yCAAyC,CACpD,WACA,UACsC;AACtC,MAAI,sBAAsB;AAC1B,MAAI,gCAAgC;AACpC,MAAI,sCAAsC;AAC1C,MAAI,yCAAyC;AAC7C,MAAI,yBAAyB,OAAO;AAEpC,aAAW,YAAY,WAAW;AAChC,2BAAuB,SAAS;AAChC,qCAAiC,SAAS;AAC1C,2CAAuC,SAAS,yBAAyB;AACzE,QAAI,SAAS,aAAa;AACxB,gDAA0C,SAAS;AACnD,UAAI,SAAS,aAAa,wBAAwB;AAChD,iCAAyB,SAAS;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,2BAA2B,OAAO,kBAAkB;AACtD,QAAI,MAAM,0BAA0B,GAAG;AAAA,IAGvC,OAAO;AAEL,UAAI,UAAU,WAAW,GAAG;AAE1B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,+BAAyB;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA,+BAA+B,SAAS,mCAAmC;AAAA,IAC3E;AAAA,IACA;AAAA,EACF;AAEA,4CAA0C,MAAM;AAEhD,SAAO;AACT;;;AClIO,IAAM,0BAA0B,CACrC,cACA,OACA,iBACS;AACT,QAAM,kBAAkB,IAAI,IAAI,aAAa,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;AACnE,MAAI,gBAAgB,SAAS,aAAa,QAAQ;AAChD,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI,eAAe,MAAM,aAAa,aAAa,SAAS,GAAG;AAC7D,UAAM,IAAI;AAAA,MACR,sCAAsC,YAAY,0BAA0B,MAAM,SAAS;AAAA,IAC7F;AAAA,EACF;AACF;;;ACVO,IAAM,uBAAuB,CAAC,SAA6B;AAChE,MAAI,CAAC,kBAAkB,IAAI,GAAG;AAC5B,UAAM,IAAI,MAAM,yBAAyB,IAAI,4CAA4C;AAAA,EAC3F;AACF;AAiBO,IAAM,yBAAyB,CACpC,GACA,MACW;AAEX,MAAI,EAAE,6BAA6B,EAAE,0BAA0B;AAC7D,WAAO,EAAE,2BAA2B,EAAE;AAAA,EACxC;AAGA,MAAI,EAAE,WAAW,EAAE,SAAU,QAAO;AACpC,MAAI,EAAE,WAAW,EAAE,SAAU,QAAO;AACpC,SAAO;AACT;AAMO,IAAM,sBAAsB,CAAC,cAAoD;AACtF,SAAO,CAAC,GAAG,SAAS,EAAE,KAAK,sBAAsB;AACnD;;;ACVO,IAAM,uBAAuB,CAClC,UACA,gBACA,0BACA,6BACoB;AACpB,QAAM,SAAS;AAAA,IACb,UAAU,iBAAiB,QAAQ;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,0BAAwB,MAAM;AAC9B,SAAO;AACT;AAEO,IAAM,0BAA0B,CAAC,YAAmC;AACzE,2BAAyB,QAAQ,QAAQ;AACzC,6BAA2B,QAAQ,cAAc;AACjD,mBAAiB,QAAQ,wBAAwB;AAEjD,qBAAmB,0CAA0C,EAAE;AAAA,IAC7D,QAAQ;AAAA,EACV;AACF;;;ACzDO,IAAM,4BAA4B,CAAC,6BAAsD;AAC9F,SAAO,2BAA2B;AACpC;;;ACHO,SAAS,4BACd,MACA,OACS;AACT,SAAO,QAAQ,MAAM;AACvB;AASO,SAAS,oCACd,MACA,OACQ;AACR,MAAI,CAAC,4BAA4B,MAAM,KAAK,EAAG,QAAO;AAItD,MAAI,MAAM,0BAA0B,EAAG,QAAO;AAE9C,SAAO,KAAK,OAAO,MAAM,MAAM,wBAAwB;AACzD;AASO,SAAS,yCACd,MACA,OACQ;AACR,SAAO,IAAI,oCAAoC,MAAM,KAAK;AAC5D;AAUO,SAAS,+BACd,MACA,0BACA,OACe;AACf,SACE,0BAA0B,wBAAwB,IAClD,yCAAyC,MAAM,KAAK;AAExD;;;ACxCO,IAAM,qCAAqC,CAChD,aACkC;AAClC,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH,OAAO,0BAA0B,SAAS,wBAAwB;AAAA,EACpE;AAEA,wCAAsC,MAAM;AAC5C,SAAO;AACT;AAEO,IAAM,wCAAwC,CACnD,YACS;AACT,0BAAwB,OAAO;AAC/B,wBAAsB,QAAQ,KAAK;AAEnC,QAAM,gBAAgB,0BAA0B,QAAQ,wBAAwB;AAChF,MAAI,QAAQ,UAAU,eAAe;AACnC,UAAM,IAAI,MAAM,4BAA4B,QAAQ,KAAK,eAAe,aAAa,GAAG;AAAA,EAC1F;AACF;AAmCO,IAAM,wCAAwC,CACnD,SACA,UACS;AACT,wCAAsC,OAAO;AAC7C,uBAAqB,QAAQ,IAAI;AAEjC,MAAI,QAAQ,kBAAkB,KAAK,QAAQ,kBAAkB,GAAG;AAC9D,UAAM,IAAI;AAAA,MACR,mEAAmE,QAAQ,eAAe;AAAA,IAC5F;AAAA,EACF;AAEA,wBAAsB,QAAQ,UAAU;AAExC,QAAM,sBAAsB,4BAA4B,QAAQ,MAAM,KAAK;AAC3E,MAAI,QAAQ,gBAAgB,qBAAqB;AAC/C,UAAM,IAAI;AAAA,MACR,uDAAuD,QAAQ,WAAW,eAAe,mBAAmB;AAAA,IAC9G;AAAA,EACF;AAEA,QAAM,0BAA0B,oCAAoC,QAAQ,MAAM,KAAK;AACvF,MAAI,QAAQ,oBAAoB,yBAAyB;AACvD,UAAM,IAAI;AAAA,MACR,2DAA2D,QAAQ,eAAe,eAAe,uBAAuB;AAAA,IAC1H;AAAA,EACF;AAEA,QAAM,qBAAqB;AAAA,IACzB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR;AAAA,EACF;AACA,MAAI,QAAQ,eAAe,oBAAoB;AAC7C,UAAM,IAAI;AAAA,MACR,sDAAsD,QAAQ,UAAU,eAAe,kBAAkB;AAAA,IAC3G;AAAA,EACF;AACF;AAEO,IAAM,qCAAqC,CAChD,UACA,MACA,UACkC;AAClC,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH;AAAA,IACA,aAAa,4BAA4B,MAAM,KAAK;AAAA,IACpD,iBAAiB,oCAAoC,MAAM,KAAK;AAAA,IAChE,YAAY,+BAA+B,MAAM,SAAS,0BAA0B,KAAK;AAAA,EAC3F;AACA,wCAAsC,QAAQ,KAAK;AACnD,SAAO;AACT;AAQO,IAAM,qCAAqC,CAChD,UACA,sBACW;AACX,MAAI,CAAC,SAAS,YAAa,QAAO;AAClC,MAAI,kBAAkB,2CAA2C,EAAG,QAAO;AAE3E,SAAO,SAAS,aAAa,kBAAkB;AACjD;AAwBO,IAAM,yCAAyC,CACpD,UACA,UACS;AACT,wCAAsC,UAAU,KAAK;AACrD,MAAI,SAAS,iBAAiB,KAAK,SAAS,iBAAiB,GAAG;AAC9D,UAAM,IAAI;AAAA,MACR,2CAA2C,SAAS,cAAc;AAAA,IACpE;AAAA,EACF;AAEA,sBAAoB,qDAAqD,EAAE;AAAA,IACzE,SAAS;AAAA,EACX;AAEA,MAAI,SAAS,qBAAqB,SAAS,MAAM,oBAAoB,QAAQ;AAC3E,UAAM,IAAI;AAAA,MACR,+DAA+D,SAAS,qBAAqB,OAAO,SAAS,CAAC,uCAAuC,MAAM,oBAAoB,OAAO,SAAS,CAAC;AAAA,IAClM;AAAA,EACF;AACF;AAEO,IAAM,sCAAsC,CACjD,UACA,mBACA,UACmC;AACnC,QAAM,iBAAiB,mCAAmC,UAAU,iBAAiB;AAGrF,QAAM,uBAAuB,WAAW,MAAM,qBAAqB,cAAc;AAEjF,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF;AACA,yCAAuC,QAAQ,KAAK;AACpD,SAAO;AACT;AAmBO,IAAM,0CAA0C,CACrD,YACS;AACT,wCAAsC,OAAO;AAE7C,MAAI,QAAQ,SAAS,MAAM;AACzB,UAAM,IAAI;AAAA,MACR,oEAAoE,QAAQ,IAAI;AAAA,IAClF;AAAA,EACF;AACA,MAAI,QAAQ,gBAAgB,OAAO;AACjC,UAAM,IAAI;AAAA,MACR,4EAA4E,QAAQ,WAAW;AAAA,IACjG;AAAA,EACF;AACA,MAAI,QAAQ,mBAAmB,GAAG;AAChC,UAAM,IAAI;AAAA,MACR,2EAA2E,QAAQ,cAAc;AAAA,IACnG;AAAA,EACF;AACA,MAAI,QAAQ,6BAA6B,GAAG;AAC1C,UAAM,IAAI;AAAA,MACR,qFAAqF,QAAQ,wBAAwB;AAAA,IACvH;AAAA,EACF;AAEA,qBAAmB,0DAA0D,EAAE;AAAA,IAC7E,QAAQ;AAAA,EACV;AACA,MAAI,QAAQ,yBAAyB,WAAW,IAAI;AAClD,UAAM,IAAI;AAAA,MACR,6FAA6F,QAAQ,yBAAyB,OAAO,SAAS,CAAC;AAAA,IACjJ;AAAA,EACF;AAEA,MAAI,QAAQ,UAAU,GAAG;AACvB,UAAM,IAAI;AAAA,MACR,kEAAkE,QAAQ,KAAK;AAAA,IACjF;AAAA,EACF;AACA,MAAI,QAAQ,oBAAoB,GAAG;AACjC,UAAM,IAAI;AAAA,MACR,4EAA4E,QAAQ,eAAe;AAAA,IACrG;AAAA,EACF;AACA,MAAI,QAAQ,eAAe,GAAG;AAC5B,UAAM,IAAI;AAAA,MACR,uEAAuE,QAAQ,UAAU;AAAA,IAC3F;AAAA,EACF;AACA,MAAI,QAAQ,mBAAmB,GAAG;AAChC,UAAM,IAAI;AAAA,MACR,2EAA2E,QAAQ,cAAc;AAAA,IACnG;AAAA,EACF;AAEA,sBAAoB,sDAAsD,EAAE;AAAA,IAC1E,QAAQ;AAAA,EACV;AACA,MAAI,QAAQ,qBAAqB,WAAW,IAAI;AAC9C,UAAM,IAAI;AAAA,MACR,kFAAkF,QAAQ,qBAAqB,OAAO,SAAS,CAAC;AAAA,IAClI;AAAA,EACF;AACF;AAWO,IAAM,uCAAuC,CAClD,aACoC;AACpC,QAAM,UAAU,qBAAqB,UAAU,GAAG,GAAG,SAAS,EAAE,CAAC;AACjE,QAAM,gBAAgB,mCAAmC,OAAO;AAEhE,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH,MAAM;AAAA,IACN,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,sBAAsB,UAAU,EAAE;AAAA,EACpC;AAEA,0CAAwC,MAAM;AAC9C,SAAO;AACT;;;ACnRO,IAAM,mCAAmC,CAC9C,cACA,OACA,iBACgC;AAChC,0BAAwB,cAAc,OAAO,YAAY;AAEzD,QAAM,kBAAkB,oBAAoB,YAAY;AAExD,QAAM,kBAAkB,gBAAgB,IAAI,CAAC,MAAM,mCAAmC,CAAC,CAAC;AAExF,QAAM,kBAAkB,gBAAgB;AAAA,IAAI,CAAC,GAAG,UAC9C,mCAAmC,GAAG,QAAQ,GAAG,KAAK;AAAA,EACxD;AAEA,QAAM,oBAAoB,uCAAuC,iBAAiB,KAAK;AAEvF,QAAM,mBAAmB,gBAAgB;AAAA,IAAI,CAAC,MAC5C,oCAAoC,GAAG,mBAAmB,KAAK;AAAA,EACjE;AAEA,QAAM,YAAY,IAAI,IAAI,iBAAiB,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAEtE,SAAO,EAAE,YAAY,MAAM,YAAY,OAAO,mBAAmB,WAAW,aAAa;AAC3F;;;ACxCO,SAAS,6BACd,aACA,aACiC;AACjC,QAAM,SAAS,0BAA0B,YAAY,OAAO,YAAY,YAAY;AACpF,SAAO;AAAA,IACL,YAAY,YAAY;AAAA,IACxB,OAAO,YAAY;AAAA,IACnB,WAAW,eAAe,YAAY,WAAW,WAAW;AAAA,IAC5D,mBAAmB,YAAY;AAAA,IAC/B;AAAA,IACA;AAAA,IACA,cAAc,YAAY;AAAA,EAC5B;AACF;;;ACxBO,IAAM,uCAAuC,CAAC,UAA8C;AACjG,sBAAoB,kDAAkD,EAAE;AAAA,IACtE,MAAM;AAAA,EACR;AAEA,6BAA2B,MAAM,qBAAqB;AAEtD,mCAAiC,KAAK;AACxC;AAEO,IAAM,oCAAoC,CAC/C,qBACA,uBACA,WACA,SACA,eACA,aACiC;AACjC,QAAM,SAAS;AAAA,IACb,YAAY,2BAA2B;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,uCAAqC,MAAM;AAE3C,SAAO;AACT;;;ACxBO,IAAM,iDAAiD,CAC5D,YACS;AACT,6BAA2B,QAAQ,mBAAmB;AACtD,mBAAiB,QAAQ,6BAA6B;AAEtD,qBAAmB,sEAAsE,EAAE;AAAA,IACzF,QAAQ;AAAA,EACV;AAEA,sBAAoB,2DAA2D,EAAE;AAAA,IAC/E,QAAQ;AAAA,EACV;AACF;AAgBO,IAAM,8CAA8C,CACzD,WACA,uBAC2C;AAC3C,MAAI,sBAAsB;AAC1B,MAAI,gCAAgC;AACpC,MAAI,sCAAsC;AAE1C,aAAW,YAAY,WAAW;AAChC,2BAAuB,SAAS;AAChC,qCAAiC,SAAS;AAC1C,2CAAuC,SAAS,yBAAyB;AAAA,EAC3E;AAEA,QAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,IACA,+BAA+B,SAAS,mCAAmC;AAAA,IAC3E;AAAA,EACF;AAEA,iDAA+C,iBAAiB;AAEhE,SAAO;AACT;;;ACpFO,SAAS,sBAAsB,mBAAmC;AACvE,QAAM,0BAA0B;AAChC,QAAM,yBAAyB;AAC/B,QAAM,2BACJ,kBAAkB,SAAS,0BAA0B;AAEvD,SACE,kBAAkB,MAAM,GAAG,wBAAwB,IACnD,MACA,kBAAkB,MAAM,2BAA2B,sBAAsB;AAE7E;AAQO,SAAS,gBAAgB,KAAa,KAAqB;AAChE,QAAM,IAAI,OAAO,sBAAsB,GAAG,CAAC;AAC3C,QAAM,IAAI,OAAO,sBAAsB,GAAG,CAAC;AAC3C,SAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;AAClC;;;ACSO,IAAM,qCAAgD,UAAU,GAAG;AAsCnE,IAAM,4CAA4C,CACvD,UACS;AACT,sBAAoB,uDAAuD,EAAE;AAAA,IAC3E,MAAM;AAAA,EACR;AAEA,sBAAoB,mEAAmE,EAAE;AAAA,IACvF,MAAM;AAAA,EACR;AAEA,MACE,CAAC,OAAO,SAAS,MAAM,qBAAqB,KAC5C,MAAM,wBAAwB,KAC9B,MAAM,wBAAwB,GAC9B;AACA,UAAM,IAAI;AAAA,MACR,qGAAqG,MAAM,qBAAqB;AAAA,IAClI;AAAA,EACF;AAEA,aAAW,KAAK,MAAM,mBAAmB;AACvC,6BAAyB,EAAE,QAAQ;AACnC,QAAI,EAAE,OAAO,KAAK,EAAE,WAAW,GAAG;AAChC,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,4BAA4B,MAAM,kBAAkB,IAAI,CAAC,MAAM,EAAE,QAAQ;AAC/E,QAAM,kCAAkC,IAAI,IAAI,yBAAyB;AACzE,MAAI,gCAAgC,SAAS,0BAA0B,QAAQ;AAC7E,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,mCAAiC,KAAK;AACxC;AAEO,IAAM,yCAAyC,CACpD,qBACA,iCACA,uBACA,WACA,SACA,eACA,UACA,oBAA8D,CAAC,MACzB;AACtC,QAAM,SAAS;AAAA,IACb,YAAY,2BAA2B;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,4CAA0C,MAAM;AAEhD,SAAO;AACT;AAWO,SAAS,iCACd,UACA,8BACA,OACS;AACT,QAAM,qBAAqB,iBAAiB,QAAQ;AACpD,QAAM,sBAAsB,MAAM,kBAAkB;AAAA,IAClD,CAAC,MAAM,EAAE,aAAa;AAAA,EACxB;AACA,SACE,6BAA6B,UAAU,MAAM,gCAAgC,UAC7E,CAAC;AAEL;;;AC7IO,IAAM,uCAAuC,CAClD,YACS;AACT,0BAAwB,OAAO;AAE/B,QAAM,uCAAuC;AAAA,IAC1C,mCAAmC,SAAS,OAAO,QAAQ,wBAAwB,IAClF,OAAO,gBAAgB;AAAA,EAC3B;AACA,MAAI,QAAQ,6BAA6B,WAAW,qCAAqC,QAAQ;AAC/F,UAAM,IAAI;AAAA,MACR,uEAAuE,QAAQ,6BAA6B,OAAO,SAAS,CAAC,eAAe,qCAAqC,OAAO,SAAS,CAAC;AAAA,IACpM;AAAA,EACF;AACF;AAEO,IAAM,oCAAoC,CAC/C,YACiC;AACjC,QAAM,+BAA+B;AAAA,IAClC,mCAAmC,SAAS,OAAO,QAAQ,wBAAwB,IAClF,OAAO,gBAAgB;AAAA,EAC3B;AAEA,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH;AAAA,EACF;AAEA,uCAAqC,MAAM;AAC3C,SAAO;AACT;AAoCO,IAAM,6CAA6C,CACxD,SACA,UACS;AACT,uCAAqC,OAAO;AAC5C,uBAAqB,QAAQ,IAAI;AAEjC,QAAM,sBAAsB;AAAA,IAC1B,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR;AAAA,EACF;AACA,MAAI,QAAQ,gBAAgB,qBAAqB;AAC/C,UAAM,IAAI;AAAA,MACR,4DAA4D,QAAQ,WAAW,eAAe,mBAAmB;AAAA,IACnH;AAAA,EACF;AAEA,QAAM,mBACJ,MAAM,kBAAkB,KAAK,CAAC,MAAM,EAAE,aAAa,QAAQ,QAAQ,KAAK;AAE1E,MAAI,QAAQ,yBAAyB,qBAAqB,OAAO;AAC/D,UAAM,IAAI;AAAA,MACR,oEAAoE,QAAQ,mBAAmB,eAAe,qBAAqB,IAAI;AAAA,IACzI;AAAA,EACF;AAEA,QAAM,iBAAiB,kBAAkB,UAAU;AACnD,MAAI,QAAQ,gCAAgC,gBAAgB;AAC1D,UAAM,IAAI;AAAA,MACR,4EAA4E,QAAQ,2BAA2B,eAAe,cAAc;AAAA,IAC9I;AAAA,EACF;AACF;AAEO,IAAM,0CAA0C,CACrD,UACA,MACA,UACuC;AACvC,QAAM,mBACJ,MAAM,kBAAkB,KAAK,CAAC,MAAM,EAAE,aAAa,SAAS,QAAQ,KAAK;AAE3E,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACA,qBAAqB,qBAAqB;AAAA,IAC1C,6BAA6B,kBAAkB,UAAU;AAAA,EAC3D;AAEA,6CAA2C,QAAQ,KAAK;AACxD,SAAO;AACT;AA4BO,IAAM,8CAA8C,CACzD,SACA,UACS;AACT,6CAA2C,SAAS,KAAK;AAEzD,sBAAoB,wDAAwD,EAAE;AAAA,IAC5E,QAAQ;AAAA,EACV;AAEA,sBAAoB,0DAA0D,EAAE;AAAA,IAC9E,QAAQ;AAAA,EACV;AAEA,MAAI,QAAQ,uBAAuB,QAAQ,qBAAqB,WAAW,IAAI;AAC7E,UAAM,IAAI;AAAA,MACR,qHAAqH,QAAQ,qBAAqB,OAAO,SAAS,CAAC;AAAA,IACrK;AAAA,EACF;AAEA,MAAI,QAAQ,qBAAqB,SAAS,MAAM,oBAAoB,QAAQ;AAC1E,UAAM,IAAI;AAAA,MACR,oEAAoE,QAAQ,qBAAqB,OAAO,SAAS,CAAC,uCAAuC,MAAM,oBAAoB,OAAO,SAAS,CAAC;AAAA,IACtM;AAAA,EACF;AAEA,MAAI,QAAQ,qBAAqB,SAAS,QAAQ,mBAAmB,QAAQ;AAC3E,UAAM,IAAI;AAAA,MACR,oEAAoE,QAAQ,qBAAqB,OAAO,SAAS,CAAC,sCAAsC,QAAQ,mBAAmB,OAAO,SAAS,CAAC;AAAA,IACtM;AAAA,EACF;AACF;AAEO,IAAM,2CAA2C,CACtD,UACA,oBACA,sBACA,UACwC;AACxC,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF;AAEA,8CAA4C,QAAQ,KAAK;AACzD,SAAO;AACT;AAmBO,IAAM,+CAA+C,CAC1D,SACA,UACS;AACT,0BAAwB,OAAO;AAE/B,MAAI,QAAQ,SAAS,MAAM;AACzB,UAAM,IAAI;AAAA,MACR,yEAAyE,QAAQ,IAAI;AAAA,IACvF;AAAA,EACF;AACA,MAAI,QAAQ,gBAAgB,OAAO;AACjC,UAAM,IAAI;AAAA,MACR,iFAAiF,QAAQ,WAAW;AAAA,IACtG;AAAA,EACF;AAEA,QAAM,mBACJ,MAAM,kBAAkB,KAAK,CAAC,MAAM,EAAE,aAAa,QAAQ,QAAQ,KAAK;AAE1E,MAAI,QAAQ,yBAAyB,qBAAqB,OAAO;AAC/D,UAAM,IAAI;AAAA,MACR,sEAAsE,QAAQ,mBAAmB,eAAe,qBAAqB,IAAI;AAAA,IAC3I;AAAA,EACF;AAEA,QAAM,iBAAiB,kBAAkB,UAAU;AACnD,MAAI,QAAQ,gCAAgC,gBAAgB;AAC1D,UAAM,IAAI;AAAA,MACR,8EAA8E,QAAQ,2BAA2B,eAAe,cAAc;AAAA,IAChJ;AAAA,EACF;AAEA,MAAI,QAAQ,mBAAmB,GAAG;AAChC,UAAM,IAAI;AAAA,MACR,gFAAgF,QAAQ,cAAc;AAAA,IACxG;AAAA,EACF;AACA,MAAI,QAAQ,6BAA6B,GAAG;AAC1C,UAAM,IAAI;AAAA,MACR,0FAA0F,QAAQ,wBAAwB;AAAA,IAC5H;AAAA,EACF;AAEA,qBAAmB,+DAA+D,EAAE;AAAA,IAClF,QAAQ;AAAA,EACV;AACA,MAAI,QAAQ,yBAAyB,WAAW,IAAI;AAClD,UAAM,IAAI;AAAA,MACR,kGAAkG,QAAQ,yBAAyB,OAAO,SAAS,CAAC;AAAA,IACtJ;AAAA,EACF;AAEA,sBAAoB,mEAAmE,EAAE;AAAA,IACvF,QAAQ;AAAA,EACV;AACA,MAAI,QAAQ,6BAA6B,WAAW,IAAI;AACtD,UAAM,IAAI;AAAA,MACR,sGAAsG,QAAQ,6BAA6B,OAAO,SAAS,CAAC;AAAA,IAC9J;AAAA,EACF;AAEA,sBAAoB,yDAAyD,EAAE;AAAA,IAC7E,QAAQ;AAAA,EACV;AACA,MAAI,QAAQ,mBAAmB,WAAW,IAAI;AAC5C,UAAM,IAAI;AAAA,MACR,4FAA4F,QAAQ,mBAAmB,OAAO,SAAS,CAAC;AAAA,IAC1I;AAAA,EACF;AAEA,sBAAoB,2DAA2D,EAAE;AAAA,IAC/E,QAAQ;AAAA,EACV;AACA,MAAI,QAAQ,qBAAqB,WAAW,IAAI;AAC9C,UAAM,IAAI;AAAA,MACR,8FAA8F,QAAQ,qBAAqB,OAAO,SAAS,CAAC;AAAA,IAC9I;AAAA,EACF;AACF;AAKO,IAAM,4CAA4C,CACvD,UACA,UACyC;AACzC,QAAM,UAAU,qBAAqB,UAAU,GAAG,GAAG,SAAS,EAAE,CAAC;AAEjE,QAAM,mBACJ,MAAM,kBAAkB,KAAK,CAAC,MAAM,EAAE,aAAa,QAAQ,QAAQ,KAAK;AAE1E,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH,8BAA8B,UAAU,EAAE;AAAA,IAC1C,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB,UAAU,EAAE;AAAA,IAChC,sBAAsB,UAAU,EAAE;AAAA,IAClC,qBAAqB,qBAAqB;AAAA,IAC1C,6BAA6B,kBAAkB,UAAU;AAAA,EAC3D;AAEA,+CAA6C,QAAQ,KAAK;AAC1D,SAAO;AACT;;;AC/PO,IAAM,wCAAwC,CACnD,QACA,OACA,iBACqC;AAKrC,QAAM,eAAe,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC;AAG3E,QAAM,iBAAiB,oBAAI,IAAgC;AAC3D,MAAI,sBAAsB,MAAM,oBAAoB;AAEpD,aAAW,SAAS,cAAc;AAChC,UAAM,WAAW,iBAAiB,MAAM,QAAQ;AAEhD,QAAI,QAAQ,eAAe,IAAI,QAAQ;AACvC,QAAI,CAAC,OAAO;AACV,cAAQ;AAAA,QACN,gBAAgB;AAAA,QAChB,0BAA0B;AAAA,QAC1B,gCAAgC;AAAA,QAChC,cAAc;AAAA,QACd,2BAA2B;AAAA,MAC7B;AACA,qBAAe,IAAI,UAAU,KAAK;AAAA,IACpC;AAGA,UAAM,kBAAkB;AACxB,UAAM,4BAA4B,MAAM;AACxC,UAAM,kCAAkC,MAAM,+BAA+B;AAI7E,UAAM,yBACH,mCAAmC,SAAS,OAAO,MAAM,wBAAwB,IAClF,OAAO,gBAAgB;AAGzB,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,UAAU,sBAAsB;AAAA,MAChC;AAAA,IACF;AAEA,QAAI,kBAAkB,CAAC,MAAM,cAAc;AAGzC,YAAM,iCAAiC;AAAA,QACrC,UAAU,sBAAsB;AAAA,QAChC,MAAM;AAAA,MACR,EAAE;AACF,YAAM,cACJ,iCAAiC,sBAC7B,iCACA;AACN,YAAM,6BAA6B;AACnC,6BAAuB;AACvB,YAAM,eAAe;AAAA,IACvB,WAAW,MAAM,cAAc;AAE7B,YAAM,+BACH,mCAAmC,SAAS,OAAO,MAAM,mBAAmB,IAC7E,OAAO,gBAAgB;AACzB,YAAM,iCAAiC;AAAA,QACrC,UAAU,4BAA4B;AAAA,QACtC,MAAM;AAAA,MACR,EAAE;AACF,YAAM,cACJ,iCAAiC,sBAC7B,iCACA;AACN,YAAM,6BAA6B;AACnC,6BAAuB;AAAA,IACzB;AAAA,EAEF;AAOA,QAAM,kBAAkB,CAAC,GAAG,eAAe,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM;AAChE,UAAM,SAAS,eAAe,IAAI,CAAC;AACnC,UAAM,SAAS,eAAe,IAAI,CAAC;AAGnC,QAAI,OAAO,8BAA8B,OAAO,2BAA2B;AACzE,aAAO,OAAO,4BAA4B,OAAO,4BAA4B,IAAI;AAAA,IACnF;AAGA,QAAI,OAAO,6BAA6B,OAAO,0BAA0B;AACvE,aAAO,OAAO,2BAA2B,OAAO;AAAA,IAClD;AAGA,QAAI,IAAI,EAAG,QAAO;AAClB,QAAI,IAAI,EAAG,QAAO;AAClB,WAAO;AAAA,EACT,CAAC;AAGD,QAAM,mBAA0D,gBAAgB;AAAA,IAC9E,CAAC,cAAc,UAAU;AAGvB,YAAM,QAAQ,eAAe,IAAI,YAAY;AAE7C,YAAM,cAAc;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,MAAM,8BAA8B;AAAA,MAC/C;AAEA,YAAM,kBAAkB,kCAAkC,WAAW;AAErE,YAAM,gBAAgB;AAAA,QACpB;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACF;AAEA,YAAM,qBAAqB;AAAA,QACzB,gBAAgB;AAAA,QAChB,MAAM;AAAA,MACR;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,UAAU,MAAM,yBAAyB;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,qBAAqB,UAAU,mBAAmB;AAExD,QAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,EACF;AAEA,QAAM,YAAY,IAAI,IAAI,iBAAiB,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAEtE,SAAO,EAAE,YAAY,MAAM,YAAY,OAAO,mBAAmB,WAAW,aAAa;AAC3F;;;AC9MO,SAAS,kCACd,aACA,aACsC;AACtC,QAAM,SAAS,0BAA0B,YAAY,OAAO,YAAY,YAAY;AACpF,SAAO;AAAA,IACL,YAAY,YAAY;AAAA,IACxB,OAAO,YAAY;AAAA,IACnB,WAAW,eAAe,YAAY,WAAW,WAAW;AAAA,IAC5D,mBAAmB,YAAY;AAAA,IAC/B;AAAA,IACA;AAAA,IACA,cAAc,YAAY;AAAA,EAC5B;AACF;;;ACCO,SAAS,wCACd,WACM;AACN,QAAM,YAAY,MAAM,KAAK,UAAU,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,MAAM,MAAM,QAAQ,OAAO,IAAI;AAE7F,MAAI,WAAW;AACb,UAAM,CAAC,KAAK,MAAM,IAAI;AACtB,UAAM,IAAI;AAAA,MACR,oDAAoD,GAAG,iCAAiC,OAAO,IAAI;AAAA,IACrG;AAAA,EACF;AACF;AASO,SAAS,qCACd,SACiC;AAEjC,QAAM,aAAa,QAAQ,OAAO,CAAC,QAAQ,WAAW;AACpD,WAAO,IAAI,OAAO,OAAO,OAAO,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC;AAC1D,WAAO;AAAA,EACT,GAAG,oBAAI,IAAwC,CAAC;AAEhD,QAAM,aAAa,MAAM,KAAK,WAAW,QAAQ,CAAC,EAC/C,OAAO,CAAC,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,EAChC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,MAAM,KAAK,eAAe;AAE5D,MAAI,WAAW,SAAS,GAAG;AACzB,UAAM,IAAI,MAAM,4CAA4C,WAAW,KAAK,IAAI,CAAC,EAAE;AAAA,EACrF;AAEA,QAAM,YAAY,IAAI,IAAI,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,MAAM,MAAM,CAAC,CAAC;AACxE,0CAAwC,SAAS;AACjD,SAAO;AACT;;;AC7EO,IAAM,0BAA0B;AAoChC,IAAM,qBAAN,MAAM,oBAAmB;AAAA,EACb;AAAA,EAEjB,OAAO,iBAAgC;AACrC,WAAO;AAAA,MACL,KAAK,IAAI,IAAI,uBAAuB;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,YAAY,UAAkC,CAAC,GAAG;AAChD,SAAK,UAAU;AAAA,MACb,GAAG,oBAAmB,eAAe;AAAA,MACrC,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EAEA,aAAsC;AACpC,WAAO,OAAO,OAAO;AAAA,MACnB,KAAK,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI;AAAA,IACpC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,aAAa,mCACX,KAC0C;AAC1C,UAAM,WAAW,MAAM,MAAM,GAAG;AAEhC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,QAAQ,SAAS,MAAM,KAAK,SAAS,UAAU,EAAE;AAAA,IACnE;AAEA,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,QAAQ;AACN,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,UAAM,iBAAiB,gDAAgD,IAAI;AAE3E,WAAO,qCAAqC,cAAc;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6DA,MAAM,2BACJ,SAC0C;AAC1C,UAAM,MAAM,IAAI,IAAI,yCAAyC,KAAK,QAAQ,GAAG;AAE7E,QAAI,aAAa,IAAI,WAAW,QAAQ,OAAO;AAC/C,QAAI,QAAQ,KAAM,KAAI,aAAa,IAAI,QAAQ,QAAQ,KAAK,SAAS,CAAC;AACtE,QAAI,QAAQ;AACV,UAAI,aAAa,IAAI,kBAAkB,QAAQ,eAAe,SAAS,CAAC;AAE1E,UAAM,WAAW,MAAM,MAAM,GAAG;AAIhC,QAAI;AACJ,QAAI;AACF,qBAAe,MAAM,SAAS,KAAK;AAAA,IACrC,QAAQ;AACN,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAOA,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8FA,MAAM,2BACJ,SAC0C;AAC1C,UAAM,MAAM,IAAI;AAAA,MACd,6BAA6B,mBAAmB,QAAQ,QAAQ,CAAC;AAAA,MACjE,KAAK,QAAQ;AAAA,IACf;AAGA,QAAI,aAAa,IAAI,YAAY,QAAQ,SAAS,KAAK,GAAG,CAAC;AAE3D,UAAM,WAAW,MAAM,MAAM,GAAG;AAIhC,QAAI;AACJ,QAAI;AACF,qBAAe,MAAM,SAAS,KAAK;AAAA,IACrC,QAAQ;AACN,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAOA,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqCA,MAAM,sBAAwE;AAC5E,UAAM,MAAM,IAAI,IAAI,6BAA6B,KAAK,QAAQ,GAAG;AAEjE,UAAM,WAAW,MAAM,MAAM,GAAG;AAIhC,QAAI;AACJ,QAAI;AACF,qBAAe,MAAM,SAAS,KAAK;AAAA,IACrC,QAAQ;AACN,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAOA,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF;;;ACrXO,SAAS,0CACd,gBACiC;AACjC,QAAM,gBAAgB,yBAAyB,cAAc;AAE7D,QAAM,WAAyC;AAAA,IAC7C,MAAM;AAAA,IACN,aAAa;AAAA,IACb,OAAO;AAAA,MACL,UAAU,OAAO;AAAA,MACjB;AAAA,MACA,eAAe,sBAAsB;AAAA,MACrC,eAAe,sBAAsB;AAAA,MACrC;AAAA,MACA,IAAI,IAAI,gDAAgD;AAAA,IAC1D;AAAA,EACF;AAEA,QAAM,WAAyC;AAAA,IAC7C,MAAM;AAAA,IACN,aAAa;AAAA,IACb,OAAO;AAAA,MACL,UAAU,OAAO;AAAA,MACjB,UAAU,KAAK;AAAA,MACf;AAAA,MACA,eAAe,sBAAsB;AAAA,MACrC,eAAe,sBAAsB;AAAA,MACrC;AAAA;AAAA,MAEA,IAAI,IAAI,gDAAgD;AAAA,MACxD,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO,qCAAqC,CAAC,UAAU,QAAQ,CAAC;AAClE;;;ACPO,IAAM,4BAA4B,CACvC,UACA,gBAC2B;AAC3B,QAAM,SAAS,0BAA0B,YAAY,OAAO,YAAY,YAAY;AAEpF,UAAQ,YAAY,YAAY;AAAA,IAC9B,KAAK,2BAA2B,UAAU;AACxC,YAAM,yBAAyB,YAAY,UAAU,IAAI,QAAQ;AACjE,UAAI,wBAAwB;AAC1B,eAAO;AAAA,UACL,YAAY,YAAY;AAAA,UACxB,MAAM,8BAA8B;AAAA,UACpC,OAAO,YAAY;AAAA,UACnB,UAAU;AAAA,UACV,mBAAmB,YAAY;AAAA,UAC/B;AAAA,UACA,cAAc,YAAY;AAAA,QAC5B;AAAA,MACF;AACA,aAAO;AAAA,QACL,YAAY,YAAY;AAAA,QACxB,MAAM,8BAA8B;AAAA,QACpC,OAAO,YAAY;AAAA,QACnB,UAAU,qCAAqC,QAAQ;AAAA,QACvD,mBAAmB,YAAY;AAAA,QAC/B;AAAA,QACA,cAAc,YAAY;AAAA,MAC5B;AAAA,IACF;AAAA,IAEA,KAAK,2BAA2B,eAAe;AAC7C,YAAM,yBAAyB,YAAY,UAAU,IAAI,QAAQ;AACjE,UAAI,wBAAwB;AAC1B,eAAO;AAAA,UACL,YAAY,YAAY;AAAA,UACxB,MAAM,8BAA8B;AAAA,UACpC,OAAO,YAAY;AAAA,UACnB,UAAU;AAAA,UACV,mBAAmB,YAAY;AAAA,UAC/B;AAAA,UACA,cAAc,YAAY;AAAA,QAC5B;AAAA,MACF;AACA,aAAO;AAAA,QACL,YAAY,YAAY;AAAA,QACxB,MAAM,8BAA8B;AAAA,QACpC,OAAO,YAAY;AAAA,QACnB,UAAU,0CAA0C,UAAU,YAAY,KAAK;AAAA,QAC/E,mBAAmB,YAAY;AAAA,QAC/B;AAAA,QACA,cAAc,YAAY;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AACF;;;ACnFO,IAAM,6BAA6B,CACxC,YACA,gBAC4B;AAC5B,QAAM,cAAc,oCAAoC,YAAY,WAAW;AAE/E,UAAQ,YAAY,YAAY;AAAA,IAC9B,KAAK,2BAA2B;AAC9B,aAAO,6BAA6B,aAAa,WAAW;AAAA,IAC9D,KAAK,2BAA2B;AAC9B,aAAO,kCAAkC,aAAa,WAAW;AAAA,EACrE;AACF;;;ACrCA,IAAAC,eAAyC;AAMlC,SAAS,oBAAoB,SAAuB;AACzD,QAAM,YAAY,IAAI,IAAI,yBAAyB;AAEnD,YAAU,aAAa,IAAI,gBAAY,yBAAW,OAAO,CAAC;AAE1D,SAAO;AACT;","names":["import_v4","import_v4","CAIP2","name","regex","parameters","delimiter","values","CAIP10","AssetName","CAIP19AssetType","CAIP19AssetId","CAIP","assetName","assetType","assetId","splitParams","id","spec","split","getParams","arr","params","forEach","value","index","joinParams","Object","map","parameter","param","join","isValidId","RegExp","test","length","keys","matches","filter","x","ChainId","parse","namespace","reference","Error","toJSON","format","toString","AccountId","chainId","address","AssetType","AssetId","tokenId","import_viem","import_viem","BaseRegistrar","BaseRegistrar","import_viem","Registry","Registry","BaseRegistrar","import_chains","Registry","NameWrapper","Registry","Registry","BaseRegistrar","NameWrapper","import_chains","Registry","BaseRegistrar","NameWrapper","import_viem","import_chains","Registry","BaseRegistrar","import_viem","currencyInfo","import_v4","import_v4","import_v4","z","z","import_v4","z","z","z","import_viem"]}
|