@mysten/sui
Version:
Sui TypeScript API
1 lines • 25.2 kB
Source Map (JSON)
{"version":3,"file":"v1.mjs","names":[],"sources":["../../../src/transactions/data/v1.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64, toBase64 } from '@mysten/bcs';\nimport type { GenericSchema, InferInput, InferOutput } from 'valibot';\nimport {\n\tarray,\n\tbigint,\n\tboolean,\n\tcheck,\n\tinteger,\n\tis,\n\tlazy,\n\tliteral,\n\tnullable,\n\tnullish,\n\tnumber,\n\tobject,\n\toptional,\n\tparse,\n\tpipe,\n\tstring,\n\tunion,\n\tunknown,\n} from 'valibot';\n\nimport { TypeTagSerializer } from '../../bcs/index.js';\nimport type { StructTag as StructTagType, TypeTag as TypeTagType } from '../../bcs/types.js';\nimport { JsonU64, ObjectID, safeEnum, TransactionDataSchema } from './internal.js';\nimport type { Argument, ArgumentSchema, TransactionData } from './internal.js';\n\nexport const ObjectRef = object({\n\tdigest: string(),\n\tobjectId: string(),\n\tversion: union([pipe(number(), integer()), string(), bigint()]),\n});\n\nconst ObjectArg = safeEnum({\n\tImmOrOwned: ObjectRef,\n\tShared: object({\n\t\tobjectId: ObjectID,\n\t\tinitialSharedVersion: JsonU64,\n\t\tmutable: boolean(),\n\t}),\n\tReceiving: ObjectRef,\n});\n\nexport const NormalizedCallArg = safeEnum({\n\tObject: ObjectArg,\n\tPure: array(pipe(number(), integer())),\n});\n\nconst TransactionInput = union([\n\tobject({\n\t\tkind: literal('Input'),\n\t\tindex: pipe(number(), integer()),\n\t\tvalue: unknown(),\n\t\ttype: optional(literal('object')),\n\t}),\n\tobject({\n\t\tkind: literal('Input'),\n\t\tindex: pipe(number(), integer()),\n\t\tvalue: unknown(),\n\t\ttype: literal('pure'),\n\t}),\n]);\n\nconst TransactionExpiration = union([\n\tobject({ Epoch: pipe(number(), integer()) }),\n\tobject({ None: nullable(literal(true)) }),\n]);\n\nconst StringEncodedBigint = pipe(\n\tunion([number(), string(), bigint()]),\n\tcheck((val) => {\n\t\tif (!['string', 'number', 'bigint'].includes(typeof val)) return false;\n\n\t\ttry {\n\t\t\tBigInt(val as string);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}),\n);\n\nexport const TypeTag: GenericSchema<TypeTagType> = union([\n\tobject({ bool: nullable(literal(true)) }),\n\tobject({ u8: nullable(literal(true)) }),\n\tobject({ u64: nullable(literal(true)) }),\n\tobject({ u128: nullable(literal(true)) }),\n\tobject({ address: nullable(literal(true)) }),\n\tobject({ signer: nullable(literal(true)) }),\n\tobject({ vector: lazy(() => TypeTag) }),\n\tobject({ struct: lazy(() => StructTag) }),\n\tobject({ u16: nullable(literal(true)) }),\n\tobject({ u32: nullable(literal(true)) }),\n\tobject({ u256: nullable(literal(true)) }),\n]);\n\n// https://github.com/MystenLabs/sui/blob/cea8742e810142a8145fd83c4c142d61e561004a/external-crates/move/crates/move-core-types/src/language_storage.rs#L140-L147\nexport const StructTag: GenericSchema<StructTagType> = object({\n\taddress: string(),\n\tmodule: string(),\n\tname: string(),\n\ttypeParams: array(TypeTag),\n});\n\nconst GasConfig = object({\n\tbudget: optional(StringEncodedBigint),\n\tprice: optional(StringEncodedBigint),\n\tpayment: optional(array(ObjectRef)),\n\towner: optional(string()),\n});\n\nconst TransactionArgumentTypes = [\n\tTransactionInput,\n\tobject({ kind: literal('GasCoin') }),\n\tobject({ kind: literal('Result'), index: pipe(number(), integer()) }),\n\tobject({\n\t\tkind: literal('NestedResult'),\n\t\tindex: pipe(number(), integer()),\n\t\tresultIndex: pipe(number(), integer()),\n\t}),\n] as const;\n\n// Generic transaction argument\nexport const TransactionArgument = union([...TransactionArgumentTypes]);\n\nconst MoveCallTransaction = object({\n\tkind: literal('MoveCall'),\n\ttarget: pipe(\n\t\tstring(),\n\t\tcheck((target) => target.split('::').length === 3),\n\t) as GenericSchema<`${string}::${string}::${string}`>,\n\ttypeArguments: array(string()),\n\targuments: array(TransactionArgument),\n});\n\nconst TransferObjectsTransaction = object({\n\tkind: literal('TransferObjects'),\n\tobjects: array(TransactionArgument),\n\taddress: TransactionArgument,\n});\n\nconst SplitCoinsTransaction = object({\n\tkind: literal('SplitCoins'),\n\tcoin: TransactionArgument,\n\tamounts: array(TransactionArgument),\n});\n\nconst MergeCoinsTransaction = object({\n\tkind: literal('MergeCoins'),\n\tdestination: TransactionArgument,\n\tsources: array(TransactionArgument),\n});\n\nconst MakeMoveVecTransaction = object({\n\tkind: literal('MakeMoveVec'),\n\ttype: union([object({ Some: TypeTag }), object({ None: nullable(literal(true)) })]),\n\tobjects: array(TransactionArgument),\n});\n\nconst PublishTransaction = object({\n\tkind: literal('Publish'),\n\tmodules: array(array(pipe(number(), integer()))),\n\tdependencies: array(string()),\n});\n\nconst UpgradeTransaction = object({\n\tkind: literal('Upgrade'),\n\tmodules: array(array(pipe(number(), integer()))),\n\tdependencies: array(string()),\n\tpackageId: string(),\n\tticket: TransactionArgument,\n});\n\nconst TransactionTypes = [\n\tMoveCallTransaction,\n\tTransferObjectsTransaction,\n\tSplitCoinsTransaction,\n\tMergeCoinsTransaction,\n\tPublishTransaction,\n\tUpgradeTransaction,\n\tMakeMoveVecTransaction,\n] as const;\n\nconst TransactionType = union([...TransactionTypes]);\n\nexport const SerializedTransactionDataV1 = object({\n\tversion: literal(1),\n\tsender: optional(string()),\n\texpiration: nullish(TransactionExpiration),\n\tgasConfig: GasConfig,\n\tinputs: array(TransactionInput),\n\ttransactions: array(TransactionType),\n});\n\nexport type SerializedTransactionDataV1 = InferOutput<typeof SerializedTransactionDataV1>;\n\nexport function serializeV1TransactionData(\n\ttransactionData: TransactionData,\n): SerializedTransactionDataV1 {\n\tconst inputs: InferOutput<typeof TransactionInput>[] = transactionData.inputs.map(\n\t\t(input, index) => {\n\t\t\tif (input.Object) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'Input',\n\t\t\t\t\tindex,\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tObject: input.Object.ImmOrOwnedObject\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tImmOrOwned: input.Object.ImmOrOwnedObject,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: input.Object.Receiving\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tReceiving: {\n\t\t\t\t\t\t\t\t\t\t\tdigest: input.Object.Receiving.digest,\n\t\t\t\t\t\t\t\t\t\t\tversion: input.Object.Receiving.version,\n\t\t\t\t\t\t\t\t\t\t\tobjectId: input.Object.Receiving.objectId,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\tShared: {\n\t\t\t\t\t\t\t\t\t\t\tmutable: input.Object.SharedObject.mutable,\n\t\t\t\t\t\t\t\t\t\t\tinitialSharedVersion: input.Object.SharedObject.initialSharedVersion,\n\t\t\t\t\t\t\t\t\t\t\tobjectId: input.Object.SharedObject.objectId,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\ttype: 'object',\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (input.Pure) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'Input',\n\t\t\t\t\tindex,\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tPure: Array.from(fromBase64(input.Pure.bytes)),\n\t\t\t\t\t},\n\t\t\t\t\ttype: 'pure',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (input.UnresolvedPure) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'Input',\n\t\t\t\t\ttype: 'pure',\n\t\t\t\t\tindex,\n\t\t\t\t\tvalue: input.UnresolvedPure.value,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (input.UnresolvedObject) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'Input',\n\t\t\t\t\ttype: 'object',\n\t\t\t\t\tindex,\n\t\t\t\t\tvalue: input.UnresolvedObject.objectId,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthrow new Error('Invalid input');\n\t\t},\n\t);\n\n\treturn {\n\t\tversion: 1,\n\t\tsender: transactionData.sender ?? undefined,\n\t\texpiration:\n\t\t\ttransactionData.expiration?.$kind === 'Epoch'\n\t\t\t\t? { Epoch: Number(transactionData.expiration.Epoch) }\n\t\t\t\t: transactionData.expiration\n\t\t\t\t\t? { None: true }\n\t\t\t\t\t: null,\n\t\tgasConfig: {\n\t\t\towner: transactionData.gasData.owner ?? undefined,\n\t\t\tbudget: transactionData.gasData.budget ?? undefined,\n\t\t\tprice: transactionData.gasData.price ?? undefined,\n\t\t\tpayment: transactionData.gasData.payment ?? undefined,\n\t\t},\n\t\tinputs,\n\t\ttransactions: transactionData.commands.map((command): InferOutput<typeof TransactionType> => {\n\t\t\tif (command.MakeMoveVec) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'MakeMoveVec',\n\t\t\t\t\ttype:\n\t\t\t\t\t\tcommand.MakeMoveVec.type === null\n\t\t\t\t\t\t\t? { None: true }\n\t\t\t\t\t\t\t: { Some: TypeTagSerializer.parseFromStr(command.MakeMoveVec.type) },\n\t\t\t\t\tobjects: command.MakeMoveVec.elements.map((arg) =>\n\t\t\t\t\t\tconvertTransactionArgument(arg, inputs),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (command.MergeCoins) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'MergeCoins',\n\t\t\t\t\tdestination: convertTransactionArgument(command.MergeCoins.destination, inputs),\n\t\t\t\t\tsources: command.MergeCoins.sources.map((arg) => convertTransactionArgument(arg, inputs)),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (command.MoveCall) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'MoveCall',\n\t\t\t\t\ttarget: `${command.MoveCall.package}::${command.MoveCall.module}::${command.MoveCall.function}`,\n\t\t\t\t\ttypeArguments: command.MoveCall.typeArguments,\n\t\t\t\t\targuments: command.MoveCall.arguments.map((arg) =>\n\t\t\t\t\t\tconvertTransactionArgument(arg, inputs),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (command.Publish) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'Publish',\n\t\t\t\t\tmodules: command.Publish.modules.map((mod) => Array.from(fromBase64(mod))),\n\t\t\t\t\tdependencies: command.Publish.dependencies,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (command.SplitCoins) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'SplitCoins',\n\t\t\t\t\tcoin: convertTransactionArgument(command.SplitCoins.coin, inputs),\n\t\t\t\t\tamounts: command.SplitCoins.amounts.map((arg) => convertTransactionArgument(arg, inputs)),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (command.TransferObjects) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'TransferObjects',\n\t\t\t\t\tobjects: command.TransferObjects.objects.map((arg) =>\n\t\t\t\t\t\tconvertTransactionArgument(arg, inputs),\n\t\t\t\t\t),\n\t\t\t\t\taddress: convertTransactionArgument(command.TransferObjects.address, inputs),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (command.Upgrade) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: 'Upgrade',\n\t\t\t\t\tmodules: command.Upgrade.modules.map((mod) => Array.from(fromBase64(mod))),\n\t\t\t\t\tdependencies: command.Upgrade.dependencies,\n\t\t\t\t\tpackageId: command.Upgrade.package,\n\t\t\t\t\tticket: convertTransactionArgument(command.Upgrade.ticket, inputs),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthrow new Error(`Unknown transaction ${Object.keys(command)}`);\n\t\t}),\n\t};\n}\n\nfunction convertTransactionArgument(\n\targ: Argument,\n\tinputs: InferOutput<typeof TransactionInput>[],\n): InferOutput<typeof TransactionArgument> {\n\tif (arg.$kind === 'GasCoin') {\n\t\treturn { kind: 'GasCoin' };\n\t}\n\tif (arg.$kind === 'Result') {\n\t\treturn { kind: 'Result', index: arg.Result };\n\t}\n\tif (arg.$kind === 'NestedResult') {\n\t\treturn { kind: 'NestedResult', index: arg.NestedResult[0], resultIndex: arg.NestedResult[1] };\n\t}\n\tif (arg.$kind === 'Input') {\n\t\treturn inputs[arg.Input];\n\t}\n\n\tthrow new Error(`Invalid argument ${Object.keys(arg)}`);\n}\n\nexport function transactionDataFromV1(data: SerializedTransactionDataV1): TransactionData {\n\treturn parse(TransactionDataSchema, {\n\t\tversion: 2,\n\t\tsender: data.sender ?? null,\n\t\texpiration: data.expiration\n\t\t\t? 'Epoch' in data.expiration\n\t\t\t\t? { Epoch: data.expiration.Epoch }\n\t\t\t\t: { None: true }\n\t\t\t: null,\n\t\tgasData: {\n\t\t\towner: data.gasConfig.owner ?? null,\n\t\t\tbudget: data.gasConfig.budget?.toString() ?? null,\n\t\t\tprice: data.gasConfig.price?.toString() ?? null,\n\t\t\tpayment:\n\t\t\t\tdata.gasConfig.payment?.map((ref) => ({\n\t\t\t\t\tdigest: ref.digest,\n\t\t\t\t\tobjectId: ref.objectId,\n\t\t\t\t\tversion: ref.version.toString(),\n\t\t\t\t})) ?? null,\n\t\t},\n\t\tinputs: data.inputs.map((input) => {\n\t\t\tif (input.kind === 'Input') {\n\t\t\t\tif (is(NormalizedCallArg, input.value)) {\n\t\t\t\t\tconst value = parse(NormalizedCallArg, input.value);\n\n\t\t\t\t\tif (value.Object) {\n\t\t\t\t\t\tif (value.Object.ImmOrOwned) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tObject: {\n\t\t\t\t\t\t\t\t\tImmOrOwnedObject: {\n\t\t\t\t\t\t\t\t\t\tobjectId: value.Object.ImmOrOwned.objectId,\n\t\t\t\t\t\t\t\t\t\tversion: String(value.Object.ImmOrOwned.version),\n\t\t\t\t\t\t\t\t\t\tdigest: value.Object.ImmOrOwned.digest,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value.Object.Shared) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tObject: {\n\t\t\t\t\t\t\t\t\tSharedObject: {\n\t\t\t\t\t\t\t\t\t\tmutable: value.Object.Shared.mutable ?? null,\n\t\t\t\t\t\t\t\t\t\tinitialSharedVersion: value.Object.Shared.initialSharedVersion,\n\t\t\t\t\t\t\t\t\t\tobjectId: value.Object.Shared.objectId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value.Object.Receiving) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tObject: {\n\t\t\t\t\t\t\t\t\tReceiving: {\n\t\t\t\t\t\t\t\t\t\tdigest: value.Object.Receiving.digest,\n\t\t\t\t\t\t\t\t\t\tversion: String(value.Object.Receiving.version),\n\t\t\t\t\t\t\t\t\t\tobjectId: value.Object.Receiving.objectId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow new Error('Invalid object input');\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tPure: {\n\t\t\t\t\t\t\tbytes: toBase64(new Uint8Array(value.Pure)),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (input.type === 'object') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tUnresolvedObject: {\n\t\t\t\t\t\t\tobjectId: input.value as string,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tUnresolvedPure: {\n\t\t\t\t\t\tvalue: input.value,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthrow new Error('Invalid input');\n\t\t}),\n\t\tcommands: data.transactions.map((transaction) => {\n\t\t\tswitch (transaction.kind) {\n\t\t\t\tcase 'MakeMoveVec':\n\t\t\t\t\treturn {\n\t\t\t\t\t\tMakeMoveVec: {\n\t\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\t'Some' in transaction.type\n\t\t\t\t\t\t\t\t\t? TypeTagSerializer.tagToString(transaction.type.Some)\n\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\telements: transaction.objects.map((arg) => parseV1TransactionArgument(arg)),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\tcase 'MergeCoins': {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tMergeCoins: {\n\t\t\t\t\t\t\tdestination: parseV1TransactionArgument(transaction.destination),\n\t\t\t\t\t\t\tsources: transaction.sources.map((arg) => parseV1TransactionArgument(arg)),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase 'MoveCall': {\n\t\t\t\t\tconst [pkg, mod, fn] = transaction.target.split('::');\n\t\t\t\t\treturn {\n\t\t\t\t\t\tMoveCall: {\n\t\t\t\t\t\t\tpackage: pkg,\n\t\t\t\t\t\t\tmodule: mod,\n\t\t\t\t\t\t\tfunction: fn,\n\t\t\t\t\t\t\ttypeArguments: transaction.typeArguments,\n\t\t\t\t\t\t\targuments: transaction.arguments.map((arg) => parseV1TransactionArgument(arg)),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase 'Publish': {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tPublish: {\n\t\t\t\t\t\t\tmodules: transaction.modules.map((mod) => toBase64(Uint8Array.from(mod))),\n\t\t\t\t\t\t\tdependencies: transaction.dependencies,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase 'SplitCoins': {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tSplitCoins: {\n\t\t\t\t\t\t\tcoin: parseV1TransactionArgument(transaction.coin),\n\t\t\t\t\t\t\tamounts: transaction.amounts.map((arg) => parseV1TransactionArgument(arg)),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase 'TransferObjects': {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tTransferObjects: {\n\t\t\t\t\t\t\tobjects: transaction.objects.map((arg) => parseV1TransactionArgument(arg)),\n\t\t\t\t\t\t\taddress: parseV1TransactionArgument(transaction.address),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase 'Upgrade': {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tUpgrade: {\n\t\t\t\t\t\t\tmodules: transaction.modules.map((mod) => toBase64(Uint8Array.from(mod))),\n\t\t\t\t\t\t\tdependencies: transaction.dependencies,\n\t\t\t\t\t\t\tpackage: transaction.packageId,\n\t\t\t\t\t\t\tticket: parseV1TransactionArgument(transaction.ticket),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow new Error(`Unknown transaction ${Object.keys(transaction)}`);\n\t\t}),\n\t} satisfies InferInput<typeof TransactionDataSchema>);\n}\n\nfunction parseV1TransactionArgument(\n\targ: InferOutput<typeof TransactionArgument>,\n): InferInput<typeof ArgumentSchema> {\n\tswitch (arg.kind) {\n\t\tcase 'GasCoin': {\n\t\t\treturn { GasCoin: true };\n\t\t}\n\t\tcase 'Result':\n\t\t\treturn { Result: arg.index };\n\t\tcase 'NestedResult': {\n\t\t\treturn { NestedResult: [arg.index, arg.resultIndex] };\n\t\t}\n\t\tcase 'Input': {\n\t\t\treturn { Input: arg.index };\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;AA+BA,MAAa,YAAY,OAAO;CAC/B,QAAQ,QAAQ;CAChB,UAAU,QAAQ;CAClB,SAAS,MAAM;EAAC,KAAK,QAAQ,EAAE,SAAS,CAAC;EAAE,QAAQ;EAAE,QAAQ;EAAC,CAAC;CAC/D,CAAC;AAEF,MAAM,YAAY,SAAS;CAC1B,YAAY;CACZ,QAAQ,OAAO;EACd,UAAU;EACV,sBAAsB;EACtB,SAAS,SAAS;EAClB,CAAC;CACF,WAAW;CACX,CAAC;AAEF,MAAa,oBAAoB,SAAS;CACzC,QAAQ;CACR,MAAM,MAAM,KAAK,QAAQ,EAAE,SAAS,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,mBAAmB,MAAM,CAC9B,OAAO;CACN,MAAM,QAAQ,QAAQ;CACtB,OAAO,KAAK,QAAQ,EAAE,SAAS,CAAC;CAChC,OAAO,SAAS;CAChB,MAAM,SAAS,QAAQ,SAAS,CAAC;CACjC,CAAC,EACF,OAAO;CACN,MAAM,QAAQ,QAAQ;CACtB,OAAO,KAAK,QAAQ,EAAE,SAAS,CAAC;CAChC,OAAO,SAAS;CAChB,MAAM,QAAQ,OAAO;CACrB,CAAC,CACF,CAAC;AAEF,MAAM,wBAAwB,MAAM,CACnC,OAAO,EAAE,OAAO,KAAK,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,EAC5C,OAAO,EAAE,MAAM,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC,CACzC,CAAC;AAEF,MAAM,sBAAsB,KAC3B,MAAM;CAAC,QAAQ;CAAE,QAAQ;CAAE,QAAQ;CAAC,CAAC,EACrC,OAAO,QAAQ;AACd,KAAI,CAAC;EAAC;EAAU;EAAU;EAAS,CAAC,SAAS,OAAO,IAAI,CAAE,QAAO;AAEjE,KAAI;AACH,SAAO,IAAc;AACrB,SAAO;SACA;AACP,SAAO;;EAEP,CACF;AAED,MAAa,UAAsC,MAAM;CACxD,OAAO,EAAE,MAAM,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC;CACzC,OAAO,EAAE,IAAI,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC;CACvC,OAAO,EAAE,KAAK,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC;CACxC,OAAO,EAAE,MAAM,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC;CACzC,OAAO,EAAE,SAAS,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC;CAC5C,OAAO,EAAE,QAAQ,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC;CAC3C,OAAO,EAAE,QAAQ,WAAW,QAAQ,EAAE,CAAC;CACvC,OAAO,EAAE,QAAQ,WAAW,UAAU,EAAE,CAAC;CACzC,OAAO,EAAE,KAAK,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC;CACxC,OAAO,EAAE,KAAK,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC;CACxC,OAAO,EAAE,MAAM,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC;CACzC,CAAC;AAGF,MAAa,YAA0C,OAAO;CAC7D,SAAS,QAAQ;CACjB,QAAQ,QAAQ;CAChB,MAAM,QAAQ;CACd,YAAY,MAAM,QAAQ;CAC1B,CAAC;AAEF,MAAM,YAAY,OAAO;CACxB,QAAQ,SAAS,oBAAoB;CACrC,OAAO,SAAS,oBAAoB;CACpC,SAAS,SAAS,MAAM,UAAU,CAAC;CACnC,OAAO,SAAS,QAAQ,CAAC;CACzB,CAAC;AAEF,MAAM,2BAA2B;CAChC;CACA,OAAO,EAAE,MAAM,QAAQ,UAAU,EAAE,CAAC;CACpC,OAAO;EAAE,MAAM,QAAQ,SAAS;EAAE,OAAO,KAAK,QAAQ,EAAE,SAAS,CAAC;EAAE,CAAC;CACrE,OAAO;EACN,MAAM,QAAQ,eAAe;EAC7B,OAAO,KAAK,QAAQ,EAAE,SAAS,CAAC;EAChC,aAAa,KAAK,QAAQ,EAAE,SAAS,CAAC;EACtC,CAAC;CACF;AAGD,MAAa,sBAAsB,MAAM,CAAC,GAAG,yBAAyB,CAAC;AAEvE,MAAM,sBAAsB,OAAO;CAClC,MAAM,QAAQ,WAAW;CACzB,QAAQ,KACP,QAAQ,EACR,OAAO,WAAW,OAAO,MAAM,KAAK,CAAC,WAAW,EAAE,CAClD;CACD,eAAe,MAAM,QAAQ,CAAC;CAC9B,WAAW,MAAM,oBAAoB;CACrC,CAAC;AAEF,MAAM,6BAA6B,OAAO;CACzC,MAAM,QAAQ,kBAAkB;CAChC,SAAS,MAAM,oBAAoB;CACnC,SAAS;CACT,CAAC;AAEF,MAAM,wBAAwB,OAAO;CACpC,MAAM,QAAQ,aAAa;CAC3B,MAAM;CACN,SAAS,MAAM,oBAAoB;CACnC,CAAC;AAEF,MAAM,wBAAwB,OAAO;CACpC,MAAM,QAAQ,aAAa;CAC3B,aAAa;CACb,SAAS,MAAM,oBAAoB;CACnC,CAAC;AAEF,MAAM,yBAAyB,OAAO;CACrC,MAAM,QAAQ,cAAc;CAC5B,MAAM,MAAM,CAAC,OAAO,EAAE,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;CACnF,SAAS,MAAM,oBAAoB;CACnC,CAAC;AA0BF,MAAM,kBAAkB,MAAM,CAAC,GAVN;CACxB;CACA;CACA;CACA;CAlB0B,OAAO;EACjC,MAAM,QAAQ,UAAU;EACxB,SAAS,MAAM,MAAM,KAAK,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;EAChD,cAAc,MAAM,QAAQ,CAAC;EAC7B,CAAC;CAEyB,OAAO;EACjC,MAAM,QAAQ,UAAU;EACxB,SAAS,MAAM,MAAM,KAAK,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;EAChD,cAAc,MAAM,QAAQ,CAAC;EAC7B,WAAW,QAAQ;EACnB,QAAQ;EACR,CAAC;CASD;CACA,CAEkD,CAAC;AAEpD,MAAa,8BAA8B,OAAO;CACjD,SAAS,QAAQ,EAAE;CACnB,QAAQ,SAAS,QAAQ,CAAC;CAC1B,YAAY,QAAQ,sBAAsB;CAC1C,WAAW;CACX,QAAQ,MAAM,iBAAiB;CAC/B,cAAc,MAAM,gBAAgB;CACpC,CAAC;AAIF,SAAgB,2BACf,iBAC8B;CAC9B,MAAM,SAAiD,gBAAgB,OAAO,KAC5E,OAAO,UAAU;AACjB,MAAI,MAAM,OACT,QAAO;GACN,MAAM;GACN;GACA,OAAO,EACN,QAAQ,MAAM,OAAO,mBAClB,EACA,YAAY,MAAM,OAAO,kBACzB,GACA,MAAM,OAAO,YACZ,EACA,WAAW;IACV,QAAQ,MAAM,OAAO,UAAU;IAC/B,SAAS,MAAM,OAAO,UAAU;IAChC,UAAU,MAAM,OAAO,UAAU;IACjC,EACD,GACA,EACA,QAAQ;IACP,SAAS,MAAM,OAAO,aAAa;IACnC,sBAAsB,MAAM,OAAO,aAAa;IAChD,UAAU,MAAM,OAAO,aAAa;IACpC,EACD,EACJ;GACD,MAAM;GACN;AAEF,MAAI,MAAM,KACT,QAAO;GACN,MAAM;GACN;GACA,OAAO,EACN,MAAM,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,EAC9C;GACD,MAAM;GACN;AAGF,MAAI,MAAM,eACT,QAAO;GACN,MAAM;GACN,MAAM;GACN;GACA,OAAO,MAAM,eAAe;GAC5B;AAGF,MAAI,MAAM,iBACT,QAAO;GACN,MAAM;GACN,MAAM;GACN;GACA,OAAO,MAAM,iBAAiB;GAC9B;AAGF,QAAM,IAAI,MAAM,gBAAgB;GAEjC;AAED,QAAO;EACN,SAAS;EACT,QAAQ,gBAAgB,UAAU;EAClC,YACC,gBAAgB,YAAY,UAAU,UACnC,EAAE,OAAO,OAAO,gBAAgB,WAAW,MAAM,EAAE,GACnD,gBAAgB,aACf,EAAE,MAAM,MAAM,GACd;EACL,WAAW;GACV,OAAO,gBAAgB,QAAQ,SAAS;GACxC,QAAQ,gBAAgB,QAAQ,UAAU;GAC1C,OAAO,gBAAgB,QAAQ,SAAS;GACxC,SAAS,gBAAgB,QAAQ,WAAW;GAC5C;EACD;EACA,cAAc,gBAAgB,SAAS,KAAK,YAAiD;AAC5F,OAAI,QAAQ,YACX,QAAO;IACN,MAAM;IACN,MACC,QAAQ,YAAY,SAAS,OAC1B,EAAE,MAAM,MAAM,GACd,EAAE,MAAM,kBAAkB,aAAa,QAAQ,YAAY,KAAK,EAAE;IACtE,SAAS,QAAQ,YAAY,SAAS,KAAK,QAC1C,2BAA2B,KAAK,OAAO,CACvC;IACD;AAEF,OAAI,QAAQ,WACX,QAAO;IACN,MAAM;IACN,aAAa,2BAA2B,QAAQ,WAAW,aAAa,OAAO;IAC/E,SAAS,QAAQ,WAAW,QAAQ,KAAK,QAAQ,2BAA2B,KAAK,OAAO,CAAC;IACzF;AAEF,OAAI,QAAQ,SACX,QAAO;IACN,MAAM;IACN,QAAQ,GAAG,QAAQ,SAAS,QAAQ,IAAI,QAAQ,SAAS,OAAO,IAAI,QAAQ,SAAS;IACrF,eAAe,QAAQ,SAAS;IAChC,WAAW,QAAQ,SAAS,UAAU,KAAK,QAC1C,2BAA2B,KAAK,OAAO,CACvC;IACD;AAEF,OAAI,QAAQ,QACX,QAAO;IACN,MAAM;IACN,SAAS,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC;IAC1E,cAAc,QAAQ,QAAQ;IAC9B;AAEF,OAAI,QAAQ,WACX,QAAO;IACN,MAAM;IACN,MAAM,2BAA2B,QAAQ,WAAW,MAAM,OAAO;IACjE,SAAS,QAAQ,WAAW,QAAQ,KAAK,QAAQ,2BAA2B,KAAK,OAAO,CAAC;IACzF;AAEF,OAAI,QAAQ,gBACX,QAAO;IACN,MAAM;IACN,SAAS,QAAQ,gBAAgB,QAAQ,KAAK,QAC7C,2BAA2B,KAAK,OAAO,CACvC;IACD,SAAS,2BAA2B,QAAQ,gBAAgB,SAAS,OAAO;IAC5E;AAGF,OAAI,QAAQ,QACX,QAAO;IACN,MAAM;IACN,SAAS,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC;IAC1E,cAAc,QAAQ,QAAQ;IAC9B,WAAW,QAAQ,QAAQ;IAC3B,QAAQ,2BAA2B,QAAQ,QAAQ,QAAQ,OAAO;IAClE;AAGF,SAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,QAAQ,GAAG;IAC7D;EACF;;AAGF,SAAS,2BACR,KACA,QAC0C;AAC1C,KAAI,IAAI,UAAU,UACjB,QAAO,EAAE,MAAM,WAAW;AAE3B,KAAI,IAAI,UAAU,SACjB,QAAO;EAAE,MAAM;EAAU,OAAO,IAAI;EAAQ;AAE7C,KAAI,IAAI,UAAU,eACjB,QAAO;EAAE,MAAM;EAAgB,OAAO,IAAI,aAAa;EAAI,aAAa,IAAI,aAAa;EAAI;AAE9F,KAAI,IAAI,UAAU,QACjB,QAAO,OAAO,IAAI;AAGnB,OAAM,IAAI,MAAM,oBAAoB,OAAO,KAAK,IAAI,GAAG;;AAGxD,SAAgB,sBAAsB,MAAoD;AACzF,QAAO,MAAM,uBAAuB;EACnC,SAAS;EACT,QAAQ,KAAK,UAAU;EACvB,YAAY,KAAK,aACd,WAAW,KAAK,aACf,EAAE,OAAO,KAAK,WAAW,OAAO,GAChC,EAAE,MAAM,MAAM,GACf;EACH,SAAS;GACR,OAAO,KAAK,UAAU,SAAS;GAC/B,QAAQ,KAAK,UAAU,QAAQ,UAAU,IAAI;GAC7C,OAAO,KAAK,UAAU,OAAO,UAAU,IAAI;GAC3C,SACC,KAAK,UAAU,SAAS,KAAK,SAAS;IACrC,QAAQ,IAAI;IACZ,UAAU,IAAI;IACd,SAAS,IAAI,QAAQ,UAAU;IAC/B,EAAE,IAAI;GACR;EACD,QAAQ,KAAK,OAAO,KAAK,UAAU;AAClC,OAAI,MAAM,SAAS,SAAS;AAC3B,QAAI,GAAG,mBAAmB,MAAM,MAAM,EAAE;KACvC,MAAM,QAAQ,MAAM,mBAAmB,MAAM,MAAM;AAEnD,SAAI,MAAM,QAAQ;AACjB,UAAI,MAAM,OAAO,WAChB,QAAO,EACN,QAAQ,EACP,kBAAkB;OACjB,UAAU,MAAM,OAAO,WAAW;OAClC,SAAS,OAAO,MAAM,OAAO,WAAW,QAAQ;OAChD,QAAQ,MAAM,OAAO,WAAW;OAChC,EACD,EACD;AAEF,UAAI,MAAM,OAAO,OAChB,QAAO,EACN,QAAQ,EACP,cAAc;OACb,SAAS,MAAM,OAAO,OAAO,WAAW;OACxC,sBAAsB,MAAM,OAAO,OAAO;OAC1C,UAAU,MAAM,OAAO,OAAO;OAC9B,EACD,EACD;AAEF,UAAI,MAAM,OAAO,UAChB,QAAO,EACN,QAAQ,EACP,WAAW;OACV,QAAQ,MAAM,OAAO,UAAU;OAC/B,SAAS,OAAO,MAAM,OAAO,UAAU,QAAQ;OAC/C,UAAU,MAAM,OAAO,UAAU;OACjC,EACD,EACD;AAGF,YAAM,IAAI,MAAM,uBAAuB;;AAGxC,YAAO,EACN,MAAM,EACL,OAAO,SAAS,IAAI,WAAW,MAAM,KAAK,CAAC,EAC3C,EACD;;AAGF,QAAI,MAAM,SAAS,SAClB,QAAO,EACN,kBAAkB,EACjB,UAAU,MAAM,OAChB,EACD;AAGF,WAAO,EACN,gBAAgB,EACf,OAAO,MAAM,OACb,EACD;;AAGF,SAAM,IAAI,MAAM,gBAAgB;IAC/B;EACF,UAAU,KAAK,aAAa,KAAK,gBAAgB;AAChD,WAAQ,YAAY,MAApB;IACC,KAAK,cACJ,QAAO,EACN,aAAa;KACZ,MACC,UAAU,YAAY,OACnB,kBAAkB,YAAY,YAAY,KAAK,KAAK,GACpD;KACJ,UAAU,YAAY,QAAQ,KAAK,QAAQ,2BAA2B,IAAI,CAAC;KAC3E,EACD;IACF,KAAK,aACJ,QAAO,EACN,YAAY;KACX,aAAa,2BAA2B,YAAY,YAAY;KAChE,SAAS,YAAY,QAAQ,KAAK,QAAQ,2BAA2B,IAAI,CAAC;KAC1E,EACD;IAEF,KAAK,YAAY;KAChB,MAAM,CAAC,KAAK,KAAK,MAAM,YAAY,OAAO,MAAM,KAAK;AACrD,YAAO,EACN,UAAU;MACT,SAAS;MACT,QAAQ;MACR,UAAU;MACV,eAAe,YAAY;MAC3B,WAAW,YAAY,UAAU,KAAK,QAAQ,2BAA2B,IAAI,CAAC;MAC9E,EACD;;IAEF,KAAK,UACJ,QAAO,EACN,SAAS;KACR,SAAS,YAAY,QAAQ,KAAK,QAAQ,SAAS,WAAW,KAAK,IAAI,CAAC,CAAC;KACzE,cAAc,YAAY;KAC1B,EACD;IAEF,KAAK,aACJ,QAAO,EACN,YAAY;KACX,MAAM,2BAA2B,YAAY,KAAK;KAClD,SAAS,YAAY,QAAQ,KAAK,QAAQ,2BAA2B,IAAI,CAAC;KAC1E,EACD;IAEF,KAAK,kBACJ,QAAO,EACN,iBAAiB;KAChB,SAAS,YAAY,QAAQ,KAAK,QAAQ,2BAA2B,IAAI,CAAC;KAC1E,SAAS,2BAA2B,YAAY,QAAQ;KACxD,EACD;IAEF,KAAK,UACJ,QAAO,EACN,SAAS;KACR,SAAS,YAAY,QAAQ,KAAK,QAAQ,SAAS,WAAW,KAAK,IAAI,CAAC,CAAC;KACzE,cAAc,YAAY;KAC1B,SAAS,YAAY;KACrB,QAAQ,2BAA2B,YAAY,OAAO;KACtD,EACD;;AAIH,SAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,YAAY,GAAG;IACjE;EACF,CAAoD;;AAGtD,SAAS,2BACR,KACoC;AACpC,SAAQ,IAAI,MAAZ;EACC,KAAK,UACJ,QAAO,EAAE,SAAS,MAAM;EAEzB,KAAK,SACJ,QAAO,EAAE,QAAQ,IAAI,OAAO;EAC7B,KAAK,eACJ,QAAO,EAAE,cAAc,CAAC,IAAI,OAAO,IAAI,YAAY,EAAE;EAEtD,KAAK,QACJ,QAAO,EAAE,OAAO,IAAI,OAAO"}