@algorandfoundation/puya-ts 1.0.2-beta.2 → 1.1.0-beta.1
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/awst_build/arc4-util.d.ts +5 -1
- package/bin/download-puya-binary.mjs +2 -2
- package/bin/puyats-ls.mjs +3 -3
- package/bin/run-cli.mjs +5 -5
- package/{check-node-version-D8Nrsfl_.js → check-node-version-CtzvzQu5.js} +2 -2
- package/{check-node-version-D8Nrsfl_.js.map → check-node-version-CtzvzQu5.js.map} +1 -1
- package/cli.mjs +5 -5
- package/{compile-9vC7vSko.js → compile-aQuHq9aX.js} +3 -3
- package/{compile-9vC7vSko.js.map → compile-aQuHq9aX.js.map} +1 -1
- package/{console-log-sink-CMYe8JXy.js → console-log-sink-C0u_GjoF.js} +2 -2
- package/{console-log-sink-CMYe8JXy.js.map → console-log-sink-C0u_GjoF.js.map} +1 -1
- package/index.mjs +5 -5
- package/{options-DLW_Tu42.js → options-bdkR01m5.js} +4865 -4833
- package/options-bdkR01m5.js.map +1 -0
- package/package.json +2 -2
- package/puya/puya-binary.d.ts +1 -0
- package/{resolve-puya-path-LGppZCBg.js → resolve-puya-path-YORRh-ku.js} +3 -2
- package/resolve-puya-path-YORRh-ku.js.map +1 -0
- package/options-DLW_Tu42.js.map +0 -1
- package/resolve-puya-path-LGppZCBg.js.map +0 -1
package/package.json
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
"**"
|
|
7
7
|
],
|
|
8
8
|
"name": "@algorandfoundation/puya-ts",
|
|
9
|
-
"version": "1.0
|
|
9
|
+
"version": "1.1.0-beta.1",
|
|
10
10
|
"description": "Compiles Algorand TypeScript into byte code which runs on the Algorand Virtual Machine (AVM)",
|
|
11
11
|
"private": false,
|
|
12
12
|
"author": "Algorand foundation",
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@algorandfoundation/algorand-typescript": "1.0
|
|
15
|
+
"@algorandfoundation/algorand-typescript": "1.1.0-beta.1",
|
|
16
16
|
"arcsecond": "^5.0.0",
|
|
17
17
|
"argparse": "^2.0.1",
|
|
18
18
|
"chalk": "^5.4.1",
|
package/puya/puya-binary.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare function getPuyaStorageDir(): string;
|
|
|
3
3
|
export declare function getCachedPuyaBinaryPath(puyaStorageDir: string, version: SemVer): string;
|
|
4
4
|
/**
|
|
5
5
|
* Downloads the Puya binary for a specific release version
|
|
6
|
+
* @param puyaStorageDir The directory where puya binaries should be stored once downloaded
|
|
6
7
|
* @param version The release version to download (e.g., "1.0.0")
|
|
7
8
|
* @returns Promise that resolves to the path of the extracted binary
|
|
8
9
|
*/
|
|
@@ -963,6 +963,7 @@ function getPlatformDetails() {
|
|
|
963
963
|
}
|
|
964
964
|
/**
|
|
965
965
|
* Downloads the Puya binary for a specific release version
|
|
966
|
+
* @param puyaStorageDir The directory where puya binaries should be stored once downloaded
|
|
966
967
|
* @param version The release version to download (e.g., "1.0.0")
|
|
967
968
|
* @returns Promise that resolves to the path of the extracted binary
|
|
968
969
|
*/
|
|
@@ -1120,5 +1121,5 @@ function isBinaryCached(cachePath) {
|
|
|
1120
1121
|
return false;
|
|
1121
1122
|
}
|
|
1122
1123
|
|
|
1123
|
-
export {
|
|
1124
|
-
//# sourceMappingURL=resolve-puya-path-
|
|
1124
|
+
export { hasFlags as A, intersectsFlags as B, Constants as C, extractModuleName as D, toSubScript as E, FixableCodeError as F, tryConvertEnum as G, wrapInCodeError as H, InternalError as I, enumKeyFromValue as J, patchErrorLocation as K, LogLevel as L, sameSets as M, NotSupported as N, expandMaybeArray as O, PuyaError as P, LoggingContext as a, uint8ArrayToBase64 as b, uint8ArrayToBase32 as c, uint8ArrayToUtf8 as d, base64ToUint8Array as e, base32ToUint8Array as f, bigIntToUint8Array as g, utf8ToUint8Array as h, isMinLevel as i, enumFromValue as j, distinct as k, logger as l, mkDirIfNotExists as m, isIn as n, LogSource as o, parseSemVer as p, invariant as q, resolvePuyaPath as r, CodeError as s, codeInvariant as t, uint8ArrayToBigInt as u, instanceOfAny as v, distinctByEquality as w, sortBy as x, throwError as y, zipStrict as z };
|
|
1125
|
+
//# sourceMappingURL=resolve-puya-path-YORRh-ku.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-puya-path-YORRh-ku.js","sources":["../src/constants.ts","../src/errors.ts","../src/util/base-32.ts","../src/util/base-64.ts","../src/util/index.ts","../src/logger/index.ts","../src/util/sleep.ts","../src/util/lock-file.ts","../src/util/invoke-cli.ts","../src/puya/run-puya.ts","../src/puya/check-puya-version.ts","../src/util/generate-temp-file.ts","../src/puya/puya-binary.ts","../src/puya/semver.ts","../src/puya/resolve-puya-path.ts"],"sourcesContent":["const algoTsPackage = '@algorandfoundation/algorand-typescript'\n\nexport const Constants = {\n algoTsPackage,\n moduleNames: {\n typescript: {\n es5: 'typescript/lib/lib.es5.d.ts',\n },\n polytype: 'polytype/lib/polytype-module.d.ts',\n algoTs: {\n arc28: `${algoTsPackage}/arc-28.d.ts`,\n arc4: {\n index: `${algoTsPackage}/arc4/index.d.ts`,\n encodedTypes: `${algoTsPackage}/arc4/encoded-types.d.ts`,\n c2c: `${algoTsPackage}/arc4/c2c.d.ts`,\n },\n arrays: `${algoTsPackage}/arrays.d.ts`,\n baseContract: `${algoTsPackage}/base-contract.d.ts`,\n box: `${algoTsPackage}/box.d.ts`,\n compiled: `${algoTsPackage}/compiled.d.ts`,\n itxn: `${algoTsPackage}/itxn.d.ts`,\n itxnCompose: `${algoTsPackage}/itxn-compose.d.ts`,\n gtxn: `${algoTsPackage}/gtxn.d.ts`,\n logicSig: `${algoTsPackage}/logic-sig.d.ts`,\n referenceArray: `${algoTsPackage}/reference-array.d.ts`,\n onCompleteAction: `${algoTsPackage}/on-complete-action.d.ts`,\n op: `${algoTsPackage}/op.d.ts`,\n primitives: `${algoTsPackage}/primitives.d.ts`,\n reference: `${algoTsPackage}/reference.d.ts`,\n state: `${algoTsPackage}/state.d.ts`,\n templateVar: `${algoTsPackage}/template-var.d.ts`,\n transactions: `${algoTsPackage}/transactions.d.ts`,\n util: `${algoTsPackage}/util.d.ts`,\n mutableObject: `${algoTsPackage}/mutable-object.d.ts`,\n },\n },\n\n symbolNames: {\n approvalProgramMethodName: 'approvalProgram',\n clearStateProgramMethodName: 'clearStateProgram',\n readonlyDecoratorName: 'arc4.readonly',\n arc4BareDecoratorName: 'arc4.baremethod',\n arc4AbiDecoratorName: 'arc4.abimethod',\n contractOptionsDecoratorName: 'contract',\n logicSigOptionsDecoratorName: 'logicsig',\n constructorMethodName: 'constructor',\n logicSigProgramMethodName: 'program',\n defaultCreateMethodName: '__algots__.defaultCreate',\n conventionalRouting: {\n closeOutOfApplicationMethodName: 'closeOutOfApplication',\n createApplicationMethodName: 'createApplication',\n deleteApplicationMethodName: 'deleteApplication',\n optInToApplicationMethodName: 'optInToApplication',\n updateApplicationMethodName: 'updateApplication',\n },\n },\n\n algo: {\n arc4: {\n logPrefixHex: '151F7C75',\n },\n addressLength: 32,\n encodedAddressLength: 58,\n maxTransactionGroupSize: 16,\n zeroAddressB32: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ',\n },\n\n supportedAvmVersions: [10n, 11n, 12n, 13n],\n targetedPuyaVersion: '5.3.2',\n puyaGithubRepo: 'algorandfoundation/puya',\n minNodeVersion: '20.11.1',\n languageServerSource: 'puyats',\n} as const\n\nexport type SupportedAvmVersion = (typeof Constants.supportedAvmVersions)[number]\n","import type { SourceLocation } from './awst/source-location'\nimport type { PType, PTypeOrClass } from './awst_build/ptypes'\nimport type { CodeFix } from './code-fix/code-fix'\n\ntype PuyaErrorOptions = {\n cause?: Error\n sourceLocation?: SourceLocation\n}\n\nexport class PuyaError extends Error {\n readonly sourceLocation: SourceLocation | undefined\n constructor(message?: string, options?: PuyaErrorOptions) {\n super(message, options)\n this.sourceLocation = options?.sourceLocation\n }\n}\n\n/**\n * Any error that is 'caused' by a user of Puya\n */\nexport abstract class UserError extends PuyaError {}\n\n/**\n * Thrown when the user's code is invalid, or not supported\n */\nexport class CodeError extends UserError {\n static unexpectedUnhandledArgs({ sourceLocation }: { sourceLocation: SourceLocation }) {\n return new CodeError('Unexpected/unhandled args', {\n sourceLocation,\n })\n }\n static unexpectedTypeArgs({ sourceLocation }: { sourceLocation: SourceLocation }) {\n return new CodeError('Function does not accept type arguments', {\n sourceLocation,\n })\n }\n static expectedCompileTimeConstant({ sourceLocation }: { sourceLocation: SourceLocation }) {\n return new CodeError('Expected compile time constant', {\n sourceLocation,\n })\n }\n static invalidAssignmentTarget({ sourceLocation, name }: { sourceLocation: SourceLocation; name: string }) {\n return new CodeError(`${name} is not a valid assignment target`, {\n sourceLocation,\n })\n }\n static cannotResolveToType({\n sourceType,\n targetType,\n sourceLocation,\n }: {\n sourceLocation: SourceLocation\n sourceType: PType\n targetType: PTypeOrClass\n }) {\n return new CodeError(`Cannot resolve expression of type ${sourceType} to ${targetType}`, { sourceLocation })\n }\n}\n\nexport class FixableCodeError extends CodeError {\n readonly codeFix: CodeFix\n constructor(codeFix: CodeFix) {\n super(codeFix.errorMessage, { sourceLocation: codeFix.sourceLocation })\n this.codeFix = codeFix\n }\n}\n\n/**\n * Thrown when the compiler ends up in an unrecoverable state\n */\nexport class InternalError extends PuyaError {\n static shouldBeUnreachable() {\n return new InternalError('Code should be unreachable')\n }\n}\nexport class NotSupported extends CodeError {\n constructor(featureName: string, options?: PuyaErrorOptions) {\n super(`Not Supported: ${featureName}`, options)\n }\n}\n\n/**\n * Thrown when the user's environment is not set up correctly\n */\nexport class EnvironmentError extends UserError {}\n\nexport const throwError = (error: Error): never => {\n throw error\n}\nexport const wrapInCodeError = <T>(func: () => T, sourceLocation: SourceLocation) => {\n try {\n return func()\n } catch (e) {\n if (e instanceof Error) {\n throw new CodeError(e.message, { sourceLocation, cause: e })\n } else {\n throw new CodeError(String(e), { sourceLocation })\n }\n }\n}\n","const BASE32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'.split('')\n\nconst CHAR_TO_NUM = BASE32_ALPHABET.reduce((acc, cur, index) => ((acc[cur] = index), acc), {} as Record<string, number>)\n\nexport const base32ToUint8Array = (value: string): Uint8Array => {\n let allChars = value\n .split('')\n .filter((c) => c !== '=')\n .map((c) => {\n const cUpper = c.toUpperCase()\n if (cUpper in CHAR_TO_NUM) return CHAR_TO_NUM[cUpper]\n throw new Error(`Invalid base32 char ${c}`)\n })\n const bytes = new Array<number>()\n while (allChars.length) {\n const [a, b, c, d, e, f, g, h, ...rest] = allChars\n if (a === undefined || b === undefined) break\n bytes.push(((a << 3) | (b >>> 2)) & 255)\n if (c === undefined || d === undefined) break\n bytes.push(((b << 6) | (c << 1) | (d >>> 4)) & 255)\n if (e === undefined) break\n bytes.push(((d << 4) | (e >>> 1)) & 255)\n if (f === undefined || g === undefined) break\n bytes.push(((e << 7) | (f << 2) | (g >>> 3)) & 255)\n if (h === undefined) break\n bytes.push(((g << 5) | h) & 255)\n allChars = rest\n }\n return new Uint8Array(bytes)\n}\n\nexport const uint8ArrayToBase32 = (value: Uint8Array): string => {\n let allBytes = Array.from(value)\n let base32str = ''\n while (allBytes.length) {\n const [a, b, c, d, e, ...rest] = allBytes ?? [0, 0, 0, 0, 0]\n\n if (allBytes.length < 1) break\n base32str += BASE32_ALPHABET[a >>> 3]\n base32str += BASE32_ALPHABET[((a << 2) | ((b || 0) >>> 6)) & 31]\n if (allBytes.length < 2) break\n base32str += BASE32_ALPHABET[(b >>> 1) & 31]\n base32str += BASE32_ALPHABET[((b << 4) | (c >>> 4)) & 31]\n if (allBytes.length < 3) break\n base32str += BASE32_ALPHABET[((c << 1) | (d >>> 7)) & 31]\n if (allBytes.length < 4) break\n base32str += BASE32_ALPHABET[(d >>> 2) & 31]\n base32str += BASE32_ALPHABET[((d << 3) | (e >>> 5)) & 31]\n if (allBytes.length < 5) break\n base32str += BASE32_ALPHABET[e & 31]\n allBytes = rest\n }\n return base32str\n}\n","/*\nBase 64 encode from/decode to Uint8Array.\n\nWe don't use Node's Uint8Array.from(Buffer.from(value, 'base64')) as it ignores invalid characters rather than erroring!\n\nAdapted from https://github.com/mathiasbynens/base64/blob/master/src/base64.js\n */\n\nimport { throwError } from '../errors'\n\nconst alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('')\n\nconst charToNum = new Map([...alphabet.entries()].map(([i, c]) => [c, i]))\nconst numToChar = new Map(alphabet.entries())\n\nfunction getCharForNum(n: number): string {\n return numToChar.get(n) ?? throwError(new Error(`${n} is outside of the base 64 char range`))\n}\n\nexport function base64ToUint8Array(input: string): Uint8Array {\n let length = input.length\n if (length % 4 === 0) {\n input = input.replace(/==?$/, '')\n length = input.length\n }\n if (length % 4 === 1) {\n throw new Error('Invalid length for base64 string.')\n }\n\n let bitCounter = 0\n let bitStorage = 0\n const output = new Uint8Array(Math.floor((length / 4) * 3))\n let outCounter = 0\n let position = -1\n while (++position < length) {\n const c = input.charAt(position)\n const buffer = charToNum.get(c) ?? throwError(new Error(`Invalid character ${c} at position ${position}`))\n bitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer\n // Unless this is the first of a group of 4 characters…\n if (bitCounter++ % 4) {\n // convert the first 8 bits to a single ASCII character.\n output[outCounter++] = 0xff & (bitStorage >> ((-2 * bitCounter) & 6))\n }\n }\n return output\n}\n\nexport function uint8ArrayToBase64(input: Uint8Array) {\n const padding = input.length % 3\n let output = ''\n let position = -1\n let a\n let b\n let c\n let buffer\n // Make sure any padding is handled outside the loop.\n const length = input.length - padding\n\n while (++position < length) {\n // Read three bytes, i.e. 24 bits.\n a = input[position] << 16\n b = input[++position] << 8\n c = input[++position]\n buffer = a + b + c\n // Turn the 24 bits into four chunks of 6 bits each, and append the\n // matching character for each of them to the output.\n output +=\n getCharForNum((buffer >> 18) & 0x3f) +\n getCharForNum((buffer >> 12) & 0x3f) +\n getCharForNum((buffer >> 6) & 0x3f) +\n getCharForNum(buffer & 0x3f)\n }\n\n if (padding === 2) {\n a = input[position] << 8\n b = input[++position]\n buffer = a + b\n output += `${getCharForNum(buffer >> 10) + getCharForNum((buffer >> 4) & 0x3f) + getCharForNum((buffer << 2) & 0x3f)}=`\n } else if (padding === 1) {\n buffer = input[position]\n output += `${getCharForNum(buffer >> 2) + getCharForNum((buffer << 4) & 0x3f)}==`\n }\n\n return output\n}\n","import fs from 'node:fs'\nimport { TextDecoder } from 'node:util'\nimport pathe from 'pathe'\nimport type { SourceLocation } from '../awst/source-location'\nimport { Constants } from '../constants'\nimport { CodeError, InternalError } from '../errors'\nimport type { DeliberateAny } from '../typescript-helpers'\nimport type { AbsolutePath } from './absolute-path'\n\nexport { base32ToUint8Array, uint8ArrayToBase32 } from './base-32'\nexport { base64ToUint8Array, uint8ArrayToBase64 } from './base-64'\nexport { hexToUint8Array, uint8ArrayToHex } from './base-16'\n\nclass InvariantError extends InternalError {}\n\n/**\n * Checks an invariant condition hold true. If this check fails it indicates the compiler is in an unstable state. For invariants related to\n * user code, use codeInvariant below.\n *\n * @param condition\n * @param message\n * @param sourceLocation\n */\nexport function invariant(condition: unknown, message: string, sourceLocation?: SourceLocation): asserts condition {\n if (!condition) {\n throw new InvariantError(message, { sourceLocation })\n }\n}\n\n/**\n * Checks an invariant related to user code holds true. If this check fails it indicates the user code is not valid. For invariants the user\n * has no control over, use invariant above.\n * @param condition\n * @param message\n * @param sourceLocation\n */\nexport function codeInvariant(condition: unknown, message: string, sourceLocation?: SourceLocation): asserts condition {\n if (!condition) {\n throw new CodeError(message, {\n sourceLocation,\n })\n }\n}\n\nexport const enumFromValue = <TValue, TEnum extends TValue>(\n value: TValue,\n enumType: Record<string, TEnum | string>,\n message: string = 'Invalid enum value: ',\n) => {\n if (Object.values(enumType).some((v) => v === value)) {\n return value as TEnum\n }\n throw new Error(`${message} ${value}`)\n}\n\nexport const enumKeyFromValue = <TValue, TEnum extends TValue>(\n value: TValue,\n enumType: Record<string, TEnum>,\n message: string = 'Invalid enum value: ',\n) => {\n const key = Object.entries(enumType).find(([_, v]) => v === value)?.[0]\n if (key) {\n return key\n }\n throw new Error(`${message} ${value}`)\n}\n\nexport const convertEnum = <TEnumIn, TEnumOut, TKeys extends string>(\n value: TEnumIn,\n fromEnum: Record<TKeys, TEnumIn>,\n toEnum: Record<TKeys, TEnumOut>,\n): TEnumOut => {\n const keyOfValue = Object.entries(fromEnum).find(([, v]) => v === value)?.[0]\n if (!keyOfValue) {\n // missing value\n throw new Error(`key missing: ${value}`)\n }\n return toEnum[keyOfValue as keyof typeof toEnum]\n}\n\nexport const tryConvertEnum = <TEnumIn, TEnumOut, TKeys extends string>(\n value: TEnumIn,\n fromEnum: Record<TKeys, TEnumIn>,\n toEnum: Record<string, TEnumOut>,\n): TEnumOut | undefined => {\n const keyOfValue = Object.entries(fromEnum).find(([, v]) => v === value)?.[0]\n if (!keyOfValue) {\n return undefined\n }\n return toEnum[keyOfValue as keyof typeof toEnum]\n}\n\nexport const expandMaybeArray = <T>(maybeArray: T | T[]): T[] => {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray]\n}\n\nexport const utf8ToUint8Array = (value: string): Uint8Array => {\n const encoder = new TextEncoder()\n return encoder.encode(value)\n}\n\nexport const uint8ArrayToBigInt = (v: Uint8Array): bigint => {\n // Assume big-endian\n return Array.from(v)\n .toReversed()\n .map((byte_value, i): bigint => BigInt(byte_value) << BigInt(i * 8))\n .reduce((a, b) => a + b, 0n)\n}\n\nexport const uint8ArrayToUtf8 = (value: Uint8Array): string => {\n const decoder = new TextDecoder()\n return decoder.decode(value)\n}\n\nexport const bigIntToUint8Array = (val: bigint, fixedSize: number | 'dynamic' = 'dynamic'): Uint8Array => {\n if (val === 0n && fixedSize === 'dynamic') {\n return new Uint8Array(0)\n }\n const maxBytes = fixedSize === 'dynamic' ? 4096 : fixedSize\n\n let hex = val.toString(16)\n\n // Pad the hex with zeros so it matches the size in bytes\n if (fixedSize !== 'dynamic' && hex.length !== fixedSize * 2) {\n hex = hex.padStart(fixedSize * 2, '0')\n } else if (hex.length % 2 === 1) {\n // Pad to 'whole' byte\n hex = `0${hex}`\n }\n if (hex.length > maxBytes * 2) {\n throw new InternalError(`Cannot encode ${val} as ${maxBytes} bytes as it would overflow`)\n }\n const byteArray = new Uint8Array(hex.length / 2)\n for (let i = 0, j = 0; i < hex.length / 2; i++, j += 2) {\n byteArray[i] = parseInt(hex.slice(j, j + 2), 16)\n }\n return byteArray\n}\n\nexport const hasFlags = <T extends number>(value: T, flags: T): boolean => (value & flags) === flags\nexport const intersectsFlags = <T extends number>(value: T, flags: T): boolean => Boolean(value & flags)\n\nexport function toSubScript(num: number) {\n const subNumbers = ['\\u2080', '\\u2081', '\\u2082', '\\u2083', '\\u2084', '\\u2085', '\\u2086', '\\u2087', '\\u2088', '\\u2089']\n return num\n .toFixed(0)\n .split('')\n .map((x) => subNumbers[parseInt(x)])\n .join('')\n}\n\nexport function instanceOfAny<T extends Array<new (...args: DeliberateAny[]) => DeliberateAny>>(\n x: unknown,\n ...types: T\n): x is InstanceType<T[number]> {\n return types.some((t) => x instanceof t)\n}\n\n/**\n * Extract a module name from a file path\n *\n * - Anything in /node_modules/ is truncated to <package-name>/path.ext\n * - Anything in workingDirectory is truncated relative to the workingDirectory\n * - Forward slashes are used to segment paths\n * @param filePath\n * @param workingDirectory\n */\nexport function extractModuleName(filePath: string, workingDirectory: AbsolutePath): string {\n const localPackageName = /packages\\/algo-ts\\/dist\\/(.*)$/.exec(filePath)\n if (localPackageName) {\n return `${Constants.algoTsPackage}/${localPackageName[1]}`\n }\n const nodeModuleName = /.*\\/node_modules\\/(.*)$/.exec(filePath)\n if (nodeModuleName) {\n return nodeModuleName[1]\n }\n const cwd = pathe.normalize(`${workingDirectory}/`)\n const normalizedPath = pathe.normalize(filePath)\n const moduleName = normalizedPath.startsWith(cwd) ? normalizedPath.slice(cwd.length) : normalizedPath\n return moduleName.replaceAll('\\\\', '/')\n}\n\ntype SortFn<T> = (a: T, b: T) => number\n\ntype SortDir = 'asc' | 'desc'\nexport const sortBy =\n <T, TKey>(keySelector: (item: T) => TKey, dir: SortDir = 'asc') =>\n (a: T, b: T) => {\n const keyA = keySelector(a)\n const keyB = keySelector(b)\n return (dir === 'desc' ? -1 : 1) * (keyA < keyB ? -1 : keyA > keyB ? 1 : 0)\n }\n\n/**\n * Combine multiple sort functions to construct a more advanced sort by _this_ then by _that_ function.\n * @param sortFunctions one or more sort functions (the return type of sortBy, and sortByIgnoreCase)\n *\n * Usage:\n * ```\n * const users = allUsers.slice().sort(\n * combineSortFn(\n * sortByIgnoreCase(x => x.familyName),\n * sortByIgnoreCase(x => x.givenName),\n * sortBy(x => x.dateOfBirth)\n * )\n * )\n * ```\n */\nexport const combineSortFn =\n <T>(...sortFunctions: SortFn<T>[]): SortFn<T> =>\n (a, b) => {\n for (const fn of sortFunctions) {\n const res = fn(a, b)\n if (res !== 0) {\n return res\n }\n }\n return 0\n }\n\n/**\n * Can be used to filter a collection to a set of distinct items as determined by a specified key.\n * @param keySelector A lambda which when given an item, returns the items unique identifier\n *\n * Usage:\n *\n * ```\n * const distinctItems = nonDistinctItems.filter(distinct(x => x.uniqueId))\n * ```\n */\nexport const distinct = <T>(keySelector?: (item: T) => unknown) => {\n const ks = keySelector || ((x: T) => x)\n const set = new Set()\n return (item: T) => {\n if (set.has(ks(item))) {\n return false\n }\n\n set.add(ks(item))\n return true\n }\n}\n\nexport const distinctByEquality = <T>(areEqual: (a: T, b: T) => boolean) => {\n const set: T[] = []\n return (item: T) => {\n if (set.some((s) => areEqual(s, item))) return false\n set.push(item)\n return true\n }\n}\n\nexport function mkDirIfNotExists(dir: string) {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n}\n\nexport function sameSets<T>(a: Iterable<T>, b: Iterable<T>) {\n const setA = new Set(a)\n const setB = new Set(b)\n return setA.intersection(setB).size === setA.size\n}\n\nexport const zipStrict = <T1, T2>(array1: T1[], array2: T2[]): [T1, T2][] => {\n invariant(array1.length === array2.length, 'Array lengths must match')\n return array1.map((t1, idx) => [t1, array2[idx]])\n}\n\nexport function isIn<TSubject, TItem extends TSubject>(subject: TSubject, items: readonly TItem[]): subject is TItem {\n return items.some((i) => i === subject)\n}\n\nexport function joinUint8Arrays(...arrays: Uint8Array[]): Uint8Array {\n const length = arrays.reduce((acc, cur) => acc + cur.length, 0)\n const result = new Uint8Array(length)\n let offset = 0\n for (const a of arrays) {\n result.set(a, offset)\n offset += a.length\n }\n return result\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\nimport type { SourceLocation } from '../awst/source-location'\nimport type { CodeFix } from '../code-fix/code-fix'\nimport { FixableCodeError, PuyaError } from '../errors'\nimport { invariant } from '../util'\nimport type { LogSink } from './sinks'\n\ntype NodeOrSourceLocation = SourceLocation //| { sourceLocation: SourceLocation }\n\nexport enum LogLevel {\n Error = 'error',\n Info = 'info',\n Warning = 'warning',\n Debug = 'debug',\n Critical = 'critical',\n}\nexport const logLevelToInt = {\n // values match puya values\n [LogLevel.Critical]: 50,\n [LogLevel.Error]: 40,\n [LogLevel.Info]: 30,\n [LogLevel.Warning]: 20,\n [LogLevel.Debug]: 10,\n}\nexport enum LogSource {\n Unspecified,\n TypeScript,\n Puya,\n CodeFix,\n}\nexport const isMinLevel = (logLevel: LogLevel, minLevel: LogLevel): boolean => {\n return logLevelToInt[minLevel] <= logLevelToInt[logLevel]\n}\n\nconst errorOrCritical = new Set([LogLevel.Error, LogLevel.Critical])\n\nexport const isErrorOrCritical = (l: LogLevel) => errorOrCritical.has(l)\n\nexport type LogEvent = {\n level: LogLevel\n message: string\n sourceLocation: SourceLocation | undefined\n stack?: string\n logSource: LogSource\n codeFix?: CodeFix\n}\n\nclass PuyaLogger {\n private logSinks: LogSink[] = []\n public configure(sinks: LogSink[]) {\n this.logSinks = sinks\n }\n\n addCodeFix(codeFix: CodeFix) {\n invariant(codeFix.sourceLocation.file, 'Code fix cannot be added without a well-formed source location')\n this.addLog(codeFix.logData)\n }\n\n addLog(logEvent: LogEvent) {\n LoggingContext.current.addLog(logEvent)\n for (const sink of this.logSinks) {\n if (isMinLevel(logEvent.level, sink.minLogLevel)) {\n sink.add(logEvent)\n }\n }\n }\n\n error(error: Error): void\n error(source: NodeOrSourceLocation | undefined, message: string): void\n error(sourceOrError: NodeOrSourceLocation | undefined | Error, message?: string): void {\n if (sourceOrError instanceof FixableCodeError) {\n this.addCodeFix(sourceOrError.codeFix)\n } else if (sourceOrError instanceof Error) {\n // Don't include the stack for user errors as the message and source location is what's relevant\n this.addLog({\n level: LogLevel.Error,\n sourceLocation: tryGetSourceLocationFromError(sourceOrError),\n message: `${sourceOrError.message}`,\n stack: sourceOrError.stack,\n logSource: LogSource.Unspecified,\n })\n if (sourceOrError.cause) {\n this.addLog({\n level: LogLevel.Debug,\n sourceLocation: tryGetSourceLocationFromError(sourceOrError.cause),\n message: `Caused by: ${sourceOrError.cause}`,\n stack: (sourceOrError.cause as Error).stack,\n logSource: LogSource.Unspecified,\n })\n }\n } else {\n invariant(message, 'Log should include either a message or an error')\n this.addLog({\n level: LogLevel.Error,\n sourceLocation: sourceOrError,\n message,\n stack: new Error().stack,\n logSource: LogSource.Unspecified,\n })\n }\n }\n info(source: NodeOrSourceLocation | undefined, message: string): void {\n this.addLog({ level: LogLevel.Info, sourceLocation: source, message, logSource: LogSource.Unspecified })\n }\n debug(source: NodeOrSourceLocation | undefined, message: string): void {\n this.addLog({ level: LogLevel.Debug, sourceLocation: source, message, logSource: LogSource.Unspecified })\n }\n warn(source: NodeOrSourceLocation | undefined, message: string): void {\n this.addLog({ level: LogLevel.Warning, sourceLocation: source, message, logSource: LogSource.Unspecified })\n }\n critical(source: NodeOrSourceLocation | undefined, message: string): void {\n this.addLog({ level: LogLevel.Critical, sourceLocation: source, message, logSource: LogSource.Unspecified })\n }\n}\n\nconst tryGetSourceLocationFromError = (error: unknown): SourceLocation | undefined => {\n if (error instanceof PuyaError) {\n return error.sourceLocation\n }\n return undefined\n}\n\nexport const logger = new PuyaLogger()\n\nexport const patchErrorLocation = <TArgs extends unknown[], TReturn>(\n action: (...args: TArgs) => TReturn,\n sourceLocation: SourceLocation,\n) => {\n return (...args: TArgs) => {\n try {\n return action(...args)\n } catch (e) {\n if (e instanceof PuyaError && !e.sourceLocation) {\n Object.assign(e, { sourceLocation })\n }\n throw e\n }\n }\n}\n\nexport class LoggingContext {\n #logEvents: LogEvent[] = []\n #sourcesByPath: Record<string, string[]> = {}\n #logEventsByPath: Record<string, LogEvent[]> = {}\n\n get logEvents(): readonly LogEvent[] {\n return this.#logEvents\n }\n get logEventsByPath(): { readonly [path: string]: readonly LogEvent[] } {\n return this.#logEventsByPath\n }\n\n get sourcesByPath(): { readonly [path: string]: readonly string[] } {\n return this.#sourcesByPath\n }\n\n setSourcesByPath(sourcesByPath: Record<string, string[]>) {\n this.#sourcesByPath = sourcesByPath\n // Ensure every source file has an entry in #logEventsByPath\n for (const filePath of Object.keys(sourcesByPath)) {\n if (filePath in this.#logEventsByPath) continue\n this.#logEventsByPath[filePath] = []\n }\n }\n\n addLog(log: LogEvent) {\n this.#logEvents.push(log)\n const filePath = log.sourceLocation?.file?.toString()\n if (filePath) {\n if (filePath in this.#logEventsByPath) {\n this.#logEventsByPath[filePath].push(log)\n } else {\n this.#logEventsByPath[filePath] = [log]\n }\n }\n }\n\n private constructor() {}\n\n hasErrors(): boolean {\n return this.logEvents.some((e) => isErrorOrCritical(e.level))\n }\n\n exitIfErrors(): void {\n if (this.hasErrors()) process.exit(1)\n }\n\n enterContext() {\n LoggingContext.asyncStore.enterWith(this)\n return this\n }\n\n run<R>(cb: () => R) {\n return LoggingContext.asyncStore.run(this, cb)\n }\n private static fallbackContext = new LoggingContext()\n private static asyncStore = new AsyncLocalStorage<LoggingContext>()\n\n static create(): LoggingContext {\n return new LoggingContext()\n }\n static get current() {\n const ctx = this.asyncStore.getStore()\n if (!ctx) {\n return this.fallbackContext\n }\n return ctx\n }\n}\n","export function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n","import { existsSync, mkdirSync, rmdirSync, statSync } from 'fs'\nimport { onExit } from 'signal-exit'\nimport { logger } from '../logger'\nimport { sleep } from './sleep'\n\nconst lockPaths = new Set<string>()\n\nfunction acquireLock(path: string, options?: { staleMs?: number }) {\n const { staleMs = 60 * 1000 } = options ?? {}\n lockPaths.add(path)\n\n if (existsSync(path)) {\n const now = Date.now()\n const fileStat = statSync(path)\n\n if (now - fileStat.mtime.getTime() > staleMs) {\n // Remove the lock file if it has expired\n rmdirSync(path)\n } else {\n throw new Error('Lock file already exists')\n }\n }\n\n mkdirSync(path, { recursive: true })\n}\n\nexport async function createLockFile(\n path: string,\n options?: { staleMs?: number; maxRetries?: number; delayMs?: number },\n): Promise<AsyncDisposable> {\n const { maxRetries = 3, delayMs = 1000 } = options ?? {}\n\n for (let i = 0; i < maxRetries; i++) {\n try {\n acquireLock(path, options)\n\n return {\n async [Symbol.asyncDispose]() {\n await unlockFile(path)\n },\n }\n } catch (err) {\n logger.debug(undefined, `Failed to acquire lock file ${path}: ${err}`)\n await sleep(delayMs)\n }\n }\n\n throw new Error('Failed to lock file')\n}\n\nasync function unlockFile(path: string): Promise<void> {\n try {\n rmdirSync(path)\n lockPaths.delete(path)\n } catch (err) {\n logger.warn(undefined, `Failed to unlock file ${path}: ${err}`)\n }\n}\n\nonExit(() => {\n for (const path of lockPaths) {\n unlockFile(path)\n }\n})\n","import { spawn } from 'cross-spawn'\n\ntype InvokeCliOptions = {\n command: string\n args: string[]\n cwd?: string\n onReceiveLine?(line: string): void\n dontThrowOnNonzeroCode?: boolean\n}\n\ntype InvokeCliResponse = {\n lines: string[]\n code: number\n}\n\nclass InvokeCliError extends Error {\n constructor(public exit: { code?: number | null; signal?: NodeJS.Signals | null }) {\n if (exit.code) {\n super(`Exited with code ${exit.code}`)\n } else if (exit.signal) {\n super(`Exited with signal ${exit.signal}`)\n } else {\n super('Exited with unknown cause')\n }\n }\n}\n\nexport function invokeCli(options: InvokeCliOptions): Promise<InvokeCliResponse> {\n return new Promise<InvokeCliResponse>((resolve, reject) => {\n const lineAggregator = new LineAggregator(options.onReceiveLine)\n const process = spawn(options.command, options.args, {\n stdio: 'pipe',\n })\n\n process.stdout.on('data', (data) => lineAggregator.aggregate(data))\n process.once('close', (code) => {\n if (code !== 0 && !options.dontThrowOnNonzeroCode) {\n reject(new InvokeCliError({ code }))\n }\n lineAggregator.flush()\n resolve({\n code: code ?? 0,\n lines: lineAggregator.lines,\n })\n })\n process.once('exit', (code, signal) => {\n if (signal !== null) {\n reject(new InvokeCliError({ signal }))\n }\n if (code !== 0 && !options.dontThrowOnNonzeroCode) {\n reject(new InvokeCliError({ code }))\n }\n lineAggregator.flush()\n resolve({\n code: code ?? 0,\n lines: lineAggregator.lines,\n })\n })\n process.once('error', reject)\n })\n}\n\nclass LineAggregator {\n #line = ''\n #lines: string[] = []\n constructor(private readonly onLine?: (line: string) => void) {}\n\n aggregate(chunk: Buffer<ArrayBufferLike> | null | undefined) {\n if (chunk === undefined || chunk === null) return\n const text = chunk.toString('utf-8')\n for (const c of text) {\n switch (c) {\n case '\\n':\n this.flushLine()\n break\n case '\\r':\n continue\n default:\n this.#line += c\n break\n }\n }\n }\n\n flush() {\n if (this.#line) this.flushLine()\n }\n\n private flushLine() {\n this.#lines.push(this.#line)\n this.onLine?.(this.#line)\n this.#line = ''\n }\n\n get lines() {\n return this.#lines\n }\n}\n","import { logger } from '../logger'\nimport { invokeCli } from '../util/invoke-cli'\n\nexport async function runPuya({\n command,\n args,\n cwd,\n onOutput,\n}: {\n command: string\n args: string[]\n cwd?: string\n onOutput: (line: string) => void\n}) {\n const result = await invokeCli({\n command,\n args,\n cwd,\n onReceiveLine: onOutput,\n dontThrowOnNonzeroCode: true,\n })\n\n if (result.code !== 0) {\n logger.critical(undefined, `Compilation exited with status ${result.code}`)\n }\n}\n","import { Constants } from '../constants'\nimport { logger } from '../logger'\nimport { runPuya } from './run-puya'\nimport type { SemVer } from './semver'\n\nexport enum VersionCompareVerdict {\n ExactMatch = 'ExactMatch',\n Inconclusive = 'Inconclusive',\n MajorMismatch = 'MajorMismatch',\n MinorMismatch = 'MinorMismatch',\n OlderRevision = 'OlderRevision',\n NewerRevision = 'NewerRevision',\n}\n\nexport async function comparePuyaVersion(puyaPath: string): Promise<{\n target: string\n found?: string\n verdict: VersionCompareVerdict\n}> {\n const target = Constants.targetedPuyaVersion\n\n const versionParser = new VersionParser()\n await runPuya({\n command: puyaPath,\n args: ['--version'],\n onOutput: (line) => versionParser.receiveLine(line),\n })\n\n if (!versionParser.version) return { target, verdict: VersionCompareVerdict.Inconclusive }\n const ver = versionParser.version\n\n // Compare\n const [major, minor, rev] = target.split('.').map((x) => Number(x))\n if (ver.major !== major) return { verdict: VersionCompareVerdict.MajorMismatch, target, found: ver.formatted }\n if (ver.minor !== minor) return { verdict: VersionCompareVerdict.MinorMismatch, target, found: ver.formatted }\n if (ver.rev < rev) return { verdict: VersionCompareVerdict.OlderRevision, target, found: ver.formatted }\n if (ver.rev > rev) return { verdict: VersionCompareVerdict.NewerRevision, target, found: ver.formatted }\n return { verdict: VersionCompareVerdict.ExactMatch, target, found: ver.formatted }\n}\n\nexport async function checkPuyaVersion(puyaPath: string) {\n const result = await comparePuyaVersion(puyaPath)\n\n switch (result.verdict) {\n case VersionCompareVerdict.Inconclusive:\n logger.warn(undefined, `Unable to verify the version of Puya at ${puyaPath}.`)\n break\n case VersionCompareVerdict.MajorMismatch:\n case VersionCompareVerdict.MinorMismatch:\n logger.warn(\n undefined,\n `Version of Puya at ${puyaPath} (${result.found}) does not match targeted version (${result.target}). There may be compatibility issues.`,\n )\n break\n case VersionCompareVerdict.OlderRevision:\n logger.warn(undefined, `Revision of Puya at ${puyaPath} (${result.found}) is older than the targeted revision (${result.target})`)\n break\n case VersionCompareVerdict.NewerRevision:\n logger.debug(undefined, `Revision of Puya at ${puyaPath} (${result.found}) is newer than the targeted revision (${result.target})`)\n break\n }\n}\n\nclass VersionParser {\n #ver: SemVer | undefined\n\n receiveLine(line: string): void {\n const matched = /^puya ((\\d+)\\.(\\d+)\\.(\\d+)(-.*)?)$/.exec(line)\n if (!matched) {\n logger.debug(undefined, `'puya --version' command returned unexpected output: \"${line}\"`)\n } else {\n this.#ver = {\n formatted: matched[1],\n major: Number(matched[2]),\n minor: Number(matched[3]),\n rev: Number(matched[4]),\n suffix: matched[5] ?? '',\n }\n }\n }\n\n get version(): undefined | SemVer {\n return this.#ver\n }\n}\n","import { randomUUID } from 'crypto'\nimport fs from 'fs'\nimport { globIterateSync } from 'glob'\nimport type { WriteFileOptions } from 'node:fs'\nimport { writeFileSync } from 'node:fs'\nimport { gzipSync } from 'node:zlib'\nimport os from 'os'\nimport pathe from 'pathe'\n\nexport type TempFile = {\n writeFileSync(data: NodeJS.ArrayBufferView, options?: WriteFileOptions): void\n writeFileSync(data: string, options?: WriteFileOptions): void\n readonly filePath: string\n} & Disposable\n\nexport function generateTempFile(options?: { ext?: string }): TempFile {\n const { ext = 'tmp' } = options ?? {}\n const tempDir = generateTempDir()\n const filePath = pathe.join(tempDir.dirPath, `${randomUUID()}.${ext}`)\n\n return {\n get filePath() {\n return filePath\n },\n writeFileSync(data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions) {\n fs.writeFileSync(filePath, data, options)\n },\n [Symbol.dispose]() {\n tempDir[Symbol.dispose]()\n },\n }\n}\nexport type TempDir = {\n readonly dirPath: string\n files(): IterableIterator<string>\n\n makeFile(args: { name: string; ext?: string; compress?: boolean }): {\n readonly filePath: string\n writeFileSync(data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): void\n }\n} & Disposable\n\nexport function generateTempDir(): TempDir {\n const dirPath = fs.mkdtempSync(pathe.join(os.tmpdir(), 'puya-ts-'))\n\n return {\n get dirPath() {\n return dirPath\n },\n *files(): IterableIterator<string> {\n for (const p of globIterateSync(pathe.join(dirPath, '**'), {\n nodir: true,\n })) {\n yield p\n }\n },\n makeFile({ name, ext, compress }) {\n const path = pathe.join(this.dirPath, `${name}.${ext ?? 'tmp'}${compress ? '.gz' : ''}`)\n return {\n get filePath() {\n return path\n },\n writeFileSync(data, options) {\n if (compress) {\n data = gzipSync(data)\n }\n writeFileSync(path, data, options)\n },\n }\n },\n [Symbol.dispose]() {\n fs.rmSync(dirPath, { recursive: true, force: true })\n },\n }\n}\n","import * as crypto from 'crypto'\nimport * as fs from 'fs'\nimport { fileURLToPath } from 'node:url'\nimport * as path from 'path'\nimport pathe from 'pathe'\nimport * as tar from 'tar'\nimport { Constants } from '../constants'\nimport { InternalError } from '../errors'\nimport { logger } from '../logger'\nimport { generateTempDir } from '../util/generate-temp-file'\nimport type { SemVer } from './semver'\n\n/**\n * Gets the platform-specific binary name\n * @returns The appropriate binary name for the current platform\n */\nfunction getBinaryName(): string {\n return process.platform === 'win32' ? 'puya.exe' : 'puya'\n}\n\nfunction getPuyaTsDir(): string {\n try {\n return pathe.dirname(require.resolve('@algorandfoundation/puya-ts'))\n } catch {\n return pathe.dirname(fileURLToPath(import.meta.url))\n }\n}\n\nexport function getPuyaStorageDir(): string {\n const puyaTsDirName = getPuyaTsDir()\n return path.join(puyaTsDirName, '.puya')\n}\n\nexport function getCachedPuyaBinaryPath(puyaStorageDir: string, version: SemVer): string {\n const binaryFileName = getBinaryName()\n return path.join(puyaStorageDir, version.formatted, binaryFileName)\n}\n\n/**\n * Gets the platform-specific details for downloads\n * @returns Object containing OS and architecture information\n */\nfunction getPlatformDetails(): { os: string; arch: string } {\n const cliMessage = `Please refer to the puya-ts CLI documentation for information on how to install the Puya backend manually.`\n\n // Map Node.js platform to OS name used in filenames\n let os: string\n switch (process.platform) {\n case 'win32':\n os = 'windows'\n break\n case 'darwin':\n os = 'macos'\n break\n case 'linux':\n os = 'linux'\n break\n default:\n throw new InternalError(`Unsupported platform: ${process.platform}. ${cliMessage}`)\n }\n\n // Map Node.js architecture to architecture name used in filenames\n let arch: string\n switch (process.arch) {\n case 'x64':\n arch = 'x64'\n break\n case 'arm64':\n arch = 'arm64'\n break\n default:\n throw new InternalError(`Unsupported architecture: ${process.arch}. ${cliMessage}`)\n }\n\n return { os, arch }\n}\n\n/**\n * Downloads the Puya binary for a specific release version\n * @param puyaStorageDir The directory where puya binaries should be stored once downloaded\n * @param version The release version to download (e.g., \"1.0.0\")\n * @returns Promise that resolves to the path of the extracted binary\n */\nexport async function downloadPuyaBinary(puyaStorageDir: string, version: SemVer): Promise<string> {\n // Get platform-specific details\n const { os, arch } = getPlatformDetails()\n\n // Build platform-specific filenames\n const platformId = `${os}_${arch}`\n const archiveFileName = `puya-${version.formatted}-${platformId}.tar.gz`\n const checksumFileName = `puya-${version.formatted}-${platformId}.sha256.txt`\n const binaryFileName = getBinaryName()\n\n const extractedDir = path.join(puyaStorageDir, version.formatted)\n\n // Ensure our storage directories exist\n if (!fs.existsSync(extractedDir)) {\n fs.mkdirSync(extractedDir, { recursive: true })\n }\n\n using tempDir = generateTempDir()\n\n const archiveFilePath = path.join(tempDir.dirPath, archiveFileName)\n const checksumFilePath = path.join(tempDir.dirPath, checksumFileName)\n const extractedBinaryPath = path.join(extractedDir, binaryFileName)\n\n logger.debug(undefined, `Downloading Puya binary for version ${version.formatted} and platform ${platformId}`)\n const archiveUrl = `https://github.com/${Constants.puyaGithubRepo}/releases/download/v${version.formatted}/${archiveFileName}`\n const checksumUrl = `https://github.com/${Constants.puyaGithubRepo}/releases/download/v${version.formatted}/${checksumFileName}`\n\n await downloadFile(archiveUrl, archiveFilePath)\n await downloadFile(checksumUrl, checksumFilePath)\n\n await verifyChecksum(archiveFilePath, archiveFileName, checksumFilePath)\n\n await tar.extract({\n file: archiveFilePath,\n cwd: extractedDir,\n })\n\n // Check if extraction was successful and binary exists\n if (!fs.existsSync(extractedBinaryPath)) {\n throw new InternalError(`Binary file ${binaryFileName} not found in the extracted archive`)\n }\n\n logger.debug(undefined, `Successfully downloaded and extracted Puya binary to ${extractedBinaryPath}`)\n return extractedBinaryPath\n}\n\n/**\n * Downloads a file from a URL to a specified path\n * @param url The URL to download from\n * @param destination The local path to save the file to\n * @returns Promise that resolves when the download is complete\n */\nasync function downloadFile(url: string, destination: string): Promise<void> {\n const response = await fetch(url)\n if (!response.ok) {\n throw new Error(`Failed to download file. Status Code: ${response.status}`)\n }\n const buffer = await response.arrayBuffer()\n return await new Promise<void>((resolve, reject) => {\n const fileStream = fs.createWriteStream(destination)\n const nodeBuffer = Buffer.from(buffer)\n\n fileStream.write(nodeBuffer)\n fileStream.end()\n\n fileStream.on('finish', () => {\n resolve()\n })\n\n fileStream.on('error', (err) => {\n fs.unlinkSync(destination)\n reject(err)\n })\n })\n}\n\n/**\n * Verifies the checksum of a downloaded file\n * @param filePath Path to the file to verify\n * @param checksumFilePath Path to the checksum file\n * @returns Promise that resolves to true if the checksum matches, false otherwise\n */\nasync function verifyChecksum(filePath: string, fileName: string, checksumFilePath: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // Read the checksum file\n const expectedChecksum = fs.readFileSync(checksumFilePath, 'utf8').trim().toLowerCase()\n\n // Calculate the SHA256 checksum of the downloaded file\n const hash = crypto.createHash('sha256')\n const stream = fs.createReadStream(filePath)\n\n stream.on('data', (data) => {\n hash.update(data)\n })\n\n stream.on('end', () => {\n const calculatedChecksum = hash.digest('hex').toLowerCase()\n\n if (`${calculatedChecksum} ${fileName}` === expectedChecksum) {\n resolve()\n }\n reject(new InternalError(`Checksum verification failed. Expected checksum: ${expectedChecksum} but got: ${calculatedChecksum}`))\n })\n })\n}\n","import { InternalError } from '../errors'\n\nexport type SemVer = {\n major: number\n minor: number\n rev: number\n suffix: string\n formatted: string\n}\n\nexport function parseSemVer(version: string): SemVer {\n const matched = /^(\\d+)\\.(\\d+)\\.(\\d+)(-.*)?$/.exec(version)\n if (!matched) {\n throw new InternalError(`Invalid version string: ${version}`)\n }\n\n return {\n major: Number(matched[1]),\n minor: Number(matched[2]),\n rev: Number(matched[3]),\n suffix: matched[4] ?? '',\n formatted: version,\n }\n}\n","import * as fs from 'fs'\nimport { Constants } from '../constants'\nimport { logger } from '../logger'\nimport { createLockFile } from '../util/lock-file'\nimport { checkPuyaVersion } from './check-puya-version'\nimport { downloadPuyaBinary, getCachedPuyaBinaryPath, getPuyaStorageDir } from './puya-binary'\nimport { parseSemVer } from './semver'\n\nexport async function resolvePuyaPath(options: { customPuyaPath?: string; skipVersionCheck?: boolean }): Promise<string> {\n if (options.customPuyaPath) {\n if (!options.skipVersionCheck) {\n await checkPuyaVersion(options.customPuyaPath)\n }\n return options.customPuyaPath\n }\n\n const version = parseSemVer(Constants.targetedPuyaVersion)\n\n const puyaStorageDir = getPuyaStorageDir()\n const cachedBinaryPath = getCachedPuyaBinaryPath(puyaStorageDir, version)\n\n if (isBinaryCached(cachedBinaryPath)) {\n return cachedBinaryPath\n }\n\n await using _ = await createLockFile(`${puyaStorageDir}.lock`, { maxRetries: 30, delayMs: 1000, staleMs: 60 * 1000 })\n\n // Between the first check and acquiring the lock, the binary may have been downloaded by another process.\n // In this case there is no need to download the binary again.\n if (isBinaryCached(cachedBinaryPath)) {\n return cachedBinaryPath\n }\n return await downloadPuyaBinary(puyaStorageDir, version)\n}\n\nfunction isBinaryCached(cachePath: string): boolean {\n if (fs.existsSync(cachePath)) {\n logger.debug(undefined, `Found cached Puya binary at ${cachePath}`)\n return true\n }\n return false\n}\n"],"names":["pathe","fs","os","crypto"],"mappings":";;;;;;;;;;;;;;;;;AAAA,MAAM,aAAa,GAAG,yCAAyC;AAExD,MAAM,SAAS,GAAG;IACvB,aAAa;AACb,IAAA,WAAW,EAAE;AACX,QAAA,UAAU,EAAE;AACV,YAAA,GAAG,EAAE,6BAA6B;AACnC,SAAA;AACD,QAAA,QAAQ,EAAE,mCAAmC;AAC7C,QAAA,MAAM,EAAE;YACN,KAAK,EAAE,CAAA,EAAG,aAAa,CAAA,YAAA,CAAc;AACrC,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,CAAA,EAAG,aAAa,CAAA,gBAAA,CAAkB;gBACzC,YAAY,EAAE,CAAA,EAAG,aAAa,CAAA,wBAAA,CAA0B;gBACxD,GAAG,EAAE,CAAA,EAAG,aAAa,CAAA,cAAA,CAAgB;AACtC,aAAA;YACD,MAAM,EAAE,CAAA,EAAG,aAAa,CAAA,YAAA,CAAc;YACtC,YAAY,EAAE,CAAA,EAAG,aAAa,CAAA,mBAAA,CAAqB;YACnD,GAAG,EAAE,CAAA,EAAG,aAAa,CAAA,SAAA,CAAW;YAChC,QAAQ,EAAE,CAAA,EAAG,aAAa,CAAA,cAAA,CAAgB;YAC1C,IAAI,EAAE,CAAA,EAAG,aAAa,CAAA,UAAA,CAAY;YAClC,WAAW,EAAE,CAAA,EAAG,aAAa,CAAA,kBAAA,CAAoB;YACjD,IAAI,EAAE,CAAA,EAAG,aAAa,CAAA,UAAA,CAAY;YAClC,QAAQ,EAAE,CAAA,EAAG,aAAa,CAAA,eAAA,CAAiB;YAC3C,cAAc,EAAE,CAAA,EAAG,aAAa,CAAA,qBAAA,CAAuB;YACvD,gBAAgB,EAAE,CAAA,EAAG,aAAa,CAAA,wBAAA,CAA0B;YAC5D,EAAE,EAAE,CAAA,EAAG,aAAa,CAAA,QAAA,CAAU;YAC9B,UAAU,EAAE,CAAA,EAAG,aAAa,CAAA,gBAAA,CAAkB;YAC9C,SAAS,EAAE,CAAA,EAAG,aAAa,CAAA,eAAA,CAAiB;YAC5C,KAAK,EAAE,CAAA,EAAG,aAAa,CAAA,WAAA,CAAa;YACpC,WAAW,EAAE,CAAA,EAAG,aAAa,CAAA,kBAAA,CAAoB;YACjD,YAAY,EAAE,CAAA,EAAG,aAAa,CAAA,kBAAA,CAAoB;YAClD,IAAI,EAAE,CAAA,EAAG,aAAa,CAAA,UAAA,CAAY;YAClC,aAAa,EAAE,CAAA,EAAG,aAAa,CAAA,oBAAA,CAAsB;AACtD,SAAA;AACF,KAAA;AAED,IAAA,WAAW,EAAE;AACX,QAAA,yBAAyB,EAAE,iBAAiB;AAC5C,QAAA,2BAA2B,EAAE,mBAAmB;AAChD,QAAA,qBAAqB,EAAE,eAAe;AACtC,QAAA,qBAAqB,EAAE,iBAAiB;AACxC,QAAA,oBAAoB,EAAE,gBAAgB;AACtC,QAAA,4BAA4B,EAAE,UAAU;AACxC,QAAA,4BAA4B,EAAE,UAAU;AACxC,QAAA,qBAAqB,EAAE,aAAa;AACpC,QAAA,yBAAyB,EAAE,SAAS;AACpC,QAAA,uBAAuB,EAAE,0BAA0B;AACnD,QAAA,mBAAmB,EAAE;AACnB,YAAA,+BAA+B,EAAE,uBAAuB;AACxD,YAAA,2BAA2B,EAAE,mBAAmB;AAChD,YAAA,2BAA2B,EAAE,mBAAmB;AAChD,YAAA,4BAA4B,EAAE,oBAAoB;AAClD,YAAA,2BAA2B,EAAE,mBAAmB;AACjD,SAAA;AACF,KAAA;AAED,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE;AACJ,YAAA,YAAY,EAAE,UAAU;AACzB,SAAA;AACD,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,oBAAoB,EAAE,EAAE;AACxB,QAAA,uBAAuB,EAAE,EAAE;AAC3B,QAAA,cAAc,EAAE,4DAA4D;AAC7E,KAAA;IAED,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC1C,IAAA,mBAAmB,EAAE,OAAO;AAC5B,IAAA,cAAc,EAAE,yBAAyB;AACzC,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,oBAAoB,EAAE,QAAQ;;;AC9D1B,MAAO,SAAU,SAAQ,KAAK,CAAA;AACzB,IAAA,cAAc;IACvB,WAAA,CAAY,OAAgB,EAAE,OAA0B,EAAA;AACtD,QAAA,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,cAAc;IAC/C;AACD;AAED;;AAEG;AACG,MAAgB,SAAU,SAAQ,SAAS,CAAA;AAAG;AAEpD;;AAEG;AACG,MAAO,SAAU,SAAQ,SAAS,CAAA;AACtC,IAAA,OAAO,uBAAuB,CAAC,EAAE,cAAc,EAAsC,EAAA;AACnF,QAAA,OAAO,IAAI,SAAS,CAAC,2BAA2B,EAAE;YAChD,cAAc;AACf,SAAA,CAAC;IACJ;AACA,IAAA,OAAO,kBAAkB,CAAC,EAAE,cAAc,EAAsC,EAAA;AAC9E,QAAA,OAAO,IAAI,SAAS,CAAC,yCAAyC,EAAE;YAC9D,cAAc;AACf,SAAA,CAAC;IACJ;AACA,IAAA,OAAO,2BAA2B,CAAC,EAAE,cAAc,EAAsC,EAAA;AACvF,QAAA,OAAO,IAAI,SAAS,CAAC,gCAAgC,EAAE;YACrD,cAAc;AACf,SAAA,CAAC;IACJ;AACA,IAAA,OAAO,uBAAuB,CAAC,EAAE,cAAc,EAAE,IAAI,EAAoD,EAAA;AACvG,QAAA,OAAO,IAAI,SAAS,CAAC,CAAA,EAAG,IAAI,mCAAmC,EAAE;YAC/D,cAAc;AACf,SAAA,CAAC;IACJ;IACA,OAAO,mBAAmB,CAAC,EACzB,UAAU,EACV,UAAU,EACV,cAAc,GAKf,EAAA;AACC,QAAA,OAAO,IAAI,SAAS,CAAC,CAAA,kCAAA,EAAqC,UAAU,CAAA,IAAA,EAAO,UAAU,CAAA,CAAE,EAAE,EAAE,cAAc,EAAE,CAAC;IAC9G;AACD;AAEK,MAAO,gBAAiB,SAAQ,SAAS,CAAA;AACpC,IAAA,OAAO;AAChB,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;AACvE,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;AACD;AAED;;AAEG;AACG,MAAO,aAAc,SAAQ,SAAS,CAAA;AAC1C,IAAA,OAAO,mBAAmB,GAAA;AACxB,QAAA,OAAO,IAAI,aAAa,CAAC,4BAA4B,CAAC;IACxD;AACD;AACK,MAAO,YAAa,SAAQ,SAAS,CAAA;IACzC,WAAA,CAAY,WAAmB,EAAE,OAA0B,EAAA;AACzD,QAAA,KAAK,CAAC,CAAA,eAAA,EAAkB,WAAW,EAAE,EAAE,OAAO,CAAC;IACjD;AACD;AAOM,MAAM,UAAU,GAAG,CAAC,KAAY,KAAW;AAChD,IAAA,MAAM,KAAK;AACb;MACa,eAAe,GAAG,CAAI,IAAa,EAAE,cAA8B,KAAI;AAClF,IAAA,IAAI;QACF,OAAO,IAAI,EAAE;IACf;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,IAAI,CAAC,YAAY,KAAK,EAAE;AACtB,YAAA,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC9D;aAAO;AACL,YAAA,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,cAAc,EAAE,CAAC;QACpD;IACF;AACF;;ACnGA,MAAM,eAAe,GAAG,kCAAkC,CAAC,KAAK,CAAC,EAAE,CAAC;AAEpE,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,EAAE,EAA4B,CAAC;AAEjH,MAAM,kBAAkB,GAAG,CAAC,KAAa,KAAgB;IAC9D,IAAI,QAAQ,GAAG;SACZ,KAAK,CAAC,EAAE;SACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG;AACvB,SAAA,GAAG,CAAC,CAAC,CAAC,KAAI;AACT,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE;QAC9B,IAAI,MAAM,IAAI,WAAW;AAAE,YAAA,OAAO,WAAW,CAAC,MAAM,CAAC;AACrD,QAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA,CAAE,CAAC;AAC7C,IAAA,CAAC,CAAC;AACJ,IAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAU;AACjC,IAAA,OAAO,QAAQ,CAAC,MAAM,EAAE;QACtB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ;AAClD,QAAA,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YAAE;AACxC,QAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YAAE;QACxC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;QACnD,IAAI,CAAC,KAAK,SAAS;YAAE;AACrB,QAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YAAE;QACxC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;QACnD,IAAI,CAAC,KAAK,SAAS;YAAE;AACrB,QAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QAChC,QAAQ,GAAG,IAAI;IACjB;AACA,IAAA,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;AAC9B;AAEO,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAY;IAC9D,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC,IAAI,SAAS,GAAG,EAAE;AAClB,IAAA,OAAO,QAAQ,CAAC,MAAM,EAAE;AACtB,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE5D,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE;AACzB,QAAA,SAAS,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC;QACrC,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAChE,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE;QACzB,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5C,QAAA,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACzD,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE;AACzB,QAAA,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACzD,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE;QACzB,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5C,QAAA,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACzD,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE;AACzB,QAAA,SAAS,IAAI,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC;QACpC,QAAQ,GAAG,IAAI;IACjB;AACA,IAAA,OAAO,SAAS;AAClB;;ACrDA;;;;;;AAMG;AAIH,MAAM,QAAQ,GAAG,kEAAkE,CAAC,KAAK,CAAC,EAAE,CAAC;AAE7F,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAE7C,SAAS,aAAa,CAAC,CAAS,EAAA;AAC9B,IAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,CAAA,EAAG,CAAC,CAAA,qCAAA,CAAuC,CAAC,CAAC;AAC/F;AAEM,SAAU,kBAAkB,CAAC,KAAa,EAAA;AAC9C,IAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,IAAA,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;QACpB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AACjC,QAAA,MAAM,GAAG,KAAK,CAAC,MAAM;IACvB;AACA,IAAA,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;AACpB,QAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;IACtD;IAEA,IAAI,UAAU,GAAG,CAAC;IAClB,IAAI,UAAU,GAAG,CAAC;AAClB,IAAA,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,IAAI,UAAU,GAAG,CAAC;AAClB,IAAA,IAAI,QAAQ,GAAG,EAAE;AACjB,IAAA,OAAO,EAAE,QAAQ,GAAG,MAAM,EAAE;QAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,CAAC,gBAAgB,QAAQ,CAAA,CAAE,CAAC,CAAC;AAC1G,QAAA,UAAU,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM;;AAE/D,QAAA,IAAI,UAAU,EAAE,GAAG,CAAC,EAAE;;YAEpB,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,IAAI,UAAU,KAAK,CAAC,EAAE,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC;QACvE;IACF;AACA,IAAA,OAAO,MAAM;AACf;AAEM,SAAU,kBAAkB,CAAC,KAAiB,EAAA;AAClD,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;IAChC,IAAI,MAAM,GAAG,EAAE;AACf,IAAA,IAAI,QAAQ,GAAG,EAAE;AACjB,IAAA,IAAI,CAAC;AACL,IAAA,IAAI,CAAC;AACL,IAAA,IAAI,CAAC;AACL,IAAA,IAAI,MAAM;;AAEV,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO;AAErC,IAAA,OAAO,EAAE,QAAQ,GAAG,MAAM,EAAE;;AAE1B,QAAA,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;QACzB,CAAC,GAAG,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC1B,QAAA,CAAC,GAAG,KAAK,CAAC,EAAE,QAAQ,CAAC;AACrB,QAAA,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;;;QAGlB,MAAM;YACJ,aAAa,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC;gBACpC,aAAa,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC;gBACpC,aAAa,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC;AACnC,gBAAA,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC;IAChC;AAEA,IAAA,IAAI,OAAO,KAAK,CAAC,EAAE;AACjB,QAAA,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AACxB,QAAA,CAAC,GAAG,KAAK,CAAC,EAAE,QAAQ,CAAC;AACrB,QAAA,MAAM,GAAG,CAAC,GAAG,CAAC;AACd,QAAA,MAAM,IAAI,CAAA,EAAG,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;IACzH;AAAO,SAAA,IAAI,OAAO,KAAK,CAAC,EAAE;AACxB,QAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;QACxB,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;IACnF;AAEA,IAAA,OAAO,MAAM;AACf;;ACvEA,MAAM,cAAe,SAAQ,aAAa,CAAA;AAAG;AAE7C;;;;;;;AAOG;SACa,SAAS,CAAC,SAAkB,EAAE,OAAe,EAAE,cAA+B,EAAA;IAC5F,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,CAAC;IACvD;AACF;AAEA;;;;;;AAMG;SACa,aAAa,CAAC,SAAkB,EAAE,OAAe,EAAE,cAA+B,EAAA;IAChG,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE;YAC3B,cAAc;AACf,SAAA,CAAC;IACJ;AACF;AAEO,MAAM,aAAa,GAAG,CAC3B,KAAa,EACb,QAAwC,EACxC,OAAA,GAAkB,sBAAsB,KACtC;AACF,IAAA,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE;AACpD,QAAA,OAAO,KAAc;IACvB;IACA,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC;AACxC;AAEO,MAAM,gBAAgB,GAAG,CAC9B,KAAa,EACb,QAA+B,EAC/B,OAAA,GAAkB,sBAAsB,KACtC;AACF,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IACvE,IAAI,GAAG,EAAE;AACP,QAAA,OAAO,GAAG;IACZ;IACA,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC;AACxC;AAeO,MAAM,cAAc,GAAG,CAC5B,KAAc,EACd,QAAgC,EAChC,MAAgC,KACR;IACxB,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7E,IAAI,CAAC,UAAU,EAAE;AACf,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,OAAO,MAAM,CAAC,UAAiC,CAAC;AAClD;AAEO,MAAM,gBAAgB,GAAG,CAAI,UAAmB,KAAS;AAC9D,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU,CAAC;AAC9D;AAEO,MAAM,gBAAgB,GAAG,CAAC,KAAa,KAAgB;AAC5D,IAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;AACjC,IAAA,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9B;AAEO,MAAM,kBAAkB,GAAG,CAAC,CAAa,KAAY;;AAE1D,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AAChB,SAAA,UAAU;AACV,SAAA,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,KAAa,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAClE,SAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;AAChC;AAEO,MAAM,gBAAgB,GAAG,CAAC,KAAiB,KAAY;AAC5D,IAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;AACjC,IAAA,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9B;AAEO,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,SAAA,GAAgC,SAAS,KAAgB;IACvG,IAAI,GAAG,KAAK,EAAE,IAAI,SAAS,KAAK,SAAS,EAAE;AACzC,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC;IAC1B;AACA,IAAA,MAAM,QAAQ,GAAG,SAAS,KAAK,SAAS,GAAG,IAAI,GAAG,SAAS;IAE3D,IAAI,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAG1B,IAAA,IAAI,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,GAAG,CAAC,EAAE;QAC3D,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,CAAC;IACxC;SAAO,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;;AAE/B,QAAA,GAAG,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;IACjB;IACA,IAAI,GAAG,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,EAAE;QAC7B,MAAM,IAAI,aAAa,CAAC,CAAA,cAAA,EAAiB,GAAG,CAAA,IAAA,EAAO,QAAQ,CAAA,2BAAA,CAA6B,CAAC;IAC3F;IACA,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;AACtD,QAAA,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IAClD;AACA,IAAA,OAAO,SAAS;AAClB;AAEO,MAAM,QAAQ,GAAG,CAAmB,KAAQ,EAAE,KAAQ,KAAc,CAAC,KAAK,GAAG,KAAK,MAAM;AACxF,MAAM,eAAe,GAAG,CAAmB,KAAQ,EAAE,KAAQ,KAAc,OAAO,CAAC,KAAK,GAAG,KAAK;AAEjG,SAAU,WAAW,CAAC,GAAW,EAAA;IACrC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACvH,IAAA,OAAO;SACJ,OAAO,CAAC,CAAC;SACT,KAAK,CAAC,EAAE;AACR,SAAA,GAAG,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SAClC,IAAI,CAAC,EAAE,CAAC;AACb;SAEgB,aAAa,CAC3B,CAAU,EACV,GAAG,KAAQ,EAAA;AAEX,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC1C;AAEA;;;;;;;;AAQG;AACG,SAAU,iBAAiB,CAAC,QAAgB,EAAE,gBAA8B,EAAA;IAChF,MAAM,gBAAgB,GAAG,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxE,IAAI,gBAAgB,EAAE;QACpB,OAAO,CAAA,EAAG,SAAS,CAAC,aAAa,CAAA,CAAA,EAAI,gBAAgB,CAAC,CAAC,CAAC,CAAA,CAAE;IAC5D;IACA,MAAM,cAAc,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/D,IAAI,cAAc,EAAE;AAClB,QAAA,OAAO,cAAc,CAAC,CAAC,CAAC;IAC1B;IACA,MAAM,GAAG,GAAGA,cAAK,CAAC,SAAS,CAAC,CAAA,EAAG,gBAAgB,CAAA,CAAA,CAAG,CAAC;IACnD,MAAM,cAAc,GAAGA,cAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;IAChD,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,cAAc;IACrG,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;AACzC;AAKO,MAAM,MAAM,GACjB,CAAU,WAA8B,EAAE,GAAA,GAAe,KAAK,KAC9D,CAAC,CAAI,EAAE,CAAI,KAAI;AACb,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;AAC3B,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;AAC3B,IAAA,OAAO,CAAC,GAAG,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7E;AA6BF;;;;;;;;;AASG;AACI,MAAM,QAAQ,GAAG,CAAI,WAAkC,KAAI;AAChE,IAAA,MAAM,EAAE,GAAkB,CAAC,CAAC,CAAI,KAAK,CAAC,CAAC;AACvC,IAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE;IACrB,OAAO,CAAC,IAAO,KAAI;QACjB,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE;AACrB,YAAA,OAAO,KAAK;QACd;QAEA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACjB,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;AAEO,MAAM,kBAAkB,GAAG,CAAI,QAAiC,KAAI;IACzE,MAAM,GAAG,GAAQ,EAAE;IACnB,OAAO,CAAC,IAAO,KAAI;AACjB,QAAA,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;AACpD,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACd,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;AAEM,SAAU,gBAAgB,CAAC,GAAW,EAAA;IAC1C,IAAI,CAACC,WAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACvBA,WAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACxC;AACF;AAEM,SAAU,QAAQ,CAAI,CAAc,EAAE,CAAc,EAAA;AACxD,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACvB,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACvB,IAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AACnD;MAEa,SAAS,GAAG,CAAS,MAAY,EAAE,MAAY,KAAgB;IAC1E,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC;IACtE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD;AAEM,SAAU,IAAI,CAAmC,OAAiB,EAAE,KAAuB,EAAA;AAC/F,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;AACzC;;ICtQY;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,QAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,QAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EANW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;AAOb,MAAM,aAAa,GAAG;;AAE3B,IAAA,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE;AACvB,IAAA,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE;AACpB,IAAA,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE;AACnB,IAAA,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE;AACtB,IAAA,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE;CACrB;IACW;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACV,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACT,CAAC,EALW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;MAMR,UAAU,GAAG,CAAC,QAAkB,EAAE,QAAkB,KAAa;IAC5E,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC;AAC3D;AAEA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAE7D,MAAM,iBAAiB,GAAG,CAAC,CAAW,KAAK,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAWxE,MAAM,UAAU,CAAA;IACN,QAAQ,GAAc,EAAE;AACzB,IAAA,SAAS,CAAC,KAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;AAEA,IAAA,UAAU,CAAC,OAAgB,EAAA;QACzB,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,gEAAgE,CAAC;AACxG,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B;AAEA,IAAA,MAAM,CAAC,QAAkB,EAAA;AACvB,QAAA,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AACvC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;YAChC,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;AAChD,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACpB;QACF;IACF;IAIA,KAAK,CAAC,aAAuD,EAAE,OAAgB,EAAA;AAC7E,QAAA,IAAI,aAAa,YAAY,gBAAgB,EAAE;AAC7C,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC;QACxC;AAAO,aAAA,IAAI,aAAa,YAAY,KAAK,EAAE;;YAEzC,IAAI,CAAC,MAAM,CAAC;gBACV,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,gBAAA,cAAc,EAAE,6BAA6B,CAAC,aAAa,CAAC;AAC5D,gBAAA,OAAO,EAAE,CAAA,EAAG,aAAa,CAAC,OAAO,CAAA,CAAE;gBACnC,KAAK,EAAE,aAAa,CAAC,KAAK;gBAC1B,SAAS,EAAE,SAAS,CAAC,WAAW;AACjC,aAAA,CAAC;AACF,YAAA,IAAI,aAAa,CAAC,KAAK,EAAE;gBACvB,IAAI,CAAC,MAAM,CAAC;oBACV,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,oBAAA,cAAc,EAAE,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC;AAClE,oBAAA,OAAO,EAAE,CAAA,WAAA,EAAc,aAAa,CAAC,KAAK,CAAA,CAAE;AAC5C,oBAAA,KAAK,EAAG,aAAa,CAAC,KAAe,CAAC,KAAK;oBAC3C,SAAS,EAAE,SAAS,CAAC,WAAW;AACjC,iBAAA,CAAC;YACJ;QACF;aAAO;AACL,YAAA,SAAS,CAAC,OAAO,EAAE,iDAAiD,CAAC;YACrE,IAAI,CAAC,MAAM,CAAC;gBACV,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,gBAAA,cAAc,EAAE,aAAa;gBAC7B,OAAO;AACP,gBAAA,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC,KAAK;gBACxB,SAAS,EAAE,SAAS,CAAC,WAAW;AACjC,aAAA,CAAC;QACJ;IACF;IACA,IAAI,CAAC,MAAwC,EAAE,OAAe,EAAA;QAC5D,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;IAC1G;IACA,KAAK,CAAC,MAAwC,EAAE,OAAe,EAAA;QAC7D,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;IAC3G;IACA,IAAI,CAAC,MAAwC,EAAE,OAAe,EAAA;QAC5D,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;IAC7G;IACA,QAAQ,CAAC,MAAwC,EAAE,OAAe,EAAA;QAChE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;IAC9G;AACD;AAED,MAAM,6BAA6B,GAAG,CAAC,KAAc,KAAgC;AACnF,IAAA,IAAI,KAAK,YAAY,SAAS,EAAE;QAC9B,OAAO,KAAK,CAAC,cAAc;IAC7B;AACA,IAAA,OAAO,SAAS;AAClB,CAAC;AAEM,MAAM,MAAM,GAAG,IAAI,UAAU;MAEvB,kBAAkB,GAAG,CAChC,MAAmC,EACnC,cAA8B,KAC5B;AACF,IAAA,OAAO,CAAC,GAAG,IAAW,KAAI;AACxB,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC;QACxB;QAAE,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,YAAY,SAAS,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE;gBAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,cAAc,EAAE,CAAC;YACtC;AACA,YAAA,MAAM,CAAC;QACT;AACF,IAAA,CAAC;AACH;MAEa,cAAc,CAAA;IACzB,UAAU,GAAe,EAAE;IAC3B,cAAc,GAA6B,EAAE;IAC7C,gBAAgB,GAA+B,EAAE;AAEjD,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AACA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;IAC5B;AAEA,IAAA,gBAAgB,CAAC,aAAuC,EAAA;AACtD,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa;;QAEnC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AACjD,YAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,gBAAgB;gBAAE;AACvC,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE;QACtC;IACF;AAEA,IAAA,MAAM,CAAC,GAAa,EAAA;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE;QACrD,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACrC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC3C;iBAAO;gBACL,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YACzC;QACF;IACF;AAEA,IAAA,WAAA,GAAA,EAAuB;IAEvB,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/D;IAEA,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC;IAEA,YAAY,GAAA;AACV,QAAA,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;AACzC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,GAAG,CAAI,EAAW,EAAA;QAChB,OAAO,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;IAChD;AACQ,IAAA,OAAO,eAAe,GAAG,IAAI,cAAc,EAAE;AAC7C,IAAA,OAAO,UAAU,GAAG,IAAI,iBAAiB,EAAkB;AAEnE,IAAA,OAAO,MAAM,GAAA;QACX,OAAO,IAAI,cAAc,EAAE;IAC7B;AACA,IAAA,WAAW,OAAO,GAAA;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACtC,IAAI,CAAC,GAAG,EAAE;YACR,OAAO,IAAI,CAAC,eAAe;QAC7B;AACA,QAAA,OAAO,GAAG;IACZ;;;AC/MI,SAAU,KAAK,CAAC,EAAU,EAAA;AAC9B,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1D;;ACGA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU;AAEnC,SAAS,WAAW,CAAC,IAAY,EAAE,OAA8B,EAAA;IAC/D,MAAM,EAAE,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE;AAC7C,IAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAEnB,IAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE/B,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;;YAE5C,SAAS,CAAC,IAAI,CAAC;QACjB;aAAO;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;QAC7C;IACF;IAEA,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtC;AAEO,eAAe,cAAc,CAClC,IAAY,EACZ,OAAqE,EAAA;AAErE,IAAA,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE;AAExD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACnC,QAAA,IAAI;AACF,YAAA,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;YAE1B,OAAO;AACL,gBAAA,OAAO,MAAM,CAAC,YAAY,CAAC,GAAA;AACzB,oBAAA,MAAM,UAAU,CAAC,IAAI,CAAC;gBACxB,CAAC;aACF;QACH;QAAE,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAA,4BAAA,EAA+B,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAC;AACtE,YAAA,MAAM,KAAK,CAAC,OAAO,CAAC;QACtB;IACF;AAEA,IAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;AACxC;AAEA,eAAe,UAAU,CAAC,IAAY,EAAA;AACpC,IAAA,IAAI;QACF,SAAS,CAAC,IAAI,CAAC;AACf,QAAA,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;IACxB;IAAE,OAAO,GAAG,EAAE;QACZ,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA,sBAAA,EAAyB,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAC;IACjE;AACF;AAEA,MAAM,CAAC,MAAK;AACV,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;QAC5B,UAAU,CAAC,IAAI,CAAC;IAClB;AACF,CAAC,CAAC;;AChDF,MAAM,cAAe,SAAQ,KAAK,CAAA;AACb,IAAA,IAAA;AAAnB,IAAA,WAAA,CAAmB,IAA8D,EAAA;QAA9D,IAAA,CAAA,IAAI,GAAJ,IAAI;AACrB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,KAAK,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;QACxC;AAAO,aAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACtB,YAAA,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,MAAM,CAAA,CAAE,CAAC;QAC5C;aAAO;YACL,KAAK,CAAC,2BAA2B,CAAC;QACpC;IACF;AACD;AAEK,SAAU,SAAS,CAAC,OAAyB,EAAA;IACjD,OAAO,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,KAAI;QACxD,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC;QAChE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;AACnD,YAAA,KAAK,EAAE,MAAM;AACd,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,KAAI;YAI7B,cAAc,CAAC,KAAK,EAAE;AACtB,YAAA,OAAO,CAAC;gBACN,IAAI,EAAE,IAAI,IAAI,CAAC;gBACf,KAAK,EAAE,cAAc,CAAC,KAAK;AAC5B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAI;AACpC,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;gBACnB,MAAM,CAAC,IAAI,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YACxC;YAIA,cAAc,CAAC,KAAK,EAAE;AACtB,YAAA,OAAO,CAAC;gBACN,IAAI,EAAE,IAAI,IAAI,CAAC;gBACf,KAAK,EAAE,cAAc,CAAC,KAAK;AAC5B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;AAC/B,IAAA,CAAC,CAAC;AACJ;AAEA,MAAM,cAAc,CAAA;AAGW,IAAA,MAAA;IAF7B,KAAK,GAAG,EAAE;IACV,MAAM,GAAa,EAAE;AACrB,IAAA,WAAA,CAA6B,MAA+B,EAAA;QAA/B,IAAA,CAAA,MAAM,GAAN,MAAM;IAA4B;AAE/D,IAAA,SAAS,CAAC,KAAiD,EAAA;AACzD,QAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACpC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,QAAQ,CAAC;AACP,gBAAA,KAAK,IAAI;oBACP,IAAI,CAAC,SAAS,EAAE;oBAChB;AACF,gBAAA,KAAK,IAAI;oBACP;AACF,gBAAA;AACE,oBAAA,IAAI,CAAC,KAAK,IAAI,CAAC;oBACf;;QAEN;IACF;IAEA,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,SAAS,EAAE;IAClC;IAEQ,SAAS,GAAA;QACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;IACjB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AACD;;AC9FM,eAAe,OAAO,CAAC,EAC5B,OAAO,EACP,IAAI,EACJ,GAAG,EACH,QAAQ,GAMT,EAAA;AACC,IAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;QAC7B,OAAO;QACP,IAAI;QAEJ,aAAa,EAAE,QAEhB,CAAA,CAAC;AAEF,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE;QACrB,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA,+BAAA,EAAkC,MAAM,CAAC,IAAI,CAAA,CAAE,CAAC;IAC7E;AACF;;ACpBA,IAAY,qBAOX;AAPD,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,qBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,qBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,qBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,qBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,qBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AACjC,CAAC,EAPW,qBAAqB,KAArB,qBAAqB,GAAA,EAAA,CAAA,CAAA;AAS1B,eAAe,kBAAkB,CAAC,QAAgB,EAAA;AAKvD,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,mBAAmB;AAE5C,IAAA,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE;AACzC,IAAA,MAAM,OAAO,CAAC;AACZ,QAAA,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,CAAC,WAAW,CAAC;QACnB,QAAQ,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;AACpD,KAAA,CAAC;IAEF,IAAI,CAAC,aAAa,CAAC,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,CAAC,YAAY,EAAE;AAC1F,IAAA,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO;;IAGjC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;AACnE,IAAA,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK;AAAE,QAAA,OAAO,EAAE,OAAO,EAAE,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE;AAC9G,IAAA,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK;AAAE,QAAA,OAAO,EAAE,OAAO,EAAE,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE;AAC9G,IAAA,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG;AAAE,QAAA,OAAO,EAAE,OAAO,EAAE,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE;AACxG,IAAA,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG;AAAE,QAAA,OAAO,EAAE,OAAO,EAAE,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE;AACxG,IAAA,OAAO,EAAE,OAAO,EAAE,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE;AACpF;AAEO,eAAe,gBAAgB,CAAC,QAAgB,EAAA;AACrD,IAAA,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC;AAEjD,IAAA,QAAQ,MAAM,CAAC,OAAO;QACpB,KAAK,qBAAqB,CAAC,YAAY;YACrC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA,wCAAA,EAA2C,QAAQ,CAAA,CAAA,CAAG,CAAC;YAC9E;QACF,KAAK,qBAAqB,CAAC,aAAa;QACxC,KAAK,qBAAqB,CAAC,aAAa;AACtC,YAAA,MAAM,CAAC,IAAI,CACT,SAAS,EACT,sBAAsB,QAAQ,CAAA,EAAA,EAAK,MAAM,CAAC,KAAK,CAAA,mCAAA,EAAsC,MAAM,CAAC,MAAM,CAAA,qCAAA,CAAuC,CAC1I;YACD;QACF,KAAK,qBAAqB,CAAC,aAAa;AACtC,YAAA,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,QAAQ,CAAA,EAAA,EAAK,MAAM,CAAC,KAAK,CAAA,uCAAA,EAA0C,MAAM,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;YAClI;QACF,KAAK,qBAAqB,CAAC,aAAa;AACtC,YAAA,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAuB,QAAQ,CAAA,EAAA,EAAK,MAAM,CAAC,KAAK,CAAA,uCAAA,EAA0C,MAAM,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;YACnI;;AAEN;AAEA,MAAM,aAAa,CAAA;AACjB,IAAA,IAAI;AAEJ,IAAA,WAAW,CAAC,IAAY,EAAA;QACtB,MAAM,OAAO,GAAG,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/D,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAA,sDAAA,EAAyD,IAAI,CAAA,CAAA,CAAG,CAAC;QAC3F;aAAO;YACL,IAAI,CAAC,IAAI,GAAG;AACV,gBAAA,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AACrB,gBAAA,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,gBAAA,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,gBAAA,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACvB,gBAAA,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;aACzB;QACH;IACF;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,IAAI;IAClB;AACD;;SC1Ce,eAAe,GAAA;AAC7B,IAAA,MAAM,OAAO,GAAGA,aAAE,CAAC,WAAW,CAACD,cAAK,CAAC,IAAI,CAACE,UAAE,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC;IAEnE,OAAO;AACL,QAAA,IAAI,OAAO,GAAA;AACT,YAAA,OAAO,OAAO;QAChB,CAAC;AACD,QAAA,CAAC,KAAK,GAAA;AACJ,YAAA,KAAK,MAAM,CAAC,IAAI,eAAe,CAACF,cAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AACzD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA,CAAC,EAAE;AACF,gBAAA,MAAM,CAAC;YACT;QACF,CAAC;AACD,QAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAA;AAC9B,YAAA,MAAM,IAAI,GAAGA,cAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,IAAI,KAAK,CAAA,EAAG,QAAQ,GAAG,KAAK,GAAG,EAAE,CAAA,CAAE,CAAC;YACxF,OAAO;AACL,gBAAA,IAAI,QAAQ,GAAA;AACV,oBAAA,OAAO,IAAI;gBACb,CAAC;gBACD,aAAa,CAAC,IAAI,EAAE,OAAO,EAAA;oBACzB,IAAI,QAAQ,EAAE;AACZ,wBAAA,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACvB;AACA,oBAAA,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;gBACpC,CAAC;aACF;QACH,CAAC;QACD,CAAC,MAAM,CAAC,OAAO,CAAC,GAAA;AACd,YAAAC,aAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACtD,CAAC;KACF;AACH;;AC9DA;;;AAGG;AACH,SAAS,aAAa,GAAA;AACpB,IAAA,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,GAAG,UAAU,GAAG,MAAM;AAC3D;AAEA,SAAS,YAAY,GAAA;AACnB,IAAA,IAAI;QACF,OAAOD,cAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACtE;AAAE,IAAA,MAAM;AACN,QAAA,OAAOA,cAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD;AACF;SAEgB,iBAAiB,GAAA;AAC/B,IAAA,MAAM,aAAa,GAAG,YAAY,EAAE;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;AAC1C;AAEM,SAAU,uBAAuB,CAAC,cAAsB,EAAE,OAAe,EAAA;AAC7E,IAAA,MAAM,cAAc,GAAG,aAAa,EAAE;AACtC,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC;AACrE;AAEA;;;AAGG;AACH,SAAS,kBAAkB,GAAA;IACzB,MAAM,UAAU,GAAG,CAAA,0GAAA,CAA4G;;AAG/H,IAAA,IAAI,EAAU;AACd,IAAA,QAAQ,OAAO,CAAC,QAAQ;AACtB,QAAA,KAAK,OAAO;YACV,EAAE,GAAG,SAAS;YACd;AACF,QAAA,KAAK,QAAQ;YACX,EAAE,GAAG,OAAO;YACZ;AACF,QAAA,KAAK,OAAO;YACV,EAAE,GAAG,OAAO;YACZ;AACF,QAAA;YACE,MAAM,IAAI,aAAa,CAAC,CAAA,sBAAA,EAAyB,OAAO,CAAC,QAAQ,CAAA,EAAA,EAAK,UAAU,CAAA,CAAE,CAAC;;;AAIvF,IAAA,IAAI,IAAY;AAChB,IAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,QAAA,KAAK,KAAK;YACR,IAAI,GAAG,KAAK;YACZ;AACF,QAAA,KAAK,OAAO;YACV,IAAI,GAAG,OAAO;YACd;AACF,QAAA;YACE,MAAM,IAAI,aAAa,CAAC,CAAA,0BAAA,EAA6B,OAAO,CAAC,IAAI,CAAA,EAAA,EAAK,UAAU,CAAA,CAAE,CAAC;;AAGvF,IAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AACrB;AAEA;;;;;AAKG;AACI,eAAe,kBAAkB,CAAC,cAAsB,EAAE,OAAe,EAAA;;;;QAE9E,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,kBAAkB,EAAE;;AAGzC,QAAA,MAAM,UAAU,GAAG,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,IAAI,EAAE;QAClC,MAAM,eAAe,GAAG,CAAA,KAAA,EAAQ,OAAO,CAAC,SAAS,CAAA,CAAA,EAAI,UAAU,CAAA,OAAA,CAAS;QACxE,MAAM,gBAAgB,GAAG,CAAA,KAAA,EAAQ,OAAO,CAAC,SAAS,CAAA,CAAA,EAAI,UAAU,CAAA,WAAA,CAAa;AAC7E,QAAA,MAAM,cAAc,GAAG,aAAa,EAAE;AAEtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;;QAGjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;YAChC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACjD;AAEA,QAAA,MAAM,OAAO,GAAA,uBAAA,CAAA,KAAA,EAAG,eAAe,EAAE,QAAA;AAEjC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;AACnE,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACrE,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC;AAEnE,QAAA,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAA,oCAAA,EAAuC,OAAO,CAAC,SAAS,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAE,CAAC;AAC9G,QAAA,MAAM,UAAU,GAAG,CAAA,mBAAA,EAAsB,SAAS,CAAC,cAAc,CAAA,oBAAA,EAAuB,OAAO,CAAC,SAAS,CAAA,CAAA,EAAI,eAAe,EAAE;AAC9H,QAAA,MAAM,WAAW,GAAG,CAAA,mBAAA,EAAsB,SAAS,CAAC,cAAc,CAAA,oBAAA,EAAuB,OAAO,CAAC,SAAS,CAAA,CAAA,EAAI,gBAAgB,EAAE;AAEhI,QAAA,MAAM,YAAY,CAAC,UAAU,EAAE,eAAe,CAAC;AAC/C,QAAA,MAAM,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC;QAEjD,MAAM,cAAc,CAAC,eAAe,EAAE,eAAe,EAAE,gBAAgB,CAAC;QAExE,MAAM,GAAG,CAAC,OAAO,CAAC;AAChB,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,GAAG,EAAE,YAAY;AAClB,SAAA,CAAC;;QAGF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;AACvC,YAAA,MAAM,IAAI,aAAa,CAAC,eAAe,cAAc,CAAA,mCAAA,CAAqC,CAAC;QAC7F;QAEA,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAA,qDAAA,EAAwD,mBAAmB,CAAA,CAAE,CAAC;AACtG,QAAA,OAAO,mBAAmB;;;;;;;;;AAC3B;AAED;;;;;AAKG;AACH,eAAe,YAAY,CAAC,GAAW,EAAE,WAAmB,EAAA;AAC1D,IAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AACjC,IAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,CAAA,sCAAA,EAAyC,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;IAC7E;AACA,IAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE;IAC3C,OAAO,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;QACjD,MAAM,UAAU,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC;QACpD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAEtC,QAAA,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;QAC5B,UAAU,CAAC,GAAG,EAAE;AAEhB,QAAA,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAK;AAC3B,YAAA,OAAO,EAAE;AACX,QAAA,CAAC,CAAC;QAEF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAI;AAC7B,YAAA,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC;AACb,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ;AAEA;;;;;AAKG;AACH,eAAe,cAAc,CAAC,QAAgB,EAAE,QAAgB,EAAE,gBAAwB,EAAA;IACxF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;AAErC,QAAA,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;;QAGvF,MAAM,IAAI,GAAGG,UAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;QACxC,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAE5C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,KAAI;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACnB,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAK;YACpB,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;YAE3D,IAAI,CAAA,EAAG,kBAAkB,CAAA,EAAA,EAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE;AAC7D,gBAAA,OAAO,EAAE;YACX;YACA,MAAM,CAAC,IAAI,aAAa,CAAC,CAAA,iDAAA,EAAoD,gBAAgB,CAAA,UAAA,EAAa,kBAAkB,CAAA,CAAE,CAAC,CAAC;AAClI,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ;;ACjLM,SAAU,WAAW,CAAC,OAAe,EAAA;IACzC,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3D,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,aAAa,CAAC,2BAA2B,OAAO,CAAA,CAAE,CAAC;IAC/D;IAEA,OAAO;AACL,QAAA,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACvB,QAAA,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;AACxB,QAAA,SAAS,EAAE,OAAO;KACnB;AACH;;ACfO,eAAe,eAAe,CAAC,OAAgE,EAAA;;;AACpG,QAAA,IAAI,OAAO,CAAC,cAAc,EAAE;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;AAC7B,gBAAA,MAAM,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC;YAChD;YACA,OAAO,OAAO,CAAC,cAAc;QAC/B;QAEA,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,mBAAmB,CAAC;AAE1D,QAAA,MAAM,cAAc,GAAG,iBAAiB,EAAE;QAC1C,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,cAAc,EAAE,OAAO,CAAC;AAEzE,QAAA,IAAI,cAAc,CAAC,gBAAgB,CAAC,EAAE;AACpC,YAAA,OAAO,gBAAgB;QACzB;QAEA,MAAY,CAAC,GAAA,uBAAA,CAAA,KAAA,EAAG,MAAM,cAAc,CAAC,GAAG,cAAc,CAAA,KAAA,CAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE;;;eAAC;;;AAIrH,QAAA,IAAI,cAAc,CAAC,gBAAgB,CAAC,EAAE;AACpC,YAAA,OAAO,gBAAgB;QACzB;AACA,QAAA,OAAO,MAAM,kBAAkB,CAAC,cAAc,EAAE,OAAO,CAAC;;;;;;;;;;;AACzD;AAED,SAAS,cAAc,CAAC,SAAiB,EAAA;AACvC,IAAA,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC5B,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAA,4BAAA,EAA+B,SAAS,CAAA,CAAE,CAAC;AACnE,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,KAAK;AACd;;;;"}
|